可语音流畅交互的OneTwoVLA——推理数据微调π0:一个模型中完成原来双系统下的慢思考、快执行,且能自适应推理和自我纠错
OneTwoVLA:统一视觉-语言-行动模型实现自适应推理与执行协同 本文提出OneTwoVLA模型,通过统一架构解决现有系统在推理与执行分离时产生的问题。该模型创新性地实现了:1)自适应切换推理与执行模式的能力;2)支持视觉-语言数据的联合训练提升泛化性;3)开发可扩展的合成流程自动生成16,000个具身推理数据样本。相比传统双系统框架,OneTwoVLA在错误检测恢复、人机交互和视觉定位等方面
前言
通过Q-chunking此文的前言可知,七月具身长沙分部在过去的一个半月(25年6.4-25年7.19)飞速发展,而我也总结了极速成长的十大关键
- 厚积薄发,大方向正确,不走大的弯路,不踩大的坑(至于小弯小坑 任谁也避免不了)
毕竟过去一年186篇具身论文不白看,包括各种开源库 - 循序渐进,不要一上来就搞很难的,而是先搞容易的(比如先通过lerobot那套框架 练手),先积累经验、成就感、自信
- 一系列客户伙伴给的需求/订单明确,使得我们的目标明确,有deadline,时间紧 任务重
总之,各个客户伙伴极大的推动了我们 - 回顾过去一个半月,甚至过去一年半,敢闯敢拼,极其自信很重要
起点不是TOP不要紧,只要成长足够快,一切皆可弥补 - 技术层面,我负责大方向(战略)之外,朝阳和团队执行坚决、彻底(战术)
且有更多合伙人Lina、孙、贾等等提供的持续保障 - 团队团结,每天复盘、反思、改进,大家(文弱、文豪等十来位同事)成长快、协作默契且每天的沟通交流充分
包括每天开会,每次的会议时间短,快言快语,很高效,会上指明方向、关键点,会后慢慢推理 - 朋友多多 各种外援
简言之,我们合作、交流、认识全中国搞具身的绝大部分高校团队、公司、科研院所
具体而言,无论是个人层面:neal、w、云、凯、姚等等,还是合作商层面:松、强、宇等等,哪怕是非具身圈的朋友 都能在关键时刻帮你一把,不然一个螺丝打滑 都能折腾你半天
总之,平时广积人脉、互帮互助、互相促进,对谁都好 - 一时没成不要紧,不要放弃,继续尝试,反复尝试,总能成功
- 用好各种AI工具,辅助解决问题
- 追求高,既要彼此之间 密切协作,又要每个人独当一面
对了,在实际实验的过程中,我们发现openpi的指令遵循能力较弱
PI公司在他们π0.5之KI改进版『详见此文《π0.5的KI改进版——知识隔离:让VLM在不受动作专家负反馈的同时,输出离散动作token,并根据反馈做微调(而非冻结VLM)》』的技术报告中 也明确指出了这一点,具体如下图右侧所示——π0的指令遵循能力相对偏弱
- 一方面,虽然有指令遵循能力更强的π0.5,可无论是π0.5,还是π0.5的KI改进版,截止到25年7.23日,它两都没开源
- 二方面,现实中,还是有不少语言交互的场景
故便关注到了本文要介绍的OneTwoVLA,更何况越来越多的中国具身er看我博客,让我更新博客的动力也就越来越大了
第一部分 OneTwoVLA
1.1 引言、相关工作
1.1.1 引言
如原论文所说,人类物理智能的一个显著特征是能够同时进行推理和行动[1,2]。关键在于,这两个过程并非彼此独立,而是灵活地交替进行,从而形成强大的协同效应——推理指导我们的行动,而行动又为后续的推理提供反馈
以烹饪为例
- 推理使人能够制定全面的对场景和目标的理解(例如,解读食谱、规划步骤顺序)属于推理范畴
- 而执行则对应于实际操作(例如,切菜、搅拌),将抽象推理落实到现实世界中
OneTwoVLA旨在赋予机器人类似于推理与执行协同作用的能力
当前的方法[3-Do as i can, not as i say, 4-Look before you leap, 5-Hi robot ,7-Helix]
比如Hi robot 详见此文《Hi Robot——大脑加强版的π0:基于「VLM的高层推理+ VLA低层任务执行」的复杂指令跟随及交互式反馈》
通常借鉴了Kahneman的双系统框架[8-Thinking, fast and slow]
- 一般来说,SystemTwo(如互联网预训练的视觉-语言模型VLMs)
9-Paligemma
10-Prismatic vlms
负责缓慢的高层次推理,生成中间推理内容- 与此同时,System One(如视觉-语言-动作模型VLAs)
11–Openvla
12-π0
13-Gr00t n1
则将这些中间内容转化为精确的低层级机器人动作
然而,这种显式的解耦导致两个系统之间缺乏对彼此能力的认知
- 推理系统System Two可能生成执行系统System One无法执行的中间内容[5-Hi robot]
- 此外,在实际部署中,诸如延迟等问题可能导致System Two响应滞后,进而提供过时或无关的指导
因此,作者认为,实现更强的推理与行动协同需要一个统一的模型
实际上,近期将多种能力整合到单一模型中的趋势已被证明对推动人工智能发展至关重要[14-React,15-Transfusion,16-Introducing 4o image generation,17-Experiment with gemini 2.0 flash native image generation],作者相信这种方法对机器人学习尤为有前景
对于「将多种能力整合到单一模型中」这点,还有发布于25年4月份的π0.5『详见《π0.5——离散化token自回归训练,推理时则用连续动作表示,且加强推理(同一个模型中先高层拆解出子任务,后低层执行子任务)》』
基于此,25年5月,来自1 Tsinghua University, 2 Shanghai Qi Zhi Institute, 3 Shanghai AI Lab, 4 Fudan University, 5 Spirit AI 的研究者提出了OneTwoVLA,这是一种统一的视觉-语言-行动模型,能够同时执行行动(系统一)和推理(系统二)。重要的是,该模型能够自适应地决定何时切换不同模式
- 其paper地址为:OneTwoVLA: A Unified Vision-Language-Action Model with Adaptive Reasoning
其作者包括
Fanqi Lin1,2,3,5*、Ruiqian Nai1,2,3,5*、Yingdong Hu1,2,3*
Jiacheng You1,2,3、Junming Zhao1,4、Yang Gao1,2,3,5† - 其项目地址为:one-two-vla.github.io
其GitHub地址为:github.com/Fanqi-Lin/OneTwoVLA
如图1所示
- OneTwoVLA会在关键步骤(如完成子任务、检测到错误或需要人类输入时)触发自然语言推理,输出包括场景描述、任务计划、历史摘要和下一步指令等内容
- 在其他情况下,它则根据最近的推理结果生成行动
该统一模型的一个主要优势是能够自然地支持与视觉-语言数据的联合训练,从而显著提升推理能力和泛化能力
且其具备
- 视觉-语言联合训练进一步使其能够泛化到新的任务指令(例如,为“帮我保持清醒”规划咖啡制作流程
- 错误检测与恢复能力:OneTwoVLA能够实时检测执行错误,推理纠正策略,并灵活地执行恢复操作
- 以及自然的人机交互能力:OneTwoVLA在人工干预时能够立即调整动作,并在遇到歧义时主动寻求澄清
- 和可泛化的视觉定位:OneTwoVLA在空间关系、物体属性和语义特征理解方面表现优异,甚至能够泛化到其机器人训练数据中未出现的物体
1.1.2 相关工作
第一,对于视觉-语言-动作模型
- 视觉-语言-动作模型VLA
6-Gemini robotics
11-Openvla
12-π0
13-Gr00t n1
22-Palm-e
23-Rt-2
24-Fast
25-Dexvla
26-Otter
是在预训练视觉-语言模型VLM
9-Paligemma
18-Pali-3 vision language models: Smaller, faster, stronger
19-Improved baselines with visual instruction tuning
20-Qwen2-vl
21-Deepseek-vl: towards real-world vision-language understanding
基础上初始化而来,已成为构建通用机器人的一种有前景的方法。这些VLA在大规模机器人数据集
27-Roboturk
28-Robot learning in homes
29-Robonet
30-Scaling data-driven robotics with reward sketching and batch reinforcement learning
31-Graspnet-1billion
32-Rt-1
33-Bc-z
34-Bridgedata v2
35-OpenX
36-Droid: A large-scale in-the-wild robot manipulation dataset
37-Data scaling laws in imitation learning for robotic manipulation
上训练,能够应对各种真实世界中的操作任务 - 然而,这些VLA的推理能力有限
4-Look before you leap: Unveiling the power of gpt-4v in robotic vision-language planning
5-Hi robot
13-Gr00t n1
在面对长周期任务或复杂动态环境时表现出脆弱性
此外,它们的泛化能力依然受限,通常需要针对具体任务进行微调[11-Openvla,12-π0]
相比之下,OneTwoVLA的工作通过统一的模型架构和协同训练框架,提升了推理与泛化能力
第二,对于机器人控制中的推理
- 已有研究
38-Open-world object manipulation using pre-trained vision-language models
39-Grounded decoding: Guiding text generation with grounded models for embodied agents
40-Interactive task planning with language models
41-Rt-h: Action hierarchies using language
42-Ok-robot
43-Yell at your robot
44-Closed-loop open-vocabulary mobile manipulation with gpt-4v
45-Cot-vla
46-Hamster: Hierarchical action models for open-world robot manipulation
表明,高层推理能够提升机器人控制中低层策略的性能
具体而言,许多研究
3-Do as i can, not as i say
4-Look before you leap
5-Hi robot
6-Gemini robotics: Bringing ai into the physical world
7-Helix
13-Gr00t n1
47-Copa: General robotic manipulation through spatial constraints of parts with foundation models
探讨了双系统框架,其中基础模型(如视觉语言模型,VLM)作为系统二,负责高层推理,而低层策略作为系统一,根据推理结果生成动作 - 尽管该双系统框架在完成长时序操作任务时表现出较高的有效性,但其本质上存在诸如两套系统缺乏——增强彼此能力的相互认知 [5-Hi robot],以及 System Two 的延迟问题
另一个并行工作 [48-π0.5] 使用单一模型在每个动作前预测子任务,但其推理过程简单且信息受限。如果这种僵化的范式在每一步都进行大量推理,将会显著影响推理效率[49-Robotic control via embodied chain-of-thought reasoning] - 为了解决这些局限性,作者提出了一种统一模型,能够自适应地决定何时进行推理、何时直接行动,从而兼顾信息丰富的推理和高效的执行
第三,对于机器人学习的协同训练
- 来自多样化数据源的协同训练已被证明有助于机器人学习
22-Palm-e
50-OpenX
51-Vision-language foundation models as effective robot imitators
52-Glso: Grammar-guided latent space optimization for sample-efficient robot design automation
53-Rtaffordance: Reasoning about robotic manipulation with affordances
54-Re-mix: Optimizing data mixtures for large scale imitation learning
55-Pushing the limits of cross-embodiment learning for manipulation and navigation
56-Scaling cross-embodied learning: One policy for manipulation, navigation, locomotion and aviation
57-Robopoint: A vision-language model for spatial affordance prediction for robotics
58-Sim-and-real co-training: A simple recipe for vision-based robotic manipulation
具体而言,已有多项研究
23-Rt-2
59-Embodiedgpt: Vision-language pre-training via embodied chain of thought
60-Objectvla: End-to-end open-world object manipulation without demonstration
61-Chatvla: Unified multimodal understanding and robot control with vision-languageaction model
探索了将无动作的视觉-语言数据与机器人数据协同训练机器人策略,展示了策略泛化能力的提升
然而,这些方法
23-Rt-2
59-Embodiedgpt
61-Chatvla
通常依赖于现有的视觉-语言数据集,但这些数据集由于与机器人应用场景存在显著领域差异,导致数据质量有限
或者通过人工收集视觉-语言数据集[60-Objectvla],但这类数据集规模有限,难以扩展 - 为了解决这些局限性,作者提出了一套可扩展的流程,用于合成富含具身推理的视觉-语言数据。他们声称,他们的流程兼顾高质量和可扩展性,显著提升了策略的推理与泛化能力
1.2 OneTwoVLA的完整方法论
1.2.1 OneTwoVLA框架
首先,对于问题表述
本研究的核心问题是如何开发一种能够同时进行推理与行动的机器人控制策略,并具备在每个时间步
自主决定是进行推理还是行动的关键能力
形式上,该策略有两种运行模式
- 在推理模式下
策略将来自多台摄像头的当前图像观测
为输入(记作
,其中 n 表示摄像头数量)
来自最近推理时刻的参考图像
(记作
,引入了观测历史为了防止出现歧义状态)
语言指令
以及最新的推理内容
作为输入
然后该策略以文本输出的形式进行推理,生成更新后的推理内容 - 在执行模式下
策略π还会结合机器人的本体感知状态,并基于最新的推理内容生成一个动作块:
其次,对于OneTwoVLA 的自适应推理
在算法1中,作者详细展示了 OneTwoVLA 如何自主决定进行推理还是采取行动的过程
- 他们引入了两个特殊的决策token——DT:推理开始([BOR])和行动开始([BOA])
给定前缀『包括图像观测、参考图像
,instruction
,以及最新的推理内容
』,模型首先预测[BOR]或[BOA]
- 当预测为[BOR]时,模型进入推理模式,并生成文本推理内容
,直到生成句子结束符([EOS]) token为止
由于模型只在少数关键步骤进入推理模式,因此额外增加的推理时间可以忽略不计(见附录D.3——下面会详述) - 相反,当预测到[BOA]时,模型会进入执行模式,直接生成动作片段
,在该模式下推理效率不受影响
如此,该自适应框架既支持信息丰富的推理,又保证了高效的执行
要知道,以往的方法要么存在推理过于简单的问题[48-π0.5],要么推理效率较低[49-Robotic control via embodied chain-of-thought reasoning]
在实际部署中
- 作者采用了时序集成(temporal ensemble)[83] 技术,以确保动作执行的平滑性
具体而言,在执行模式下,策略每 0.2 秒生成一次时间上重叠的动作序列。在任意给定的时间步,多个预测动作会通过指数加权平均的方式,确定最终实际执行的动作- 表12列出了π0的计算时间,以及OneTwoVLA在不同输入token数量下的执行模式和不同输出token数量下的推理模式下的计算时间——所有测试均在NVIDIA 4090 GPU上处理两张图像输入时进行
具体而言,π0的输入tokens仅包含指令。OneTwoVLA的输入tokens通常更长,包含指令和最新推理内容(
和
)
在执行模式下(OneTwoVLA-Act行),OneTwoVLA的输出token为单一的[BOA]
而在推理模式下(OneTwoVLA-Reason行),OneTwoVLA输出[BOR]和更新后的推理内容
作者展示了其输出token长度分别为20、100和200时的计算时间此外
- 在执行模式下,尽管OneTwoVLA相比π0多了推理内容作为输入,并且输出时多了一个[BOA],但这对计算时间的影响极小,计算时间始终远低于0.2秒,因此,在该模式下执行效率不会受到影响
- 在推理模式下,当推理的 token数较少(少于 20 个 token)时,执行效率不会受到影响;然而,当推理内容较长(超过 100 个 token)时,机器人需要暂停几秒钟
不过,推理仅在少数关键时刻发生,因此对整体执行效率影响很小。例如,在一次番茄炒蛋任务的实验中,整个长时任务耗时 183 秒,推理共发生 5 次,总计用时 16秒,占总时长的 8.7%
同样地,在一次准备富士山任务的实验中,整个长时任务耗时 135 秒,推理共发生 5 次,总计用时 14 秒,占总时长的 10.4%
此外,OneTwoVLA的框架本身支持错误恢复与人机交互:
- 当策略检测到错误(例如,未能抓取物体)时,会自动切换到推理模式,以确定纠正策略并执行灵活的恢复操作
- 当发生人机交互时,任何交互文本都会在后续步骤中持续添加到语言指令
中
最后,对于模型实例化
OneTwoVLA 被设计为通用型,可以让大多数现有的 VLA 以极少的修改集成其中。针对具体实例,作者采用 π0[12]作为基础 VLA,该模型在各类任务中展现出强劲性能
π0 的视觉-语言模型在推理过程中以自回归方式生成文本推理,并在训练阶段通过交叉熵损失进行监督
为了建模复杂的连续动作分布,作者继承了来自π0的动作专家架构,并使用流匹配损失函数[62,63]进行训练。OneTwoVLA的推理流程详见图2。更多训练细节请参见附录D.2
具体而言,作者使用π0作为基础模型,对于每个任务,他们在8块H100 GPU上训练模型30,000步,约需10小时。训练的超参数采用自π0
作者对原始π0的输入做了两点修改
- 首先,使用当前图像
和参考图像
作为图像观测
引入是因为随着任务的推进,推理中的文本场景描述可能会过时(例如,相对于抓取器描述的物体位置在抓取器移动后就不再有效)
引入——原论文v1版这里写的
,个人觉得是个笔误,故修正了下,即当前推理内容对应的图像观察,有助于防止可能因过时的文本描述而产生的模型混淆
- 其次,作者不仅输入当前的机器人本体感知状态,还输入0.05秒和0.25秒前的本体感知状态。这一时间上下文使模型在执行过程中能够生成更加连贯和平滑的动作
1.2.2 通过「具身推理」整理机器人数据:含cot.json数据集的详细分析
大多数现有的机器人操作数据集主要由观测-动作对组成,缺乏相关的推理信息
为了解决这一问题,作者提出了一种新颖的机器人数据格式
针对特定任务,作者首先收集由人类专家提供的演示轨迹,随后,将每条轨迹分割为一系列区间,这些区间分为两类:
- 推理区间,用于捕捉需要模型推理的关键步骤(例如,完成子任务、检测错误或需要人机交互时),并在此基础上进一步添加文本推理注释;
在推理区间,OneTwoVLA学习:基于最新的推理内容R,预测[BOR]以及更新后的推理内容
基于更新后的推理内容
预测[BOA]和动作
基于最新的推理内容R预测动作,而不对[BOA]进行监督。这样做是为了防止在部署过程中模型未能及时更新推理内容时出现错误的动作预测
- 以及执行区间,在该区间内,模型主要根据观测结果和最新的推理内容学习预测动作
在动作间隔期间,OneTwoVLA学会执行以下操作:基于最新的推理内容R预测[BOA]和动作
(可选)在不监督推理内容的情况下,基于过时推理预测[BOR]
之所以包含这一点,是因为作者观察到在部署过程中,模型有时未能进入推理模式。由于决策token的预测本质上是一个二元分类问题,并且执行区间通常远长于推理区间,模型主要学习预测[BOA],从而导致分类不平衡问题。该可选训练有助于提升[BOR]预测的比例
此外,需要注意的是,训练过程中设置的推理间隔旨在促使模型更有效地学习推理过程。而在实际部署中,机器人只在少量步骤进行推理(而非持续间隔),从而确保整体运行效率几乎不受影响
接下来,详细阐述具身推理的内容,如图3左所示『左侧。机器人数据示例,包含推理内容。推理内容包括场景描述、高层规划、历史摘要Historical Summary以及下一步指令。交互文本(如机器人提问和人类回答)附加在指令之后。右侧。合成的以推理为中心的具身视觉-语言数据示例。前两个示例展示了视觉定位任务,后两个则展示了长时序任务』
具身推理包含四个部分:
- 详细的场景描述,主要关注与任务相关物体的位置
- 高层次的计划,概述完成任务所需的顺序步骤
- 简明的历史摘要,用于让模型随时了解任务进展
- 机器人需要立即执行的下一步操作
如此全面的推理内容促使模型理解视觉世界、学习高层次的规划,并跟踪任务进度
此外,为了使策略具备错误检测与恢复能力,作者专门收集并标注了聚焦于从失败状态恢复的机器人数据。为了实现自然的人机交互,还为演示过程中的特定区间添加了交互上下文注释(例如,图3左所示的机器人提问和人类回答)
hf上
https://huggingface.co/datasets/Richard-Nai/onetwovla-dataset
这份数据里包含作者收集的如上图左侧所示的「调制鸡尾酒」的299 个真实世界演示,每个演示都附有推理注释cot.json:https://huggingface.co/datasets/Richard-Nai/onetwovla-dataset/blob/main/cocktail/cot.json
我们来分析下「调制鸡尾酒」的CoT数据集,根据第一个episode,可知,其
- "start_step": 0,
"end_step": 60,
"指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。
场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶在一个牛奶罐里,这个牛奶罐在底层架子的最右边。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边
计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中"0": { "episode_start_interval": [ 0, 60 ], "segments": [ { "start_step": 0, "end_step": 60, "reference_start_step": 0, "reference_end_step": 60, "content": "指令:给我调一杯鸡尾酒。\n场景描述:待定。\n计划:待定。\n我已完成:待定。\n我现在需要:待定。\n", "updated_content": "机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n", "updated_content_w_instruction": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n场景描述:待定。\n计划:待定。\n我已完成:待定。\n我现在需要:待定。\n", "user_answer": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:待定。\n计划:待定。\n我已完成:待定。\n我现在需要:待定。\n", "user_answer_update": "场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶在一个牛奶罐里,这个牛奶罐在底层架子的最右边。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:无。\n我现在需要:把青柠和薄荷叶倒入玻璃杯中。\n", "user_answer_update_w_instruction": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶在一个牛奶罐里,这个牛奶罐在底层架子的最右边。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:无。\n我现在需要:把青柠和薄荷叶倒入玻璃杯中。\n" },
- "start_step": 60,
"end_step": 396,
我现在需要:把青柠和薄荷叶倒入玻璃杯中{ "start_step": 60, "end_step": 396, "reference_start_step": 0, "reference_end_step": 60, "content": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶在一个牛奶罐里,这个牛奶罐在底层架子的最右边。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:无。\n我现在需要:把青柠和薄荷叶倒入玻璃杯中。\n", "updated_content": null },
- "start_step": 396,
"end_step": 426,
我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n我现在需要:把朗姆酒倒入玻璃杯中{ "start_step": 396, "end_step": 426, "reference_start_step": 0, "reference_end_step": 60, "content": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶已经倒入玻璃杯中。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n我现在需要:把朗姆酒倒入玻璃杯中。\n", "updated_content_w_instruction": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶已经倒入玻璃杯中。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n我现在需要:把朗姆酒倒入玻璃杯中。\n" },
- "start_step": 426,
"end_step": 756,
没有任何新的状态更新或内容变化,机器人只是照着前一个阶段(第 396–426 步)的指令继续执行“倒朗姆酒”的动作,没有额外信息需要补充或修正。
可以理解为这段时间是纯物理执行过程,系统在“静默”干活,没有触发任何对话或计划变更{ "start_step": 426, "end_step": 756, "reference_start_step": 396, "reference_end_step": 426, "content": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶已经倒入玻璃杯中。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n我现在需要:把朗姆酒倒入玻璃杯中。\n", "updated_content": null, "outdated_content": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶在一个牛奶罐里,这个牛奶罐在底层架子的最右边。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:无。\n我现在需要:把青柠和薄荷叶倒入玻璃杯中。\n", "outdated_reference_start_step": 0, "outdated_reference_end_step": 60 },
- "start_step": 756,
"end_step": 786,
我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n我现在需要:把苏打水倒入玻璃杯中{ "start_step": 756, "end_step": 786, "reference_start_step": 396, "reference_end_step": 426, "content": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠、薄荷叶和朗姆酒已经倒入玻璃杯中。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n我现在需要:把苏打水倒入玻璃杯中。\n", "updated_content_w_instruction": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠、薄荷叶和朗姆酒已经倒入玻璃杯中。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n我现在需要:把苏打水倒入玻璃杯中。\n" },
- "start_step": 786,
"end_step": 1176,{ "start_step": 786, "end_step": 1176, "reference_start_step": 756, "reference_end_step": 786, "content": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠、薄荷叶和朗姆酒已经倒入玻璃杯中。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n我现在需要:把苏打水倒入玻璃杯中。\n", "updated_content": null, "outdated_content": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠和薄荷叶已经倒入玻璃杯中。朗姆酒在底层架子的中间。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n我现在需要:把朗姆酒倒入玻璃杯中。\n", "outdated_reference_start_step": 396, "outdated_reference_end_step": 426 },
- "start_step": 1176,
"end_step": -1,
我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我现在需要:等待用户享用鸡尾酒!{ "start_step": 1176, "end_step": -1, "reference_start_step": 756, "reference_end_step": 786, "content": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠、薄荷叶和朗姆酒已经倒入玻璃杯中。苏打水在顶层架子的最左边。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n我现在需要:把苏打水倒入玻璃杯中。\n", "updated_content": "场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠、薄荷叶、朗姆酒和苏打水都已倒入玻璃杯中。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我现在需要:等待用户享用鸡尾酒!\n", "updated_content_w_instruction": "指令:给我调一杯鸡尾酒。\n机器人提问:您想要哪种鸡尾酒?我们有三种选择:莫吉托、富士山、伏特加日出。\n用户回答:我想要一杯莫吉托。\n场景描述:我需要找到青柠、薄荷叶、朗姆酒和苏打水。青柠、薄荷叶、朗姆酒和苏打水都已倒入玻璃杯中。\n计划:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我已完成:1. 把青柠和薄荷叶倒入玻璃杯中。\n2. 把朗姆酒倒入玻璃杯中。\n3. 把苏打水倒入玻璃杯中。\n我现在需要:等待用户享用鸡尾酒!\n" } ] }
1.2.3 具备「具身推理能力的视觉-语言数据」的可扩展合成:提升模型泛化能力
如上一节所述,精心筛选的机器人数据能够让模型直接学习所需任务,但其数据量与昂贵的人力投入呈线性增长,导致大规模数据集的构建变得不可行
为使OneTwoVLA具备更强的泛化能力并能应对高度多样化的场景,作者利用现成的基础模型,设计了一套完全可扩展的流程,用于合成富含具身推理的视觉-语言数据
该流程包括三个步骤:
- 使用 Gemini 2.5 Pro [64] 生成多样化的桌面布局文本描述,涉及常见家用物品
- 基于这些文本描述,利用文本到图像生成模型 FLUX.1-dev [65-https://github.com/black-forest-labs/flux] 合成高质量的桌面布局图像
且进一步通过随机应用鱼眼畸变或将自适应亮度的机器人夹爪合成到图像中,对合成图像进行增强,从而使视觉效果更加丰富 - 最后,再次利用 Gemini 2.5 Pro 为每一张合成图像生成任务指令及相应的推理内容
通过该流程,作者自动生成了16,000个数据样本,示例如图3右所示
最终,生成的任务指令分为两类:
- 视觉定位任务
66-Interactive visual grounding of referring expressions for human-robot interaction
67-Hifi-cs: Towards open vocabulary visual grounding for robotic grasping using vision-language models
68-Gvcci: Lifelong learning of visual grounding for language-guided robotic manipulation
在此类任务中,指令通过空间关系、属性或语义特征隐含地指向图像中的某一对象。相应的推理过程必须明确指出该对象的名称,并可选择性地给出其位置 - 长周期任务,在此类任务中,指令描述了一个持续的、多步骤的目标。推理过程必须提供一个高层次的、逐步的计划以完成该任务
进一步而言,16,000张合成图像全部由Gemini 2.5 Pro自动标注,完全无人为干预
- 其中6,000张图像用于生成视觉指向任务。每张图像均配有17组指令-推理对,指令分别通过直接名称(2例)、空间关系(5例)、属性(5例)和语义特征(5例)来指代对象
- 其余10,000张图像则被标注为长周期规划任务,并附有相应的高层次、分步骤任务完成方案
且作者也尝试使用GPT-4o对合成图像进行标注,但发现其空间理解能力较弱。因此,他们选用Gemini 2.5 Pro,其空间推理能力表现更为出色且作者展示了由以具身推理为核心的视觉-语言数据合成流程生成的示例
- 表10和表11分别展示了针对视觉定位和长时序任务合成的数据样本,每个样本均包含桌面布局的文本描述、与这些描述对应的合成图像,以及配套的指令-推理对(对于视觉定位示例,每种参考类型仅展示一个指令-推理对)
- 图11展示了在合成图像中应用鱼眼畸变或将机器人夹持器以自适应亮度合成后的效果
此外,图12、13和14详细展示了作者在整个流程中使用Gemini 2.5 Pro的具体提示词:
- 图12展示了用于生成多样化桌面描述的提示词
- 而图13和14则分别展示了用于生成视觉定位
长时序任务指令及其相关推理的提示词
1.3 实验
1.3.1 长时域任务规划:涉及硬件、长时序任务、基线方法、可泛化的规划
第一,对于硬件
作者使用了两种机器人平台
- 主要平台为一台配备并联夹爪的7自由度Franka机械臂。腕部安装的GoPro相机配有鱼眼镜头,可提供广角视野。本研究的大部分实验均采用该平台进行
具体而言,这是一台配备有Weiss WSG-50并联夹爪的7自由度Franka机械臂。腕部安装的GoPro相机配有鱼眼镜头,能够提供广角观测
机械臂安装在一个定制的可调高度桌面上,该桌面可以由人推动——虽然并非自动化移动,但这种移动性使得能够在传统实验室环境之外评估策略。动作空间为7维(6自由度末端执行器位姿加夹爪宽度)。该平台的专家演示数据通过UMI [79]收集 - 此外,他们还使用了一套双臂平台,包括两台6自由度ARX机械臂,和三个摄像头(两个安装于腕部,一个安装于基座),主要用于通用化规划实验。更多细节请参见附录F
该平台配备了两台6自由度的ARX机械臂,带有并联夹爪,以及一个三摄像头系统(两个安装在腕部,一个安装在底座)
此外,还包括一个全向轮移动底座和一个1自由度的躯干升降机构,但这些部件尚未在他们的实验中使用。由此产生的动作空间为14维(2×7)
专家演示通过使用Meta Quest头显进行遥操作采集
第二,对于长时序任务
作者设计了三个具有挑战性的长时序任务(如下图图4所示,更多细节见附录A),每个任务都要求机器人理解场景、据此规划、准确跟踪任务进展,并在执行过程中持续生成精确动作
- 番茄炒蛋Tomato-Egg:机器人先倒油,然后依次将番茄液和蛋液倒入烹饪机
烹饪完成后,需用勺子将炒蛋盛到盘中——这是一个需要高度精细操作的接触型动作
机器人首先倒入食用油,然后将西红柿和蛋液倒入烹饪机。烹饪完成后,机器人从挂架上取下勺子,舀出西红柿炒蛋,盛到盘子里,最后将勺子放回烹饪机
作者观察到,有时机器人未能牢固抓握油瓶,导致油瓶从夹爪中滑落。为此,作者专门收集了油瓶滑落后重新抓握的恢复数据,使机器人在测试过程中遇到油瓶滑落时能够自动执行恢复操作
作者为该任务收集了200个机器人演示样本 - 火锅Hotpot:四个装有不同食材的盘子相对位置各异
机器人必须依次夹取牛肉和一种蔬菜,准确放入漏勺中,最后提起漏勺
且他们特别收集了用于纠正夹取偏差的恢复数据,使机器人在测试中如果未能夹起漏勺时能够自动进行恢复
最终为该任务共收集了600次机器人演示 - 鸡尾酒Cocktail:机器人需调制三种鸡尾酒之一(莫吉托、富士山或伏特加日出),每种鸡尾酒都需分3-4步依次倒入不同原料。机器人必须区分近十种外观相似的原料,并精确倒入
对于OneTwoVLA和双系统方法,在10次试验中,最初的人类指令是通用的:“给我做一杯鸡尾酒。” 机器人必须通过询问:“您想要哪种鸡尾酒?”来澄清需求,然后根据人类的具体选择继续操作。对于π0,这一步交互同样被省略
此外,在3次伏特加日出的试验中,人类会打断并说:“我不要橙味伏特加,我要柠檬味的。”这时机器人需要放下橙味伏特加,改为拿起柠檬味伏特加
最终,作者为每种鸡尾酒收集了100次机器人演示,总计300次演示
以下是「长时域任务规划」的另一个推理示例
第三,对于基线方法
作者将OneTwoVLA与两种基线方法进行比较:
- 一种最先进的VLA模型π0[12]
为确保公平比较,他们在与OneTwoVLA相同的数据集上对π0进行微调; - 一种受VILA『4,详见此文《让VLM充当机器的指路人——VLM规划下加约束:从SayCan、VoxPoser到ViLA、CoPa、ReKep》的第三部分』启发的双系统方法
其中他们使用Gemini 2.5 Pro作为高层的System Two,将复杂指令分解为一系列原子指令
随后,他们用原子指令对数据集进行标注,并对π0进行微调,使其作为底层的System One运行
相当于组合了:Gemini 2.5 Pro + (微调)π0
第四,对于实验结果
- 如表1所示
OneTwoVLA在三个具有挑战性的任务中实现了87%的平均成功率,分别比π0高出30%,比双系统方法VILA高出24%
OneTwoVLA能够持续生成正确的计划,准确跟踪任务进度,并输出精确的动作 - 相比之下,缺乏显式推理和历史信息的方法在实际操作中,π0有时会丢失当前步骤的跟踪——例如在准备Mojito时一直停留在初始位置,或在Hotpot任务中反复拿取牛肉
且作者还观察到,显式推理有助于更细粒度的动作学习;在Hotpot任务中,π0有时无法准确抓取配料,或在Tomato-Egg任务中舀取过轻,而OneTwoVLA能够精确完成这些细致动作
至于双系统方法VILA,作者发现由于两个系统之间缺乏互相感知,其能力存在局限性。系统二有时会输出系统一无法执行的原子指令(例如在Tomato-Egg任务中指示加入葱,但实际上没有葱)
此外,Gemini 2.5 Pro的显著推理延迟,可能导致系统二无法及时更新推理内容,从而使系统一在执行过程中遇到分布外状态
第五,对于可泛化的规划
作者研究了如何通过与大规模视觉-语言(VL)数据的协同训练,提高OneTwoVLA在任务规划中的泛化能力
- 具体而言,作者为多种原子技能(如抓取、放置、开启等)在两种机器人平台上收集了额外的演示数据
- 随后,作者将这些机器人数据与上文1.2.3节(对应于原论文第3.3节)所述流程合成的VL数据一同对OneTwoVLA进行协同训练
在测试阶段,OneTwoVLA接收到的指令在机器人数据中从未出现过(例如图4最后一列所示的任务)
但仍然表现出很强的泛化能力,实现了从VL数据到机器人控制的知识迁移。例如,机器人能够主动寻找不可见的物体(如打开冰箱寻找冰可乐),并能够处理复杂的空间关系,如遮挡(例如在接收到“递给我一个空盘子”相关指令时,先将水果从盘子中移除)等
此外,OneTwoVLA 展现了对场景感知的人类意图理解,能够处理诸如“帮我保持清醒”时准备咖啡、“我想要健康的东西”时准备羽衣甘蓝汁、“我心情低落”时准备蓝色心情鸡尾酒等抽象请求
使用单臂Franka系统和双臂ARX系统收集了2,000个机器人演示。每个演示都属于某一类别的原子技能,包括抓取、放置、移动、打开、关闭和倒液。这些演示的任务指令及其对应的推理内容,均聚焦于短时序的原子技能。仅在这些数据上进行训练,会限制模型对泛化性强的长时序规划能力
OneTwoVLA通过与作者合成的以具身推理为核心的视觉-语言数据进行联合训练,克服了这一局限,使其能够泛化到此前未见过的任务。图7展示了这些未见任务的完整执行过程——4个可泛化规划任务的执行流程:获取冰可乐、空盘、准备饮品(以羽衣甘蓝汁制作为例)、
工具使用
具体任务描述如下:
- 取冰可乐:指令为“给我拿一罐冰可乐”
挑战在于可乐罐在场景中并不可见。机器人必须推断出“冰可乐”意味着可乐存放在冰箱里,因此需要规划出打开冰箱、找到可乐并取出的必要步骤- 空盘子:指令为“把一个空盘子递给我”
然而,场景中的盘子并不是空的,盘子上有苹果和葡萄。机器人需要先将盘子上的每个水果移除,最后才能拿起空盘子- 工具使用:指令为“拿起可可粉罐头,它超出了可及范围”
这里的主要难点在于目标物体不在机器人直接可及的范围内。机器人必须识别出需要使用工具(附近有一根棍子),规划先抓取棍子,利用棍子将远处的可可粉罐头拨到可及范围,然后才能去拾取罐头- 准备饮品:机器人需要根据用户意图规划并准备合适的饮品
例如针对“帮我提神”准备椰子拿铁,针对“我想要健康一点的”准备羽衣甘蓝果汁,以及针对“我心情低落”准备蓝色心情鸡尾酒
此任务要求具备场景感知的用户意图理解能力
1.3.2 错误检测与恢复
从错误中恢复是通用型机器人至关重要的能力[69–73]
- 69-Automating robot failure recovery using vision-language models with optimized prompts
- 70-Automated behavior tree error recovery framework for robotic systems
- 71- Towards automatic error recovery in robot programs
- 72-Error recovery in robot systems
- 73-Reset-free trial-and-error learning for robot damage recovery
- OneTwoVLA能够实时检测错误,快速推理恢复策略,并基于收集到的机器人恢复数据生成纠正动作
例如,在Hotpot任务中,机器人有时因对齐不准确而未能抓取滤网。此时,OneTwoVLA会推理出应先收回机械臂,重新定位以与滤网对齐,然后再次尝试抓取,最终成功将其提起
相比之下,π0常常忽略错误,即使未抓住滤网也继续抬起夹爪——我司在有的任务中 也会遇到这个问题,但排查后 可解决 - 在Tomato-Egg任务中,倒油时油瓶有时会从夹爪中滑落。OneTwoVLA能够识别出该错误,推理出应调整抓取方式以增强夹持力度,并重新执行动作
然而,双系统方法VILA由于延迟问题未能及时响应。System Two 只有在机器人已到达倒油位姿后才提示油瓶未被夹持,此时机器人已进入分布外状态,恢复变得困难
说白了,OneTwoVLA能及时发现问题、从而及时纠错
针对上面说的「错误检测与恢复推理」两种情况,下图汇总了
1.3.3 自然的人机交互
为了在以人为中心的场景中部署机器人,自然与人类互动的能力是不可或缺的[74–77]
74-Human–robot interaction: status and challenges
75- Human–robot interaction: a survey
76- Human–robot interaction
77-An atlas of physical human–robot interaction
- 凭借其自适应特性和显式推理过程,OneTwoVLA 能够以自然的方式与人类交流——既能无缝应对人的干预,也能在遇到歧义时主动寻求澄清
例如在 Hotpot 任务中,当人类插话说:“你能再帮我涮一种蔬菜吗?”时
OneTwoVLA 会立即作出澄清回应:“好的!您想要青菜、金针菇还是白菜?”在Cocktail 任务中,当机器人正在调制 Vodka Sunrise,而人类插话说:“我不要橙味伏特加,我想要柠檬味的” 时
OneTwoVLA 会立刻推理出需要放下橙味伏特加,取出柠檬味伏特加,并生成与人类意图相符的动作序列 - 相比之下,双系统方法VILA在交互过程中经常丢失上下文,难以保持连贯的推理流程,在上述示例中仅仅是拿起柠檬味伏特加,却没有继续完成鸡尾酒的制作
而 π0 则无法进行此类基于语言的人机交互,因为它无法输出文本推理内容
1.3.4 增强型视觉定位
将语言指令中的对象与视觉世界进行定位,是机器人完成更复杂任务的前提
作者将视觉定位分为三个关键方面:空间关系、对象属性和语义特征
- 66-Interactive visual grounding of referring expressions for human-robot interaction
67-Hifi-cs: Towards open vocabulary visual grounding for robotic grasping using vision-language models
68-Gvcci: Lifelong learning of visual grounding for language-guided robotic manipulation- 78- Ingress: Interactive visual grounding of referring expressions
为了验证OneTwoVLA在这些方面的有效性,他们设计了需要复杂对象定位能力的指令跟随实验
此外,为了展示他们合成视觉-语言数据的影响,还在开放世界环境下进行了实验,此环境中多样化的物品和环境带来了额外挑战
具体的实验设置如下所述(见图5):
- 单环境(Single-Env)
在单一环境中,四个物体被随机摆放在桌面上,他们使用 UMI[79] 设备为每个物体收集了 50 次抓取演示,总计 200 次演示
在测试阶段,他们在同一环境下、使用同样的四个物体,对每种方法各进行 40 次测试 - 开放世界(Open-World)
他们在 16 个多样化的真实环境中收集了演示数据,总计使用 UMI 设备获得了933 个有效演示。每次演示都涉及将机械手夹移动到场景中随机选定的物体,共包含 180 种不同的家用物品
在测试阶段,他们在 8 个未见过的环境中评估每种方法,每个环境测试 5次,每次从 20 个物体中随机选取一个:其中包括 5 个在机器人数据中见过的物体
10 个机器人数据中未见但出现在合成视觉-语言数据中的物体
以及 5 个在任一数据集中都未见过的物体
在训练和测试两种场景中,指令通过目标对象的名称、空间关系、属性或语义特征来指代目标对象。他们的标注推理明确识别目标对象的名称,并包含关于该对象的附加信息
且比较了三种方法:
- OneTwoVLA-VL:在机器人数据和16,000条合成视觉-语言数据上进行训练
- OneTwoVLA:仅在机器人数据上训练,用于学习推理和行动
- π0:仅在机器人数据上训练,直接根据指令预测动作。附录A.3提供了更多细节
经过实验,他们得出两个结论
第一,显式推理有助于实现视觉对齐
在Single-Env设置下,如表2所示,OneTwoVLA的成功率达到78%,显著优于π0。π0的成功率仅为5%
- 在大多数情况下,OneTwoVLA能够准确理解指令中描述的空间关系、物体属性和语义特征,推理出正确的目标物体,并成功抓取目标物体
相比之下,π0几乎始终无法理解指令,即使明确指出了目标物体,π0通常也是毫无目标地向前伸出夹爪,或随机抓取最近的物体。这种明显的性能差距表明,显式学习推理能够帮助模型真正理解视觉世界,而不是试图通过捷径来过拟合动作 - 此外,作者还发现推理内容同样有助于模型对动作的拟合,正如π0在验证集上的动作均方误差(MSE)比OneTwoVLA高62%所体现的那样
第二,以推理为核心的视觉-语言数据实现了可泛化的视觉定位
在开放世界设置中,OneTwoVLA-VL 的成功率达到 73%,显著优于 OneTwoVLA 和 π0
- 在大多数情况下,OneTwoVLA-VL 能够正确处理机器人数据中未出现但视觉-语言(VL)数据中存在的物体,有效地将常识知识从 VL 数据迁移到机器人策略
值得注意的是,OneTwoVLA-VL甚至能够泛化到既未出现在机器人训练数据中,也未出现在 VL 训练数据中的新颖物体(例如,Sprite、GoPro)
作者将这种卓越的泛化能力归因于视觉-语言(VL)数据的联合训练,这一过程能够更好地激活预训练视觉-语言模型中已经编码的网络知识 - 相比之下,OneTwoVLA 和 π0 经常表现出无目标的抓取行为——即使对于训练数据中已出现的物体也是如此——这表明它们仅仅对动作训练数据产生了过拟合,而未能在这一复杂多样的环境中真正理解视觉环境
1.3.5 OneTwoVLA的局限性
尽管 OneTwoVLA 展现出了有前景的结果,但仍存在若干局限性,未来的研究可以加以改进
- 首先,OneTwoVLA 的推理内容基于作者精心的人工标注,而在大语言模型领域,强化学习已被广泛应用于提升推理能力[80–82]。未来的工作可以探索类似的方法,以增强 VLA 模型的推理能力
- 其次,尽管他们的自适应框架允许模型仅在任务执行中的关键步骤进行推理,但机器人在推理过程中仍需暂停两到三秒
未来研究可以探索异步架构的设计,从而实现推理与动作生成的同时进行——对于这点,我解释下,其实类似我博客内解读过的:《实时动作分块RTC——为解决高延迟,让π0.5也可以点燃火柴、插入网线:执行当前动作分块时生成下一个分块,且已执行的冻结 未执行的则补全》 - 最后,由于资源限制,作者仅研究了高质量合成视觉-语言数据对 VLA 推理能力的影响。未来的工作可以进一步探索来自多种来源的视觉-语言数据的影响
// 待更
第二部分 OneTwoVLA的安装、训练、部署
我们在5090上 按部就班的下载,且第一次下载没成功,后面又做了第二次下载,重新输入下图所示的命令
2.1 OneTwoVLA 数据收集详细指南
2.1.1 硬件环境设置
- 对于机器人配置
机器人型号: 支持UMI接口的机械臂(如Panda)
摄像头: RGB摄像头,分辨率至少224x224
采样频率: 60fps
控制接口: 末端位置、旋转、夹爪控制 - 对于数据采集软件https://github.com/Fanqi-Lin/OneTwoVLA-UMI-Client
# 安装UMI客户端 git clone https://github.com/Fanqi-Lin/OneTwoVLA-UMI-Client cd OneTwoVLA-UMI-Client pip install -r requirements.txt
2.1.2 数据收集过程
- 对于原始数据格式(UMI格式)
采集时会生成以下文件:your_demo_folder/ ├── dataset.zarr.zip # 包含所有传感器数据 ├── instruction.txt # 每个episode的指令描述 └── metadata.json # 元数据信息
- 对于数据内容详解
涉及
A. 图像数据
B. 机器人状态数据# 存储格式 "camera0_rgb": shape=(T, 224, 224, 3), dtype=uint8 # T是时间步数,每个timestep一张图像
C. 动作数据# 末端位置 (3D坐标) "robot0_eef_pos": shape=(T, 3), dtype=float32 # 末端旋转 (轴角表示) "robot0_eef_rot_axis_angle": shape=(T, 3), dtype=float32 # 夹爪宽度 "robot0_gripper_width": shape=(T, 1), dtype=float32 # 演示起始姿态 (位置+旋转) "robot0_demo_start_pose": shape=(T, 6), dtype=float32
# 组合动作向量: [位置(3) + 旋转(3) + 夹爪(1)] "actions": shape=(T, 7), dtype=float32
- 对于Episode分割
# 每个episode的结束索引 "episode_ends": [120, 245, 378, ...] # 表示第一个episode在第120步结束
2.1.3. 数据转换为LeRobot格式
- 对于转换脚本使用
# 转换单个数据集 uv run examples/umi/convert_umi_data_to_lerobot.py \ --data_dir /path/to/your/umi/data \ --repo_name umi/your-task-name # 转换多个数据集(包含视觉语言数据) uv run examples/umi/convert_umi_data_to_lerobot.py \ --vl_data_path_list "path1,path2,path3" \ --vl_number_per_task "10,15,20" \ --vl_task_list "task1,task2,task3" \ --repo_name umi/combined-dataset
- 对于转换后的文件结构
$LEROBOT_HOME/umi/your-task-name/ ├── data/ │ ├── chunk-00000-of-00001.parquet # 元数据 │ └── videos/ │ ├── image/ │ │ ├── episode_000000.mp4 # 第一个episode的视频 │ │ ├── episode_000001.mp4 │ │ └── ... └── meta.json # 数据集元信息
- GitHub上
https://github.com/Fanqi-Lin/OneTwoVLA/blob/main/src/openpi/policies/umi_dataset.py
2.1.4 数据质量要求
- 任务复杂度
简单任务: 2-5个子步骤(如抓取放置)
复杂任务: 5-15个子步骤(如调制鸡尾酒)
交互任务: 包含人机对话的任务 - 数据量建议
每个任务: 最少20个episode,推荐50-100个
总时长: 每个episode 1-5分钟
成功率: 至少80%的episode应该成功完成任务 - 环境多样性
光照条件: 不同时间、不同光源
物体位置: 随机摆放目标物体
背景变化: 不同的工作台背景
视角变化: 轻微的摄像头角度变化
2.1.5 指令文件编写
# 每行一个episode的指令
Make me a mojito cocktail
Place the red cup on the blue plate
Pick up the apple and put it in the basket
Clean the table surface
2.1.6 常见问题和解决方案
- 对于数据同步问题
确保图像和机器人状态数据时间戳对齐
检查采样频率一致性 - 数据质量检查
# 检查脚本示例 import zarr def check_data_quality(zarr_path): store = zarr.ZipStore(zarr_path, mode='r') replay_buffer = ReplayBuffer.copy_from_store(store, zarr.MemoryStore()) # 检查数据完整性 assert len(replay_buffer['camera0_rgb']) == len(replay_buffer['robot0_eef_pos']) # 检查动作幅度合理性 actions = replay_buffer['robot0_eef_pos'][:] assert np.all(np.abs(np.diff(actions, axis=0)) < 0.1) # 动作不应该有突变
- 数据预处理
图像预处理: 确保图像尺寸为224x224
动作平滑: 对噪声较大的动作数据进行滤波
异常值处理: 移除明显错误的数据点
2.2 如何基于24G的显卡对onetwovla 做LoRA微调
由于我司的5090上没法跑OneTwoVLA——环境问题,torch版本不匹配,故在auto上租了一块4090 24G,但最终OOM了
且即便换成48G,由于代码默认是全量微调参数,故仍有显存溢出的问题,故可以考虑lora微调
其实这不难理解,我还对同事们说,OneTwoVLA本身基于的openpi实现,而π0本身有3B
- 虽然如果是推理,显存大于8G即可
- 但全量微调一般建议用80G的显卡,如果手头上只有24G或48G,则可考虑lora微调
故,同事朝阳在autodl-tmp/OneTwoVLA/src/openpi/training/config.py「对应于代码库中的:src/openpi/training/config.py」中添加lora相关的参数,使得最终代码成功跑通
// 待更
更多推荐
所有评论(0)