ICCV 2025:从视线到运动预测自动驾驶视觉注意力

ICCV 2025:从视线到运动预测自动驾驶视觉注意力

论文来源: ICCV 2025
会议: ICCV 2025
核心创新: 视线 → 车辆运动 → 预测未来视觉注意力


论文信息

项目 内容
标题 From Gaze to Movement: Predicting Visual Attention for Autonomous Driving
会议 ICCV 2025
链接 https://openaccess.thecvf.com/content/ICCV2025/papers/Huang_From_Gaze_to_Movement_Predicting_Visual_Attention_for_Autonomous_Driving_ICCV_2025_paper.pdf

核心问题:驾驶员视线预测

传统视线估计局限:

1
2
3
4
5
6
7
8
9
静态视线估计:
- 只估计当前视线方向
- 无法预测未来注意力焦点
- 未考虑车辆运动影响

Euro NCAP 2026 要求:
- 预测驾驶员即将看向的位置
- 提前检测分心趋势
- 与 ADAS 场景协同

方法创新:视线-运动联合建模

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import torch
import torch.nn as nn
import torch.nn.functional as F

class GazeMovementPredictor(nn.Module):
"""
视线-运动预测模型

ICCV 2025 论文核心:
基于当前视线 + 车辆运动 → 预测未来视觉注意力

应用场景:
1. 驾驶员注意力预测
2. ADAS 警告时机优化
3. 分心趋势检测
"""

def __init__(self,
gaze_dim: int = 2, # (pitch, yaw)
vehicle_dim: int = 6, # (速度, 方向盘, 车道位置等)
hidden_dim: int = 128,
future_steps: int = 5): # 预测未来 5 帧
super().__init__()

# 视线编码器
self.gaze_encoder = nn.Sequential(
nn.Linear(gaze_dim, hidden_dim),
nn.ReLU(inplace=True),
nn.Linear(hidden_dim, hidden_dim)
)

# 车辆运动编码器
self.vehicle_encoder = nn.Sequential(
nn.Linear(vehicle_dim, hidden_dim),
nn.ReLU(inplace=True),
nn.Linear(hidden_dim, hidden_dim)
)

# 融合层
self.fusion = nn.Sequential(
nn.Linear(hidden_dim * 2, hidden_dim),
nn.ReLU(inplace=True),
nn.Linear(hidden_dim, hidden_dim)
)

# 未来视线预测头
self.future_gaze_head = nn.Linear(hidden_dim, gaze_dim * future_steps)

# 注意力区域预测头
self.attention_head = nn.Linear(hidden_dim, 3) # (前方, 左侧, 右侧) 概率

self.future_steps = future_steps
self.gaze_dim = gaze_dim

def forward(self,
current_gaze: torch.Tensor,
vehicle_state: torch.Tensor) -> dict:
"""
前向传播

Args:
current_gaze: 当前视线 (pitch, yaw), shape=(B, 2)
vehicle_state: 车辆状态 [速度, 方向盘, 车道偏移等], shape=(B, 6)

Returns:
dict: {
"future_gaze": 未来视线轨迹, shape=(B, future_steps, 2)
"attention_probs": 注意力区域概率, shape=(B, 3)
"predicted_deviation": 预测视线偏离, shape=(B, 1)
}
"""
# 编码
gaze_features = self.gaze_encoder(current_gaze)
vehicle_features = self.vehicle_encoder(vehicle_state)

# 融合
combined = torch.cat([gaze_features, vehicle_features], dim=1)
fused_features = self.fusion(combined)

# 未来视线预测
future_gaze_flat = self.future_gaze_head(fused_features)
future_gaze = future_gaze_flat.view(-1, self.future_steps, self.gaze_dim)

# 注意力区域预测
attention_probs = F.softmax(self.attention_head(fused_features), dim=1)

# 预测偏离程度(基于未来轨迹)
predicted_deviation = self._compute_deviation(future_gaze)

