

InternVLA-M1 论文精读:用空间先验连接 VLM 推理与机器人动作
精读 InternVLA-M1:通过 230 万条空间 grounding 数据、空间提示和双监督训练,让 Qwen2.5-VL 的空间推理迁移到 DiT 动作专家。
InternVLA-M1 把空间 grounding 作为 instructions 与动作之间的中间语言:先用 230 万条 box、point、trajectory 数据训练 Qwen2.5-VL,再用空间提示和 DiT Action Expert 联合学习,从而提升未见物体、布局、指令和长时程任务的泛化。
1. 论文概述#
【Paper】 InternVLA-M1 的问题意识很直接:机器人要执行“把红色玩具放进盒子”时,VLM 需要知道的不只是“是什么”,还包括“在哪里”和“怎样移动”。论文把空间 grounding 设为 instruction 与 embodiment-specific action 之间的桥梁,提出一个双系统(dual-system)VLA:慢而可靠的 VLM Planner 负责空间推理,快而专门化的 DiT Actor 负责连续控制。

一句话总结#
【Analysis】 这篇论文真正训练的不是“更大的动作头”,而是一种可迁移的空间中间表示:先让模型学会把语言落到 box、point 和 trajectory,再让动作专家读取这些空间先验,生成某个机器人能执行的 action chunk。
核心贡献#
【Paper】
- 提出空间引导的两阶段 recipe:
spatial grounding pre-training训练 VLM Planner,spatially guided action post-training训练 VLA。 - 构建超过 3M 的多模态数据,其中超过 2.3M 条是 box、point、trajectory 等空间 reasoning 数据;另用 InternData-M1 生成 244K 个可验证的 pick-and-place episode。
- 用
spatial prompting显式激活 VLM 的空间能力,并用 co-training 同时优化语言理解与机器人动作。 - 在 SimplerEnv、LIBERO、大规模 200-task 仿真和真实 Franka/ARX LIFT2 任务上验证未见物体、未见布局、未见指令和长时程重规划能力。
【Code】 官方仓库同时发布 Qwen2.5-VL-3B、DiT Action Header、DINOv2、多视角推理、SimplerEnv/LIBERO/真实机器人接口,以及 Hugging Face checkpoint。
2. 背景与相关工作#
【Paper】 直接把 VLM 当作 Policy 通常有两个瓶颈。第一,文本 token 并不是连续控制的自然表示,离散化动作会损失精度;第二,机器人数据规模远小于互联网图文数据,模型容易学到局部 motor pattern,却没有学会绝对位置、相对关系、affordance 和轨迹等可迁移先验。
已有层级系统会用检测器、分割器或手工 planner 显式处理空间信息,但 rule-based 分解难以覆盖开放世界指令。另一类 VLA(如 OpenVLA、、GR00T)直接从视觉和语言预测动作,端到端更简洁,却没有把空间推理作为独立训练目标。InternVLA-M1 的折中是:保持端到端联合优化,但在模型内部保留一个明确的 spatial prior 训练通道。
【Analysis】 因此它与普通“VLM + action head”的差别不在于多了一个 projector,而在于改变了监督信号的组织方式:grounding 数据不再只是预训练背景,而是和 action loss 一起约束共享的 Planner。
3. 问题定义#
【Paper】 给定多视角 RGB 观测 与自然语言指令 ,模型输出长度为 的连续动作块:
在主要设置中,7 维动作是末端执行器的平移增量、旋转增量和夹爪状态;具体控制空间会随 benchmark 使用 delta end-effector 或 delta joint space。论文使用单目/双目 RGB 输入,代码的公开 action demo 默认接收两个视角。
【Paper】 空间 grounding 任务则把图像和指令映射到 box、point、trajectory 或 QA 文本。点坐标归一化为绝对坐标,box 常以 [x1,y1,x2,y2] 的 JSON/XML 形式输出。
| 项目 | InternVLA-M1 设置 |
|---|---|
| Planner | Qwen2.5-VL-3B-Instruct |
| Action Expert | 86M Diffusion Policy/DiT(公开配置为 DiT-B) |
| 额外视觉编码器 | DINOv2 ViT-S/14,约 21M 参数 |
| 总参数量 | 约 4.1B |
| Action chunk | 16 步(当前动作 + 15 个 future actions) |
| 主要数据 | 3M+ 多模态数据、244K InternData-M1 仿真 episode |
| 部署 | 单张 RTX 4090,约 12GB;论文报告 VLM 约 10 FPS |
【Code】 internvla_cotrain_oxe.yaml 将 action_dim 设为 7、future_action_window_size 设为 15、action_model_type 设为 DiT-B,并把 VLA 输入图像调整为 224×224。
4. 方法#
4.1 Overall Architecture#

