Skip to content
Published on

机器人能看、能听、能动 — VLA 模型 RT-2 与 OpenVLA 评述

分享
Authors

引言 — 感知与行动之间的桥梁

很长一段时间里,机器人学习意味着把三条彼此独立的流水线拼接在一起。解读摄像头所见的感知(perception)模块、决定该做什么的规划(planning)模块,以及真正驱动关节的控制(control)模块,各自单独设计、单独训练。信息在各阶段的边界处不断流失,一旦出现新物体或新指令,整条流水线往往就会崩溃。

视觉-语言-行动(Vision-Language-Action, VLA)模型试图把这三个阶段统一进单一的神经网络。它接收摄像头图像与「把红色杯子拿起来放到盘子上」这样的自然语言指令作为输入,直接输出机器人接下来该采取的动作。核心洞见很简单:在网络规模的图文数据上预训练过的视觉-语言模型(VLM),本身就已经具备关于世界的丰富常识和泛化能力,只需再教会它一种新的输出模态——「动作」即可。

本文依次梳理开创 VLA 范式的 RT-2、打下数据基础的 Open X-Embodiment/RT-X,以及将其开源复现并扩展的 OpenVLA。内容力求基于确凿事实,鉴于版本和具体数值可能因来源而异,本文只涉及可以确认的部分。

VLA 范式的概念

把动作看作 token

语言模型把文本看作 token 序列,预测下一个 token。VLA 的核心思路是,机器人的动作同样可以表示为 token 序列。机械臂的动作通常是这样一个连续值向量:

action = [Δx, Δy, Δz, Δroll, Δpitch, Δyaw, gripper]
          └──── 末端执行器位置/姿态变化 ────┘  └ 夹爪 ┘

把这个 7 维连续向量的每一维划分成若干区间(bin)并转成整数 token,动作就变成了一串整数 token。这样一来,「看图像和指令,预测下一个动作 token」这个问题,就与语言模型一直在解决的「预测下一个 token」问题在形式上完全一致。

┌─────────────────────────────────────────────────────────┐
│                   VLA 推理的基本流程                       │
└─────────────────────────────────────────────────────────┘

  摄像头图像            自然语言指令
   (观测 o_t)          「把红色杯子拿起来」
       │                    │
       ▼                    ▼
  ┌──────────┐        ┌──────────┐
  │ 视觉     │        │ 文本     │
  │ 编码器   │        │ 分词器   │
  └────┬─────┘        └────┬─────┘
       │   视觉 token       │  语言 token
       └─────────┬──────────┘
        ┌──────────────────┐
        │   大型 Transformer │
        │   (VLM 骨干)       │
        └────────┬─────────┘
        ┌──────────────────┐
        │  动作 token 解码   │  ──▶  [126, 14, 200, ...]
        └────────┬─────────┘
        ┌──────────────────┐
        │  反分词(de-tok)   │  ──▶  连续动作向量
        └────────┬─────────┘
            机器人执行 a_t

为什么从 VLM 出发

从 VLM 出发的原因在于「迁移(transfer)」。用网络图文对训练出的模型,已经认识「杯子」「左边」「叠放」「红色」这类概念。仅靠机器人数据很难获得如此广泛的语义知识,因为机器人示教数据的采集成本极高,数量本身就受限。在 VLM 的先验知识之上叠加机器人动作,模型就能对训练中从未见过的物体或指令表现出一定程度的泛化能力。

RT-2:把 VLM 微调成机器人策略

RT-2(Robotic Transformer 2,Google DeepMind,arXiv 2307.15818)是正式提出这一范式的研究。其核心思路如下:

  1. 使用大型视觉-语言模型(PaLI-X、PaLM-E 系列)作为骨干网络。
  2. 将机器人的动作表示为离散 token。7 维动作的每一维被量化为 256 个区间并转成 token。
  3. 对网络数据(VQA、图像描述等)与机器人示教数据进行联合微调(co-fine-tuning)。

像输出文本一样输出动作

