跳转至

VLA:视觉-语言-行动模型

VLA(Vision-Language-Action Model)是把“看见什么”“听懂什么”和“该怎么动”合到一起的机器人基础模型。它接收图像/视频、语言指令和可选的机器人本体状态,输出可以被机器人执行的动作。


一句话理解

传统机器人系统常常是:

感知 -> 建图/识别 -> 规划 -> 控制

VLA 想做的是:

图像 + 语言 + 机器人状态 -> 动作序列

也就是让模型直接学习:

\[ \pi_\theta(a_{t:t+H} \mid o_t, l) \]

其中 \(o_t\) 是当前观测,\(l\) 是自然语言任务,\(a_{t:t+H}\) 是未来一小段动作。这里的策略 \(\pi_\theta\) 不是只会输出文字的 LLM,而是能把多模态理解转成机器人动作的策略模型。

最重要的直觉

VLM 让模型知道“这是什么、在哪里、用户想干什么”,VLA 再把这种理解接到机器人动作空间里,让模型学会“下一步手应该怎么动”。


现有规划是否合理?

你原来的规划总体是合理的:先学 VLM,再学动作 token,再学数据与仿真,最后做微调和部署。这条主线正好对应 VLA 的四个核心问题:

问题 需要掌握
学 VLA 前要先分清哪些概念? policy、模仿学习、行为克隆、ACT、Diffusion Policy
模型如何看懂场景? VLM、视觉编码器、多模态对齐
模型如何输出动作? 动作空间、动作离散化、Diffusion/Flow 动作头
模型从哪里学动作? 遥操作数据、Open X-Embodiment、LeRobot、RLDS
如何落到自己的机器人? 行为克隆、微调、仿真验证、控制频率与安全约束

需要补强的地方主要有四点:

  1. 不要把 VLA 等同于“下一个动作 Token 预测”。OpenVLA、RT-2 走离散动作 token 路线,但 Octo、pi0、SmolVLA、GR00T N1 等更强调连续动作、diffusion 或 flow matching。
  2. 动作表示要单独学。VLA 的难点不只是接一个机械臂,而是把不同机器人、不同坐标系、不同控制频率的动作统一成模型可学习的表示。
  3. 新手实践优先用 LeRobot/SmolVLA 跑通闭环。OpenVLA 很适合读源码和理解大模型 VLA,但从零实践时成本较高。
  4. 评估与安全必须提前考虑。机器人模型不能只看 loss,要看成功率、碰撞、时延、抖动、分布外指令和失败恢复。

VLA 的核心运行流程

graph LR
    A[摄像头图像/视频] --> B[视觉编码器<br>ViT/SigLIP/DINOv2]
    C[语言指令] --> D[Tokenizer]
    E[机器人状态<br>关节角/夹爪/末端位姿] --> F[状态编码]
    B --> G[多模态融合]
    D --> G
    F --> G
    G --> H[VLM/LLM Backbone]
    H --> I{动作头}
    I -->|离散 token| J[反量化为动作]
    I -->|Diffusion/Flow| K[生成连续动作块]
    J --> L[低层控制器]
    K --> L
    L --> M[机器人执行]

1. 输入:观测和任务

典型 VLA 输入包含:

  • 视觉观测:腕部相机、第三视角相机、多相机或视频帧。
  • 语言指令:例如“把红色积木放进左边盒子”。
  • 机器人状态:关节角、末端位姿、夹爪开合、力/触觉等。

2. 中间:多模态理解

视觉编码器把图像切成 patch token;语言 tokenizer 把指令切成文本 token;投影层把视觉特征接入 LLM 的 token 空间。模型需要理解物体类别、空间关系、任务意图和当前进度。

3. 输出:动作表示

VLA 的输出不是自然语言,而是动作。常见动作包括:

  • 末端执行器增量:\(\Delta x, \Delta y, \Delta z, \Delta roll, \Delta pitch, \Delta yaw\)
  • 夹爪命令:打开、闭合或连续开合度
  • 关节命令:目标关节角、关节速度或力矩
  • 动作块:未来 \(H\) 步连续动作,减少逐 token 输出带来的延迟

知识地图

