TinyVLA:把 VLA 从「大模型」拉回「小而快」
🎯 为什么重要:VLA 的「两个老大难」被同时治了
RT-2 / OpenVLA 跑通了「VLM 当机器人脑」,但留下两个让人头疼的副作用:
💡 核心思想:VLM 出「条件」,Diffusion 出「动作」
TinyVLA 把 VLA 拆成两个各司其职的模块。VLM 部分冻结 + LoRA(保留预训练的视语先验),diffusion head 全参数训。整条前向只有三步:
这正是 OpenVLA 慢的根源:它把动作变 token,让 7B LLM 自回归地一个个吐。TinyVLA 改成「VLM 算一次条件 + diffusion 出整段动作」,省去了昂贵的自回归循环。
🛠️ 怎么做:四步搭出 TinyVLA
| 步骤 | 具体操作 | 为什么这么设计 |
|---|---|---|
| ① 训一个小 VLM | 用 Pythia(70M~1.4B)当语言后端,套 LLaVA 训练流程,在公开视语数据上预训练(不碰机器人数据) | 保留视语先验,参数量压到 1B 以下;避免 OpenVLA 那样必须吃 970K OpenX |
| ② LoRA 微调 | 冻结所有 VLM 权重,只在 attention 的 Q/K/V 上加 LoRA;可训参数只占 5% | 在少量机器人数据上不把 VLM 「冲坏」,保留语言/视觉理解力 |
| ③ 接 Diffusion Head | VLM 输出 → adaptive pooling + LayerNorm → 拼接 proprio → 3-layer MLP → 条件向量;diffusion head 全参数训 | 避免动作 token 化的精度损失;diffusion 天然支持多模态动作分布 |
| ④ 推理时合并 LoRA | 训练完做 re-parametrization,把 LoRA 矩阵并入主干 | 消除额外算子,进一步提速 |
论文 §V-C 做了关键实验:把 OpenVLA 的 7B VLM 换成 1B(同样自回归 token),单步延迟只从 292ms → 140ms(2× 提速);但 TinyVLA-1B(1B VLM + diffusion head)只要 14ms——再提速 10×。结论:「自回归 token」才是延迟瓶颈,不是 VLM 大小。换掉动作头比换 VLM 更划算。
📊 关键结果:小而快,反而更准
| 模型 | 预训练数据 | 总参数 | 可训参数 | 单步延迟 | 真机 5 任务均成功率 |
|---|---|---|---|---|---|
| Diffusion Policy | — | 111M | 111M | — | 35.3% |
| Multimodal Diffusion | — | 230M | 230M | — | 18.0% |
| OpenVLA | 970K OpenX | 7.2B | 195M | 292 ms | 68.3% |
| TinyVLA-S | 无(仅 VL) | 422M | 101M | — | 23.3% |
| TinyVLA-B | 无(仅 VL) | 740M | 138M | — | 77.4% |
| TinyVLA-H | 无(仅 VL) | 1.3B | 143M | 14 ms | 94.0% |
| 维度 | 结论(PDF 溯源) |
|---|---|
| 速度 | TinyVLA-H (14ms) vs OpenVLA-7B (292ms) = 20× 加速(论文 Fig.1 / Table IV) |
| 参数 | 1.3B vs 7.2B = 5.5× 瘦身,可训参数 143M vs 195M(TinyVLA 还略少) |
| 真机单臂 | 5 任务平均:94.0% vs OpenVLA 68.3%(+25.7%)。FlipMug / StackCubes 双双 98.3% |
| 真机双臂 (UR5) | 3 任务平均:TinyVLA-H 47.8%(76.7 / 36.7 / 30)vs DP 38.2% vs OpenVLA 0%(OpenX 只有单臂数据,OpenVLA 完全失效) |
| 仿真 (MetaWorld 50 任务) | TinyVLA-H 平均 31.6 vs DP 10.5(+21.1%)。Hard 任务 6× 提升(11.4 vs 1.9) |
| Scaling Law | S → B → H 性能单调上升;小 VLM 失败主因是「误读指令」(语言理解力不够) |
| 泛化 | 在 视角位移、背景、光照、干扰物、位置、外观、未见物体 7 个维度上接近或超过 OpenVLA——尽管没在 OpenX 上预训练 |
🌐 在领域中的位置
TinyVLA 在 VLA 演化中代表一个方向转折:从「越大越好」(RT-2 → OpenVLA → π0-Mini)转向「越小越快越好」。它继承了 RoboFlamingo 的「VLM + 独立动作头」解耦思路,又把动作头换成 Diffusion Policy——一次拿下了「快」和「准」。
❓ 常见误区
TinyVLA 是 OpenVLA 的精简版吗?
不只是。OpenVLA 把动作当 token 自回归生成;TinyVLA 把动作交给 diffusion head。论文 §V-C 的延迟分解证明:主要提速来自换头,不是换 VLM。架构范式不同。
它不做 OpenX 预训练,真的能泛化吗?
能,而且 7 个泛化维度(视角/背景/光照/干扰物/位置/物体/外观)多数情况下不输 OpenVLA。原因:VLM 在视语数据上的预训练已经带来了「世界知识」,diffusion head 只是适配器;OpenX 不是必需的。
为什么 OpenVLA 在双臂任务上完全失效?
因为 OpenX 只包含单臂数据,OpenVLA 的预训练先验对双臂无效。TinyVLA 不依赖 OpenX,反而避开了这个陷阱——双臂 UR5 三任务 47.8% vs OpenVLA 的 0%。
diffusion head 不会让推理变慢吗?
会,但远比「自回归 7 次」便宜。diffusion head 只有 ~10 步去噪,且 VLM 只跑一次出条件;OpenVLA 是每 token 都要过一次 7B LLM。TinyVLA-H 14ms vs OpenVLA 292ms(A6000)。
1.3B 的 VLM 够用吗?
论文 §V-A 失败模式分析:0.4B 版本主要失败在「误读指令」(语言理解不够);1.3B 版本解决了这个问题。再往 3B 升级主要改善「定位精度」(PaliGemma 有定位数据先验)。1.3B 是性价比拐点。