从实验室到道路:可穿戴视线估计的驾驶场景适配

arXiv 2610.07783 论文解读与DMS校准启示

论文信息

  • 标题: From Laboratory to Road: Evaluating Wearable Gaze Accuracy for Driving
  • 链接: arXiv:2610.07783
  • 时间: 2026年10月
  • 关键词: gaze estimation, wearable, driving, calibration, bird’s-eye view

核心发现

可穿戴视线追踪器在实验室条件下精度高,但在实际驾驶中存在系统性偏移。通过室内录制估计的偏移量进行校正,可将误差从较高水平降至 1.10°,改善了全部41个场景。

关键结论: 偏移量在不同会话间变化,可靠的BEV监督可能需要在线重校准和条件相关的视线不确定性估计。

实验设计

维度 实验室 实际驾驶
环境 受控光照 变化光照(阳光/隧道/夜晚)
头部运动 相对静止 持续微运动
震动 无 车辆震动
视线范围 大范围 主要是前方道路
参考真值 固定点校准 BEV(鸟瞰图)推断

DMS校准启示

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
import numpy as np

class GazeCalibrationManager:
"""
DMS视线估计校准管理器

核心问题:
1. 实验室训练的模型在实车部署时有系统偏移
2. 偏移量在不同驾驶会话间变化
3. 需要在线重校准

校准方案:
1. 出厂校准:生产线固定点校准
2. 会话校准:每次启动驾驶时快速校准
3. 在线校准:行驶中持续微调
"""

def __init__(self):
self.offset = None
self.calibration_history = []
self.confidence_threshold = 0.5

def factory_calibration(self, gaze_samples: np.ndarray,
target_points: np.ndarray) -> dict:
"""
出厂校准

Args:
gaze_samples: (N, 2) 校准点视线预测
target_points: (N, 2) 真实目标点
Returns:
{'offset': (2,), 'residual_error': float}
"""
offset = np.mean(target_points - gaze_samples, axis=0)
residual = np.std(target_points - gaze_samples - offset, axis=0)

self.offset = offset
return {
'offset': offset.tolist(),
'residual_error_rad': float(np.linalg.norm(residual)),
'residual_error_deg': float(np.degrees(np.linalg.norm(residual))),
'n_samples': len(gaze_samples)
}

def session_calibration(self, gaze_samples: np.ndarray,
target_points: np.ndarray) -> dict:
"""
会话校准(每次启动驾驶)

使用少量点快速校准
"""
if len(gaze_samples) < 3:
return {'status': 'insufficient_data'}

# 计算会话偏移
session_offset = np.mean(target_points - gaze_samples, axis=0)

# 与出厂校准融合
if self.offset is not None:
alpha = 0.3 # 会话偏移权重
adjusted_offset = (1 - alpha) * self.offset + alpha * session_offset
else:
adjusted_offset = session_offset

self.offset = adjusted_offset

return {
'offset': adjusted_offset.tolist(),
'status': 'calibrated',
'n_samples': len(gaze_samples)
}

def apply_calibration(self, gaze: np.ndarray) -> np.ndarray:
"""应用校准偏移"""
if self.offset is None:
return gaze
return gaze + self.offset

def online_update(self, gaze: np.ndarray,
road_gaze_estimate: np.ndarray,
confidence: float = 0.5):
"""
在线更新(行驶中)

使用道路上下文作为弱监督:
- 直道行驶时,视线应在前方道路
- 车道保持时,视线应在道路中心区域
"""
if confidence < self.confidence_threshold:
return

# 缓慢更新偏移
delta = road_gaze_estimate - gaze
alpha = 0.001 # 极慢更新
self.offset = (1 - alpha) * self.offset + alpha * delta


# 测试
if __name__ == "__main__":
calibrator = GazeCalibrationManager()

# 模拟出厂校准
np.random.seed(42)
n = 9 # 9点校准
factory_gaze = np.random.randn(n, 2) * 0.05
factory_targets = np.array([
[-0.5, -0.3], [-0.5, 0], [-0.5, 0.3],
[0, -0.3], [0, 0], [0, 0.3],
[0.5, -0.3], [0.5, 0], [0.5, 0.3],
])

result = calibrator.factory_calibration(factory_gaze, factory_targets)
print("出厂校准:", result)

# 模拟会话校准
session_gaze = factory_gaze + np.array([0.05, -0.03]) # 系统偏移
result = calibrator.session_calibration(session_gaze[:5], factory_targets[:5])
print("会话校准:", result)

# 应用校准
test_gaze = np.array([0.1, 0.05])
calibrated = calibrator.apply_calibration(test_gaze)
print(f"原始视线: {test_gaze} → 校准后: {calibrated}")

与AttentiveGaze的互补关系

维度 AttentiveGaze 本论文
核心贡献 不确定性量化 偏移校准
解决问题 “何时不可信” “如何修正系统偏移”
部署阶段 推理时 校准+推理时
结合使用 ✅ 完美互补 ✅

联合方案: AttentiveGaze 提供逐样本不确定性,本论文的校准方法修正系统偏移,两者结合可实现更可靠的DMS视线估计。

参考资源


总结: 本论文量化了DMS视线估计从实验室到道路的精度退化,并验证了偏移校准的有效性。对IMS团队,关键启示是:(1)出厂校准不够,需要会话级在线重校准;(2)偏移量随会话变化,需要不确定性估计来决定何时校准;(3)与AttentiveGaze的不确定性量化形成完美互补。