模块 你要搞懂的问题 对应笔记
前置知识 模仿学习、行为克隆、ACT 和 VLA 到底是什么关系? VLA 前置知识
VLM 基础 图像如何变成 LLM 能理解的 token?ViT/CLIP/SigLIP/DINOv2 各自做什么? VLM 基础
ViT 基础 图像如何被切成 patch token 并进入 Transformer? Vision Transformer
动作表示 连续控制信号如何变成 token 或动作块? 动作表示与策略头
数据与训练 一条机器人演示数据长什么样?怎么训练? 数据、训练与评估
模型谱系 RT-1/RT-2/OpenVLA/Octo/pi0/SmolVLA 各自解决什么问题? 典型模型与论文路线
实践路线 新手如何从环境搭建走到微调部署? 实践路线

推荐学习路线

阶段 0:补齐前置知识

  • 机器人学:坐标系、末端位姿、关节空间、笛卡尔空间、轨迹规划。
  • 深度学习:Transformer、注意力机制、tokenization、微调。
  • 强化学习/模仿学习:行为克隆、DAgger、Diffusion Policy 的基本思想。
  • 工程工具:PyTorch、Hugging Face、数据集可视化、仿真器基础。

阶段 1:打通 VLM 感知

  • 精读 Vision Transformer:理解 patch embedding、位置编码、self-attention、token 数和计算量。
  • 学 CLIP/SigLIP:理解图像-文本对齐为什么能让模型知道“红色杯子”对应图像中的哪类视觉区域。
  • 学 DINOv2:理解自监督视觉特征为什么更适合保留边界、局部纹理和几何线索。
  • 学投影层/Resampler:理解视觉 token 如何映射到 LLM hidden size,为什么 token 压缩会影响小物体和定位。
  • 跑一个开源 VLM,让它回答图像中的物体、位置、遮挡和空间关系。
  • 读 LLaVA/Qwen-VL 一类模型的结构,理解“视觉编码器 + 投影层 + LLM”。
  • 做一个小测试:输入桌面图片,要求模型指出“目标物体在哪里、应该从哪个方向接近”。

阶段 2:理解动作空间

  • 明确机器人动作到底是什么:末端位姿增量、关节角、速度、力矩还是夹爪状态。
  • 学离散动作 tokenization:把连续值切成 bins,再映射成 token。
  • 学 action chunking:一次预测未来多步,降低延迟并提升动作平滑性。
  • 学 diffusion/flow 动作头:为什么很多新 VLA 不再只输出离散 token。

阶段 3:读懂具身数据

  • 理解一条 episode:图像序列、语言指令、状态、动作、终止标记。
  • 了解 Open X-Embodiment/OXE、RLDS、LeRobot 数据格式。
  • 可视化一个小数据集:同步播放图像、末端轨迹、夹爪状态和语言指令。
  • 学会检查数据质量:时间戳、动作尺度、相机标定、失败示范、语言标签是否一致。

阶段 4:读模型与复现实验

  • 精读 RT-1:机器人 Transformer 和大规模真实机器人数据。
  • 精读 RT-2:把动作表示成文本 token 的 VLA 范式。
  • 精读 OpenVLA:开源 7B VLA、DINOv2 + SigLIP 视觉特征、LoRA/量化。
  • 对比 Octo、pi0、SmolVLA:连续动作、flow matching、轻量部署与新手实践。

阶段 5:跑通自己的小闭环

建议路线:

  1. 先用 LeRobot 跑数据集可视化和已有策略推理。
  2. 在仿真或低成本机械臂上采集一个简单任务,例如“抓起方块放到盒子里”。
  3. 用行为克隆训练一个小策略,先不追求大模型。
  4. 再尝试 SmolVLA/Octo/OpenVLA 的微调,把语言条件接入任务。
  5. 实机验证时加速度限制、急停、软限位和人工监督。

新手最容易混淆的概念

概念 容易误解 正确理解
VLM 能看懂图就能控制机器人 VLM 只负责理解,不能天然输出可执行动作
VLA 一定是 LLM 输出动作 token 也可以用 diffusion/flow 输出连续动作块
动作 token 和文字 token 完全一样 训练接口相似,但含义是量化后的控制值
端到端 不需要传统控制 仍然需要底层伺服、限位、安全监控和控制频率匹配
泛化 见过大数据就能随便换机器人 机器人形态、相机视角、动作尺度变化都会造成分布偏移

参考资料