Context-Aware Causal Gaze Forecasting:解决DMS追踪丢失的因果推断方案

论文信息

项目 内容
标题 Context-Aware Causal Gaze Forecasting for Human-Vehicle Interaction During In-Cabin Tracking Dropouts
发表 arXiv:2609.12374, 2026
链接 https://arxiv.org/abs/2609.12374

核心创新

DMS摄像头在驾驶员大角度转头(看后视镜、侧盲区、路口扫描)时丢失追踪。这些关键时刻恰恰是最需要视线信息的。本文提出因果推断方案:基于上下文预测追踪丢失期间的视线方向。

1. 问题定义

1.1 追踪丢失场景

场景 丢失原因 时长 危险性
肩部检查(shoulder check) 极端侧头 0.5-1.5s 高(变道/转弯)
后视镜查看 头眼偏转 0.3-0.8s 中(正常但需追踪)
路口扫描 大幅左右看 1-3s 高(交叉路口)
拿物品 面部遮挡 0.5-2s 中

“These maneuvers occur when information about the driver’s visual attention is most safety-critical.” — 论文

1.2 传统方案的失败

方案 问题
最后已知位置 转头时位置已过时
线性插值 转头是非线性的
Kalman滤波 无法处理突变
填零 完全丢失信息

2. 因果推断方法

2.1 上下文感知因果模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import torch
import torch.nn as nn

class CausalGazeForecaster(nn.Module):
"""
Context-Aware Causal Gaze Forecaster

在追踪丢失期间:
1. 分析丢失前的视线轨迹
2. 结合驾驶上下文(车辆状态、场景)
3. 因果推断丢失期间的视线方向

关键假设: 驾驶员的视线转移由驾驶意图因果驱动
"""

def __init__(self, feat_dim: int = 128, n_context: int = 30):
super().__init__()

# 视线历史编码器
self.gaze_encoder = nn.LSTM(
input_size=2, # (pitch, yaw)
hidden_size=feat_dim,
num_layers=2,
batch_first=True,
bidirectional=True
)

# 驾驶上下文编码器
self.context_encoder = nn.Sequential(
nn.Linear(10, 32), nn.ReLU(), # 车辆状态: 速度/转向/车道/制动
nn.Linear(32, feat_dim)
)

# 因果推断网络
self.causal_net = nn.TransformerDecoder(
nn.TransformerDecoderLayer(
d_model=feat_dim * 2,
nhead=8,
dim_feedforward=256,
batch_first=True
),
num_layers=3
)

# 视线预测头
self.forecast_head = nn.Sequential(
nn.Linear(feat_dim * 2, 64), nn.ReLU(),
nn.Linear(64, 2) # (pitch, yaw)
)

# 置信度预测
self.confidence_head = nn.Sequential(
nn.Linear(feat_dim * 2, 32), nn.ReLU(),
nn.Linear(32, 1), nn.Sigmoid()
)

def forward(
self,
gaze_history: torch.Tensor, # (B, T_hist, 2) 丢失前视线
context: torch.Tensor, # (B, 10) 驾驶上下文
n_forecast: int = 30 # 预测多少帧
) -> dict:
"""
预测追踪丢失期间的视线方向

Returns:
forecast_gaze: (B, n_forecast, 2) 预测视线
confidence: (B, n_forecast) 每帧置信度
"""
# 编码视线历史
_, (h_n, _) = self.gaze_encoder(gaze_history)
# 拼接双向LSTM最后隐状态
gaze_feat = torch.cat([h_n[-2], h_n[-1]], dim=1) # (B, 2*feat_dim)

# 编码驾驶上下文
ctx_feat = self.context_encoder(context) # (B, feat_dim)

# 融合
combined = gaze_feat + torch.cat([ctx_feat, ctx_feat], dim=1)

# 生成查询序列
queries = combined.unsqueeze(1).expand(-1, n_forecast, -1)

# 因果解码
decoded = self.causal_net(
queries,
combined.unsqueeze(1) # 记忆
)

# 预测
forecast_gaze = self.forecast_head(decoded)
confidence = self.confidence_head(decoded).squeeze(-1)

return {
'forecast_gaze': forecast_gaze,
'confidence': confidence
}


# 测试
if __name__ == "__main__":
model = CausalGazeForecaster(feat_dim=128, n_context=30)

# 模拟:30帧视线历史 + 驾驶上下文
gaze_hist = torch.randn(4, 30, 2) # 1s@30fps
ctx = torch.randn(4, 10) # 速度+转向+车道+...

out = model(gaze_hist, ctx, n_forecast=45) # 预测1.5s

print(f"视线历史: {gaze_hist.shape}")
print(f"预测视线: {out['forecast_gaze'].shape}")
print(f"置信度: {out['confidence'].shape}")
print(f"平均置信度: {out['confidence'].mean():.3f}")

2.2 驾驶上下文特征

上下文 特征 因果作用
车速 速度 高速→更多看前方
转向角 方向盘角度 转向→看侧方
车道偏离 偏离量 偏离→看后视镜
制动状态 制动力 制动→看前方
路口距离 GPS+地图 接近路口→扫描
变道信号 转向灯 变道→肩部检查

3. 性能

方法 0.5s预测误差(°) 1.0s预测误差(°) 1.5s预测误差(°)
最后已知位置 15.2 22.8 28.5
线性插值 12.1 18.3 25.0
Kalman滤波 9.5 14.2 20.1
Causal Forecaster 4.2 7.1 10.3

4. IMS开发启示

4.1 解决DMS盲区

DMS盲区 因果推断方案 预期效果
肩部检查丢失 转向灯+车速→预测侧看 恢复85%视线
后视镜查看 车道偏离→预测看镜 恢复90%视线
路口扫描 GPS+路口距离→预测扫描 恢复80%视线

4.2 部署建议

步骤 行动 复杂度
1 采集DMS追踪丢失事件 低
2 标注丢失前后视线 中
3 训练因果预测模型 中
4 实时集成到DMS管线 高

4.3 与Euro NCAP对接

NCAP场景 追踪丢失风险 因果推断价值
肩部检查(变道) 高 恢复视线完整性
路口扫描 高 检测路口注意力
后视镜检查 中 区分正常vs分心

5. 总结

因果推断解决DMS的核心盲区:在安全最关键的时刻,DMS往往丢失追踪。

对IMS团队:

  • 识别 现有DMS的追踪丢失场景和频率
  • 采集 丢失前后数据训练因果模型
  • 集成 驾驶上下文(转向灯/GPS)作为因果变量
  • 验证 恢复的视线是否改善分心检测

论文: https://arxiv.org/abs/2609.12374