VITRA: Scalable Vision-Language-Action Model Pretraining for Robotic Manipulation with Real-Life Human Activity Videos
Paper: arXiv:2510.21571 Code: microsoft/VITRA Code reference:
main@598c29db(2026-05-12)
1. Motivation (研究动机)
VITRA 解决的是 VLA 预训练里最核心、但一直缺数据的问题:机器人操作数据昂贵、覆盖窄、embodiment 强绑定,而互联网上/真实生活中的 egocentric human hand videos 数量巨大,却没有被整理成机器人 V-L-A 训练所需的“短任务 + 语言指令 + frame-aligned 3D action”格式。现有 VLA 预训练通常依赖真实机器人轨迹,例如 OXE、DROID、AgiBot、RT 系列数据,它们的优势是动作标签直接来自机器人执行,但代价是采集成本高、对象和场景覆盖有限,并且多数数据来自 gripper-based robots,迁移到 dexterous hand 时存在明显 action-space gap。VITRA 的问题设定是:能不能把真实生活中未经脚本化、未经人工标注的人手活动视频,自动转换成与机器人 VLA 数据对齐的监督信号,从而让 dexterous manipulation 的 VLA 也能享受类似 VLM/LLM 的规模化预训练收益。
这篇论文强调两个 alignment 难点。第一是 task alignment:长视频里的动作不是天然短任务,可能包含无关动作、动作转换、双手交叠、长短不一的活动;机器人 VLA 数据却通常是“pick up the sponge”“wipe the stove”这类可组合的 atomic-level short-horizon tasks。第二是 label alignment:VLA 需要 dense 3D action labels,人手视频通常来自单目、未知内参、移动相机甚至鱼眼镜头,既没有 3D hand motion,也没有 camera pose,更没有精确语言指令。直接使用原始数据集自带动作标签也不够,因为这些标签常常粒度过粗、起止时间不精确,不能作为 frame-aligned VLA supervision。
Figure 1 解读:这张 teaser 展示了论文的主张:真实生活中的人手活动可以被转成 hand V-L-A episodes,并进一步预训练 VLA。它同时展示了数据覆盖的动作、物体和环境多样性,以及预训练后模型在未见环境中的 hand action prediction 和真实机器人执行结果。对这篇论文来说,Figure 1 不是单纯的 qualitative demo,而是把“human hand as dexterous end-effector”这一假设直观化:人手运动被当成比机器人 gripper 更丰富的 action source,真实机器人只需要较少 fine-tuning data 来对齐自己的 embodiment。
这件事值得做的原因在于,机器人学习的长期瓶颈并非模型容量不足,而是 scalable pretraining signal 不足。如果可以把 Ego4D、Epic-Kitchen、EgoExo4D、SSV2 这类 in-the-wild 视频变成 VLA data,那么预训练数据的对象、动作、背景、光照、相机运动和人类操作策略会显著超过实验室或机器人平台数据。论文构建的 hand-VLA dataset 含 1M episodes / 26M frames,来源分布为 Ego4D 77%、Epic-Kitchen 12%、EgoExo4D 6%、SSV2 5%。作者用这个数据预训练 dexterous hand VLA,再用 1.2K 条真实机器人 teleoperation trajectories fine-tune,最终在 seen 和 unseen robot manipulation tasks 上都获得明显提升。这说明该工作的价值不只是提出一个数据处理 pipeline,而是验证了“真实人类活动视频 → 3D hand VLA supervision → robot fine-tuning”这条路线具有可扩展性和 downstream transfer。
2. Idea (核心思想)
核心 insight 是:人手可以被视为一种高自由度 robot end-effector;只要把真实视频中的人手 motion、camera motion、atomic task boundary 和 language instruction 自动恢复出来,human activity videos 就能变成与机器人 VLA 格式兼容的预训练数据。 这和过去仅从人类视频学习 visual affordance、latent action 或 representation 的路线不同,VITRA 直接构造显式 3D action supervision,让预训练目标更接近 robot VLA 的 action prediction。
方法上,VITRA 分成两层:第一层是 data transformation,把任意长人手视频转成 atomic hand V-L-A episodes;第二层是 dexterous hand VLA architecture,用 PaliGemma-2 3B 作为 VLM backbone,加上 cognition token、FoV token 和 causal DiT diffusion action expert 来预测双手未来 action chunks。与只用 latent action pretraining 的方法相比,VITRA 的关键差别是它不把动作压成不可解释 latent,而是恢复并监督 metric-space 3D wrist translation/rotation 和 MANO joint angles;与直接使用机器人数据的 / OXE-style pretraining 相比,它用更低成本的人类活动视频获得更广泛的 real-world coverage,再通过 fine-tuning 把 human action space 对齐到具体 robot hand。
这篇论文的创新不在单个组件绝对新,例如 hand reconstruction、SLAM、GPT captioning、diffusion action head 都有现成技术,而在于把它们组织成一个端到端自动化系统,并用实验证明该系统产生的数据对 VLA 预训练和真实机器人泛化有用。尤其重要的是,论文没有停留在 data curation:它把数据规模、数据多样性、action representation、causal action denoising、trajectory-aware augmentation 和真实 robot success rate 放在同一个 evaluation loop 里验证,从而支撑“scale real-life human activity videos for VLA pretraining”的主张。
3. Method (方法)
3.1 整体框架:从真实人手视频到 hand V-L-A episodes
总体 pipeline:raw human video 到 VLA episode
输入是无脚本、无标注、可长可短的人手活动视频;输出是机器人 VLA 可消费的 episode:语言指令、视频帧、当前 state、未来 action chunk、action mask。论文把转换过程分成三步:3D motion labeling、atomic action segmentation、instruction labeling。这个分解很关键,因为 VLA 数据需要同时满足动作精度和任务粒度,任何一个环节缺失都会导致预训练信号错位。
Figure 2:三步转换链路
Figure 2 解读
Figure 2 是数据构造 pipeline。左侧先恢复 camera intrinsics、camera trajectory 和 camera-space/world-space 3D hands;中间基于 wrist speed minima 切分 atomic segments;右侧把 sampled frames 和 projected hand trajectories 送给 GPT-4.1 生成 imperative instruction。图中最重要的连接是:3D trajectory 不只用于 action label,还反过来服务 segmentation 和 captioning,因此 language、motion、time window 三者被同一套几何轨迹绑定。
3D motion labeling
首先判定相机是 static 还是 moving。moving cameras 使用 DroidCalib 估计 intrinsics,static cameras 使用 MoGe-2 和 DeepCalib;畸变较大的视频会先 undistort,使后续步骤符合 pinhole camera model。hand reconstruction 使用 HaWoR,输出 per-frame camera-space 3D hands,包含 wrist 6D pose 和 MANO hand joint angles。camera pose tracking 使用修改版 MegaSAM:作者把 MegaSAM 原本的 depth prior 替换为 MoGe-2,以获得更稳定、更高效的 metric-scale pose estimation。最后把 camera-space hands 和 metric-scale camera poses 组合成 world-space 3D hand trajectories,并做 spline smoothing 与 outlier removal。附录补充说明,长视频会被切成 overlapping 20-second clips,再重组结果以提升效率。
Atomic action segmentation
利用了一个非常朴素但有效的观察:真实人手动作在动作转换处往往有速度变化,wrist speed local minima 常对应 action boundary。实现上,作者对 world-space 3D wrist trajectories 先用 Gaussian filter 平滑,再在 0.5 秒窗口内寻找局部速度最小值作为切点;左右手独立切分,另一只手的运动不参与当前手的 boundary detection。这个策略可能过切分,例如 wiping 中来回动作会被切成多个片段,但过切分比欠切分更容易在 GPT captioning 后合并或过滤;而固定 1 秒窗口会把多个 atomic actions 混在一起,导致 instruction 与 action 对不齐。
Instruction labeling
使用 GPT-4.1。每个 segment 均匀采样 8 帧,并把从当前帧到 clip 末尾的人手 palm trajectory 投影到图像上。GPT 需要根据图像内容和轨迹标记,用 imperative form 描述指定手的动作;无语义动作标为 N/A。附录还说明,在得到初始 caption 后,会让 GPT-4.1 在保持语义不变的情况下 rephrase 成 5 个版本,提高语言多样性。这里的轨迹 overlay 是必要信息:仅看帧序列时,GPT 很难判断“手要去哪里”和“接触前后的动作意图”;加入 2D projected trajectory 后,captioning 更接近 VLA 所需的 action-conditioned instruction。
Figure I 解读:附录 Figure I 展示 GPT instruction labeling prompt。它说明 VITRA 不是让 GPT 对原视频做泛泛描述,而是给出指定手、轨迹 overlay、imperative style 和 N/A 规则。这个 prompt 设计把 captioning 问题约束为“给某只手的 atomic action 取 VLA instruction”,避免生成过长、过粗或描述背景的 caption。
3.2 DexVLA 模型:PaliGemma-2 + cognition token + diffusion action expert
VITRA 构建的策略模型记为: 其中 是语言指令, 是当前视觉 observation, 是当前 proprioceptive state,输出是未来 步 action chunk。论文默认 chunk length 为 16。模型由两部分组成:PaliGemma-2 3B VLM backbone 和 DiT diffusion action expert。VLM backbone 由 SigLIP vision encoder、linear projector 和 Gemma-2 language model 组成,输入分辨率为 ;vision encoder 在训练中冻结,action expert、VLM 其他部分和 cognition token 端到端训练。
Figure 3 解读:Figure 3 展示 VITRA 模型结构。VLM 接收图像、左右手 instruction、FoV token 和 learnable cognition token;cognition token 的输出 feature 作为 action expert 的 condition。action expert 同时接收当前 hand state、noisy action chunk 和 valid action masks,通过 causal attention 进行 diffusion denoising。这个结构把“理解当前图像和指令”的任务交给 VLM,把“生成连续 3D hand actions”的任务交给专门的 diffusion head。
FoV token 是一个容易忽视但很重要的设计。PaliGemma 的视觉输入被 resize 到固定 ,如果没有额外相机几何信息,同一张 resize 后图像可能对应不同原始 aspect ratio、focal length 和 crop;VITRA 把 horizontal/vertical FoV 通过 MLP 投影到 LLM token embedding space,帮助模型理解原图几何。released code 中 vitra/models/vla/vitra_paligemma.py 的 _init_fov_encoder() 用 2 维 FoV 输入构造 MLPProjector,并在 prepare_vlm_features() 中把 FoV embedding 追加到 word embeddings 之后、cognition token 之前。
Action expert 是 Diffusion Transformer。论文把 cognition feature 、当前 hand state 、noisy action chunk 拼接/注入到 DiT 中,预测 diffusion noise,并优化:
released code 中 vitra/models/action_model/diffusion_policy.py 使用 squaredcos_cap_v2 noise schedule、100 diffusion steps、q_sample() 加噪,并对 (noise_pred - noise)^2 乘以 x_mask 后按 action component 聚合。vitra/models/action_model/dit.py 中 DiTBlock 构造 upper-triangular causal mask,使每个 action token 只能看见自己及之前 token;attention 使用 QK norm 和 RMSNorm,conditioning 通过 AdaLN modulation 注入。
3.3 Action space、mask 与 causal denoising
论文定义每个时刻的双手 action 为:
其中 是相邻帧 wrist translation, 是 rotation matrix 转 Euler angle 后的相对 wrist rotation, 是 MANO 15 个 joints 的 local Euler angles;左右手各 51 维,合计 102 维。single-hand 和 dual-hand 被统一到同一格式:VLM instruction 始终写成 Left hand: <...>. Right hand: <...>.,没有动作的手写 None;action expert 始终接收双手 noisy actions 和同维度 mask。mask 为 0 的动作置零且不计入 loss。
论文公式与 released code 实现差异:论文 Eq. (3) 语义 action 是 ,released code 为了统一 human/robot 和未来扩展,在 vitra/configs/human_pretrain.json 与 vitra/configs/robot_finetune.json 中设置 action_model.action_dim=192、state_encoder.state_dim=212;vitra/datasets/dataset_utils.py 里 ActionFeature.PADDING_FEATURES=(102,192) 标注为 not used,pad_action() 会把 102 维动作 pad 到 192 维并把 padding mask 置 0。因此这不是论文动作定义被改变,而是实现层的 padded tensor layout。
causal action denoising 解决的是短 episode 与固定 chunk length 的冲突。很多 human clips 只有约 1 秒,即约 30 帧;当 chunk length 取 16 时,靠近 clip 末尾的未来 chunk 可能越界。如果使用 bidirectional attention,zero-padded future actions 可能污染较早 action token,让模型错误学习“动作应该停下来”。VITRA 用 causal attention 和 mask 使 padded positions 不影响前面 token,也不进入 loss。Table 1 中“Bidirectional attention” ablation 证明该设计有用:grasping avg./med. distance 从 Ours 的 8.8 / 6.2 cm 退化到 9.3 / 7.2 cm,general action user score 从 1.91 降到 1.69。
3.4 Trajectory-aware augmentation 与 human-to-robot fine-tuning
预训练时,VITRA 对图像和 action 同步做 trajectory-aware augmentation。图像会随机 crop、perspective warp、改变 FoV/aspect ratio/crop center,同时保持 principal point 在图像中心;动作序列随新相机参数一起变换。关键约束是 crop 时要确保从当前帧到 episode 末尾的 projected hand trajectory 仍在裁剪图中,这样物体交互区域也大概率保留。
released code 中 human_dataset.py 的 _get_2d_traj_cur_to_end() 计算 palm trajectory,再把 uv_traj 传给 augment_utils.py::augmentation_func();后者用 sample_perspective_rot_flip_with_traj_constraint() 采样 FoV、中心、in-plane rotation 和 horizontal flip,并同步变换 translation、rotation、action mask、state、caption。若 caption 没有 color words,还会做 color jitter;
若发生 horizontal flip,会交换 left/right hand 及文本方向。
这个 augmentation 的直觉是:真实人手视频来自多种相机,而机器人部署时的 camera viewpoint 也会变化;如果只把图像 resize 到固定输入,模型很可能把某些 camera geometry shortcut 当作动作规律。trajectory-aware augmentation 不只是普通 image augmentation,而是“几何一致的数据增强”:图像、intrinsics、FoV token、3D action 和 instruction 一起变,所以监督仍然物理一致。Table 1 中 “No augmentation” 从 Ours 的 8.8 / 6.2 cm 退化到 11.6 / 10.7 cm,general action user score 从 1.91 降到 1.43,说明该设计对 unseen real-life environments 的泛化非常关键。
fine-tuning 到真实机器人时,作者把 human hand action space 看作 robot hand action space 的超集。robot end-effector 6D poses 被转成 camera coordinates 下的 和 ;robot hand joints 按拓扑映射到最接近的 human joints,未映射维度在 action mask 中 zero-pad。作者还强调,对 hand joints 直接监督 future execution commands,而不是用记录到的 robot states 派生 action labels,这会让 hand-object interaction 时的动作更自然。附录的 teleoperation system 使用 Realman robot、12-DoF XHand、RealSense head camera、leader-follower arms 和 MANUS gloves;retargeting 包括 DexPilot-style vector matching 与 angle matching。
Figure 8 解读:Figure 8 汇总 robot setup、XHand-MANO joint mapping 和 teleoperation hardware。它说明 fine-tuning 并不是把人手 pose 直接零样本迁移到机器人,而是通过拓扑映射、action mask 和少量 robot teleoperation data 适配具体 embodiment。白色无对应 joints 被 mask 掉,避免模型被迫预测机器人无法执行的 human-hand 维度。
3.5 关键实现伪代码
下面伪代码根据 released code main@598c29db 的结构抽象,不是论文文字的直接复述。
def build_human_vla_sample(dataset, episode_id, frame_id):
epi, R_w2c, t_w2c = dataset._load_or_cache_episode(episode_id)
idx_win, oob = dataset._window_indices(
frame_id,
past=0,
future=dataset.action_future_window_size,
start=0,
end=len(epi["extrinsics"]) - 1,
)
instruction, idx_l, oob_l, idx_r, oob_r, start_l, end_l, start_r, end_r = dataset._build_instruction(
main_type=epi["anno_type"],
text_clip=epi["text"],
text_rephrase=epi.get("text_rephrase"),
idx_win=idx_win,
oob=oob,
epi_len=len(epi["extrinsics"]),
frame_id=frame_id,
action_past_window_size=0,
action_future_window_size=dataset.action_future_window_size,
)
win_l = dataset._prepare_side_window(epi["left"], R_w2c, t_w2c, idx_l, frame_id, oob=oob_l, start=start_l, end=end_l)
win_r = dataset._prepare_side_window(epi["right"], R_w2c, t_w2c, idx_r, frame_id, oob=oob_r, start=start_r, end=end_r)
abs_l, rel_l, mask_l = dataset._make_action_window_vec(win_l, anchor_idx=0, rel_mode="step", action_type="angle")
abs_r, rel_r, mask_r = dataset._make_action_window_vec(win_r, anchor_idx=0, rel_mode="step", action_type="angle")
action = concatenate_left_right(relative_wrist_and_absolute_joints(abs_l, rel_l, abs_r, rel_r))
action_mask = stack_left_right_masks(mask_l, mask_r)
state = pack_current_left_right_state(win_l, win_r, epi["left"]["beta"], epi["right"]["beta"])
return instruction, action, action_mask, statedef trajectory_aware_augmentation(image, intrinsics, actions, states, caption, uv_traj):
transform = sample_perspective_rot_flip_with_traj_constraint(
src_intrinsics=normalize_intrinsics(intrinsics),
trajectory_uv=uv_traj,
tgt_aspect=sample_log_uniform(1.0, 2.0),
fov_range_absolute=(45, 150),
fov_range_relative=(0.05, 1.0),
inplane_range=(-pi / 6, pi / 6),
min_overlap=0.95,
flip_augmentation=1.0,
)
image = warp_perspective(image, transform)
actions = transform_action_translation_rotation_and_hand_pose(actions, transform)
states = transform_current_state(states, transform)
caption = maybe_swap_left_right_and_direction_words(caption, transform)
if not contains_color_word(caption):
image = apply_color_augmentation(image, preserve_hue=False)
return image, new_intrinsics(transform), actions, states, captiondef vitra_train_forward(vlm, action_expert, batch, repeated_diffusion_steps=8):
hidden, attention_mask = vlm.prepare_vlm_features(
pixel_values=batch["image"],
input_ids=batch["input_ids"],
attention_mask=batch["attention_mask"],
current_state=batch["state"],
current_state_mask=batch["state_mask"],
fov=batch["fov"],
)
cognition = extract_last_valid_token(hidden, attention_mask)
cognition = repeat(cognition, repeated_diffusion_steps)
action = repeat(batch["action"], repeated_diffusion_steps)
action_mask = repeat(batch["action_mask"], repeated_diffusion_steps)
state = repeat(batch["state"], repeated_diffusion_steps)
state_mask = repeat(batch["state_mask"], repeated_diffusion_steps)
return action_expert.loss(action, cognition, action_mask, state, state_mask)def diffusion_action_loss(policy, clean_action, condition, action_mask, state, state_mask):
noise = torch.randn_like(clean_action)
timestep = torch.randint(0, policy.diffusion.num_timesteps, (clean_action.shape[0],))
noisy_action = policy.diffusion.q_sample(clean_action, timestep, noise) * action_mask
noisy_action_with_mask = torch.cat([noisy_action, action_mask], dim=-1)
predicted_noise = policy.net(noisy_action_with_mask, timestep, condition, state, state_mask)
squared_error = (predicted_noise - noise).pow(2) * action_mask
return weighted_component_average(squared_error, policy.loss_components, action_mask)Code reference:
main@598c29db(2026-05-12) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| VLA backbone + cognition/FoV tokens | vitra/models/vla/vitra_paligemma.py | VITRAPaliGemma, _init_fov_encoder, prepare_vlm_features, extract_cognition_token |
| Diffusion action expert | vitra/models/action_model/diffusion_policy.py | DiffusionPolicy.loss, DiffusionPolicy.sample, create_ddim |
| Causal DiT denoising | vitra/models/action_model/dit.py | DiTBlock.forward, DiT.forward, forward_with_cfg |
| Human VLA sample construction | vitra/datasets/human_dataset.py | _build_instruction, _make_action_window_vec, get_item_frame, pad_action |
| Trajectory-aware augmentation | vitra/datasets/augment_utils.py | sample_perspective_rot_flip_with_traj_constraint, augmentation_func |
| Training launcher/config | scripts/run_human_pretrain.sh, scripts/run_robot_finetune.sh, scripts/train.py | --config vitra/configs/*.json, VLAFSDPStrategy |
4. Experimental Setup (实验设置)
4.1 数据集与预训练规模
VITRA 的 hand-VLA pretraining data 来自 Ego4D、Epic-Kitchen、EgoExo4D、Something-Something-V2 的 raw egocentric videos,不使用这些数据集原有 action annotations。自动 pipeline 产出 1M episodes / 26M frames,覆盖 cooking、cleaning、construction、repairing、crafting、painting 等真实活动。作者在数据分析中比较了 EgoDex、OXE subset、DROID、AgiBot World beta 等数据集:视觉多样性用 OpenImages 作为 reference,随机采样 8K OpenImages images,用 DINOv2 features 计算每个 query 到目标数据集首帧 feature 的 maximum cosine similarity,再对 query 平均;语言多样性用 GPT-4.1 抽取 nouns、verbs、adjectives,统计 frequency curve、h-index 和 i100-index。
Figure 4a–4b 解读:Figure 4 比较视觉多样性。左图显示 VITRA 数据即使只取 10K episodes,OpenImages similarity 也超过其他 VLA datasets;完整数据的星标进一步提高。右图 t-SNE 显示 VITRA 覆盖更分散、更贴近自然场景,而 OXE 等机器人数据更容易形成碎片化分布。这支撑了论文关于 real-life human videos 能提供更广视觉覆盖的论点。
Figure 5a–5c 解读:Figure 5 分别统计 nouns、verbs、adjectives 的 instruction diversity。曲线越靠右上,说明既有更多不同词,也有足够频次支撑学习。VITRA 在名词、动词、形容词上均比现有 human/robot VLA datasets 更丰富,这一点对 instruction following 和 unseen objects/general actions 特别重要。
4.2 模型、训练与 released config 对照
论文报告的训练设置如下:pretraining 先 warm up action expert、cognition token mapping layers 和 FoV projection MLP 5K steps,然后联合 fine-tune VLM backbone 与 action expert 80K steps;action expert LR 为 1e-4,VLM LR 为 1e-5,batch size 512,预训练在 8×NVIDIA H100 上约 2 days。
real robot fine-tuning 训练 20K steps,batch size 256,LR 1e-5,同样使用 8×NVIDIA H100,约 8 hours。附录进一步说明使用 PyTorch FSDP,action chunk length 16,diffusion process 100 noise steps,每次 VLM forward 随机抽 8 noisy samples 训练 action expert;
AdamW weight decay 1e-1,gradient clipping 1.0,pretraining betas (0.9, 0.99),fine-tuning betas (0.9, 0.95)。
released code 的对应配置来自具体文件而不是默认值:
vitra/configs/human_pretrain.json
- 数据与 batch:
train_dataset.data_root_dir=/data/VITRA_1M,batch_size=64,total_batch_size=512,data_mix=magic_mix,augmentation=true,flip_augmentation=1.0,state_mask_prob=0.1。 - 模型:
model=vitra_paligemma2,vlm.pretrained_model_name_or_path=google/paligemma2-3b-mix-224,use_fov=true,untied_cognition_token=true,fwd_pred_next_n=16,action_model.model_type=DiT-B,action_model.action_dim=192。 - 优化:
trainer.learning_rate=1e-05,trainer.action_model_learning_rate=1e-4,trainer.weight_decay=0.1,trainer.gradient_clip_val=1.0,trainer.llm_freeze_step=5000,repeated_diffusion_steps=8。
vitra/configs/robot_finetune.json
- 数据与 batch:
train_dataset.data_root_dir=/data/TeleData,batch_size=32,total_batch_size=256,data_mix=robo_dataset,augmentation=true。 - checkpoint:
pretrain_path=./checkpoints/vitra-vla-3b.pt,resume=false。 - 优化:
trainer.learning_rate=1e-5,trainer.action_model_learning_rate=1e-5,trainer.optimizer_betas=[0.9,0.95],repeated_diffusion_steps=2。
论文公式与 released code 实现差异:论文实验段写明 pretraining 为 5K warmup + 80K joint training、robot fine-tuning 为 20K steps;released scripts/run_human_pretrain.sh 和 scripts/run_robot_finetune.sh 只传入上述 JSON config,而两个 JSON 里的 trainer.max_steps 都是 2000000。因此 public config 提供了 batch、LR、loss、mask、augmentation、FSDP 等关键设置,但没有把论文实际 stopping schedule 编码成 80K/20K 的 max_steps;阅读实验数值时应以论文报告的训练步数为准,把 released config 的 2M 理解为通用上限或可恢复训练 cap。
4.3 Benchmark 与 baselines
Human hand action prediction benchmark 在 unseen real-life environments 上评估两类任务。Grasping 使用 Azure Kinect 在 47 个未见环境采集 RGB-D images,标注 396 个 objects 的 captions 和 segmented 3D point clouds,把 synthetic human hand 渲染到距目标物体约 20 cm 的位置,预测一个 action chunk 后计算 predicted finger trajectories 到 target object points 的最小距离 ,报告平均/中位距离。General Action 使用 117 个手机采集的 unseen environments,通过 user study 评估动作合理性;23 名参与者对 117 场景中随机 30 个 case 的匿名结果排序,top-3 分别得 3、2、1 分,其余得 0,最终报告平均 user score。
Figure 6a–6b 解读:Figure 6 展示 hand action prediction benchmark 的两类环境。左侧 grasping 更适合几何距离指标,因为目标物体有 3D point cloud;右侧 general actions 需要人类判断动作是否符合 instruction,因为动作 plausibility 很难用单一距离表示。

Figure II 解读:附录 Figure II 是 user study interface。它说明 general action benchmark 不是让参与者读文字评分,而是展示匿名、随机排序的 rendered hand-motion videos,并要求参与者根据语言指令排序不同方法的输出。这个界面设计降低了方法名称带来的偏差,也解释了 Table 1 中 user score 的来源。
Real-world robot benchmark 使用 Realman robot、12-DoF XHand 和 RealSense head camera。作者收集 1.2K teleoperated trajectories,覆盖四类任务:General pick & place、Functional grasping、Pouring、Sweeping。seen setting 中对象和背景在 fine-tuning 时见过,但位置和 distractors 随机;unseen setting 包含 unseen objects/backgrounds,以及 unseen categories/backgrounds。对比方法包括 VPP、、No VLA pretrain、Latent action pretrain、OXE pretrain;所有 baseline 都用同一批 robot data fine-tune,以保持比较公平。
Figure 9a–9b 解读:Figure 9 对比 fine-tuning objects/environments 与 unseen evaluation objects/backgrounds。这里的 unseen 不只是物体位姿变化,而包括新背景、新对象甚至新类别,因此更能检验预训练是否学到可迁移的 manipulation prior,而不是记住 fine-tuning set。
5. Experimental Results (实验结果)
5.1 Hand VLA 数据确实更丰富
数据分析显示,VITRA 的视觉和语言覆盖明显强于实验室人手数据和现有机器人数据。视觉上,作者用 OpenImages similarity 和 t-SNE 说明 VITRA 覆盖更接近自然图像分布;语言上,名词、动词、形容词的 long-tail 覆盖更好,并且 h-index / i100-index 都更高。这个结论直接解释了后续实验:EgoDex 虽然有大量帧数,但来自 lab environment,环境变化有限;OXE 规模大但主要是 gripper-based robot data,任务、对象、embodiment 与 dexterous hand 有 gap。VITRA 的优势来自“真实生活活动的广覆盖 + 显式 3D action label”,两者缺一不可。
Figure III 解读:附录中的 pretraining examples 展示了构造出的 hand V-L-A data:上排是重建的 3D hands,下排是从当前帧到 episode 结束的 hand action trajectory,颜色从紫到黄表示时间推进。这类 visualization 说明数据不是只有文本或视频,而是包含可监督的 3D temporal action。
Figure IV 解读:附录 Figure IV 继续展示 hand V-L-A data 的多样性,包含不同物体、不同背景和不同操作阶段。它与 Figure III 一起说明 1M episodes 不是单一任务的重复采样,而是把真实生活视频切成大量短动作片段,每段都带有 3D hand trajectory 与语言标签。
5.2 Human hand action prediction:数据、augmentation、causal attention 都有贡献
Table 1 是最直接的主结果和消融。Ours 在 grasping 上达到 8.8 / 6.2 cm 的 avg./median ,general action user score 为 1.91。相比之下,Being-H0 (8B) 为 19.1 / 18.4 cm 和 0.15;Human annotation baseline 为 14.1 / 14.1 cm 和 0.96;Lab data (EgoDex) 为 17.6 / 18.3 cm,general action 未报告。No augmentation 退化到 11.6 / 10.7 cm 和 1.43;Bidirectional attention 退化到 9.3 / 7.2 cm 和 1.69。这些数字说明:真实人手数据的自动构造、trajectory-aware augmentation、causal denoising 都不是装饰性模块,而是在 unseen environments 上实际影响动作质量。
| Method | Grasp Avg./Med. (cm) ↓ | General action User Score ↑ |
|---|---|---|
| Initial position | 20.0 / 20.0 | — |
| Being-H0 (8B) | 19.1 / 18.4 | 0.15 |
| Lab data (EgoDex) | 17.6 / 18.3 | — |
| Human annotation | 14.1 / 14.1 | 0.96 |
| No augmentation | 11.6 / 10.7 | 1.43 |
| Bidirectional attention | 9.3 / 7.2 | 1.69 |
| Ours | 8.8 / 6.2 | 1.91 |
Table 2 检验 episode construction strategy。在 350K episodes 子集上,Fixed-interval segmentation 的 grasping distance 为 10.5 / 8.8 cm,No trajectory overlay 为 11.7 / 10.7 cm,Ours† 为 9.9 / 8.1 cm。这直接支持方法部分的两个关键判断:用 wrist speed minima 做 atomic segmentation 比固定时间切片好;在 GPT captioning 中给出 projected hand trajectory 能提升 instruction-action alignment。
| Episode construction strategy | Grasp Avg./Med. (cm) ↓ |
|---|---|
| Initial position | 20.0 / 20.0 |
| Fixed-interval segmentation | 10.5 / 8.8 |
| No trajectory overlay | 11.7 / 10.7 |
| Ours† | 9.9 / 8.1 |
Figure 7 解读:Figure 7 显示 hand action prediction 随预训练数据规模增加而稳定改善,且在 log scale 上近似线性下降。圆点大小表示视觉多样性,说明“更多 episodes”与“更高多样性”共同推动效果。EgoDex 即使 episode 数超过 VITRA 的一些子集,表现仍落后,强调数据环境多样性比单纯帧数更关键。
Figure V 解读:附录 Figure V 给出 unseen real-world environments 中的 grasping hand action prediction。时间从左到右推进,模型预测的手部轨迹能靠近目标物体并形成抓取趋势。这些 qualitative examples 与 Table 1 的距离指标互补,说明低 对应可解释的动作形态,而不是指标偶然下降。
Figure VI 解读:附录 Figure VI 展示 general action prediction。与 grasping 不同,这些动作不一定有明确的目标点距离,因此更依赖人类对动作意图和接触前后运动的判断。该图补足了 Table 1 的 user study 数字,说明 VITRA 的预测不只会接近物体,也能生成多种符合指令的手部操作轨迹。
5.3 真实机器人:VITRA 在 seen/unseen tasks 上显著优于 baselines
Table 3 是 seen real-world robot dexterous manipulation。Ours 平均成功率 71.0%,高于 的 46.9%、Latent action pretrain 的 46.0%、OXE pretrain 的 41.3%、No VLA pretrain 的 32.1% 和 VPP 的 24.8%。分任务看,Ours 在 Pick & place 80.0%、Functional grasp 66.7%、Pour 75.0%、Sweep 62.5%。其中 Pour 与 同为 75.0%,Sweep 与 Latent action pretrain 同为 62.5%,但 Ours 的平均显著更高,说明优势不是单一任务驱动。
| Method | Pick & place | Functional grasp | Pour | Sweep | Average |
|---|---|---|---|---|---|
| VPP | 57.5 | 29.2 | 12.5 | 0.0 | 24.8 |
| 37.5 | 25.0 | 75.0 | 50.0 | 46.9 | |
| No VLA pretrain | 32.5 | 33.3 | 12.5 | 50.0 | 32.1 |
| Latent action pretrain | 42.5 | 41.7 | 37.5 | 62.5 | 46.0 |
| OXE pretrain | 40.0 | 37.5 | 62.5 | 25.0 | 41.3 |
| Ours | 80.0 | 66.7 | 75.0 | 62.5 | 71.0 |
Table 4 是更重要的 unseen robot evaluation。Ours 平均成功率 64.6%,而 为 16.1%,No VLA pretrain 为 10.9%,OXE pretrain 为 7.8%,VPP 为 5.2%,Latent action pretrain 为 0.0%。尤其在 unseen category & background 的 Pick & place 中,Ours 达到 70.8%,显著超过 的 33.3%。这表明 VITRA 的 human-video pretraining 不是只改善 seen-object imitation,而是增强了对新对象、新背景、新类别的泛化。
| Method | Unseen Obj Pick & place | Unseen Obj Functional grasp | Unseen Obj Pour | Unseen Category Pick & place | Average |
|---|---|---|---|---|---|
| VPP | 12.5 | 0.0 | 0.0 | 8.3 | 5.2 |
| 0.0 | 6.2 | 25.0 | 33.3 | 16.1 | |
| No VLA pretrain | 31.2 | 0.0 | 0.0 | 12.5 | 10.9 |
| Latent action pretrain | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| OXE pretrain | 12.5 | 6.3 | 0.0 | 12.5 | 7.8 |
| Ours | 68.8 | 68.8 | 50.0 | 70.8 | 64.6 |
Figure 10a–10c 解读:Figure 10 把 robot task success 与 pretraining data scale、visual diversity、hand-prediction accuracy 联系起来。seen 和 unseen pick-and-place 都随数据规模增加而提升;第三个子图显示 robot performance 与 human-hand prediction accuracy 有正相关,因此作者认为 hand action prediction benchmark 可作为下游 robot performance 的快速 proxy。
Figure VII 解读:附录 Figure VII 展示 in-domain execution trajectories,包括 general pick-and-place 与 functional grasping。它说明在 seen objects/backgrounds 下,VITRA 能把 high-level language instruction 转成连续的手臂与 dexterous hand motion,而不只是末端位置移动。
Figure VIII 解读:附录 Figure VIII 展示 unseen background/objects 下的执行轨迹。它与 Table 4 对应,强调模型在新背景和新对象中仍能保持动作结构,例如接近、抓取、移动到目标区域,而不是完全依赖 fine-tuning scenes 的视觉记忆。
Figure IX 解读:附录 Figure IX 展示 sweeping、pouring 和 bimanual dexterous handover 等 sequential tasks。虽然 VITRA 的基础训练强调 atomic-level episodes,但这些结果表明,经 fine-tuning 后模型能被用于较长任务链;不过论文没有声称模型本身解决 high-level planning,长任务仍依赖任务设计和执行流程。
5.4 结论、限制与阅读要点
实验总体证明三点。第一,把 in-the-wild human hand videos 自动转换为 VLA episodes 是可行的,并且比使用原始 human annotations 或固定时间切片更适合作为 action supervision。第二,显式 3D action pretraining 比 latent action pretraining 更能迁移到真实 dexterous robot;latent action baseline 在 unseen robot settings 中平均为 0.0%,说明背景/任务无关因素可能被混入 latent 中,导致泛化失败。第三,pretraining data scale 与 downstream robot success 之间存在一致正相关,支持继续扩大 human activity video pretraining 的路线。
论文也有明显边界。它依赖多个上游模块:intrinsics estimation、hand reconstruction、camera pose tracking、GPT captioning、SAM-2/object annotation benchmark、teleoperation retargeting;其中任一模块的错误都会进入最终数据。作者承认 3D motion labels 不一定完美,但认为预训练阶段可以容忍一定噪声,因为目标是学习 common knowledge、motion patterns 和环境/对象覆盖。另一限制是 human-to-robot alignment 仍需要真实机器人 fine-tuning;VITRA 不是零样本把人手视频直接变成任意机器人控制器,而是通过 human VLA pretraining 缩小后续 fine-tuning 的数据需求。最后,released code 已公开模型、数据和训练框架,但论文实际 80K/20K stopping schedule 未在 JSON 中直接体现;复现时需要参考 paper text 或作者提供的 checkpoint,而不能只运行默认 max_steps=2000000 配置。