RT-2 令人印象深刻之处在于,它把动作 token 直接纳入模型的词表(vocabulary)当中。模型生成动作的方式就像在生成一句话。输出字符串在概念上是这样的:

输入: [图像] 「把桌上快要掉下去的包拿起来」

输出(概念):
  "terminate Δpos_x Δpos_y Δpos_z Δrot_x Δrot_y Δrot_z gripper"
   →  "1   135   149   125   124   135   134   141"
       └ 每个数字都是量化后的动作 token ┘

这里的每个整数都是预先定好的区间索引,经过反分词可还原为实际的连续动作值。

联合微调与泛化能力

RT-2 展示出的最重要结果,是对新物体和新指令的泛化能力。由于同时学习了网络数据,模型对训练时机器人从未接触过的物体(「把濒危动物玩偶拿起来」)或需要象征性推理的指令,也表现出理解语义、合理行动的倾向。也就是说,可以观察到互联网规模的知识以「涌现(emergent)」的方式渗透进机器人控制之中。

不过 RT-2 的模型权重并未公开,依赖庞大的私有(proprietary)VLM,推理负担也很重,存在这些局限。由此衍生出两条后续路线:一条是数据层面的整合(Open X-Embodiment),另一条是开源复现(OpenVLA)。

Open X-Embodiment / RT-X:跨机器人数据集

如果说 RT-2 提出了模型架构,那么 Open X-Embodiment(arXiv 2310.08864)打下的是数据基础。它所针对的核心问题是:各个实验室各自用自己的机器人采集自己的数据,用这些数据训练出的策略无法用在别的机器人上。数据按机器人本体(embodiment)彼此割裂。

Open X-Embodiment 是一个大规模数据集合,把多个机构、多种机器人采集的示教数据统一整合成一种标准格式。其中既包括单臂机械手,也包括双臂机器人、移动机器人等多种形态。

┌──────────────────────────────────────────────────────────┐
│           Open X-Embodiment: 跨机器人数据整合               │
└──────────────────────────────────────────────────────────┘

  机构 A 机器人  机构 B 机器人  机构 C 机器人  ...  机构 N 机器人
  (7自由度臂)   (双臂)         (移动底盘)          (不同夹爪)
      │            │             │                   │
      └────────────┴──────┬──────┴───────────────────┘
              ┌───────────────────────┐
              │    标准化数据格式        │
              │  (观测·动作·语言指令)   │
              └───────────┬───────────┘
              ┌───────────────────────┐
              │   RT-X 策略训练          │
              │ (多本体联合训练)        │
              └───────────┬───────────┘
          一个策略可在多种机器人本体上运行
          (观察到 positive transfer)

用这份数据训练出的 RT-X 系列策略表现出正向迁移(positive transfer):同时在多种本体上联合训练,性能优于只用单一本体训练的情形。也就是说,在一台机器人上学到的东西,提升了另一台机器人的表现。这与自然语言处理中「更多、更多样的数据带来更好泛化」的直觉是一致的。此后,Open X-Embodiment 几乎成了所有开放 VLA 研究事实上的标准训练数据。

OpenVLA:开源的 7B VLA

OpenVLA(arXiv 2406.09246)把 RT-2 展示出的愿景开源复现,让任何人都能使用。它的参数规模约为 70 亿(7B),权重和训练代码均已公开。训练使用了从 Open X-Embodiment 中挑选出的约 97 万条真实机器人示教数据。

双视觉编码器 + Llama 2

OpenVLA 架构中一个引人注目的选择,是同时使用两个视觉编码器。

┌────────────────────────────────────────────────────────────┐
│                  OpenVLA 架构(简图)                          │
└────────────────────────────────────────────────────────────┘

        输入图像
   ┌────────┴─────────┐
   ▼                  ▼
