WebEyeTrack: Scalable Eye-Tracking for the Browser via On-Device Few-Shot Personalization¶
会议: ECCV2026
论文: ECCV 原文
代码: https://github.com/RedForestAI/WebEyeTrack
领域: 人体理解
关键词: 注视估计、度量头姿、少样本学习、端侧个性化、浏览器部署
一句话总结¶
WebEyeTrack 将单目度量头姿、轻量眼部编码器 BlazeGaze 和端侧少样本个性化结合,以初始 9 点校准支持浏览器眼动追踪,在 GazeCapture 上达到 2.32 cm 注视点误差,但其主要优势是部署效率与抗漂移能力,而非所有数据集上的最高精度。
研究背景与动机¶
眼动追踪希望从眼睛外观推断用户正在看屏幕的哪里,因此既是视觉估计问题,也是人机交互系统问题。 专用 Tobii 或 EyeLink 设备能提供稳定参考,却把实验限制在有硬件、可控制距离和姿态的环境中。 普通摄像头降低了接入门槛,但用户换设备、移动头部或改变坐姿后,同一种眼部外观不再对应同一个屏幕位置。 现有外观模型往往优先优化离线误差,未同时解决模型下载体积、低功耗运行、浏览器兼容和个人校准负担。 WebGazer 等浏览器工具采用较轻的回归方案,容易部署,但缺少显式头姿建模,长时间打字、阅读期间的姿态变化会带来漂移。
问题不只是把一个大网络压缩到浏览器里,而是让输入表征本身适应浏览器的观测条件。 单目人脸网格通常给出相对深度:它能说明脸怎样转动,却不能可靠区分人在物理空间中离相机有多远。 如果忽略这种尺度差异,回归器就需要从有限眼部图像中同时学习眼球运动、头部运动和相机距离的影响。 另一方面,要求每个用户重新训练整个网络,会把摄像头方案的便利性消耗在漫长校准和设备计算上。 云端计算也不是无代价的替代品,因为原始人脸、眼部特征及注视轨迹都涉及敏感信息。
本文选择先用几何先验恢复近似厘米尺度的头姿,再让小网络处理眼部外观,并把用户适配限制在很小的回归头上。 这里的“可扩展”主要指跨浏览器、跨消费级设备的接入与本地执行,不是增加服务器推理吞吐量。 少样本训练提供一个容易适配的初始化;用户交互产生的新样本则用于继续修正个人映射,而不是重学通用视觉特征。 核心 idea:用显式度量头姿解释头部运动,用冻结的轻量表征保留眼部信息,再以少量本地监督更新注视回归头,把几何稳定性与个体适应能力结合起来。
方法详解¶
整体框架¶
系统输入为摄像头图像,输出为屏幕二维注视点,即 Point-of-Gaze(PoG),不是三维视线方向。 MediaPipe 提供人脸关键点,通用预处理据此提取眼部区域,并利用眼睛纵横比 EAR 判断开闭状态以抑制眨眼伪影。 随后,“度量头姿恢复”估计头部旋转及厘米尺度平移,“轻量注视表征”将眼部图像编码成特征,“少样本个性化”融合两者预测注视点。 离线训练先学习编码器、重建解码器和回归头,再丢弃解码器、冻结编码器,对回归头进行元学习。 部署时浏览器只保留必要的编码与回归组件;初始校准和后续点击更新发生在设备本地。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
Input["摄像头帧与关键点"] --> Pose["度量头姿恢复"]
Input --> Eye["眼部裁剪与眨眼过滤"]
Eye --> Encoder["轻量注视表征"]
Pose -->|旋转与度量平移| Adapt["少样本个性化"]
Encoder -->|冻结编码器的特征| Adapt
Support["初始校准点<br/>视频阶段追加点击"] -.->|本地更新回归头| Adapt
Adapt --> Output["屏幕二维注视点"]
图中的虚线是个性化监督,不是每一帧预测都必须提供的输入标签。 度量头姿与眼部编码是两路输入,不能理解为先把头姿送进图像编码器。 重建解码器只在离线表征学习中使用,因此没有画成浏览器推理分支。 屏幕目标统一到以屏幕中心为原点的 \([-0.5,0.5]^2\) 范围,减少分辨率和屏幕尺寸造成的输出表示差异。 这种归一化不等于已经消除了跨设备域差异,最终厘米误差仍要结合实际显示设备的尺度理解。
关键设计¶
1. 度量头姿恢复:把相对人脸网格变成具有物理尺度的条件信息
MediaPipe 的人脸网格采用固定的 468 点拓扑,图像平面的坐标经过归一化,深度则来自弱透视表示。 原始人脸变换包含旋转和平移,但其中平移尺度不能直接当作真实厘米距离。 论文先将关键点重投影到三维,减去鼻尖位置,并把左右脸边界之间的距离归一化为单位脸宽。 鼻尖采用关键点 ID 4,脸宽使用 ID 356 与 ID 127;这些操作把形状、中心与绝对尺度分开。 在具有相机内参的数据集中,重投影利用焦距和主点位置。 浏览器环境的内参处理则需要另行注意,正文没有完整交代未知内参如何恢复。
尺度恢复借助一个人体几何先验:将虹膜直径近似为 1.2 cm,用图像中脸宽与虹膜直径的比值估算真实脸宽。 下式仅是依据第 3.1 节文字给出的尺度关系整理,不是对提取损坏的原文式(5)的逐字符还原:
其中两个像素长度的比值没有单位,乘以虹膜直径后得到厘米尺度,再据此缩放单位脸宽网格。 这个设计避免要求用户拿标尺测量脸宽,但固定虹膜尺寸只能给出近似尺度,不能当作每个人都满足的精确事实。 作者认为后续个性化可以缓解残余尺度误差,并提到补充材料中的敏感性实验;本次提供的全文不含该实验的数值。
恢复尺度后,系统保留 MediaPipe 给出的旋转,主要修正平移。 算法把初始深度设为 60 cm,并从鼻尖图像位置得到初始横向和纵向位置。 它比较当前三维人脸投影与观测关键点的径向偏差,用径向 Procrustes 对齐确定深度调整方向和幅度。 直观上,投影脸部过大或过小提供了距离需要增减的线索,而不是重新求解整个刚体旋转。 深度每次更新后,横向和纵向平移依据相似三角形同步调整,使投影鼻尖继续对齐观测鼻尖。 更新系数为 0.1,单次深度更新上限为 5 cm,停止阈值为 0.25 cm,最多迭代 10 次。 这些限制服务于实时性和更新稳定性,并不构成全局最优或度量误差界的证明。 由于原文式(6)至(8)在文本提取中明显缺符号,这里只保留可由文字核实的过程,不补造其精确优化公式。
2. 轻量注视表征:先把眼部外观学好,再缩小在线适配范围
系统用人脸关键点构造单应变换,将眼部区域校正到头部近似直立、居中的外观。 这一步避免在该预处理环节依赖迭代 PnP 求解器,但不应与前述度量几何中的内参问题混为一谈。 编码器接收 \(128\times512\times3\) 的眼部图像,采用单层与双层 BlazeBlocks,输出 512 维嵌入。 BlazeBlocks 来自高效移动视觉架构思路,本文将其组织为适合注视估计的轻量网络,而不是直接部署大型全脸骨干。 训练期间,一个包含转置卷积的镜像解码器尝试重建眼部图像,迫使嵌入保留眼部结构。 与此同时,注视监督要求这些结构能够解释屏幕目标,而不只是还原图像纹理。
表征训练包含图像重建、加权注视回归和嵌入一致性三类目标。 重建项是像素均方误差,使压缩后的特征仍包含眼部可见结构。 注视项采用加权 L2 误差,权重来自每个数据集预计算的 \(30\times30\) 屏幕网格的逆频率。 其作用是降低高频注视区域对训练的支配,避免中心区域样本较多时模型只学会向中心回归。 嵌入一致性项比较样本对的特征距离与归一化注视距离,使相近注视目标在表示空间中也保持相近。 它不是仅区分“同用户”和“不同用户”的对比学习,而是利用连续二维注视标签塑造特征几何。 原文给出的注视距离归一化涉及批内最大距离和数值稳定项;损坏的权重及范数细节不在此猜补。 三个目标的系数按数据集经验选择,正文没有提供可直接复现的完整系数表。
注视回归器将 512 维特征与头姿结合,经宽度为 16、16、2 的三层 MLP 输出二维坐标。 训练结束后解码器被移除,因此重建目标改善表示,却不把图像重建成本带到浏览器预测阶段。 编码器冻结意味着在线校准不更新大量视觉参数,把少量标签用于修正个人的特征到屏幕映射。 需要区分 BlazeGaze 的轻量网络与完整 WebEyeTrack:后者还包含关键点检测、几何处理和浏览器调度。
3. 少样本个性化:学习容易更新的回归头,而不是为每个人重训网络
论文把一个用户的注视预测视为一个任务,任务内部划分支持集和查询集。 支持集提供少量校准样本,查询集检验更新后的模型能否预测该用户的其他样本。 每个支持样本包含冻结编码器的眼部嵌入、头姿、二维目标及样本权重。 元训练内循环先在支持集上更新回归头,再用更新后的模型计算查询集误差。 外循环据此改善共享初始化,让它经过少量梯度步骤就适合新用户,而不是只让未适配模型拟合平均用户。 实现采用一阶 MAML,因此不是要求浏览器执行完整高阶元梯度训练。 元训练和元测试用户集合按方法定义分离;用户到来时只做支持集上的轻量适配。
标准配置使用 9 个支持样本和 100 个查询样本,每个任务进行 5 次内循环更新。 查询样本属于离线训练或评测协议,真实浏览器预测不需要先获得 100 个未来注视标签。 初始校准完成后,推理直接复用个性化回归头,不必每帧重新从共享初始化开始训练。 论文还将点击产生的屏幕坐标作为伪标签,与同一时刻的眼部及头姿特征配对,加入支持集继续更新。 这项在线点击校准只用于视频评测,不能把它描述为所有静态图像基准都使用的额外监督。 追加点击意味着支持集大小会随会话增长,所以“9 点”是初始低负担配置,不是整个长会话只使用 9 个标签。 点击位置近似注视位置是一项交互假设;用户点击时未必持续看着点击点,因而这些标签可能带噪声。 与另拟合一个独立在线回归器不同,新增样本直接更新 MAML 初始化得到的同一注视头。 所有原始帧、嵌入及注视预测留在本机是本文描述的系统设计,并非形式化隐私保证或独立安全审计结论。
一个完整示例¶
设一名新用户在浏览器中完成初始 \(3\times3\) 点阵校准,然后开始阅读和打字。 每个校准观测先产生眼部图像及关键点,几何分支估计头部朝向和距离,编码器把图像压缩成固定特征。 9 个支持样本用于把预先学好的回归头适配到这个人的眼部外观与屏幕关系,而不是训练一个新编码器。 用户随后向后靠时,即使眼球运动不大,度量平移也会改变,因此回归器能同时参考眼部外观与头部位置。 若阅读期间没有点击,系统仍可用当前个性化头输出预测,但此时没有新增交互监督来修正残余偏差。 有点击时才加入对应伪标签并继续更新;这是几何条件和在线学习分别发挥作用的地方。 这个流程示例解释系统状态变化,不代表论文报告过该单个用户的具体轨迹或误差。
损失函数 / 训练策略¶
表征阶段训练 20 个 epoch,批大小为 8,使用 Adam,初始学习率为 \(10^{-3}\),指数衰减因子为 0.95。 保留最佳模型后移除解码器、冻结编码器,再进行 1000 步元训练。 MAML 内循环使用 SGD,学习率为 \(10^{-5}\);外循环使用 Adam,学习率为 \(10^{-3}\)。 支持集和查询集均围绕加权注视误差组织,但只在离线表征阶段使用重建及嵌入一致性目标。 训练使用 TensorFlow 2 和 RTX 3080,之后通过 tensorflowjs_converter 转换。 浏览器实现使用 TensorFlow.js LayerModels,支持端侧预测、校准以及模型缓存。 提供的正文未完整列出各数据集划分、全部损失系数及未知内参的部署细节,不能仅凭上述超参数宣称已可完全复现。
实验关键数据¶
主实验¶
表 1 位于原文第 11 页,下表节选其精度与效率数据;三个误差列依次为 MPIIFaceGaze、GazeCapture 和 EyeDiap,单位均为 cm,越低越好。 模型测速使用 Intel Core i7-11700F @ 2.50GHz,在一致后端和预热设置下运行 1000 帧,统计第 100 至 900 帧的平均值。
| 方法 | MPIIFaceGaze 误差 | GazeCapture 误差 | EyeDiap 误差 | GFLOPs | 参数量(M) | 延迟(ms) | FPS |
|---|---|---|---|---|---|---|---|
| Mnist | 7.29 | NA | 9.06 | 0.10 | 1.82 | 3.13 | 319.0 |
| iTracker | 7.67 | 2.81 | 10.13 | 3.97 | 6.28 | 33.33 | 30.0 |
| Gaze360 | 4.66 | NA | 6.37 | 3.65 | 11.94 | 24.39 | 41.0 |
| AFF-Net | 4.21 | 2.30 | 9.25 | 26.14 | 1.94 | 109.81 | 9.1 |
| BlazeGaze | 4.56 | 2.32 | 7.53 | 0.15 | 0.16 | 0.88 | 1137.0 |
BlazeGaze 在 GazeCapture 上接近 AFF-Net 的误差,同时其模型计算和运行开销更低;这不是精度全面领先的结果。 上述 0.88 ms 与 1137.0 FPS 是模型测速数据,不应当作摄像头、MediaPipe、几何估计和渲染都包含在内的浏览器端到端帧率。 摘要另报 iPhone 14 上 2.4 ms 推理延迟,它与主表的 CPU 测试平台不同;本次正文不含对应移动端完整协议。
消融实验¶
原文第 14 页图 6(a) 以表格形式给出以下消融;BG 为 BlazeGaze,R 为旋转,Metric RT 为旋转与度量平移,指标为 PoG 误差(cm)。 这些数值保持原样,尤其不把完整模型的 MPIIFaceGaze 结果 2.75 改成主表的 4.56;正文没有充分解释二者的协议差别。
| 配置 | MPIIFaceGaze 误差 | GazeCapture 误差 |
|---|---|---|
| BG | 9.06 | 4.22 |
| BG + R | 9.06 | 4.42 |
| BG + Metric RT | 3.78 | 4.16 |
| MAML BG | 8.99 | 4.01 |
| MAML BG + R | 9.00 | 3.84 |
| MAML BG + Metric RT | 2.75 | 2.32 |
在这一消融内部,单加旋转对 MPIIFaceGaze 没有改善,加入度量平移后从 9.06 降至 3.78,说明距离与位置不能由旋转替代。 MAML 单独使用的改善较小,但与完整度量头姿结合得到最优结果;两者的贡献存在交互,不能简单相加。 图 6(b) 扫描 \(k\in\{0,1,2,\ldots,32\}\),作者描述静态基准总体较稳定,但提供的文本没有曲线各点读数,因此不编造逐点增益。
关键发现¶
跨数据集实验从 MPIIFaceGaze 训练模型迁移到 Eye of the Typer,以初始 9 点 Dot Test 校准,并在约 20 分钟会话后进行最终 Dot Test。 下表来自第 14 页第 5.3 节对图 5 的说明,指标是 L1 PoG 误差(cm),不能与静态主表不加区分地混合比较。
| 方法 | 初始 Dot Test | 最终 Dot Test | 原文报告的误差增长 |
|---|---|---|---|
| WebGazer | 7.79 | 11.62 | 49% |
| WebEyeTrack | 7.24 | 8.72 | 20% |
作者报告最终误差的 Mann–Whitney U 检验为 \(p<0.05\),并以 10 s 时间窗分析会话中的误差变化。 这支持其相对 WebGazer 更抗漂移的结论,但 8.72 cm 的绝对误差也说明它不能直接替代高精度专用设备。 视频实验允许点击流追加校准,且不同方法的初始误差不同,因此不能将最终差异全部归因于某个单独模块。
亮点与洞察¶
- 几何信息替小网络承担了部分解释负担。显式输入距离和位置,比让少量校准样本从眼部像素中重新识别所有姿态效应更有针对性。
- 重建解码器是训练期辅助组件。它能约束眼部特征,而不让浏览器在每一帧都支付重建成本。
- 少样本学习的价值不只体现为固定基准分数。本文把同一回归头用于初始适配和持续点击更新,使用户监督可以逐渐积累。
- 效率评测使用匹配硬件协议,便于比较模型本身。完整系统是否流畅仍需单独测量,不能仅看网络 FPS。
局限与展望¶
- 固定 1.2 cm 虹膜直径是尺度先验,遮挡、虹膜检测误差和个体差异都可能影响度量恢复;正文没有提供可核实的敏感性数值。
- 第 3.1 节使用相机内参,第 4.1 节又强调浏览器中内参不可用;眼部单应校正并未充分解释整个度量分支如何解决该问题。
- 主表的 MPIIFaceGaze 4.56 cm 与图 6(a) 的 2.75 cm 尚无法从正文对齐,精确复现实验前需要核对协议和实现。
- 本地执行减少数据外传,但不等于差分隐私或经过浏览器安全审计;点击伪标签还可能受到交互行为噪声影响。
- 作者把公平性与能耗列为未来工作;读者进一步需要关注不同人群、眼镜、光照及长期模型更新的分层评测。
- 部分公式提取损坏,补充材料未包含在本次来源中;笔记没有猜补公式,也没有把未读取的移动端或敏感性实验当作已核验结果。
相关工作与启发¶
- 与 WebGazer 对比:两者都使用用户交互实现浏览器校准,本文增加度量头姿和 MAML 回归头;差异不只是把回归模型换成 CNN。
- 与 FAZE 对比:二者都关注少样本个性化,本文强调冻结轻量编码器、缩小适配参数范围和 TensorFlow.js 部署,而非把大型训练管线搬到端侧。
- 与 BlazeFace 对比:本文借鉴 BlazeBlocks 的高效结构,但注视表征、头姿条件和个性化训练属于眼动任务的额外设计。
- 与三维视线方法对比:本文目标是二维屏幕注视点,不能直接用三维角度误差排名判断其优劣;应用选择应先明确需要屏幕位置还是视线方向。
- 可延伸方向:在不增加标尺校准的条件下估计尺度置信度,再依据置信度调节几何输入或点击更新权重,是读者提出的研究方向,并非本文已验证机制。
评分¶
- 新颖性: 4/5。度量头姿、轻量表征和可持续个性化的组合面向明确部署约束,元学习与高效卷积本身并非全新。
- 实验充分度: 3/5。包含静态基准、消融和长时跨数据集测试,但协议差异、端到端性能及人群分层证据仍不足。
- 写作质量: 3/5。系统目标和训练阶段清楚,主表与消融不一致以及未知内参说明不足影响复现;公式损坏另属于当前文本来源限制。
- 价值: 4/5。为可普及的浏览器眼动工具提供具体路线,但绝对误差限制了精细注视定位用途。