视线估计数据集深度解析:ETH-XGaze vs Gaze360 vs MPIIFaceGaze

引言:数据集决定算法上限

视线估计精度 = 数据质量 × 算法能力

维度 影响
规模 数据量越大,泛化能力越强
多样性 场景越丰富,鲁棒性越好
标注精度 标签越准,性能上限越高
采集环境 越接近实际场景,迁移成本越低

本文深入对比4个主流数据集,指导IMS训练数据选择。


一、数据集概览

1.1 四大数据集对比

数据集 年份 规模 受试者 采集环境 标注类型
MPIIFaceGaze 2017 213K 15 实验室 3D gaze
GazeCapture 2016 2.4M 1450 手机 2D gaze
Gaze360 2019 7.8M 238 室内外 3D gaze
ETH-XGaze 2020 1.1M+ 110 实验室 3D gaze

1.2 数据集特点

MPIIFaceGaze

  • 优点:高质量标注、长时间跨度
  • 缺点:受试者少、环境单一
  • 适用:算法验证、小模型训练

GazeCapture

  • 优点:大规模、多样化受试者
  • 缺点:手机场景、2D标签
  • 适用:预训练、跨域泛化

Gaze360

  • 优点:室内外混合、360°全角度
  • 缺点:标注噪声大
  • 适用:野外场景、大角度估计

ETH-XGaze

  • 优点:极端头位、高质量标注
  • 缺点:实验室环境
  • 适用:Euro NCAP合规训练

二、ETH-XGaze详解

2.1 采集设备

1
2
3
4
5
6
7
┌─────────────────────────────────┐
│ 采集系统 │
│ ├── 高分辨率相机 (2048×2048) │
│ ├── 多角度照明系统 │
│ ├── 头部固定装置 │
│ └── 屏幕 + 眼动仪(标注) │
└─────────────────────────────────┘

2.2 数据统计

指标 数值
总图像数 1,083,492
受试者 110人
头位范围 yaw: ±90°, pitch: ±60°
视线范围 yaw: ±45°, pitch: ±30°
标注精度 <1°(眼动仪)
图像分辨率 2048×2048

2.3 数据划分

子集 受试者 图像数 用途
训练集 80 787,492 模型训练
验证集 15 148,000 超参调优
测试集 15 148,000 最终评估

2.4 关键特性

极端头位

  • yaw: ±90°(左右转头90°)
  • pitch: ±60°(抬头低头60°)

适用场景

  • Euro NCAP测试(头位变化大)
  • 极端姿势鲁棒性训练

2.5 使用示例

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
import torch
from torch.utils.data import Dataset
import cv2
import numpy as np

class ETHXGazeDataset(Dataset):
def __init__(self, root_dir, split='train', transform=None):
self.root_dir = root_dir
self.split = split
self.transform = transform

# 加载标注
self.annotations = self.load_annotations()

def __len__(self):
return len(self.annotations)

