
将第一人称视频转化为 3D 手部动作
我们构建了一个开源 pipeline,能将原始第一人称视频转化为用于机器人策略训练的 3D 手部动作轨迹——无需任何额外传感器,仅需单目 RGB 摄像头。最终系统在 H100 上以 15.53 FPS 重建 21 关节手部姿态,Action MPJPE 达到 52.04 mm。
TL;DR 摘要
我们构建了一个开源 pipeline,能将原始第一人称视频转化为用于机器人策略训练的3D 手部动作轨迹——无需任何额外传感器,仅需单目 RGB 摄像头。最终系统在 H100 上以 15.53 FPS 的速度重建 21 关节手部姿态,Action MPJPE 达到 52.04 mm,融合了 VGGT 相机估计、HaWoR 时序手部重建、度量窗口对齐和针对性轨迹校正。
为什么需要第一人称视频?
当前大多数机器人学习系统通过行为克隆(behavior cloning)进行训练:给定当前观测、机器人状态、有时还有任务指令,模型学习预测机器人下一步应执行的动作块。这意味着每个训练样本都需要状态-动作配对。
遥操作(teleoperation)提供了最干净的配对数据。操作员在机器人本身上执行演示,因此机器人的摄像头、关节状态和动作(模型之后要预测的)都记录在目标具身体态中。遥操作数据的主要问题是可扩展性。每个采集点都需要有完整的机器人,操作员需要培训,而且人控机械臂演示可能比人直接用手执行任务慢得多。
为了同时实现规模和多样性,实验室开始尝试利用第一人称数据(egocentric data)。这是佩戴摄像头的人直接用手执行任务的第一人称视频。它们采集成本低、自然多样、以人类全速捕获,YouTube 等网站上有无数小时的视频。
普通第一人称视频的规模伴随着一个折中:它给我们的是人类演示的像素,而非策略应预测的机器人动作。要将第一人称视频转化为动作数据,我们需要重建操作员手部在物理空间中的 3D 位置和运动。
这就是本文要解决的问题:如何将原始第一人称视频转化为 3D 手部动作轨迹,不使用任何额外传感器。我们将用开源组件构建 pipeline,优化其性能,并确保在 H100 上达到 15+ FPS。
问题定义:恢复物理动作
动作目标
第一人称视频记录的是人类执行动作的过程,但机器人策略最终需要针对自身身体的指令,如末端执行器位姿或关节位置。这些机器人特定指令可以通过先提取人手的物理 3D 运动来获得,包括手腕和手指在度量空间中如何运动,同时摄像头随佩戴者移动。我们将其作为所演示动作的通用表示,可适配不同机器人具身。
我们聚焦于该问题的纯 RGB 版本:从单目视频重建 3D 手部动作,在提供相机标定时使用。我们不使用测量深度、LiDAR、立体视觉或惯性数据作为输入,即使它们可用。评估这些额外传感器流能改善多少重建效果留待未来工作。
如果将结果轨迹视为共具身(co-embodiment),则可直接用于机器人策略训练。它也可以被转化为对齐的机器人动作,但这是一个独立问题,我们在此不评估。机器人重定向在视觉重建问题之上引入了机器人运动学、逆运动学、关节极限和控制器设计。
轨迹表示
手部轨迹有多种表示方式。紧凑表示可以将手视为夹爪,而详细表示可以保留手腕和手指的运动。
已有工作覆盖了这个范围。HumanEgo 将手转化为虚拟平行夹爪(6-DoF 位姿加一个开合值)。EgoScale 从 21 个人手关键点开始,但将手指运动重定向到特定 22 自由度机器人手的关节角度,并将手臂运动表示为手腕位姿的变化。ViTra 保留人手表示,使用手腕位置和方向的帧间变化以及 MANO 手指位姿参数。
我们选择与 ViTra 相同的细节级别,但使用更直接的几何目标。我们将每只手表示为21 个度量 3D 关节位置——1 个手腕关节和 20 个手指关节——而非 MANO 参数或机器人特定关节角度。这使目标与机器人无关,使结果轨迹可直接测量,同时允许后续派生更小的表示。我们还单独报告手腕位置精度。
分离手部运动与相机运动
选择 21 个关节告诉我们每个手部姿态包含什么。我们还必须确定这些姿态在移动摄像头拍摄的视频中如何关联。
手部预测最初表示在每帧相机坐标系中。这些坐标系随佩戴者头部移动而变化。如果佩戴者保持手完全不动但转头,手的相机空间位置会改变,即使其物理位置没有变。要恢复演示的动作,我们需要将每帧的手部姿态(相机空间)与该帧的相机位姿(相机在共享世界坐标系中的位置和方向)结合,以获得手的世界空间轨迹。
这使 pipeline 有两个主要子问题:
- 手部重建:在每帧中检测手部并预测其在相机空间中的 3D 关节位置。
- 相机重建:估计相机在共享 3D 世界坐标系中的轨迹,具有正确的度量尺度。
当两者都解决后,世界空间手部关节通过将相机空间关节经过每帧的相机到世界变换得到。
基线 Pipeline:HaWoR
我们从 HaWoR 出发,这是一个从第一人称 RGB 视频重建3D 手部轨迹到统一世界坐标系的端到端 pipeline。
Pipeline 组件
HaWoR pipeline 从 WiLoR 手部检测器开始。它独立处理每帧,为每个检测到的手预测边界框、置信度和左右手标签。低于选定置信度阈值的框被丢弃。HaWoR 然后根据左右手标签和图像位置的一致性,将剩余框在连续帧间关联。这产生独立的左右手轨迹:看起来属于同一只手的接受裁剪序列。
HaWoR 然后用时序网络重建每条手部轨迹,该网络利用相邻帧而非独立处理每个裁剪。对轨迹中的每帧,网络预测手腕相对于相机的位置和方向,以及 MANO 手形和手指位姿参数。MANO 将手形和手指位姿解码为 3D 手部网格,而预测的手腕位姿将网格放置在相机坐标系中。这产生 21 个相机空间关节位置 $\mathbf p^C_{t,h,j}$,其中 $t$ 是帧,$h$ 标识左手或右手,$j\in1,\ldots,21$ 标识关节,上标 $C$ 表示相机坐标。
Pipeline 接着使用 DROID-SLAM 估计第一人称相机的运动。DROID-SLAM 通过在连续帧中找到相同视觉点并测量其位置变化来实现。这对静态背景有效,但手部独立运动可能被误认为相机运动。因此 HaWoR 使用重建的手部网格识别并忽略手部像素,然后从背景估计相机运动和场景深度。
为验证遮罩的重要性,我们在同一段 1500 帧的 HOT3D 序列上以相同设置重跑 DROID-SLAM 两次。唯一变化是是否遮罩佩戴者的手部像素。相对于 HOT3D 相机真值,遮罩将相机轨迹平均误差从 0.247 m 降低到 0.220 m。
虽然这种单目 SLAM 方法可以恢复相机旋转和相机路径形状,但无法确定路径的真实世界尺度。相同的图像运动可能来自相机在大场景中移动一米或在更小版本中移动十厘米。因此 DROID-SLAM 只能恢复到一个未知全局尺度下的相机轨迹:其平移内部一致,但尚未以米为单位。
为了仅从 RGB 恢复这个尺度,Metric3D 为每个 SLAM 关键帧估计度量单位的密集深度图。HaWoR 在静态场景像素上将该深度与 DROID-SLAM 的无尺度深度比较,排除渲染的手部遮罩。每个关键帧提供从 DROID-SLAM 内部尺度到米的独立估计。由于 Metric3D 的深度预测有噪声,这些估计在各关键帧间变化。HaWoR 取它们的中位数并将该单一尺度应用于整段序列。帧 $t$ 的相机到世界变换由旋转 $R^{C\rightarrow W}_t$ 和度量平移 $\mathbf t^{C\rightarrow W}_t$ 组成,两者都相对于固定的共享世界坐标系 $W$。
现在我们可以合并手部和相机轨迹。对于手 $h$ 的关节 $j$,其在帧 $t$ 的世界空间位置通过将该帧的相机到世界变换应用于其相机空间位置获得:
$$ \mathbf p^W_{t,h,j} = R^{C \rightarrow W}_t \mathbf p^C_{t,h,j} + \mathbf t^{C \rightarrow W}_t. $$旋转将相机空间的点用世界轴表示,平移加上相机在共享世界中的位置。对每个直接重建的关节和帧重复此操作,将所有观测到的手部姿态置于一条共享 3D 轨迹中,即使佩戴者转动头部。这只有在相机轨迹具有度量尺度时才有效:否则相机平移和度量手部重建将使用不兼容的单位。
第一部分 — 相机重建:VGGT
基线 HaWoR pipeline 依赖 DROID-SLAM 和 Metric3D 进行相机重建和度量尺度恢复。DROID-SLAM 精确但慢。为了达到吞吐量目标,我们用 VGGT 替换了这一阶段——VGGT 是一个前馈网络,能在单次前向传播中预测一窗口帧的相机位姿、深度和点图。
VGGT 接受固定 $K$ 帧的窗口,并为该窗口一起预测相机位姿、深度、点图和内参。它没有超出这 $K$ 帧的持久世界状态。为了处理更长的视频,我们的第一个 pipeline 简单地将其分割为无重叠的连续窗口并拼接输出。
这个策略将每个窗口视为已经使用相同的世界坐标系。但实际并非如此。每个窗口可以正确重建局部场景,但选择了与前一窗口不同的全局位置、方向或尺度。因此拼接这些独立重建会在相机和(世界融合后的)手部中引入轨迹不连续性。
长视频需要统一坐标系
为了改善 VGGT 相机位姿窗口间的一致性,我们引入了重叠。不是在一个窗口结束后立即开始下一个,而是在两个窗口中都处理一组短的源帧。
更精确地说,想象两个连续窗口 A 和 B 共享相同的重叠帧。VGGT 将这些帧重建两次:一次作为窗口 A 的一部分,一次作为窗口 B 的一部分。图像完全相同,但预测的相机和 3D 点表示在两个不同的局部世界坐标系中。
我们使用这些重叠帧的重复重建来估计窗口 B 的坐标系需要如何旋转、平移和可能的缩放才能匹配窗口 A 的坐标系。对于重叠帧 $t$ 的相机中心,窗口 A 预测 $\mathbf c_t^A$,窗口 B 预测 $\mathbf c_t^B$。它们表示同一物理相机位置在两个不同坐标系中的表示。我们拟合一个变换使这些对应位置一致:
$$ \mathbf c_t^A \approx s\mathbf R\mathbf c_t^B + \mathbf q. $$这里 $\mathbf R$ 是 3D 旋转,$\mathbf q$ 是 3D 平移,$s$ 是一个尺度因子。从重叠帧拟合后,我们将同一变换应用于窗口 B 的每个 3D 预测,包括相机中心、场景点和手部关节。
我们测试了两种变换族。SE(3) 是刚性变换:它旋转和平移一个重建但不改变其大小。Sim(3) 额外估计一个均匀尺度因子,允许一个重建在旋转和平移前被放大或缩小。这对于单目重建很有用,因为独立处理的窗口可能给同一场景分配不同尺度。
我们还测试了两种对齐证据来源。相机中心对齐使用重叠中对应帧的预测相机位置。深度派生对齐使用每个窗口的预测深度和内参将对应重叠像素反投影为配对 3D 场景点。
深度派生 Sim(3) 产生了最佳对齐结果。我们固定此对齐方法,仅变化重叠大小。增加重叠持续降低 Action MPJPE,代价是 pipeline 变慢因为更多帧被处理两次。我们选择了 40 帧重叠,扫描中的最佳配置,因为其吞吐量仍在计算预算内。
更长的上下文有帮助
除重叠外,第二个重要参数是窗口长度。更大的窗口给 VGGT 更多时序上下文来估计相机运动和场景几何,并减少视频中坐标系边界的数量。这些好处的代价是更高的 GPU 内存消耗。我们将窗口长度固定在 195 帧。
输入分辨率
最后一个要选的参数是 VGGT 的输入分辨率。VGGT 训练时输入最高 512 像素,因此更高分辨率的输入应保留更多视觉细节:小场景特征、更清晰的深度边界和更可靠的图像对应用于相机重建。代价是更高的 GPU 内存消耗。更高分辨率桶持续改善了动作得分。其测得吞吐量仍高于 15 FPS 要求,因此我们保留了 416 px。
经过所有实验,我们基于 VGGT 的相机重建系统使用 200 帧窗口、40 帧重叠、416 像素输入桶、深度派生 Sim(3) 对齐和线性混合。完整 pipeline 仍以 15.53 FPS 端到端运行。更重要的是,它达到了 55.60 mm Action MPJPE,优于我们测试的所有其他相机重建系统,包括原始 HaWoR pipeline 的 59.12 mm。
第二部分 — 手部检测与跟踪
上一节的几何系统只有在我们在每帧相机空间中重建手部后,才能将手部轨迹转化为稳定的世界空间轨迹。为此,我们首先需要在视频中找到手部、跨帧跟踪它们,然后从结果图像裁剪中推断 MANO 参数。
基线检测器和跟踪器
HaWoR 从 WiLoR 手部检测器开始。每帧它预测手部边界框、置信度分数和左/右标签。HaWoR 然后使用 BoT-SORT 在时间上关联框。我们保留了 WiLoR 检测器,但从更轻的关联规则开始。对每只手,我们在一帧中保留置信度最高的框,仅将其关联到同侧的邻近框。这是刻意保守的:错误恢复比短间隙代价更大。
检测器选择
我们的第一个问题是,在广泛手部数据集上训练的检测器能否替代 WiLoR。我们将 WiLoR 与在 HaGRID(大型手部图像数据集)上训练的 YOLOv10n 检测器比较。两者都使用 0.25 的置信度阈值。尽管阈值很低,HaGRID 仍然漏掉了近一半可见的第一人称手部。由于远低于我们 75% 的覆盖率要求,我们没有用它运行完整的手部重建 pipeline。
置信度阈值
每个 WiLoR 框都有置信度分数。降低阈值给 HaWoR 更多裁剪来重建,但增加错误预测的风险;提高阈值则产生更少的直接预测和更多的插值。最佳动作得分出现在阈值 0.75 处。我们的指标惩罚只预测简单帧的方法:对于缺失帧,我们线性插值手部轨迹后再与真值比较。
恢复短间隙
严格的 0.75 阈值在 WiLoR 产生较弱但合理的框处留下短间隙。为了修复这一点,我们只在低置信度提案出现在一个短的同侧间隙内,且紧邻的前后都有高置信度 WiLoR 框时才接受它。对于每个提案框,我们线性插值两个高置信度锚框,并计算预期框与弱提案之间的 IoU。如果 IoU 超过阈值,我们接受该弱框。
第三部分 — 后处理
世界融合后,原始手部轨迹有两个可校正的问题:每个片段的骨骼长度尺度可能漂移,以及沿原始相机射线的手腕深度是约束最少的预测。我们应用有界片段级骨骼尺度校正,将每只手的 MANO 网格尺度调整到匹配片段内的中位骨骼长度,然后使用时序平滑沿原始相机射线优化手腕深度。相机平移在 3 帧上滤波。最后,我们应用有界片段级骨骼尺度校正,并以 0.2 的加速度权重和检测器置信度加权沿原始相机射线优化手腕深度。
评估指标:Action MPJPE
平均关节位置误差(MPJPE)是评估 3D 姿态估计的标准指标。它测量每个预测关节与其真值位置之间的欧几里得距离(毫米),然后跨关节平均。我们将同一思想扩展到一秒长的相机相对手部轨迹。我们称这个轨迹级指标为 Action MPJPE。
我们在每个可能的帧处启动一个一秒动作块。每个起始帧产生独立的左右手块。当 HOT3D 提供其起始相机位姿并在至少一个未来帧中标记手为可靠可见时,我们纳入该手部块。在纳入的块中,只有手部可见的未来帧对得分有贡献。
对于从帧 $t$ 开始的每个块,我们分别锚定预测和真值。我们将预测的未来关节从 pipeline 重建的世界坐标系转换到其帧 $t$ 预测相机的坐标系中。独立地,我们将 HOT3D 的未来关节从 HOT3D 世界坐标系转换到帧 $t$ 真值相机的坐标系中,将两条轨迹对齐到同一物理观测的相机轴,以便直接测量对应关节之间的欧几里得距离。Action MPJPE 先在每个手部块内对可见帧和 21 个关节平均这些误差,然后等权平均所有合格的手部块:
$$ \begin{aligned} E_{\mathrm{action}} = \operatorname*{mean}_{(t,h)\in\mathcal C} \left[ \operatorname*{mean}_{\substack{ i\in\mathcal V_{t,h}\\ j\in\{1,\ldots,21\} }} \left\| \hat{\mathbf p}_{t,h,i,j} - \mathbf p_{t,h,i,j} \right\|_2 \right] \end{aligned} $$这里 $\mathcal C$ 包含合格的左右手块,$\mathcal V_{t,h}$ 包含从 $t$ 开始的块中手 $h$ 的 HOT3D 可见未来帧。索引 $j$ 遍历手的 21 个关节。结果以毫米报告。Action MPJPE 越低越好。
端到端性能
| 系统 | Action MPJPE (mm) ↓ | 吞吐量 (FPS) ↑ | 直接覆盖率 ↑ |
|---|---|---|---|
| VGGT 基线(初始) | 90.73 | ~16 | — |
| HaWoR(原始) | 59.12 | 3.34 | — |
| VGGT + 深度-Sim(3) 对齐 | 55.60 | 15.53 | — |
| 最终系统 | 52.04 | 15.53 | ~75% |
与原始 HaWoR pipeline 相比,最终系统将动作误差降低 12.0%,同时将测得吞吐量从 3.34 提升到 15.53 FPS。与我们初始的 VGGT 基线相比,动作误差下降 31.3%。较低的直接覆盖率仍是一个实际限制。插值不能成为缺失预测的借口;它为缺失帧分配从周围观测派生的轨迹,因此它们仍然产生误差而非从评估中消失。
失败分析
剩余误差的来源
最后一个问题是 pipeline 中哪些部分仍然产生最大的误差。为了将相机重建与手部重建分离,我们仅使用有直接 HaWoR 预测和可见真值的帧重复动作评估,故意排除非预测帧。然后我们用真值替换相机轨迹和各相机空间手部分量,并使用 Shapley 归因分配它们的交互作用。
在 pipeline 重建了手部的帧上,其相机空间预测是主要的剩余误差源。手腕平移,特别是单目深度,是最大的分量。仅用真值替换相机轨迹将误差从 39.20 降至 34.87 mm,而用真值替换完整手部模型预测将其降至 12.67 mm。
深度是最大的坐标误差
使用相同的直接预测子集,我们沿每个动作起始处的相机轴分解了动作误差。水平 x 轴贡献 11.52 mm,垂直 y 轴贡献 10.86 mm,深度 z 轴贡献 16.82 mm。深度约占 39.20 mm 直接动作误差的 43%,尽管两个图像平面轴合计贡献更多。
相机运动比窗口边界更重要
虽然相机位姿的误差贡献小于手部重建,我们也研究了 VGGT 窗口边界对预测质量的影响。VGGT 窗口边界仍然可见但不占主导:跨越边界的动作得分 13.29 mm,其他位置为 12.42 mm。更大的相机运动与相机误差的关系更强。相机平移低于 2 cm 的动作得分 5.74 mm,而高于 10 cm 的达到 25.09 mm。类似地,误差从低于 2 度相机旋转的 5.79 mm 上升到高于 10 度的 16.50 mm。
问题环境
最后,我们在真实部署的数据上测试了开源 pipeline。HOT3D 基准不涵盖几个部署特定挑战,包括佩戴者识别、手套和腕挂摄像头。虽然 pipeline 在没有严重遮挡的干净环境中工作良好,但在真实数据上最显著的问题通常与相机空间手部预测有关。特别是,检测器有时识别属于非佩戴者的手,或者在存在手套或腕挂摄像头时完全失败。
结论
在这篇博客中,我们介绍、改进并诊断了开源手部跟踪 pipeline 的现状。
最强的系统不是单一的新重建模型。它结合了保守的手部检测、HaWoR 时序重建、长窗口 VGGT 相机估计、度量窗口对齐和针对性轨迹校正。这些改进将我们初始 VGGT 系统的一秒动作误差从 90.73 降低到 52.04 mm,同时保持完整 pipeline 在 15 FPS 以上。
该基准还揭示了当前开源系统仍然失败的地方:相机空间手部重建、可靠检测和较大头部运动期间的相机位姿估计。解决这些剩余限制对于使第一人称视频成为实用的机器人训练数据来源至关重要。
原文来源:Macrodata Labshttps://macrodata.co/blog/turning-egocentric-video-into-3d-hand-actions


