Gazeonce360 Fisheye Multi Person Gaze Estimation Cvpr 2026

视线估计新标杆:GazeOnce360鱼眼多人视线检测(CVPR 2026论文解读)

论文信息

  • 标题: GazeOnce360: Fisheye Multi-Person Gaze Estimation
  • 会议: CVPR 2026
  • 关键词: 鱼眼相机、多人视线估计、360°覆盖、实时检测
  • 核心创新: 单鱼眼相机实现全座舱多人视线估计

核心创新

首次提出单鱼眼相机多人视线估计方法,解决了传统方案需要多个相机的成本问题,实现360°座舱全覆盖。

技术突破:

  1. 鱼眼畸变校正:深度学习自适应校正
  2. 多人并发检测:一次推理检测所有乘员
  3. 360°覆盖:单相机覆盖前后排
  4. 实时性:30fps边缘部署

研究背景

传统视线估计局限

方案 覆盖范围 成本 实时性
单RGB相机 前排(约120°) $50-100 30fps
多相机方案 全座舱(360°) $200-500 20-30fps
GazeOnce360 全座舱(360°) $80-120 30fps

Euro NCAP视线要求

Euro NCAP 2026 DSM场景:

场景 视线偏离角度 检测时限
D-01 向下看(中控) ≤3秒
D-02 侧向看(窗外) ≤3秒
D-03 向后看(后排) ≤5秒
D-04 闭眼(疲劳) ≤3秒

GazeOnce360优势: 单相机可检测所有方向视线,包括向后看(后排乘客)


技术方法

鱼眼相机模型

鱼眼投影模型:

1
2
3
4
5
6
r = f × θ

其中:
- r: 图像平面距离
- f: 焦距
- θ: 入射角度

畸变类型:

  • 径向畸变(径向畸变)
  • 切向畸变(切向畸变)
  • 薄棱镜畸变

网络架构

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
140
141
142
143
144
import torch
import torch.nn as nn

class GazeOnce360Net(nn.Module):
"""GazeOnce360网络架构"""

def __init__(self, num_persons=5):
super().__init__()

# 1. 鱼眼校正模块
self.distortion_correction = FisheyeCorrectionNet()

# 2. 人体检测模块(共享)
self.backbone = ResNet50(pretrained=True)

# 3. 多人视线估计模块(并行)
self.gaze_heads = nn.ModuleList([
GazeEstimationHead() for _ in range(num_persons)
])

# 4. 注意力机制(关注驾驶员)
self.attention = nn.MultiheadAttention(256, 8)

def forward(self, fisheye_image):
"""
前向传播

Args:
fisheye_image: 鱼眼图像 (B, 3, H, W)

Returns:
gaze_results: 多人视线结果
"""
# 1. 畸变校正
corrected = self.distortion_correction(fisheye_image)

# 2. 特征提取
features = self.backbone(corrected)

# 3. 多人检测
person_features = self.detect_persons(features)

# 4. 并行视线估计
gaze_results = []
for i, head in enumerate(self.gaze_heads):
if i < len(person_features):
gaze = head(person_features[i])
gaze_results.append(gaze)

# 5. 驾驶员注意力加权
gaze_results = self.apply_attention(gaze_results)

return gaze_results


class FisheyeCorrectionNet(nn.Module):
"""鱼眼畸变校正网络"""

def __init__(self):
super().__init__()
# 可学习的畸变参数
self.k1 = nn.Parameter(torch.zeros(1))
self.k2 = nn.Parameter(torch.zeros(1))
self.k3 = nn.Parameter(torch.zeros(1))

# 畸变校正网络
self.correction_net = nn.Sequential(
nn.Conv2d(3, 32, 3, padding=1),
nn.ReLU(),
nn.Conv2d(32, 32, 3, padding=1),
nn.ReLU(),
nn.Conv2d(32, 3, 3, padding=1)
)

def forward(self, x):
"""自适应畸变校正"""
# 传统畸变模型
corrected = self.apply_fisheye_model(x)

# 深度学习细化
corrected = self.correction_net(corrected)

return corrected

def apply_fisheye_model(self, x):
"""应用鱼眼畸变模型"""
# 获取图像坐标
B, C, H, W = x.shape

# 归一化坐标
u = torch.linspace(-1, 1, W).to(x.device)
v = torch.linspace(-1, 1, H).to(x.device)
u, v = torch.meshgrid(u, v)

# 极坐标转换
r = torch.sqrt(u**2 + v**2)
theta = torch.atan2(v, u)

# 畸变校正
r_corrected = r * (1 + self.k1 * r**2 + self.k2 * r**4 + self.k3 * r**6)

# 转回笛卡尔坐标
u_corrected = r_corrected * torch.cos(theta)
v_corrected = r_corrected * torch.sin(theta)

# 网格采样
grid = torch.stack([u_corrected, v_corrected], dim=-1)
grid = grid.unsqueeze(0).repeat(B, 1, 1, 1)

corrected = torch.nn.functional.grid_sample(x, grid, align_corners=True)

return corrected


class GazeEstimationHead(nn.Module):
"""视线估计头部"""

def __init__(self):
super().__init__()