return {
"future_gaze": future_gaze,
"attention_probs": attention_probs,
"predicted_deviation": predicted_deviation
}

def _compute_deviation(self, future_gaze: torch.Tensor) -> torch.Tensor:
"""
计算预测偏离程度

如果未来视线持续偏离道路中心,预测偏离高
"""
# 假设道路中心视线为 (0, 0)
road_center = torch.zeros(self.gaze_dim)

# 计算每帧偏离
deviations = torch.norm(future_gaze - road_center, dim=2)

# 平均偏离
mean_deviation = deviations.mean(dim=1)

return mean_deviation


# 测试示例
if __name__ == "__main__":
model = GazeMovementPredictor()

# 模拟输入
current_gaze = torch.tensor([
[0.1, 0.05], # 正常:略微向右
[0.5, -0.3], # 分心:大角度偏离
])

vehicle_state = torch.tensor([
[60, 0.1, 0.02, 0, 0, 0], # 正常驾驶
[60, 0.5, 0.2, 0, 0, 0], # 转向时偏离
])

output = model(current_gaze, vehicle_state)

print("=== 正常驾驶 ===")
print(f"未来视线轨迹: {output['future_gaze'][0]}")
print(f"注意力区域概率: {output['attention_probs'][0]}")
print(f"预测偏离: {output['predicted_deviation'][0]:.3f}")

print("\n=== 分心驾驶 ===")
print(f"未来视线轨迹: {output['future_gaze'][1]}")
print(f"注意力区域概率: {output['attention_probs'][1]}")
print(f"预测偏离: {output['predicted_deviation'][1]:.3f}")

Euro NCAP 2026 应用场景

1. ADAS 协同警告

ADAS 场景 视线预测应用 预期效果
前车碰撞预警 预测驾驶员是否将看向前方 优化警告时机
车道偏离预警 预测驾驶员注意力方向 提前警告
盲区检测 预测驾驶员是否将检查盲区 辅助提醒
自适应巡航 预测驾驶员对速度变化的注意力 调整策略

2. 分心趋势检测

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
class DistractionTrendDetector:
"""
分心趋势检测器

基于 ICCV 2025 论文方法

关键:
1. 检测视线偏离趋势(而非当前偏离)
2. 提前 2-5 秒预测分心
3. 与 ADAS 协同警告
"""

def __init__(self,
prediction_horizon: int = 5, # 预测未来 5 帧(约 1 秒)
trend_threshold: float = 0.3): # 偏离趋势阈值
self.predictor = GazeMovementPredictor(future_steps=prediction_horizon)
self.trend_threshold = trend_threshold

# 历史记录
self.gaze_history = []

def update(self,
current_gaze: np.ndarray,
vehicle_state: np.ndarray) -> dict:
"""
更新并预测

Args:
current_gaze: 当前视线 (pitch, yaw)
vehicle_state: 车辆状态

Returns:
dict: {
"trend_type": str, # "stable", "drifting", "returning"
"predicted_distraction": bool,
"confidence": float,
"recommended_action": str
}
"""
# 记录历史
self.gaze_history.append(current_gaze)
if len(self.gaze_history) > 30:
self.gaze_history.pop(0)

# 预测未来视线
with torch.no_grad():
output = self.predictor(
torch.from_numpy(current_gaze).float().unsqueeze(0),
torch.from_numpy(vehicle_state).float().unsqueeze(0)
)

future_gaze = output['future_gaze'][0].numpy()
predicted_deviation = output['predicted_deviation'][0].item()

# 趋势判断
trend_type = self._classify_trend(future_gaze)

# 分心预测
predicted_distraction = predicted_deviation > self.trend_threshold

# 置信度
confidence = min(predicted_deviation / self.trend_threshold, 1.0)

# 建议动作
recommended_action = self._recommend_action(trend_type, predicted_distraction)

return {
"trend_type": trend_type,
"predicted_distraction": predicted_distraction,
"confidence": confidence,
"predicted_deviation": predicted_deviation,
"recommended_action": recommended_action
}

