VITRA 全景速览:用百万段“野生”人手视频把机器人预训练做到 6 厘米级精度
核心问题:没有昂贵遥操作,也没有实验室脚本,仅凭网上随手拍的人手视频,能不能把机器人“教”到开箱即用的程度?
一句话答案:可以。VITRA 用 1M+ 段无标注 egocentric 视频把零样本动作误差压到 6 cm,小样本微调后真实机械手抓取成功率提升 3 倍,数据规模再翻倍性能继续线性上涨。
本文将回答的 6 个关键疑问
-
VITRA 到底把“野生视频”变成了什么样的训练格式? -
3D 标签只靠单目,精度够用吗? -
模型架构为什么非得“因果扩散”? -
真实机器人微调时,人手→机械手怎样对齐? -
数据规模 vs 性能曲线真的不会撞墙? -
如果我只想要“开箱即用”的推理,最少需要几步?
一、从“野生视频”到可训练 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 尺度)。
图片来源: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 % |
图片来源:Unsplash
实用摘要 / 操作清单
-
装环境
conda create -n vitra python=3.10 pip install -e .[visualization] git submodule update --init --recursive -
下载模型与统计量
huggingface-cli download VITRA-VLA/VITRA-VLA-3B --local-dir ./vitra-3b -
准备 MANO 权重
-
官网下载 MANO_RIGHT.pkl与mano_mean_params.npz放入weights/mano/
-
-
零样本推理
-
用 scripts/run_human_inference.sh或上文 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
-
没有 RTX 4090 能跑吗?
推理最低 16 GB 显存,A6000/3090 均可;训练建议 8×A100/H100。 -
视频必须 224×224 吗?
模型输入固定 224²,但脚本会自动 resize 并保留纵横比,只需原始视频短边 ≥ 224。 -
左手和右手能同时预测吗?
支持。action_mask_torch里把左右掩码同时置 1 即可,语言指令按“Left hand: … Right hand: …”格式。 -
为什么我用实验室脚本数据反而更差?
场景单一导致过拟合,VITRA 的“野生”多样性把 unseen 误差降了 38 %。 -
可以扩展到双臂协作吗?
已验证“hand-over”任务,只需在指令里同时描述左右手动作;数据流程无需改动。 -
数据许可证?
模型与代码 MIT,MANO 权重需遵守原作学术许可,商用请先注册 MANO 官网。 -
会不会把隐私视频也爬进去?
本文仅使用公开数据集 Ego4D/Epic/EgoExo4D/SSv2,未额外抓取网络视频;如需自行扩量,请遵守平台条款与地方法规。
