type
status
date
slug
summary
tags
category
icon
password
😀
由于刚刚梳理了 Pi0/Pi0.5 的相关思想和技术细节,为了建立更全面的 VLA(视觉-语言-动作)视野,笔者了解了一下有关OpenVLA的内容框架。
参考模型论文:OpenVLA
notion image

OpenVLA 思想的引入与优势

VLA的核心目标是将强大的预训练VLM适配于机器人控制任务。但其局限性在于动作空间的“次元壁”——离散和连续的“鸿沟”
LLM(如Llama-2)的架构是为输出离散的Token而设计的。它如何才能输出机器人的连续动作(如7个自由度的浮点数坐标)?
Pi0的解决思路是“增强”:它保留VLM,并为其附加一个流匹配驱动的连续动作专家。这是一个复杂但强大的ODE求解过程。
让我们看看OpenVLA是怎么解决的:
OpenVLA说:“我们为什么非要搞一套复杂的连续生成机制?为什么不干脆让LLM做它最擅长的事——预测下一个Token?”
OpenVLA 的解决方案是“重塑(Repurpose)”:它将连续的机器人动作“翻译”成离散的 Token,把一个复杂的机器人学问题降维成了一个 Llama-2最擅长的“下一词预测”问题。
这个“动作即文本(Action as Text)”的思想,就是OpenVLA的核心机理。

动作分箱 (Action Binning) 与 Token 重映射

既然这个想法这么巧妙,它的实现机理是怎样的呢?答案是动作分箱(Action Binning)
分箱:它将连续的7-DoF动作(比如x坐标[-1.0, 1.0])量化成几百个(比如 256 个)离散的“小箱子”(bins)。 重映射:它从 Llama-2 的词汇表中,挑出一部分极少被使用的Token(例如古老的词汇或无意义的符号)。 建立映射:它将这些“废弃”的 Token重新分配含义,让它们一对一地指向一个动作“箱子”。例如,[TOKEN_15000]可能被重新定义为代表“x坐标移动+0.05”。
通过这种方式,模型的训练目标彻底改变了:
  • Pi0 的目标:最小化速度场均方误差 L2(v_t, u_t)
  • OpenVLA 的目标:最大化下一个正确动作 Token 的交叉熵损失(这与训练 LLM 预测下一个单词完全相同)。

继承与高效适配 (PEFT/LoRA)

想法很好,但是我们难道要从头训练一个模型来学习这种“新语法”吗?恰恰相反,OpenVLA 站在了巨人的肩膀上。
  • 继承世界知识:OpenVLA基于强大的Prismatic VLM,该 VLM 融合了Llama-2的语言能力和DINOv2/SigLIP的视觉能力。
  • 学习动作语法:微调的过程,本质上就是教会这个“博学”的 Llama-2 一套新的“语法”:当看到图像和指令时,不要在文本上继续回答,而是要输出代表“移动手臂”的那些特殊“动作 Token”。
  • 高效适配 (LoRA):更妙的是,OpenVLA原生支持参数高效微调 (PEFT),特别是LoRA。这意味着研究者不需要重新训练整个7B参数的模型。他们可以“冻结”99% 的 Llama-2 权重,只训练一小部分(LoRA)适配器权重。这使得在消费级 GPU 上对OpenVLA进行微调成为可能。

返璞归真——自回归式的推理过程

既然训练过程变成了“预测下一个 Token”,那么推理过程也就不再是 Pi0 那样的 ODE 求解 了。
OpenVLA 的推理过程(即 sample_actions)就是标准 LLM 的自回归生成 (Autoregressive Generation)
  1. 输入图像(编码为image tokens)和文本指令(language tokens)。
  1. 模型开始像“写文章”一样,自回归地一个一个生成Token。
  1. 当模型认为需要执行动作时,它会(基于训练)输出一个特殊的动作Token,例如 [ACTION_BIN_135]
  1. 控制器捕获这个 Token,将其解码回它所代表的连续动作值(如x坐标+0.05这种动作信息)。
  1. 系统执行动作,然后将新的图像/状态作为新的输入,喂给模型,进行下一轮 Token 预测。

对比中学习,pi0/pi0.5 vs openVLA

对比维度
Pi0 / Pi0.5
OpenVLA
核心总结
一个混合专家架构,在PaliGemma基础上,通过流匹配机制来生成连续的动作序列
一个端到端微调架构,在Llama-2/Prismatic基础上,通过动作分箱机制来生成离散的动作Token
实现机理 (VLM 基础)
VLM Backbone:基于PaliGemma视觉编码器SigLIP语言模型Gemma
VLM Backbone:基于Prismatic VLM视觉编码器DINOv2 和/或 SigLIP语言模型Llama-2Vicuña
动作生成机制 (核心差异)
连续的:流匹配 (Flow Matching) 机理:将动作生成视为一个连续时间的 ODE 求解过程。 训练:模型(v_t)学习预测一个连续的“速度向量” u_t = noise - actions。损失函数是 MSE jnp.mean(jnp.square(v_t - u_t))推理:模型作为 ODE 求解器,从纯噪声 noise 出发,通过 num_steps 次迭代(x_t + dt * v_t),逐步去噪出一个连续的浮点数动作向量 x_0
离散的:动作分箱 (Action Binning) 机理:将动作生成视为一个离散的“下一个词”预测问题。 训练:将连续的7-DoF动作(如 [0.1, -0.2, ...])量化成几百个“箱子”(bins)。然后将 LLM 词汇表中的Token(如 "[ACTION_BIN_135]")与这些“箱子”重新映射。 推理:模型像生成文本一样,自回归地预测出一个离散的动作Token。这个Token随后被解码回它所代表的连续动作值。
动作架构 (如何集成动作)
混合专家架构 架构:Pi0 添加了一个新的“动作专家”(Action Expert)(它本身也是一个 Gemma 模型)。 代码:gemma.py被设计为可以接收两种配置 [paligemma_config, action_expert_config]。 交互:VLM 专家处理 prefix_tokens(观测),Action 专家处理 suffix_tokens(动作)。两者在 Transformer 内部通过注意力机制进行信息交互。
端到端/Token重映射 架构:OpenVLA 不添加新的专家模型。它修改了基础VLM。 代码:没有复杂的多专家处理逻辑。 交互:整个Llama-2模型被微调,使其在看到图像和文本 prompt 后,能直接从其词汇表中输出被重新定义的“动作Token”。
值得注意的是,两者从不同的实现机理出发,都实现了视觉-语言-动作模型的功能,两者都采用了视觉解析器+大模型处理视觉信息,但在动作信息的生成方面采用了不同的方式。

总结

OpenVLA相比pi0/0.5的实现机理,显得有些“稚嫩”,但是不妨碍其作为首个开源项目的贡献,不能否认它在VLA领域的奠基性影响力。或许下一个行之有效的开创性的VLA模型会采用更加通俗但有效的解决方案,目前也暂未可知。
 
【PI0.5】重要知识点分析【VLA】A Survey on Vision-Language-Action Models for Embodied AI 综述阅读笔记
Loading...