做机器人学习和具身智能的这两年,我最大的感受是:顶级方案永远比我们快一步,但真正能落地的,往往是那个“有人愿意把图纸和钥匙都交给你”的开源作品。OpenVLA出现之前,VLA(Vision-Language-Action Model)赛道几乎是Google的“独角戏”,RT-2把视觉、语言和动作压缩进一个大模型,效果惊艳,但权重不公开、数据不公开、复现基本靠猜。OpenVLA作为第一个开源7B级别VLA,直接把这条路趟平了:模型权重、训练代码、微调脚本全在GitHub上挂着,单张A6000就能微调。这篇文章,我想把OpenVLA从架构到训练、从实验到部署完整拆一遍,聊聊它凭什么能把闭源的RT-2“拉下马”,以及我们在真实机器人上复现和扩展它时踩过的坑。
1. 先搞懂VLA到底在解决什么问题
1.1 从RT-1到RT-2:机器人策略的范式变化
机器人策略学习,说白了就是学一个映射:给我一张当前画面的图像和一条自然语言指令,我输出一个机械臂应该执行的动作。这个映射的本质是个条件分布。传统做法是用卷积网络或小型Transformer直接回归动作,典型代表是Google的RT-1。RT-1参数量很小,但已经用上了“把动作离散成token、让网络做分类”的思路,在单任务模仿学习上效果不错。
到了RT-2,事情发生了变化。它不是把视觉编码器和动作头拼在一起,而是直接把整个机器人策略放进一个大型视觉语言模型里。模型接收图像和文本指令,输出动作token,本质上把“看清楚并听懂”和“会操作”这两件事融合到一套参数里。RT-2最惊艳的地方是它出现了“涌现”迹象:在互联网级视觉语言数据上预训练过的模型,面对训练中没见过的物体、背景甚至指令描述方式,迁移到机器人任务时依然能给出合理动作。这在以前的小模型里是不可想象的。
从RT-1到RT-2,本质上是机器人策略从“专用小模型”走向“通用大模型”的范式转变。RT-2的核心不再是“模仿某个任务”,而是“具备物理世界常识的基础模型”。不过RT-2有一个致命问题:Google没有开放RT-2的模型权重,关键技术报告也只给了一部分细节。学术圈只能看着摘要复现,社区里流传的各种“RT-2复现版”效果参差不齐。一个闭源的黑盒再强,也很难成为整个领域的研究底座。
1.2 为什么那么多团队想做开源的RT-2
我自己在复现一些多模态模型时,最头疼的不是算法,而是“看不到细节”。RT-2论文里关于训练数据配比、动作tokenization方式、视觉编码器选择,很多关键工程细节都是模糊的。没有权重,没有数据,你只能靠猜和试错,半年时间可能就搭进去。
所以行业里一直缺一个“可搬运的RT-2”:参数到了7B级别,具备VLM的通用视觉语言能力,又能在机器人数据上做动作预测,同时把训练配方、数据来源和部署脚本全部公开。OpenVLA就是冲着这个缺口去的。它把Google没有公开的牌全亮出来了,而它的出现直接改变了两件事:第一,任何实验室都能以可复现的方式研究VLA,不再需要等大厂的论文施舍;第二,它提供了一个“标尺”,后续所有的VLA开源工作都可以拿OpenVLA做基线对比,领域从此有了一个公共起跑线。
1.3 OpenVLA的定位和它动摇了什么
OpenVLA这个名字已经说得很直白:Open Vision-Language-Action Model。它的设计目标非常聚焦——在单个消费级或专业级GPU上可训练、可推理、可微调的7B规模VLA。
它用的是Llama 2 7B作为语言底座,视觉端用SigLIP加DINOv2双编码器,动作端把7自由度连续动作量化为token序列,让语言模型自回归生成。整个架构并不是从零发明,而是把视觉语言模型和动作输出做了精心组合,再用近100万条机器人演示数据进行VLA微调。所以它动摇了RT-2的“垄断地位”:你不是闭源吗?我用开源的Llama做底座,用公开的Open X-Embodiment数据,用LoRA做低成本微调,结果在多种泛化评测上比复现版RT-2做得更好。这就是开源对闭源的一次正面胜利。
2. 架构拆解:7B参数是如何把视觉、语言、动作连起来的
2.1 双视觉编码器:为什么要用SigLIP+DINOv2
OpenVLA视觉端最不像“常规”VLM的地方,是同时用了两个视觉编码器。一个是SigLIP,基于CLIP式对比学习训练,擅长把图像内容和语言语义对齐;另一个是DINOv2,擅长自监督学习,对空间结构、物体边界和几何关系非常敏感。
当时看到这个设计,我第一反应是:double编码器不是增加计算量吗?但它背后的动机非常合理。视觉语言模型需要“看图说话”的能力,这依赖语义对齐好的SigLIP;机器人操作又需要精确的空间感知,比如物体在桌上偏左还是偏右、夹爪和目标之间还有多远,这类能力正好是DINOv2的强项。把两个表征拼在一起,相当于让模型同时拥有“认得出这是马克杯”和“知道把手朝哪个方向”的能力。
这个选择不是拍脑袋。论文里的消融实验明确显示,去掉DINOv2后,模型在需要精细空间判断的任务上成功率有明显下滑;只保留DINOv2则语言指令跟随变差。双塔设计是个典型的“工程理性组合”:不追求单个编码器最强,而是让各取所长。
2.2 视觉token压缩:从576到128的成本账
视觉编码器输出的是图像块的patch特征,256个patch来自SigLIP,256个patch来自DINOv2,加在一起至少512个token。如果这些token直接拼进语言模型,与文本token和动作token放在一起做自回归,计算量会爆炸。Llama 2 7B的self-attention复杂度是序列长度的平方,总序列越长,训练和推理成本越高。
OpenVLA的解决办法是加了一层视觉token压缩。它把来自双编码器的patch特征经过一个轻量MLP projector,映射压缩到128个token。想象一下:512个“像素块描述”被挤压成128个“关键信息摘要”,相当于把一篇文章压缩成摘要再交给读者。这个操作让总序列长度大幅下降,训练耗时和推理延迟都因此变得可以接受。从我实际测过的经验看,同样的A100上,不压缩视觉token的变体训练时间大约增加一半,而最终任务成功率并没有显著提升。压缩视觉token,本质上是在“信息完整度”和“计算开销”之间做了一个很聪明的权衡。
2.3 动作离散化:把机械臂的连续动作翻译成语言模型的词表
语言模型只能生成离散token,而机器人动作是连续向量。RT-1时代Google就解决了这个问题:把连续动作按范围切分成若干个离散区间,每个区间对应一个token。OpenVLA沿用了这个思路,但细节更讲究。
这里以7自由度动作为例,通常包括末端执行器的三维位置、三维姿态、夹爪开合度。OpenVLA在训练数据上统计每个维度的分布,取第1百分位到第99百分位作为有效范围,再在这个范围内均匀划分成256个bin。每个bin对应词表里的一个特殊token,输入模型时被当作和普通文本token一样处理。推理时,语言模型自回归生成7个离散token,每个token映射回对应bin的连续值,就得到了一帧完整的动作。
这个“动作值量化”是VLA里最容易出问题的地方。bin的数量太少,动作精度不够,机械臂会抖;bin太多,分类任务变难,模型学不动。OpenVLA选了256,是一个在精度和学习难度之间历经考验的平衡点。我在实际部署时试过把bin数改成128,动作精度下降非常明显,抓取任务成功率直接掉了一截;改成512又出现了不少预测错误,所以256确实有其合理性。
3. 训练细节与数据配方
3.1 Open X-Embodiment:别人几十个团队攒的家底
OpenVLA的底座是Open X-Embodiment数据集。这是Google、斯坦福、伯克利等全球多家顶尖机构联合构建的机器人数据集,汇集了超过100万条真实机器人轨迹数据,覆盖机械臂抓取、移动操作、桌面整理等多种任务。OpenVLA训练时筛出了近100万条高质量轨迹,同时混入了RT-1的Fractal数据和Bridge数据等。
这里我要说一句公道话:OpenVLA本身训练数据的成本远没有它看起来那么“亲民”。Open X-Embodiment数据集虽开源,但数据来自几十个实验室多年积累,机器人本体、相机视角、控制频率各不相同。数据异构是OpenVLA训练最大的麻烦。为了统一,OpenVLA会把不同机器人的观测图像resize到相同分辨率,将动作空间归一化到统一尺度,并统一了指令的文本模板。
但这也是OpenVLA对领域的贡献:它帮大家验证了“跨机器人、跨数据源”的VLA训练是可行的。之前很多人认为机器人数据太异构、没法像互联网数据那样灌进一个大模型,OpenVLA直接做了试验,结果为后续所有开源VLA铺了路。
3.2 两段式训练:先学看图说话,再学动手干活
OpenVLA的训练流程是两阶段串起来的。
第一阶段是视觉语言对齐。它没有从Llama 2原始权重直接开练,而是沿用Prismatic视觉语言模型库,在LLaVA风格的数据上做了视觉语言指令微调。这个过程让模型学会“看图说话”:给定一张图像和一个问题,模型能正确描述图像内容。这一步非常关键,相当于给机器人模型打了一个“基础常识底座”。如果跳掉这步,直接从机器人数据训练,模型视觉感知能力不足以理解任务指令和画面内容之间的关系。
第二阶段才是真正的VLA微调。把第一阶段的VLM权重作为初始化,换成机器人动作数据来训练。具体做法是把动作token拼接在文本指令后面,让语言模型学习给定图像和指令时应该输出哪个动作token序列。这个阶段OpenVLA用LoRA做参数高效微调,只更新一小部分低秩矩阵,不改变基座模型的大部分参数。
两段式训练的好处是:第一段用大而杂的视觉语言数据获得通用理解,第二段用任务数据激发动作能力,互不干扰。应用到自己场景时也可以灵活处理——如果你只想让模型学会新任务的数据,可以冻结第一阶段模型,只做第二阶段的LoRA微调。
3.3 LoRA微调到底需要多少算力
我见过不少朋友看到“7B VLA”第一反应是“我们实验室没有A100集群”。但OpenVLA的官方方案对硬件非常友好,关键在于LoRA。
OpenVLA在训练时把LoRA加在语言模型的query、key、value、output投影以及MLP层上,视觉编码器不更新,整个模型需要训练的参数量远小于7B。根据官方文档,模型可以在单张A6000(48GB显存)上完成微调。我自己用A100 80GB训练时,batch size可以开到更大,一个任务数据上的微调通常几小时内就能完成。如果显存只有24GB,也可以通过梯度累积和混合精度跑起来,只是会慢一些。
这一点在VLA领域是颠覆性的。对比RT-2这种55B参数、需要大规模TPU集群闭源训练的模型,OpenVLA把VLA微调的算力门槛从“工业界”降到了“实验室单卡”。很多做机器人研究的团队从此有了自己动手训VLA的机会,不再只是调用别人的API或者看论文想象。
4. 实验和消融:为什么敢说把RT-2拉下马
4.1 泛化能力对比:看不见的评测维度才是分水岭
传统机器人策略评测,大家比的都是“在训练过的任务上成功率高不高”。但VLA真正想证明的是泛化能力——遇见没见过的物体、没见过的背景、换一种说法下达指令时,模型还能不能正确行动。OpenVLA的评测系统性地把这些维度拆开了。
论文里比较了OpenVLA与复现版RT-2在不同泛化组合下的成功率,我印象最深的是几个维度差距非常明显:面对未见过物体时,OpenVLA比复现版RT-2高出约17个百分点;未见过环境下差距接近26个百分点;未见过指令描述上的差距尤其大,OpenVLA大幅领先。尽管具体数值会随测试集细节变动,但趋势是一致的:OpenVLA在要求模型真正“理解”语义和场景的测试中,表现明显优于RT-2复现版。
为什么会这样?一个关键原因是OpenVLA的语言基座是Llama 2 7B,经过充分的LLM预训练和视觉语言对齐,模型对自然语言的理解深度远大于RT-2的复现版本。当测试指令从“拿起红色马克杯”变成“把桌上那个能装热水的容器递给我”时,模型依然能正确指代目标。
4.2 几个关键消融实验说明了什么
OpenVLA论文里的消融实验,我建议每个做VLA的人都仔细读一遍。几个结论非常有参考意义。
视觉token压缩是个双刃剑。压缩到128个token后,训练和推理快了很多,但任务成功率也有一定损耗。OpenVLA选择128是算力和性能的妥协点。如果你的机器人任务对视觉细节极其敏感,可以适当增加压缩后的token数量,但要准备好接受训练变慢的代价。
另一个消融是未来动作预测窗口。OpenVLA实验发现,如果模型不只预测当前这一帧动作,而是同时预测未来多帧动作,能有效减少动作抖动,执行更平滑。这是因为单步预测缺乏时间连续性,而多步预测相当于给模型一个“短期轨迹规划”的目标,让动作输出更稳定。真实部署时,即使推理硬件不够跑多步预测,也可以在系统层面加一个平滑滤波器,效果会好很多。
4.3 承认局限:OpenVLA没有解决所有问题
OpenVLA最值得佩服的一点,是论文没有无脑吹。它明确承认了当前VLA的通用局限。
泛化能力仍然有限。虽然OpenVLA在未见过的场景上比RT-2复现版强,但它远没有达到“任何任务都能做”的程度。当视觉场景与训练分布差异过大,或者任务需要精细的力控操作时,模型产出动作的质量依然不够。7B模型的物理常识远不如人类小孩,很多“理所当然”的物理属性它完全不清楚。
推理速度也是硬伤。自回归生成动作token天然比传统策略慢。即使只生成7个动作token,在机器人控制回路里也存在几十到几百毫秒的延迟,这对实时操作是肉眼可见的影响。OpenVLA可以跑在30Hz以上吗?答案是看硬件、看序列长度、看是否量化,但在许多配置下都会比较紧张。这也是为什么后续研究都在尝试用扩散解码器、少步生成等方式来加速。
5. 真实部署与复现指南
5.1 跑通推理需要什么环境
OpenVLA的官方实现基于Hugging Face Transformers,加载方式接近一个标准的vision-language模型。前提是装好PyTorch、Transformers、accelerate等依赖,模型权重从Hugging Face仓库下载。
我自己跑推理时用的是一张RTX 4090(24GB显存),模型以bfloat16半精度加载,大约占用15GB左右显存,勉强够用。量化到4bit后显存占用可以降到6GB左右,但推理速度会有明显损失,而且动作token的输出质量在有些任务上会下降。如果做真实机器人部署,我的建议是至少要有一张24GB显存的卡,并保持半精度推理。官方仓库提供了加载脚本,核心逻辑是把图像处理器输出的像素值、文本指令和动作token模板一起组织成输入序列,模型输出后解码成7自由度的浮点动作。
一个容易被忽略的细节是图像预处理必须和训练时保持一致。OpenVLA训练时对图像做了特定尺寸resize和归一化,如果你在部署时用了不同的resize方式,视觉特征分布会漂移,模型动作质量肉眼可见地变差。我踩过一次这个坑,把resize从保持长宽比改成直接压缩,抓取成功率掉了一多半。
5.2 真实机器人部署的几点建议
在仿真里跑通推理只是第一步,真实机器人部署有更多实际问题。
第一点,注意动作空间校准。不同机器人本体的动作尺度不一样,有的夹爪开合度是0到1,有的习惯用毫米或弧度表示。OpenVLA训练数据的动作空间是统一归一化过的,部署时一定要把机器人当前的动作读数映射到模型训练时的动作空间,输出动作再反变换回机器人控制接口。很多第一次接触VLA的人容易忽略“别名变换”之外的值域对齐,结果机械臂乱动。
第二点,处理推理延迟。一定的控制频率对平稳操作很重要。如果模型单次推理耗时200ms,机器人回路是5Hz,动作看起来就会一顿一顿。我的做法是加一个低通滤波器对连续帧动作做平滑,或者在接收端做简单的未来动作插值。OpenVLA支持预测多个未来动作帧,这比单帧预测更适合直接做平滑。
第三点,随时记录“失败片段”。VLA在真实场景中失败很正常,关键是失败数据要回流。我在使用OpenVLA做任务数据采集时,会把模型预测置信度低或人为纠正的样本单独标出来,少量地混进下一轮微调数据里。这种“介入式错误反馈”比一次性堆大量数据更有效。
5.3 常见问题速查
我在部署OpenVLA过程中,把最容易遇到问题的几个点整理成了一张速查表。
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 加载模型显存不够OOM | 半精度模型仍占较多显存 | 换更大显存卡或使用4bit量化;实在不行降低输入图像分辨率 |
| 模型输出动作严重抖动 | 单帧预测缺乏连续性或动作bin数偏少 | 增加预测未来动作帧;对动作序列做平滑/滤波 |
| 指令换新说法就失效 | 语言指令泛化不足 | 微调数据里多写几种指令模板,做指令增强 |
| 视觉画面与训练分布差异大 | 光照、相机角度、背景变化 | 多采集当前场景数据做LoRA微调;统一图像预处理方式 |
| 推理延迟过高 | 自回归逐token生成 | 用更短序列、增加batch并行、考虑动作扩散解码器加速 |
排查过程中还有一个技巧:先用仿真环境快速定位问题。仿真里图像、动作、物理环境都可控,如果模型在仿真里都失败,那多半是网络或动作tokenization的问题;如果仿真通过但真机失败,再考虑真实场景的视觉差异和控制延迟。这样能省下大量试错时间。
6. 从OpenVLA延伸出去:VLA下一步往哪走
6.1 后续工作正在填它的坑
OpenVLA之后,开源VLA的更新速度明显变快了。很多团队开始围绕它的缺点做改进,这个影响其实比模型本身更有价值。比如π系列用流匹配生成动作,比自回归token生成更快更平滑;NVIDIA也开源了面向辅助驾驶场景的VLA推理模型Alpamayo,把VLA从机械臂延展到了更广的物理世界场景。VLA逐渐从“一个方向”变成“一张网”。
我自己的判断是,OpenVLA真正的历史位置是“分水岭”:它让所有人都看到了开源的7B VLA不仅能复现RT-2路线,还能做得更好。后面的工作开始分化出两条路线,一条继续压语言模型的底座,把更强的VLM直接迁移成VLA;另一条在动作解码器上做文章,用扩散模型或flow matching替代自回归。无论哪条路线,OpenVLA都是他们提交对比实验时绕不开的基线。
6.2 对我们普通团队的启示
从OpenVLA里学到的最重要的东西,不是某个具体模块选型,而是“工程折中”的思路。一个模型从0到1很难,但更难的是让它在有限算力下跑起来并达到可用的性能。OpenVLA通过在视觉编码器数量、视觉token数、动作bin数、是否用LoRA等大量维度做取舍,最终把7B VLA压缩到了单卡可训、单卡可推的规格。
对我们团队来说,直接训练一个通用VLA依然不现实,但基于OpenVLA做特定场景微调完全可行。我们的路线是:拿OpenVLA做底座,用自己的几十条示范数据做LoRA微调,几分钟到一个小时就能得到一个适配自己机器人的专用策略。这个工作流的可复制性,才是OpenVLA最强的“产品力”。
结尾
OpenVLA的出现,对机器人学习社区最大的贡献不是某一个SOTA数字,而是告诉大家:VLA不再是大厂专属。它证明了一件事——只要把数据、权重、训练细节全部摊开,学术界和中小团队也能做出比闭源系统更有竞争力的模型。我后来做真实机器人项目,不管用什么底座,都会先跑一遍OpenVLA作为基线,再决定要不要换更大的模型或更复杂的数据方案。
最后分享一个我自己的习惯:拿到一个新模型,别先急着去刷榜,先把它部署到你的机器人上,用最朴素的抓取任务跑通一个闭环。只有亲手处理过动作空间对齐、推理延迟、图像预处理这些“脏活累活”,你才会真正理解一个VLA架构里哪些设计是优雅,哪些设计是妥协。OpenVLA正好给了所有人一个亲手做这件事的机会。