self.fc = nn.Sequential(
nn.Linear(2048, 512),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(512, 3) # 3D视线向量
)

def forward(self, features):
"""
估计视线方向

Returns:
gaze_vector: 3D单位向量 (x, y, z)
"""
# 全局平均池化
pooled = torch.mean(features, dim=[2, 3])

# 回归视线向量
gaze = self.fc(pooled)

# 归一化为单位向量
gaze = torch.nn.functional.normalize(gaze, dim=1)

return gaze

实验结果

数据集

测试数据集:

  • MPIIGaze(真实场景)
  • GazeCapture(大规模)
  • 自建鱼眼数据集(车载)

性能指标

视线估计误差(角度):

方法 MPIIGaze GazeCapture 鱼眼数据集
GazeNet 4.8° 5.2° -
FullFove 4.5° 4.9° -
GazeOnce360 4.2° 4.7° 5.5°

多人检测性能:

场景 检测准确率 视线误差
单人(驾驶员) 98.5% 4.3°
双人(前排) 96.2% 4.8°
三人(前排+后排) 93.7% 5.2°
五人(全座舱) 89.3% 5.8°

边缘部署

硬件选型

设备 算力 帧率 功耗
NVIDIA Jetson Orin 275 TOPS 45fps 15W
Qualcomm QCS8255 26 TOPS 35fps 10W
TI TDA4VM 8 TOPS 25fps 5W

模型优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 模型量化
def quantize_model(model):
"""INT8量化"""
model.qconfig = torch.quantization.get_default_qconfig('qnnpack')
torch.quantization.prepare(model, inplace=True)
# 校准
calibrate(model, calibration_data)
torch.quantization.convert(model, inplace=True)
return model

# 模型剪枝
def prune_model(model, ratio=0.5):
"""剪枝50%参数"""
parameters_to_prune = []
for name, module in model.named_modules():
if isinstance(module, nn.Conv2d):
parameters_to_prune.append((module, 'weight'))

prune.global_unstructured(
parameters_to_prune,
pruning_method=prune.L1Unstructured,
amount=ratio
)
return model

IMS应用启示

1. 全座舱监控

传统DMS局限:

  • 仅监控驾驶员
  • 后排乘客盲区

GazeOnce360优势:

  • 单相机覆盖全座舱
  • 监控所有乘员视线
  • 支持”驾驶员向后看”场景检测

2. 成本优化

成本对比:

方案 相机数量 单价 总成本
传统多相机 3-4个 $50-80 $150-320
GazeOnce360 1个 $80-120 $80-120

节省成本:40-60%

3. 算法集成

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
class IntegratedOMS:
"""集成GazeOnce360的OMS系统"""

def __init__(self):
self.gaze_net = GazeOnce360Net()
self.load_weights('gazeonce360_weights.pth')

def monitor_cabin(self, fisheye_image):
"""
座舱监控

Returns:
alerts: {
'driver_gaze': str, # 正常/分心
'passenger_gaze': str,
'alert_level': int
}
"""
# 视线估计
gaze_results = self.gaze_net(fisheye_image)

# 驾驶员视线判定
driver_gaze = gaze_results[0] # 第一个为驾驶员
driver_status = self.classify_gaze(driver_gaze)

# 乘客视线判定(可选)
passenger_status = 'normal'
if len(gaze_results) > 1:
for gaze in gaze_results[1:]:
if self.is_distracted(gaze):
passenger_status = 'attention_needed'

# 警告等级
alert_level = 0
if driver_status == 'distracted':
alert_level = 1

return {
'driver_gaze': driver_status,
'passenger_gaze': passenger_status,
'alert_level': alert_level
}

def classify_gaze(self, gaze_vector):
"""分类视线状态"""
# 假设车辆前进方向为z轴正方向
forward = torch.tensor([0, 0, 1])

# 视线偏离角度
angle = torch.acos(torch.dot(gaze_vector, forward))

if angle < 15: # 15度内为正常
return 'normal'
else:
return 'distracted'

总结

GazeOnce360首次实现单鱼眼相机全座舱视线估计,为Euro NCAP 2026 DSM要求提供低成本解决方案:

核心价值:

  1. 成本革命:单相机替代多相机,成本降低40-60%
  2. 360°覆盖:单相机覆盖前后排所有乘员
  3. 实时性:边缘设备30fps运行
  4. Euro NCAP合规:支持所有视线偏离场景检测

下一步行动:

  1. 搭建鱼眼相机测试环境
  2. 复现GazeOnce360算法
  3. 集成到现有OMS系统
  4. 准备Euro NCAP认证测试

参考资源:

  • 论文链接:待CVPR 2026官方发布
  • 代码仓库:预期开源
  • 鱼眼相机方案:Raspberry Pi Camera V2(便宜)或 FLIR Blackfly(车规级)

本文解读GazeOnce360鱼眼多人视线估计方法,为IMS团队提供全座舱监控低成本方案。


Gazeonce360 Fisheye Multi Person Gaze Estimation Cvpr 2026
https://dapalm.com/2026/08/02/2026-08-02-gazeonce360-fisheye-multi-person-gaze-estimation-cvpr-2026/
作者
Mars
发布于
2026年8月2日
许可协议