EyeTAG:基于轨迹感知的视线估计框架——BMVC 2026论文解读与代码复现
EyeTAG:基于轨迹感知的视线估计框架——BMVC 2026论文解读与代码复现
论文信息
| 项目 | 内容 |
|---|---|
| 标题 | EyeTAG: Eye Trajectory-Aware Gaze Estimation |
| 作者 | Jungmin Lee, Niamat Ullah, Yoseob Han |
| 机构 | Soongsil University, Seoul, Republic of Korea |
| 会议 | BMVC 2026 (British Machine Vision Conference) |
| arXiv | 2610.00922 |
| 代码 | GitHub: peter8366/EyeTAG |
| 框架 | PyTorch, Python 3.11 |
核心创新
EyeTAG的核心创新是显式的一阶视线先验(first-order gaze prior):模型在每一步将自己的近期预测做差分(differencing),得到视线运动轨迹,并将其反馈为紧凑的运动学token。由于差分操作在视线空间中具有平移不变性,该token携带的是跨被试通用的运动模式而非个体化的视线偏移量。
一句话总结:首次将视线轨迹作为显式变量引入视频视线估计,通过差分反馈实现运动学先验建模。
问题背景
当前痛点
| 问题 | 现有方法 | 局限 |
|---|---|---|
| 单帧抖动 | 单帧方法独立预测每帧 | 连续输出波动为不真实的抖动 |
| 隐式时序 | 多帧LSTM/注意力方法 | 运动隐含在高维外观特征中,视线轨迹从未作为显式变量 |
| 扫视偏差 | 绝对视线历史先验 | 存在系统性扫视偏差(saccade bias),即使有时序上下文也无法消除 |
| 个体差异 | 个体化的绝对视线偏移 | 不同被试的静息视线不同,绝对先验不可泛化 |
EyeTAG的解决思路
graph TB
A[输入视频帧序列] --> B[Face Encoder<br/>ResNet-50 VGGFace2]
A --> C[Eye Encoder<br/>ResNet-18]
D[过去预测 g_t-1] --> E[差分操作<br/>Δg = g_t - g_t-1]
E --> F[TAKE: 运动学编码器<br/>MLP]
B --> G[Cross-Attention<br/>融合模块]
C --> G
F --> G
G --> H[Causal Transformer Decoder]
H --> I[当前帧预测 g_t]
I -->|反馈| D
方法详解
1. 显式一阶视线先验
EyeTAG将视线方向建模为一阶差分形式:
$$\mathbf{g}t = \mathbf{g}{t-1} + \Delta\mathbf{g}_t$$
其中 $\mathbf{g}_t \in \mathbb{R}^3$ 是3D视线向量,$\Delta\mathbf{g}_t$ 是连续帧间的差分变化。
关键性质: 差分操作是视线空间中的平移不变操作。对整个轨迹施加一个常数偏移 $c$:
$$\Delta\mathbf{g}’_t = (\mathbf{g}t + c) - (\mathbf{g}{t-1} + c) = \Delta\mathbf{g}_t$$
这意味着先验携带的是运动模式(方向变化率),而非个体化的视线偏移量。
2. 轨迹感知运动学编码器(TAKE)
1 | import torch |
3. 多模态融合架构
EyeTAG的完整架构包含三个流:
| 模块 | 骨干网络 | 输入 | 输出维度 |
|---|---|---|---|
| Face Encoder | ResNet-50 (VGGFace2预训练) | 面部图像裁剪 | 2048 |
| Eye Encoder | ResNet-18 | 左右眼裁剪 | 512 |
| TAKE | MLP | 过去T帧差分视线 | 256 |
融合模块使用交叉注意力(Cross-Attention)和因果Transformer解码器:
1 | class EyeTAGFusionModule(nn.Module): |
4. 计划采样训练策略
EyeTAG使用**计划采样(Scheduled Sampling)**解决训练-推理不一致问题:
1 | class ScheduledSampling: |
5. 差分表示的选择
论文对比了多种几何表示:
| 表示方式 | 公式 | 说明 |
|---|---|---|
delta (pitch-yaw) |
$\Delta(\text{pitch}, \text{yaw})$ | 论文默认,差分俯仰/偏航角 |
vector |
$\Delta\mathbf{g} \in \mathbb{R}^3$ | 3D向量差分 |
tangent |
切空间投影 | 投影到切平面 |
angvel |
角速度 | 旋转角速度表示 |
论文实验表明 delta 表示在Gaze360上效果最佳。
实验结果
Gaze360基准
| 方法 | 类型 | All (°) | Semi-Front (°) | Front (°) | Mean (°) |
|---|---|---|---|---|---|
| L2CS-Net | SF | 11.10 | 10.77 | 9.92 | 10.60 |
| GazeTR-Hybrid | SF | 10.56 | 10.30 | 9.63 | 10.16 |
| CrossGaze | SF | 10.47 | 10.29 | 9.23 | 10.00 |
| Gaze360 | MF | 10.46 | 10.18 | 9.32 | 9.99 |
| STAGE | MF | 12.08 | 11.63 | 9.43 | 11.05 |
| EyeTAG (ours) | MF | 9.29 | 9.12 | 8.08 | 8.83 |
EVE基准
| 方法 | MAE (°) |
|---|---|
| CrossGaze | 3.30 |
| Gaze360 | 2.73 |
| STAGE | 2.58 |
| EyeTAG | 2.56 |
时序稳定性分析
| 方法 | J (抖动↓) | B (扫视偏差→0) | M = (J+|B|)/2 |
|——|———–|—————-|—————|
| CrossGaze | 5.06 | +0.23 | 2.65 |
| Gaze360 (non-causal) | 1.71 | −4.24 | 2.98 |
| STAGE | 3.81 | −0.89 | 2.35 |
| EyeTAG | 3.68 | +0.05 | 1.87 |
关键发现:差分先验消除了扫视偏差(B从−0.46降到+0.05),而不仅仅是时序平滑的效果。
模型复杂度
| 指标 | 数值 |
|---|---|
| 参数量 | 37.91M |
| 计算量 | 121.57 GFLOPs |
| 推理时间 | 19.97ms / 48帧窗口 |
| 硬件 | RTX A6000, FP32, batch=1 |
完整推理代码
1 | """ |
IMS开发启示
1. 直接可用的改进点
| IMS模块 | 当前方案 | EyeTAG改进 | 预期提升 |
|---|---|---|---|
| 视线估计 | 单帧GazeTR | 差分轨迹先验 | 抖动降低30%+,扫视偏差消除 |
| 分心检测 | 帧级视线区域分类 | 时序连续视线轨迹 | 减少误报,提升检测稳定性 |
| PERCLOS | 帧级闭眼判定 | 时序平滑后的闭眼统计 | 误报率降低 |
| 视线落点 | 瞬时视线→区域 | 轨迹→意图预测 | 提前200ms预测视线落点 |
2. 部署考量
1 | # 边缘部署优化建议 |
3. 优先级排序
| 任务 | 优先级 | 工作量 | 预期收益 |
|---|---|---|---|
| 替换视线估计为EyeTAG差分先验 | 🔴 高 | 2人周 | 抖动↓30%,偏差↓90% |
| 集成到分心检测时序模块 | 🟡 中 | 1人周 | 误报率↓20% |
| 流式部署缓存优化 | 🟡 中 | 1人周 | 推理速度↑3x |
| 多表示对比实验 | 🟢 低 | 0.5人周 | 选型依据 |
总结
EyeTAG的核心贡献是将视线轨迹从隐式变量变为显式变量,通过差分反馈实现运动学先验建模。这一设计:
- 跨被试泛化:差分操作消除个体化偏移,运动模式通用
- 消除扫视偏差:B从−0.46→+0.05,不是平滑而是机制性消除
- 因果推理:只用过去信息,支持流式部署
- 即插即用:TAKE模块可附加到任何单帧视线估计器上
代码开源:https://github.com/peter8366/EyeTAG
IMS落地建议:优先在视线估计模块集成TAKE差分先验,预期减少30%抖动和90%扫视偏差,直接提升分心检测和PERCLOS的稳定性。