数据、训练与评估¶
VLA 的能力来自机器人演示数据。模型不是“懂物理”后自动会动,而是在大量“观测-指令-动作”轨迹里学会哪些视觉语言状态对应哪些动作。
1. 一条机器人数据长什么样?¶
一条 episode 通常表示一次完整任务,例如“把方块放进盒子”。它包含:
| 字段 | 含义 |
|---|---|
image |
相机图像,可能有多个视角 |
instruction |
自然语言任务描述 |
state |
关节角、末端位姿、夹爪状态 |
action |
下一步动作或未来动作块 |
reward/success |
可选,任务是否成功 |
is_terminal |
episode 是否结束 |
timestamp |
时间同步信息 |
监督学习视角下,一条训练样本可以写成:
也就是给定当前观测、语言和状态,预测专家下一步动作。
1.1 一个 step 的具体样子¶
概念上,一步数据可以写成:
observation:
image_primary: RGB image
image_wrist: RGB image
state:
joint_positions: [q1, q2, ...]
end_effector_pose: [x, y, z, qw, qx, qy, qz]
gripper: 0.0
language_instruction: "把红色方块放进盒子"
action:
world_vector: [dx, dy, dz]
rotation_delta: [droll, dpitch, dyaw]
gripper_closedness_action: 1.0
is_terminal: false
timestamp: 12.34
训练时不会真的都长这样,但你要能在任何数据格式里找到这些信息:
- 当前看到了什么。
- 当前机器人自己在哪里。
- 人类给的任务是什么。
- 专家下一步做了什么。
1.2 从 Episode 到训练样本¶
一条 episode 有 \(T\) 帧:
如果训练下一步动作,样本是:
如果训练 action chunk,样本是:
这会让模型一次学未来 \(H\) 步动作,执行时更平滑,但也要求数据频率和 chunk 长度设计合理。
2. 行为克隆:VLA 的基础训练目标¶
最基础的 VLA 训练就是行为克隆(Behavior Cloning):
离散动作 token 用交叉熵:
连续动作用 MSE、负对数似然、diffusion loss 或 flow matching loss。
行为克隆的本质
行为克隆就是“看专家怎么做,然后拟合专家动作”。它简单、稳定、可扩展,是当前很多 VLA 的底层训练方式。
2.1 Teacher Forcing¶
离散动作 token 训练时,常用 teacher forcing:
训练时模型总能看到专家历史,推理时却只能看到自己生成的历史。这会带来分布偏移:
一步小错可能让机器人到达专家数据里没见过的状态,后面错误继续放大。
2.2 离线 loss 为什么不够?¶
行为克隆可能出现:
- 验证集 loss 很低,但实机失败。
- 图像问答很好,但抓取失败。
- 单步动作看着合理,连续执行抖动。
原因是 VLA 任务是闭环控制。评估必须看机器人执行后的下一帧,而不是只看离线动作误差。
2.3 常见训练目标¶
| 动作形式 | 训练目标 | 适合 |
|---|---|---|
| 离散动作 token | Cross Entropy | OpenVLA/RT-2 类自回归模型 |
| 连续动作 | MSE / L1 | 小型 BC baseline |
| 高斯动作分布 | NLL | 动作有不确定性时 |
| Diffusion action chunk | Denoising loss | 多峰、平滑连续动作 |
| Flow action chunk | Flow matching loss | 高效连续动作生成 |
3. 重要数据集与格式¶
3.1 Open X-Embodiment¶
Open X-Embodiment(OXE)把多个机构、多个机器人、多个任务的数据汇总成大规模机器人学习数据集。它的重要意义不是“某个任务特别强”,而是让跨机器人、跨任务的 generalist policy 成为可能。
你需要关注:
- 不同机器人动作空间不一样。
- 不同相机视角和频率不一样。
- 语言标签粒度不一样。
- 数据分布非常不均衡。
3.2 RLDS¶
RLDS 是 Google 系机器人数据常用格式,常和 TensorFlow Datasets 一起使用。它把数据组织成 episode 和 step,适合存储轨迹。
概念上可以理解为:
Dataset
Episode 1
Step 1: observation, action, reward, is_first, is_last
Step 2: observation, action, reward, is_first, is_last
Episode 2
...
3.3 LeRobot¶
LeRobot 更适合新手和工程实践。它覆盖数据采集、数据集存储、可视化、训练和推理,并且支持低成本机器人平台。想快速跑通“采数据 -> 训练 -> 推理”,优先看 LeRobot。
4. 数据采集¶
4.1 遥操作¶
常见采集方式:
- 手柄/键盘控制机械臂。
- 主从机械臂遥操作。
- VR 设备或 3D 鼠标。
- 人手示范视频再做动作恢复。
遥操作数据的核心不是“采很多”,而是“采得一致”:
- 任务起始状态要有多样性。
- 成功轨迹要覆盖不同物体位置。
- 失败轨迹要标注清楚,不要混进成功数据。
- 相机、机器人和动作时间戳要同步。
4.2 语言标注¶
语言指令可以有不同粒度:
| 粒度 | 示例 | 适用 |
|---|---|---|
| 任务级 | 把红色方块放进盒子 | 最常见 |
| 子任务级 | 接近方块、闭合夹爪、移动到盒子 | 长程任务 |
| 状态反馈 | 已经抓住方块 | 进度判断、层级策略 |
对新手项目,先用任务级语言就够了。等模型能稳定完成短任务,再加入子任务标签。
5. 数据预处理¶
5.1 图像处理¶
- 统一分辨率。
- 保持相机视角一致。
- 记录相机内参/外参。
- 做必要的数据增强,但不要破坏空间关系。
图像预处理要特别注意:
| 操作 | 风险 |
|---|---|
| 随机裁剪 | 可能把目标物体或夹爪裁掉 |
| 水平翻转 | 左右关系和机器人坐标系可能反了 |
| 强颜色增强 | 颜色指令任务可能被破坏 |
| resize 过小 | 小物体只剩几个像素,ViT patch token 无法保留 |
对机器人任务,增强不是越多越好。任何会改变空间关系、颜色语义或相机几何的增强,都要谨慎。
5.2 动作归一化¶
动作通常需要归一化到固定范围,例如 \([-1,1]\)。常见做法:
或按最大最小值缩放:
注意:如果异常动作进入统计,会让正常动作被压得很小,模型会学得很差。
5.3 频率重采样¶
如果数据是 30Hz,底层控制是 100Hz,模型推理是 5Hz,就必须设计清楚:
- 模型每次预测几步?
- 每步动作持续多久?
- 低层控制器如何插值?
- 新观测来了以后是否覆盖旧动作?
5.4 数据质量检查¶
训练前建议逐条可视化并检查:
| 检查项 | 问题表现 |
|---|---|
| 图像-动作同步 | 夹爪已经闭合,但动作标签还在接近 |
| 坐标系方向 | 模型总是向目标反方向移动 |
| 动作尺度 | 输出太小不动,太大乱撞 |
| 夹爪标签 | 到目标前提前闭合,或抓住后又打开 |
| 成功/失败混杂 | 模型学到失败示范 |
| 语言标签 | 指令说红色,轨迹实际抓蓝色 |
先做 overfit 小测试
用 5 到 10 条轨迹训练到几乎记住。如果小数据都学不会,优先查数据格式、动作归一化、坐标系和训练目标。
6. 微调与部署¶
6.1 全量微调¶
全量微调效果可能好,但显存和数据要求高,也更容易过拟合小数据集。
6.2 LoRA/PEFT¶
LoRA 只训练低秩适配矩阵:
其中 \(A,B\) 是小矩阵。优点是显存占用低,适合在自己的小数据上微调大模型。
6.3 量化¶
量化把权重从 FP16/BF16 压到 INT8/INT4,降低显存和推理成本。上机器人时要重新验证成功率,因为微小数值误差可能影响连续控制。
7. 评估指标¶
VLA 不能只看训练 loss。更重要的是实机/仿真任务表现:
| 指标 | 含义 |
|---|---|
| 成功率 | 任务是否完成 |
| 平均完成时间 | 是否高效 |
| 碰撞/越界次数 | 是否安全 |
| 动作平滑性 | 是否抖动 |
| 泛化能力 | 新物体、新位置、新背景是否能做 |
| 语言泛化 | 换一种说法是否仍能理解 |
| 恢复能力 | 中途被打断后是否能继续 |
推荐评估集划分¶
| 集合 | 示例 |
|---|---|
| Seen | 训练中出现过的物体和位置 |
| Unseen object | 新物体 |
| Unseen layout | 新位置和遮挡 |
| Unseen instruction | 同义指令或更长指令 |
| Disturbance | 中途移动物体或人为干扰 |
8. Sim-to-Real¶
仿真能降低成本,但现实差异很大:
- 图像渲染差异。
- 摩擦、质量、碰撞模型不准。
- 夹爪柔性和物体形变难模拟。
- 相机延迟和控制延迟。
常见缓解方法:
- Domain randomization:随机纹理、光照、相机位姿、物理参数。
- System identification:让仿真参数贴近实机。
- Real data fine-tuning:用少量真实数据微调。
- Safety wrapper:实机外层加限幅、碰撞检测和人工接管。
9. 最小可行训练路线¶
对新手,建议不要一开始训练大 VLA。更稳的路线是:
- 选一个短任务:例如抓方块、推按钮、放杯子。
- 采 50 到 200 条成功遥操作轨迹。
- 可视化每条轨迹,删掉时间戳错乱和失败数据。
- 先训练小型行为克隆策略,确认动作空间和控制接口没问题。
- 再切到 SmolVLA/Octo/OpenVLA 微调。
- 在仿真或低速实机验证,逐步提高速度和难度。
上实机前必须检查
模型输出任何异常值时,底层控制器都应该能限幅、停止或交给人工接管。不要让神经网络直接拥有无限制的电机控制权。