跳转至

VLA 实践路线

新手学 VLA 最容易卡在“论文都懂一点,但不知道从哪里动手”。实践路线的目标是先跑通最小闭环,再逐步接近 OpenVLA/SmolVLA/Octo 这类模型。


1. 总原则

先把问题拆小:

看懂图像 -> 读懂数据 -> 训练小策略 -> 接入仿真 -> 微调 VLA -> 上实机

不要一开始就追求“通用机器人”。一个能稳定完成单任务的小系统,比一个跑不起来的大模型更有学习价值。


2. 阶段一:环境准备

建议准备:

  • Python/PyTorch 基础环境。
  • Hugging Face Transformers/Datasets。
  • LeRobot。
  • 一个仿真环境:MuJoCo、Isaac Sim、LIBERO 或简化桌面环境。
  • 可选硬件:低成本机械臂、夹爪、RGB 相机。

你要能完成:

  • 运行一个 VLM,输入图片并得到文字回答。
  • 加载一个机器人数据集,播放图像和动作。
  • 把一段动作序列画成曲线。
  • 在仿真中控制机械臂移动到目标位姿。

3. 阶段二:做数据可视化

先不要训练模型,先看数据。

对每条 episode 可视化:

  • 图像帧。
  • 语言指令。
  • 末端位置轨迹。
  • 姿态变化。
  • 夹爪开合曲线。
  • 是否成功。

你应该能回答:

  • 动作单位是什么?
  • 坐标系是什么?
  • 一秒多少帧?
  • 夹爪什么时候闭合?
  • 图像和动作是否同步?

数据可视化是最划算的调试

很多训练失败不是模型不行,而是数据时间戳错、动作方向反了、夹爪标签错了、坐标系混了。可视化能最快暴露这些问题。


4. 阶段三:训练一个小型行为克隆策略

先做最小模型:

图像编码器 + 状态编码器 + MLP/Transformer -> 下一步动作

任务可以非常简单:

  • 抓取固定颜色方块。
  • 把物体推到指定区域。
  • 从 A 点移动到 B 点。

训练目标:

\[ \min_\theta \| \pi_\theta(o_t, s_t) - a_t \|^2 \]

这一阶段的目标不是打败 OpenVLA,而是确认:

  • 数据能被正确加载。
  • 动作归一化没问题。
  • 仿真或实机控制接口正确。
  • loss 下降后策略确实更像专家。

5. 阶段四:加入语言条件

当单任务能跑通后,加入语言指令:

图像 + 状态 + “抓红色方块” -> 动作
图像 + 状态 + “抓蓝色方块” -> 动作

最小任务设计:

  • 桌上有两个颜色不同的方块。
  • 指令指定颜色。
  • 机器人抓取对应方块。

这样能测试 VLA 的核心:语言是否真的改变动作,而不是模型只记住一个固定目标。


6. 阶段五:使用开源 VLA

6.1 先跑推理

选择 SmolVLA、Octo 或 OpenVLA 中的一个,先只做推理:

  • 加载模型。
  • 输入图像和语言。
  • 输出动作。
  • 检查动作范围和频率。

6.2 再做微调

微调步骤:

  1. 把自己的数据转成模型需要的格式。
  2. 检查动作归一化和反归一化。
  3. 用少量数据做 overfit 测试。
  4. 再扩大到完整训练集。
  5. 在仿真或离线回放中评估。

Overfit 测试

先让模型在 5 到 10 条轨迹上过拟合。如果连这都学不会,通常是数据格式、动作尺度或训练目标有问题。


7. 阶段六:仿真验证

上实机前,先在仿真中检查:

  • 是否撞桌子。
  • 是否经常超过关节限位。
  • 动作是否抖动。
  • 目标物体位置变化后是否还能完成。
  • 中途扰动后是否能恢复。

仿真任务不要只测一个初始状态。至少随机:

  • 物体位置。
  • 光照/纹理。
  • 相机视角轻微偏移。
  • 目标语言表达。

8. 阶段七:实机部署

实机部署要慢:

  1. 空载运行,确认动作方向。
  2. 限制速度和加速度。
  3. 加软限位和工作空间边界。
  4. 人手靠近急停按钮。
  5. 先执行短 action chunk。
  6. 成功后逐步增加任务难度。

实机安全层

必须有:

  • 关节位置限位。
  • 最大速度/加速度限制。
  • 末端工作空间限制。
  • 夹爪力限制。
  • 碰撞检测或至少电流异常停止。
  • 人工接管。

9. 推荐项目顺序

项目 目标 学到什么
图像问答桌面场景 VLM 感知 物体、位置、关系理解
可视化 LeRobot 数据 数据理解 episode、step、action、state
固定目标抓取 BC 行为克隆 数据到动作
语言指定颜色抓取 VLA 最小闭环 语言影响动作
SmolVLA/Octo 微调 开源模型实践 迁移与微调
OpenVLA 源码阅读 大模型 VLA action tokenizer、LoRA、量化

10. 学习节奏

第 1 周:VLM 和数据

  • 跑 VLM 图像问答。
  • 阅读 VLA 入口页和 VLM 基础。
  • 可视化一个机器人数据集。

第 2 周:动作表示

  • 学末端位姿、关节空间和动作归一化。
  • 写一个动作 binning 和反 binning 小脚本。
  • 画出 action chunk 曲线。

第 3 周:小策略训练

  • 训练小型行为克隆策略。
  • 做 overfit 测试。
  • 在仿真中执行动作。

第 4 周:开源 VLA

  • 阅读 OpenVLA/SmolVLA/Octo 之一。
  • 跑通推理。
  • 用自己的小数据尝试微调。

11. 遇到问题怎么排查

现象 常见原因
loss 降不下去 数据格式错、动作未归一化、学习率不合适
loss 很低但执行失败 分布偏移、复合误差、仿真和现实不一致
动作方向反了 坐标系或符号约定错
夹爪乱开合 夹爪标签不一致、延迟未对齐
动作抖动 逐步预测噪声大、缺少滤波或 chunk
新位置失败 数据多样性不足
指令换说法失败 语言标签太单一

12. 最小闭环完成标准

当你能做到下面这些,就算真正入门 VLA 了:

  • 能解释 VLM、VLA、动作头、行为克隆之间的关系。
  • 能打开一个机器人数据集并看懂 episode。
  • 能说明自己的动作空间和坐标系。
  • 能训练一个小策略并在仿真中执行。
  • 能读懂 OpenVLA 或 SmolVLA 的推理流程。
  • 知道上实机前必须加哪些安全限制。