┌────────┐       ┌────────┐
│ DINOv2 │       │ SigLIP │
│(空间/  │       │(语义/  │
│ 几何)  │       │语言对齐)│
└───┬────┘       └───┬────┘
    │   特征拼接(concat)│
    └────────┬─────────┘
      ┌─────────────┐      「把红色杯子拿起来」
      │ 投影器      │            │
      │ (MLP)       │            ▼
      └──────┬──────┘     ┌─────────────┐
             │            │ 文本 token   │
             └─────┬──────┘             │
                   ▼                    │
          ┌──────────────────────────────┐
          │      Llama 2 (7B) 骨干         │
          │  (自回归 Transformer 解码器)   │
          └──────────────┬───────────────┘
                  动作 token 预测
                  [126, 14, 200, 51, ...]
                  反分词 → 连续动作
  • DINOv2:擅长自监督学习得到的空间与几何特征,能很好地捕捉物体的位置、边界和结构。
  • SigLIP:擅长与语言对齐的语义特征,能把「红色」「杯子」这类语义与像素关联起来。

将两个编码器的特征结合起来,就能同时表示「是什么(语义)在哪里(空间)」,这对操作(manipulation)这类需要精确空间理解的任务很有利。融合后的视觉特征经过投影器(MLP)映射到语言模型的 token 空间,再与文本 token 一起输入 Llama 2 解码器。

动作分词的细节

与 RT-2 一样,OpenVLA 也把连续动作转换为离散 token。常见做法是把 7 维动作的每一维量化为 256 个区间。这里常用的一个技巧是,把语言模型现有词表中几乎不用的 token 重新分配作为动作 token。

连续动作维度 d 的分词

  取值范围: [v_min, v_max]  划分为 256 个区间

   v_min ├─┬─┬─┬─ ... ─┬─┤ v_max
         0 1 2 3       255   ← 区间索引 = 动作 token

  采用分位数(quantile)边界可以让区间贴合数据分布,
  从而降低量化误差

  推理: 模型预测索引 ──▶ 还原为区间中位数

离散化的最大优点是可以直接复用语言模型的结构,但也带来了量化误差,并且需要用自回归方式一维一维地逐个求解各动作维度,难以直接建模维度间的相关性。这一局限正是后文提到的连续动作模型(Diffusion Policy、π0)的动机所在。

高效适配:LoRA 与量化

每换一个新机器人、新任务就对 7B 模型做全量微调,代价太高。OpenVLA 表明,采用 LoRA(低秩适配)等参数高效微调方法,只需较少资源即可适配新场景。LoRA 的思路可概括如下:

# 概念性伪代码: 冻结原始权重,只训练低秩矩阵
# (实际实现通常使用 PEFT 等库)

class LoRALinear:
    def __init__(self, base_linear, rank=16, alpha=32):
        self.base = base_linear        # 冻结的原始权重 W
        d_in = base_linear.in_features
        d_out = base_linear.out_features
        self.A = zeros(rank, d_in)     # 训练对象
        self.B = zeros(d_out, rank)    # 训练对象
        self.scale = alpha / rank

    def forward(self, x):
        # W x + (B A) x * scale
        return self.base(x) + (x @ self.A.T @ self.B.T) * self.scale

原始权重矩阵保持不变,只训练由两个小矩阵 A 与 B 相乘表示的修正项,因此可训练参数量和显存占用都大幅减少。再配合 4 位/8 位量化,单块 GPU 上也能进行推理与微调(具体显存需求会因配置而异)。

三个模型的比较

项目RT-2RT-X (Open X-Embodiment)OpenVLA
主体Google DeepMind多机构协作多机构(开源)
核心贡献通过 VLM 微调确立 VLA 范式跨机器人整合数据集开源 7B VLA 复现
骨干网络大型私有 VLM (PaLI-X/PaLM-E 系列)多样DINOv2+SigLIP+Llama 2
动作表示离散动作 token标准化动作格式离散动作 token
权重公开未公开数据公开权重·代码均公开
优势强大的语义泛化能力数据多样性·正向迁移易用性·LoRA 适配