def _classify_trend(self, future_gaze: np.ndarray) -> str:
"""
分类趋势

- stable: 视线稳定(保持在道路中心附近)
- drifting: 视线偏离趋势(逐渐偏离)
- returning: 视线回归趋势(从偏离回归)
"""
if len(self.gaze_history) < 10:
return "stable"

# 当前偏离
current_deviation = np.linalg.norm(self.gaze_history[-1])

# 未来偏离趋势
future_deviations = np.linalg.norm(future_gaze, axis=1)

# 判断趋势
if future_deviations[-1] > current_deviation:
return "drifting" # 偏离增加
elif future_deviations[-1] < current_deviation:
return "returning" # 偏离减少
else:
return "stable" # 稳定

def _recommend_action(self,
trend_type: str,
predicted_distraction: bool) -> str:
"""建议动作"""
if trend_type == "drifting" and predicted_distraction:
return "提前警告 + ADAS 协同"
elif trend_type == "drifting":
return "关注趋势"
elif trend_type == "returning":
return "无需干预"
else:
return "正常监控"


# 测试示例
if __main__ == "__main__":
detector = DistractionTrendDetector()

# 模拟正常驾驶
normal_gaze = np.array([0.05, 0.02])
normal_vehicle = np.array([60, 0.1, 0.02, 0, 0, 0])

normal_result = detector.update(normal_gaze, normal_vehicle)
print("=== 正常驾驶 ===")
print(f"趋势类型: {normal_result['trend_type']}")
print(f"预测分心: {normal_result['predicted_distraction']}")
print(f"建议动作: {normal_result['recommended_action']}")

# 模拟分心趋势
drifting_gaze = np.array([0.3, -0.2])
drifting_vehicle = np.array([60, 0.3, 0.1, 0, 0, 0])

drifting_result = detector.update(drifting_gaze, drifting_vehicle)
print("\n=== 分心趋势 ===")
print(f"趋势类型: {drifting_result['trend_type']}")
print(f"预测分心: {drifting_result['predicted_distraction']}")
print(f"建议动作: {drifting_result['recommended_action']}")

IMS 开发启示

1. 视线预测集成

graph TB
    A[当前视线] --> D[融合预测]
    B[车辆状态] --> D
    C[场景信息] --> D
    
    D --> E[未来视线轨迹]
    E --> F{趋势判断}
    
    F -->|drifting| G[提前警告]
    F -->|stable| H[正常监控]
    F -->|returning| I[无需干预]
    
    G --> J[ADAS 协同]

2. 与 Euro NCAP DSM 协同

DSM 场景 视线预测增强 预期改进
D-01: 手机使用 预测视线回归速度 优化警告取消时机
D-05: 视线偏离 预测持续偏离时间 提前检测
D-07: 疲劳特征 预测视线稳定性 疲劳趋势检测

参考资料

  1. ICCV 2025 Paper PDF
  2. GAZE Workshop 2026
  3. Euro NCAP 2026 DSM Distraction Protocol
  4. WACV 2024: Rotation-constrained Cross-view Gaze Estimation

总结

ICCV 2025 论文核心:

  1. 视线-运动联合建模:预测未来注意力
  2. 趋势检测:提前预测分心趋势
  3. ADAS 协同:优化警告时机

IMS 开发优先级:

  • 🔴 高:GazeMovementPredictor 实现
  • 🟡 中:ADAS 协同接口开发
  • 🟢 低:场景自适应优化

下一步行动:

  • 实现 GazeMovementPredictor 模型
  • 开发趋势检测逻辑
  • 对齐 Euro NCAP D-05 场景

ICCV 2025:从视线到运动预测自动驾驶视觉注意力
https://dapalm.com/2026/07/08/2026-07-08-iccv-2025-gaze-to-movement-attention-prediction/
作者
Mars
发布于
2026年7月8日
许可协议