VITRA 全景速览:用百万段“野生”人手视频把机器人预训练做到 6 厘米级精度

核心问题:没有昂贵遥操作,也没有实验室脚本,仅凭网上随手拍的人手视频,能不能把机器人“教”到开箱即用的程度?
一句话答案:可以。VITRA 用 1M+ 段无标注 egocentric 视频把零样本动作误差压到 6 cm,小样本微调后真实机械手抓取成功率提升 3 倍,数据规模再翻倍性能继续线性上涨。


本文将回答的 6 个关键疑问

  1. VITRA 到底把“野生视频”变成了什么样的训练格式?
  2. 3D 标签只靠单目,精度够用吗?
  3. 模型架构为什么非得“因果扩散”?
  4. 真实机器人微调时,人手→机械手怎样对齐?
  5. 数据规模 vs 性能曲线真的不会撞墙?
  6. 如果我只想要“开箱即用”的推理,最少需要几步?

一、从“野生视频”到可训练 VLA 三元组:三步流水线

阶段 输入 输出 关键 trick
3D Motion Labeling 任意 egocentric 视频 每帧相机位姿 + 左右手 6D 腕位姿 + 15 关节角 用 MegaSAM+MoGe-2 做 metric-scale SLAM,HaWoR 重建手, spline 平滑
Atomic Segmentation 长视频 1–4 秒原子片段 世界坐标系下手腕速度局部极小值当“剪刀”
Instruction Labeling 片段 8 帧缩略图 “Left hand: … Right hand: …” GPT-4.1 看轨迹 Overlay,N/A 过滤

场景化说明
假设你有一段 7 分钟做饭 vlog,系统先把它切成 20 s 滑动窗口;在窗口里发现第 132 帧右手速度最低,于是“咔嚓”剪出 1.8 s 片段;把 8 帧缩略图连同一根从掌心到指尖的彩色轨迹喂给 GPT,得到指令“Right hand: Pick up the spatula.”——一条标准 VLA 训练样本就此诞生。


二、3D 标签误差实测:单目也能做到 6 cm 中位精度

指标 VITRA 预训练模型 仅用原始标注 实验室脚本数据
hand-object 距离(平均/中位) 8.8 cm / 6.2 cm 14.1 cm / 14.1 cm 17.6 cm / 18.3 cm

作者反思
“单目+SLAM 最怕尺度漂移,我们最初用 DepthAnything 做先验,误差飙到 11 cm;换成 MoGe-2 后一次性降到 6 cm——说明深度先验的质量比‘有没有激光雷达’更关键。”


三、模型架构:为什么非得“因果扩散”?

3.1 宏观结构

PaliGemma-2 3B (Vision+Language)
        ↓ 认知 token fc
Diffusion Transformer 136 M(因果自注意力)
        ↓
16 步动作块 ΔT+ΔR+θ (102 维)

3.2 因果注意力的现实意义

  • 人手视频往往 1 s 就结束,模型必须学会“提前停”;
  • 若用双向注意力,末尾的 zero-padding 会把早期轨迹拉偏;
  • 训练阶段对 zero 位置 mask 掉 loss,推理阶段用 DDIM 10 步即可。

场景化示例
用户上传一张“桌面+耳机盒”照片,指令“Right hand: Grab the earbuds.”
模型输出 16 帧动作:前 6 帧掌心向前移动,第 7–12 帧食指拇指对捏,后 4 帧速度自然衰减到 0——因果结构保证“减速”不是被未来 zero 强制拖尾。


四、机器人微调:人手→机械手 18 维对齐秘籍

人手 MANO XHand 12 关节 对齐策略
15×3=45 维欧拉角 12 维关节角 最近邻拓扑映射,未映射维度假 0 并 mask
6D 腕位姿 6D 腕位姿 直接复用,坐标系统一到相机系(X 右 Y 下 Z 里)

代码片段(PyTorch 伪代码)

# 机器人状态 -> 人手状态
human_state = transfer_xhand_to_human(robot_state)
# 模型推理
norm_action = model.predict_action(image, instr, human_state, ...)
# 人手动作 -> 机器人动作
robot_action = transfer_human_to_xhand(norm_action)

场景化说明
在真实 Realman+XHand 平台上,操作者用遥操作手套录了 1200 条“倒瓶子”轨迹;用上述映射把 12 关节角扩展成 45 维,预训练模型只须 20 K 步就收敛,最终倒酒任务成功率 75%,比从头训练高 43 个百分点。