表中细节可能因来源和版本而异。核心区分在于:RT-2 代表架构范式,Open X-Embodiment 代表数据基础,OpenVLA 代表开源复现与高效适配。

数据采集与训练流水线

VLA 的性能既取决于模型结构,也同样取决于数据。这里梳理机器人示教数据是如何被采集、并流入训练的完整过程。

示教数据是如何采集的

最常见的方式是遥操作(teleoperation),由人直接操控机器人来示教任务。操作者通过 space mouse、VR 控制器,或另一个主控机械臂来移动机器人,过程中的观测(图像)与动作(末端执行器指令)被按时间顺序记录下来。

┌──────────────────────────────────────────────────────────┐
│            示教数据采集流水线(简图)                         │
└──────────────────────────────────────────────────────────┘

  人类操作者
     │  (space mouse/VR/主控臂)
  ┌──────────┐    指令       ┌──────────┐
  │ 遥操作    │  ─────────▶   │  机器人   │
  │ 界面      │               │ (执行)   │
  └──────────┘               └────┬─────┘
                                 │ 观测(摄像头)·状态(关节)
                        ┌──────────────────┐
                        │  时间戳同步        │
                        │  (对齐观测↔动作)   │
                        └────────┬─────────┘
                        ┌──────────────────┐
                        │  存储 episode      │  ──▶  训练数据集
                        │ (成功/失败标签)     │
                        └──────────────────┘

一个 episode 通常由「观测、动作、下一个观测」的序列构成,并附带语言指令(例如「把毛巾叠起来」)。这样采集到的数万至数十万个 episode,就成为模型的训练素材。

观测与动作的表示

进入训练之前,需要把观测和动作整理成统一的格式。观测通常由摄像头图像(有时是多个视角)和机器人状态(关节角度、夹爪开合程度)构成,动作则往往用前面提到的 7 维末端执行器指令表示。

单个时间步的数据结构(概念)

  观测 o_t:
    - 图像: 前置摄像头、腕部摄像头 ...
    - 状态: 关节角度、夹爪开合程度
  指令 g:
    - 自然语言句子(「把红色杯子拿起来」)
  动作 a_t:
    - [Δx, Δy, Δz, Δroll, Δpitch, Δyaw, gripper]

  → (o_t, g, a_t) 三元组的序列构成一个 episode

由于不同本体在摄像头布局、关节数量、夹爪种类上各不相同,Open X-Embodiment 这类整合数据集会用标准格式吸收这些差异。这正是使跨机器人训练成为可能的基础。

联合微调的流程

RT-2 与 OpenVLA 共同强调的联合微调(co-fine-tuning),是把网络视觉-语言数据与机器人数据混合起来训练的方法。关键在于训练过程中按合适的比例同时展示这两类数据,让模型在学习动作的同时不丢失语义泛化能力。

┌──────────────────────────────────────────────────────────┐
│              联合微调的数据流                                │
└──────────────────────────────────────────────────────────┘

  网络 VL 数据                机器人示教数据
  (VQA·图像描述)              (观测·指令·动作)
      │                          │
      └────────────┬─────────────┘
          ┌──────────────────┐
          │  混合批次采样      │  比例调节(例如部分为网络数据,部分为机器人数据)
          └────────┬─────────┘
          ┌──────────────────┐
          │  VLM 微调          │  用同一损失函数学习文本·动作 token
          └────────┬─────────┘
            VLA 策略完成

若只用机器人数据做微调,模型往往会遗忘从网络中学到的广泛知识(灾难性遗忘)。混入网络数据可以缓解这种遗忘,并保持对「从未见过的物体」的泛化能力。

评估与实际部署

如何评估 VLA

评估 VLA 本身就很困难。语言模型可以用固定的基准打分,但机器人策略必须在真实物理环境中完成任务。常见的评估项包括:

  • 成功率(success rate):完整完成给定任务的比例,是最直接的指标。
  • 泛化评估:对训练时未见过的物体、背景、指令的成功率,衡量的是 VLA 的核心价值。
  • 鲁棒性(robustness):在光照变化、物体位置扰动、干扰物存在时的表现。
  • 语言理解:在同一场景下仅改变指令时,能否切换到正确的任务。