def __getitem__(self, idx):
# 加载图像
img_path = self.annotations[idx]['image_path']
image = cv2.imread(img_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 加载标注
gaze = self.annotations[idx]['gaze'] # [pitch, yaw]
head_pose = self.annotations[idx]['head_pose']

# 数据增强
if self.transform:
image = self.transform(image)

return {
'image': image,
'gaze': torch.FloatTensor(gaze),
'head_pose': torch.FloatTensor(head_pose)
}

def load_annotations(self):
# 实现标注加载逻辑
pass

# 使用示例
dataset = ETHXGazeDataset('/path/to/eth-xgaze', split='train')
dataloader = torch.utils.data.DataLoader(dataset, batch_size=64, shuffle=True)

for batch in dataloader:
images = batch['image']
gaze = batch['gaze']
# 训练模型...

三、Gaze360详解

3.1 采集设备

1
2
3
4
5
6
7
┌─────────────────────────────────┐
│ 采集系统 │
│ ├── 高速相机 (120fps) │
│ ├── 室内场景(53人) │
│ ├── 室外场景(185人) │
│ └── 标注:佩戴式眼动仪 │
└─────────────────────────────────┘

3.2 数据统计

指标 数值
总帧数 7,800,000+
受试者 238人
采集场景 7个(5室内 + 2室外)
头位范围 yaw: ±180°, pitch: ±90°
标注精度 ~2°(眼动仪)
帧率 120fps

3.3 关键特性

360°全角度

  • 完整的头部旋转
  • 包含背面(背对相机)

室内外混合

  • 室内:办公室、走廊、大厅
  • 室外:街道、停车场

时序数据

  • 120fps高速采集
  • 可用于时序建模

3.4 适用场景

场景 推荐
野外视线估计 ✅ 强烈推荐
跨域泛化 ✅ 推荐
Euro NCAP合规 ⚠️ 可选
时序模型 ✅ 推荐

四、MPIIFaceGaze详解

4.1 采集设备

1
2
3
4
5
6
┌─────────────────────────────────┐
│ 采集系统 │
│ ├── 单眼相机 (640×480) │
│ ├── 长时间跨度(数月) │
│ └── 标注:屏幕校准 │
└─────────────────────────────────┘

4.2 数据统计

指标 数值
总图像数 213,654
受试者 15人
采集时长 数月
环境 办公室(日常环境)
标注精度 ~2°

4.3 关键特性

长时间跨度

  • 每位受试者持续数月
  • 包含不同光照、眼镜、发型

真实场景

  • 办公室环境
  • 无控制照明

高质量标注

  • 基于屏幕校准
  • 手动验证

4.4 适用场景

场景 推荐
算法验证 ✅ 推荐
小模型训练 ✅ 推荐
长时间鲁棒性 ✅ 推荐
大规模训练 ❌ 不推荐(数据量小)

五、GazeCapture详解

5.1 采集设备

1
2
3
4
5
6
┌─────────────────────────────────┐
│ 采集系统 │
│ ├── iPhone/iPad前置摄像头 │
│ ├── 众筹采集(iOS App) │
│ └── 标注:屏幕触摸点 │
└─────────────────────────────────┘

5.2 数据统计

指标 数值
总图像数 2,445,504
受试者 1,450人
设备 iPhone/iPad
标注类型 2D gaze point
场景 多样化(用户自采)

5.3 关键特性

大规模受试者

  • 1,450人(最多)
  • 种族、年龄、性别多样化

移动设备场景

  • 手机/平板
  • 自然光照

2D标签

  • 屏幕坐标
  • 无3D信息

5.4 适用场景

场景 推荐
预训练 ✅ 强烈推荐
跨域泛化 ✅ 推荐
车载DMS ⚠️ 可选(需转换)
3D视线估计 ❌ 不推荐(2D标签)

六、数据集选择策略

6.1 训练数据组合

策略一:单一数据集

数据集 适用场景 预期MAE
ETH-XGaze Euro NCAP合规 4.5-5.5°
Gaze360 野外场景 5.0-6.0°
MPIIFaceGaze 小模型 4.0-5.0°

策略二:多数据集组合

1
2
3
4
5
6
7
# 预训练 + 微调
pretrain_dataset = GazeCapture() # 大规模预训练
finetune_dataset = ETHXGaze() # 领域微调

# 训练流程
model.pretrain(pretrain_dataset, epochs=50)
model.finetune(finetune_dataset, epochs=20)

6.2 Euro NCAP合规训练

推荐组合

1
ETH-XGaze (70%) + Gaze360 (20%) + 自采数据 (10%)

原因

  • ETH-XGaze覆盖极端头位
  • Gaze360增加室内外多样性
  • 自采数据适配车型

6.3 数据增强

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import albumentations as A

# 视线估计数据增强
transform = A.Compose([
# 几何变换
A.HorizontalFlip(p=0.5),
A.Rotate(limit=15, p=0.5),
A.ShiftScaleRotate(shift_limit=0.1, scale_limit=0.1, rotate_limit=15, p=0.5),

# 光照变换
A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, p=0.5),
A.GaussNoise(var_limit=(10, 50), p=0.3),

# 模拟墨镜
A.CoarseDropout(max_holes=2, max_height=20, max_width=40, p=0.2),

# 模糊
A.GaussianBlur(blur_limit=(3, 7), p=0.3),
])

# 使用示例
augmented = transform(image=image)

七、性能对比

7.1 单数据集训练

训练数据 ETH-XGaze测试 Gaze360测试 MPIIFaceGaze测试
ETH-XGaze 4.5° 7.2° 5.8°
Gaze360 6.8° 5.0° 6.5°
MPIIFaceGaze 7.5° 8.2° 4.0°

结论:单一数据集泛化能力有限。

7.2 多数据集训练

训练数据 ETH-XGaze测试 Gaze360测试 MPIIFaceGaze测试
ETH+Gaze360 4.8° 5.5° 5.2°
ETH+MPII 4.6° 6.5° 4.5°
All 4.9° 5.8° 4.8°

结论:多数据集组合提升泛化能力。


八、总结

8.1 数据集选择指南

需求 推荐数据集
Euro NCAP合规 ETH-XGaze
野外鲁棒性 Gaze360
小模型训练 MPIIFaceGaze
大规模预训练 GazeCapture

8.2 训练策略

策略 适用场景
预训练+微调 通用场景
多数据集联合训练 高精度需求
数据增强+合成数据 数据不足时

参考文献

  1. Zhang, X., et al. “ETH-XGaze: A Large Scale Dataset.” ECCV, 2020.
  2. Kellnhofer, P., et al. “Gaze360: Physically Unconstrained Gaze Estimation.” ICCV, 2019.
  3. Zhang, X., et al. “MPIIGaze: Real-World Dataset.” CVPR, 2015.
  4. Krafka, K., et al. “Eye Tracking for Everyone.” CVPR, 2016.

本文是IMS视线估计系列文章之一,上一篇:墨镜场景解决方案


视线估计数据集深度解析:ETH-XGaze vs Gaze360 vs MPIIFaceGaze
https://dapalm.com/2026/03/13/2026-03-13-视线估计数据集深度解析-ETH-XGaze-vs-Gaze360-vs-MPIIFaceGaze/
作者
Mars
发布于
2026年3月13日
许可协议