五、数据规模实验:性能随“对数帧数”线性涨

下图纵轴为 hand-object 距离(cm),横轴为训练帧数(log 尺度)。
data-scaling
图片来源:Unsplash

数据比例 帧数 中位误差 备注
1 % 0.26 M 11.2 cm 已优于实验室脚本数据
10 % 2.6 M 8.1 cm 超越 EgoDex 130 M 帧
50 % 13 M 6.8 cm 接近全量
100 % 26 M 6.2 cm 继续微幅改善

作者反思
“当数据覆盖到‘工地刷墙’‘画室调色’这类长尾场景后,模型在‘ unseen 背景’上的误差才开始同步下降——说明多样性红利远没吃尽,继续加数据仍然有效。”


六、零样本推理最小可用范例:5 行代码跑通

from vitra.models import load_model
from vitra.utils.data_utils import resize_short_side_to_target, load_normalizer

model = load_model("VITRA-VLA/VITRA-VLA-3B").cuda().eval()
normalizer = load_normalizer("VITRA-VLA/VITRA-VLA-3B")

image = resize_short_side_to_target(Image.open("demo.jpg"), 224)
action = model.predict_action(
        image=np.array(image),
        instruction="Right hand: Pick up the screwdriver.",
        current_state=np.zeros(212),   # 初始状态全零
        action_mask_torch=torch.ones(16,2),
        num_ddim_steps=10, cfg_scale=5.0)
print(normalizer.unnormalize_action(action))

实测结果
在 117 个“从未出现”的手机拍摄场景里,用户主观打分 1.91/3.0,比第二名的 0.15 提升一个量级。


七、真实机器人任务成功率对比

方法 已知对象平均成功率 未知对象平均成功率
π₀ (OXE) 46.9 % 16.1 %
无预训练 32.1 % 10.9 %
VITRA(本文) 71.0 % 64.6 %

robot-setup
图片来源:Unsplash


实用摘要 / 操作清单

  1. 装环境

    conda create -n vitra python=3.10
    pip install -e .[visualization]
    git submodule update --init --recursive
    
  2. 下载模型与统计量

    huggingface-cli download VITRA-VLA/VITRA-VLA-3B --local-dir ./vitra-3b
    
  3. 准备 MANO 权重

    • 官网下载 MANO_RIGHT.pklmano_mean_params.npz 放入 weights/mano/
  4. 零样本推理

    • scripts/run_human_inference.sh 或上文 5 行代码即可。
  5. 微调自家机器人

    • 继承 RoboDatasetCore 类,实现 __getitem__ 返回 8 个字段;
    • 运行 calculate_statistics.py 生成归一化参数;
    • robot_finetune.json 里的路径,执行 bash scripts/run_robot_finetune.sh

一页速览(One-page Summary)

  • 把“野生”人手视频变成 1M 段 VLA 数据,无需人工标注。
  • 单目 3D 重建 + 速度分割 + GPT 指令,hand-object 误差 6 cm。
  • PaliGemma-2 + 因果扩散 Transformer,10 步 DDIM 出 102 维动作。
  • 真实 12-DoF 机械手微调 20 K 步,未知对象成功率 +48 %。
  • 数据继续翻倍,误差线性下降,尚未见天花板。
  • 代码、模型、数据全部开源,pip 一行装完。

FAQ

  1. 没有 RTX 4090 能跑吗?
    推理最低 16 GB 显存,A6000/3090 均可;训练建议 8×A100/H100。

  2. 视频必须 224×224 吗?
    模型输入固定 224²,但脚本会自动 resize 并保留纵横比,只需原始视频短边 ≥ 224。

  3. 左手和右手能同时预测吗?
    支持。action_mask_torch 里把左右掩码同时置 1 即可,语言指令按“Left hand: … Right hand: …”格式。

  4. 为什么我用实验室脚本数据反而更差?
    场景单一导致过拟合,VITRA 的“野生”多样性把 unseen 误差降了 38 %。

  5. 可以扩展到双臂协作吗?
    已验证“hand-over”任务,只需在指令里同时描述左右手动作;数据流程无需改动。

  6. 数据许可证?
    模型与代码 MIT,MANO 权重需遵守原作学术许可,商用请先注册 MANO 官网。

  7. 会不会把隐私视频也爬进去?
    本文仅使用公开数据集 Ego4D/Epic/EgoExo4D/SSv2,未额外抓取网络视频;如需自行扩量,请遵守平台条款与地方法规。