评估场景的分类(概念)

  ┌─────────────────────────────────────────────┐
  │  分布内 (训练分布之内)                       │
  │   - 见过的物体、见过的布局 → 基础成功率      │
  ├─────────────────────────────────────────────┤
  │  分布外 (训练分布之外)                       │
  │   - 新物体    → 验证语义泛化                 │
  │   - 新背景    → 验证视觉鲁棒性               │
  │   - 新指令    → 验证语言理解                 │
  └─────────────────────────────────────────────┘

真实机器人评估因环境搭建、硬件磨损、操作者差异等因素而难以复现。因此仿真基准常被用作补充手段,但要始终留意仿真与真实之间的差距(sim-to-real gap)。

实际部署中的考量

要把 VLA 从研究环境推向真正的部署,还需要额外的考量。

  • 推理延迟:7B 规模的模型推理负担较重。通过量化、缓存、动作分块(action chunk)来降低延迟,是能否实用的关键。
  • 安全护栏:模型的输出可能产生危险动作(力度过大、碰撞路径),因此需要在底层控制器中设置速度·扭矩限制以及碰撞规避。
  • 人在回路(human in the loop):在早期部署阶段,需要有人监督,并能在出现风险时立即停止。
  • 分布监控:当输入明显偏离训练分布时,可靠性会下降,因此需要有机制检测这种情况,并让系统采取保守行动或移交给人类处理。
部署栈中的安全层(概念)

   VLA 策略输出(提议的动作)
   ┌──────────────────┐
   │ 安全过滤器         │  速度·扭矩限制、工作空间边界、碰撞规避
   └────────┬─────────┘
   ┌──────────────────┐
   │ 底层控制器          │  转换为实际的关节指令
   └────────┬─────────┘
        机器人执行  ──▶  (人类监督·可紧急停止)

这些层级反映的现实是:无论模型变得多聪明,物理世界中失败的代价都很高。VLA 的进步不仅依赖模型性能,也伴随着这类运维基础设施的成熟。

优势与局限

优势

  • 语义泛化:得益于网络预训练,模型对训练中未见过的物体·指令能有一定程度的应对能力。
  • 单一模型整合:减少了感知、规划、控制各环节边界处的信息损失,并可直接接收自然语言指令。
  • 可扩展性:随着数据量增大(Open X-Embodiment)和骨干网络变大,性能往往呈提升趋势。
  • 可复现性:像 OpenVLA 这样公开权重和代码,能降低研究与应用的准入门槛。

局限

  • 离散化误差:动作分词会带来量化误差,可能不利于平滑、精确的连续控制。
  • 控制频率:自回归地逐个生成 token 会拖慢推理速度,难以实现高频率(快速响应)控制。
  • 数据成本:真实机器人示教数据的采集成本依然很高。
  • 安全性与可靠性:物理世界中的失败代价很大,而分布外情形下的行为难以保证。
  • 评估的困难:真实机器人评估难以复现,且对环境差异很敏感。

其中,离散化误差与控制频率的问题,催生了以连续值生成动作的方法(Diffusion Policy、基于 flow-matching 的 π0),这将在后续文章中讨论。

结语

VLA 模型试图把「从网络中学到的语义知识」与「从机器人示教中学到的运动技能」在单一神经网络中融合起来。RT-2 表明,把 VLM 微调成机器人策略,能够对新物体·新指令产生泛化能力;Open X-Embodiment 证明了跨机器人数据的正向迁移;OpenVLA 则将其开源复现,让任何人都能上手实验。

当然,离散动作分词的局限、控制频率、数据成本、安全性等问题仍有待解决。但用单一模型连接感知与行动,这一方向已经相当明确。下一步是生成更平滑、更快速的动作,并扩展到人形机器人这类更复杂的本体。

参考资料