【Paper】 Stage 1 只训练 VLM Planner,使其获得 embodiment-agnostic spatial prior;Stage 2 以 spatial prompt 激活这些先验,并把 Planner 的 latent planning tokens 交给 DiT Actor,联合学习“where to act”和“how to act”。
4.2 核心模块#
VLM Planner:空间先验的载体#
- 输入:RGB 图像、任务指令,以及训练时附加的空间提示。
- 输出:语言 head 的 grounding/QA 输出,以及供动作专家使用的 latent condition。
- 作用:通过 Qwen2.5-VL 的视觉-语言融合,把“目标物、容器、相对位置、轨迹约束”编码成可迁移特征。
【Paper】 论文把 Planner 解释为 System 2:它不直接输出关节动作,而是先形成可靠的空间计划。空间提示的例子是“Identify all relevant toys and their spatial relationships to the container.”,模型不必把这段辅助思考显式回答出来,但它会改变条件特征。
DINOv2 视觉分支#
- 输入:每个视角的 224×224 RGB 图像。
- 输出:密集视觉 token,经线性层投影到 Qwen hidden size。
- 为什么需要:Qwen2.5-VL 提供开放语义,DINOv2 补充对物体局部形状和空间细节更稳定的视觉表征。
【Code】 InternVLA/model/framework/M1.py 调用 prepare_dino_input 后把多视角 token reshape 成 [B, views×tokens, D],再经过 dino_pro 投影。这个显式 DINO 分支是代码实现中的关键细节,不能简化成“只用 Qwen 图像 token”。
Layerwise Q-Former:把 Planner 变成固定长度条件#
- 输入:Qwen 最后若干层 hidden states 与 DINO token。
- 中间模块:每一层用 cross-attention 更新 64 个 learnable query tokens。
- 输出:固定长度的 action condition,维度与 DiT hidden size 对齐。
- 为什么需要:VLM token 长度会随图像和文本变化,动作专家则更适合接收固定大小的条件序列。
【Code】 LayerwiseQFormer 先把 hidden states 投影到 768 维,再逐层 cross-attend;公开 OXE 配置只选 Qwen 的第 36 层(start_layer=36, end_layer=37),所以配置中的“layerwise”当前实际上是单层聚合。代码还定义了 scale_hook,但 forward 没有调用它,意味着配置里的 grad_scale: 0.5 在当前公开路径中不一定真正生效;这是论文叙述与仓库实现需要区分的地方。
DiT Action Expert:连续动作生成器#
- 输入:带噪的 16×7 action sequence、diffusion timestep、Q-Former condition。
- 输出:噪声预测 ,经反向扩散得到 normalized action chunk。
- 作用:用 temporal self-attention 建模动作相关性,用 diffusion 表达同一场景下多个可行轨迹。
公开代码提供三种规模:
| 变体 | 深度 | hidden/token size | heads | 论文参数量 |
|---|---|---|---|---|
| DiT-S | 6 | 384 | 4 | 13M |
| DiT-B | 12 | 768 | 12 | 89M |
| DiT-L | 24 | 1024 | 16 | 308M |
【Analysis】 这里的“动作专家”不是把空间坐标直接硬编码到控制器,而是让 DiT 学会把空间条件转换为某个 embodiment 的连续运动分布;因此同一个 Planner 可以在下游换用不同 action dataset 和控制空间。
4.3 关键公式#
扩散动作目标#
前向过程把真实动作 加噪为:
DiT 接收 ,其中 是 Q-Former 输出的空间条件,并预测噪声:
【Code】 ActionModel.forward 随机采样 timestep 和 Gaussian noise,调用 q_sample 生成 ,再由 DiT 预测噪声;loss() 就是逐元素 MSE,没有额外的 VLB 项。
双监督目标#
其中 是 grounding/QA 的 next-token prediction, 控制空间监督的相对权重。论文强调两个梯度在同一更新中聚合,以避免 Planner 和 Action Expert 完全割裂。
【Code】 train_internvla_cotrain.py 先对 VLA batch 调用 model.forward,再对 VLM batch 调用 qwen_vl_interface,分别 backward;OXE 配置中 vlm loss scale 为 0.1,并统一执行 gradient clipping 和 AdamW 更新。
4.4 Training#
【Paper】 训练分成两阶段:
- Spatial grounding pre-training:使用 General QA(约 637K)、Box QA(约 879K)、Trajectory QA(约 684K)和 Point QA(约 832K),合计超过 3M 样本,其中空间数据超过 2.3M。
- Spatially guided action post-training:在机器人 demonstration 上训练 DiT,并交替/联合采样 spatial grounding batch;空间提示把 instruction 改写为带有“定位关键物体/关系”的输入。
【Paper】 InternData-M1 的仿真引擎使用 14K 标注物体、211 张桌面、1.6K 纹理和 87 个 dome lights。规划、物理验证和渲染解耦:只有通过闭环执行和 scene-graph validator 的 episode 才会进入数据集。
- 从 grounding dataloader 取图像-问题-答案样本,从 VLA dataloader 取多视角图像、指令和 16 步动作。
- 给 VLA 指令附加 spatial prompt;用 Qwen2.5-VL 与 DINOv2 提取多层/多视角特征。
- Layerwise Q-Former 将可变长度特征压缩成固定长度 condition,DiT 对动作加噪并预测噪声。
- 计算 ,同时对 grounding batch 计算 ,聚合梯度并更新 AdamW。
4.5 Inference#
【Code】 predict_action 将 instruction 转为小写,按训练分辨率处理每个视角,然后重复训练时的 Qwen+DINO+Q-Former 特征提取。动作从 Gaussian noise 开始,默认支持 DDIM;开启 cfg_scale > 1 时,代码把有条件与 null condition 拼接做 classifier-free guidance。README 的示例使用 cfg_scale=1.5、DDIM 10 steps。
真实机器人接口随后读取第一个 action,做 unnormalization,并可用 AdaptiveEnsembler 融合历史预测。代码中的 ensemble 是 cosine-similarity 加权,而不是简单的时间平均;LIBERO 接口则按 action chunk 逐步消费预测序列。
- 把图像和 instruction 编码为 Qwen hidden states,并用 DINOv2 提取密集视觉 token。
- 用 Q-Former 得到固定长度 spatial condition;从 Gaussian noise 初始化 16 步 action chunk。
- 运行 DDIM 反向扩散(可选 CFG)得到 normalized actions。
- 按 checkpoint 中的统计量反归一化,执行当前 action;将未消费的预测留给下一时刻的 chunking/ensemble。
4.6 代码实现对照#
| 论文描述 | 官方代码对应 | 需要注意的差异 |
|---|---|---|
| Qwen2.5-VL Planner | InternVLA/model/modules/vlm/QWen2_5.py | 使用 Qwen2.5-VL-3B-Instruct 配置 |
| 空间 latent adaptor | model/modules/projector/QFormer.py | 公开配置只聚合第 36 层,并拼接 DINO token |
| DiT Actor | model/modules/action_model/DiTActionHeader.py | 默认 DiT-B,7D、16-step action chunk |
| 双监督 | training/train_internvla_cotrain.py | action 与 VLM batch 分开 forward/backward 后同一 optimizer step |
| 空间提示 | config/training/*.yaml 的 CoT_prompt | 默认 prompt 要求输出目标物 bounding box |
| 梯度衰减 | 配置有 grad_scale: 0.5 | scale_hook 当前未在 Q-Former forward 中调用,不能直接视为已生效 |
| 推理部署 | examples/real_robot/controller_dual.py | 支持 action unnormalization、chunking、ensemble 和 Franka 控制 |
5. 实验#
5.1 Experimental Setup#
【Paper】 实验覆盖四类场景:SimplerEnv 的 Google Robot/WidowX、LIBERO Franka、包含 200 个任务和 3K+ 物体的 Isaac Sim,以及真实 Franka Research 3 和 ARX LIFT2。SimplerEnv 主要测试视觉匹配、颜色/纹理变化和跨机器人泛化;LIBERO 测试 Spatial、Object、Goal 和 Long 四种语言条件任务。

5.2 Main Results#
【Paper】 相对同一 Qwen2.5-VL-3B + DiT 的 Vanilla VLA,空间引导训练在 SimplerEnv 上带来明显提升:
| Benchmark | Vanilla VLA | InternVLA-M1 | 提升 |
|---|---|---|---|
| Google Robot Visual Matching | 66.1 | 80.7 | +14.6 |
| Google Robot Variant Aggregation | 63.5 | 76.0 | +12.5 |
| WidowX Visual Matching | 54.7 | 71.7 | +17.0 |
| LIBERO 平均 | 91.6 | 95.9 | +4.3 |
论文还报告 InternVLA-M1 超过 GR00T N1.5 和 的公开结果;在 LIBERO-Spatial、Object、Goal、Long 上分别为 98.0%、99.0%、93.8% 和 92.6%。这些数字支持的不是“所有任务都更强”,而是空间变化和长时程任务的优势更明显。
5.3 Ablation Study#

【Paper】 去掉 spatial data 和 spatial prompt 后,RefCOCO-g grounding 很快退化,SimplerEnv-WidowX 收敛也更慢;加入 spatially guided action post-training 后,两条曲线同时改善。论文用 Projection-space Similarity 衡量两个任务的梯度子空间:普通 co-training 约为 0.25,空间引导方案约为 0.42。
【Analysis】 这项 ablation 说明空间提示不是推理时的装饰词,而是一个优化接口:它让 action loss 更容易沿着与 grounding loss 相容的表示方向更新。
5.4 Generalization#

【Paper】 在 200-task 仿真中,加入 244K InternData-M1 mid-training 后平均提升 6.2%,并在 unseen objects、new backgrounds 和 paraphrased instructions 上稳定优于 与 GR00T N1.5。真实 clustered pick-and-place 中,sim-to-real co-training 对未见物体与新位置尤其有效,论文摘要报告未见物体/新配置最高提升 20.6%。

长时程任务包括桌面分类、抽屉整理、三明治制作、数学按钮选择和按价格购物。【Paper】 Ours-3B 的 planner scheduling 成功率为 90/91/91/93/92,超过 GPT-5、Gemini-2.5 Pro、GPT-4o 和 Qwen2.5-VL-72B;在物理干扰和中途新增指令时,性能下降也更小。
6. 方法分析#
6.1 为什么有效?#
【Analysis】 有三个互补原因:
- Grounding 数据把“目标是什么、在哪里、与什么有关系”变成了显式监督,弥补机器人 demonstration 的稀疏性。
- Spatial prompt 把同一空间能力重新激活到 action context,避免 VLM 预训练知识在 post-training 中被动作梯度冲掉。
- DiT 在连续 action sequence 上建模分布,而不是让 VLM 逐 token 生成精细控制;这更适合多模态轨迹和时间相关性。
6.2 核心创新#
【Paper】 最有价值的创新是训练 recipe,而不是单个网络层:spatial prior → spatial prompt → action expert 形成了一条从 embodiment-agnostic 语义到 embodiment-aware 控制的路径。仿真引擎则把这条路径扩展到更丰富的物体、纹理和布局。
6.3 与已有方法的本质区别#
【Analysis】 普通 VLA 把视觉语言和动作看作同一个 prediction head 的不同输出;InternVLA-M1 把它们看作“共享空间表征 + 专门动作解码”的两个时间尺度。System 2 规划 latent condition,System 1 以 action chunk 高频执行;这比外挂一个完全独立的 task planner 更容易端到端训练,也比单一 policy 更容易保留通用视觉语言能力。
6.4 关键假设#
- 【Paper】 空间 grounding 能跨 robot embodiment 迁移,动作专家只需学习平台相关的控制细节。
- 【Analysis】 Q-Former condition 足以压缩 Planner 的空间状态;如果任务依赖长历史、接触力或精确 proprioception,这个瓶颈可能不成立。
- 【Analysis】 仿真器的物体资产、相机标定和物理验证足够接近真实分布,否则 244K synthetic episodes 可能只是扩大了错误的先验。
7. 局限性#
7.1 作者明确提出的局限#
【Paper】 论文主要展示桌面抓取、放置、抽屉、三明治和按钮等任务;对移动机器人、双臂协同、力控和长时间持续任务没有系统评估。论文也没有给出完整的 failure taxonomy 或不同空间数据源的独立贡献分解。
7.2 自己分析得到的局限#
【Analysis】
- 论文声称的 gradient decay 与仓库实现存在不确定性:配置有
grad_scale,但公开 Q-Former forward 没有调用scale_hook,复现实验者需要自行确认 checkpoint 的实际训练路径。 - 训练与评测大量依赖 224×224 图像和 16-step chunk;更高分辨率、小物体、遮挡和快速接触动作可能暴露感知或控制瓶颈。
- 公开代码把 action normalization statistics 保存在 checkpoint 中,跨数据集切换控制空间时必须正确加载对应 key;否则模型看似能输出动作,实际尺度会错误。
- 长时程实验展示了很强的结果,但每个任务的 teleoperation 数据和 subtask 标注成本仍然不低,距离完全自动化的数据闭环还有差距。
8. 启发与研究思考#
【Analysis】 InternVLA-M1 给出的启发是,VLA 的规模化不一定首先来自更大的 backbone,也可以来自更好的“中间监督”。值得继续验证的方向包括:
- 用统一的 3D point/trajectory token 替代部分 2D box QA,让空间先验直接对齐深度和可达性。
- 让 Q-Former 动态选择不同 VLM 层,而不是当前 OXE 配置固定只取第 36 层。
- 将 gradient routing 从实验配置变成显式、可测试的模块,并报告不同衰减系数的 Pareto 曲线。
- 用在线场景图和不确定性估计触发 re-planning,使 System 2 不只在长时程任务开始时工作。
- 研究一个 Planner 迁移到多种 action expert、控制频率和 embodiment 的真正 zero-shot 边界。