具身智能论文学习8:Octo: An Open-Source Generalist Robot Policy

第一部分:基本收录情况

项目 内容
论文全名 Octo: An Open-Source Generalist Robot Policy
中文译名 《Octo:一种开源通用机器人策略》
正式会议 Robotics: Science and Systems XX
会议简称 RSS 2024
会议时间 2024年7月15日至19日
会议地点 荷兰代尔夫特
正式论文编号 RSS 2024,Paper 090
arXiv编号 arXiv:2405.12213
上传版本 arXiv v2,2024年5月26日,17页
作者团队 Octo Model Team
主要机构 UC Berkeley 主导,联合 Stanford、CMU、Google DeepMind 的 Octo Model Team
论文类型 通用机器人策略、模仿学习、跨具身预训练
预训练数据 Open X-Embodiment中的约80万条机器人轨迹
数据集数量 25个子数据集
模型规模 Octo-Small 27M;Octo-Base 93M
实验平台 9种真实机器人设置、4个机构
动作生成 条件扩散动作头、连续动作块
任务条件 自然语言指令或目标图像
是否开源 模型权重、训练与微调代码、数据加载工具均开放
是否严格VLA 宽泛意义上可以算;但不是VLM/LLM中心型VLA

第二部分:解决的问题

Open X-Embodiment→多机器人、大规模数据

Diffusion Policy→连续动作序列与扩散动作生成

Octo正好把前两条路线接起来:

Open X-Embodiment多机器人数据+Transformer+扩散动作头=Octo通用机器人策略​

换句话说,Diffusion Policy主要是:

一个任务的数据→一个任务专用的扩散策略

而Octo进一步研究:

多个机器人、多个任务的数据→一个能够继续适配的通用策略

Octo官方项目将其描述为一种Transformer-based diffusion policy,即基于Transformer的扩散机器人策略。


第三部分:核心目标:Octo要实现的三种灵活性+两种实现方式

(1)灵活的任务定义(告诉机器人要做什么)

任务可以由两种方式指定:

①自然语言指令

例如:

Put the knife on the plate.

②目标图像

即给模型一张希望最终达到的场景图像。

(2)灵活的观测输入(告诉机器人现在是什么情况)

Octo可以接收下面这几种作为观测输入

  • 第三人称RGB图像;
  • 腕部RGB图像;
  • 图像历史;
  • 机器人本体信息;
  • 下游新加入的力/力矩等传感器。

(3)灵活的动作空间

Octo 预训练好以后,可以通过微调适配新的机器人动作表示​

它可以在微调中适配:

  • 末端执行器增量控制;
  • 关节位置控制;
  • 单臂动作;
  • 双臂14维动作。

(4)两种使用模式

①直接使用

在训练数据中已有的机器人和兼容动作接口上,无需额外训练直接控制。

②下游微调

对于新机器人、新传感器或新动作空间,用约100条目标域示范进行微调。

论文将这两种能力分别称为: Out-of-the-box control和: Efficient finetuning

第四部分:Octo核心内容

(1)整体框架

Octo 的整体策略是端到端从任务/视觉观测生成机器人动作的,因此功能上属于 VLA 范畴

Octo不是直接让Transformer生成离散动作token,而是先让Transformer理解当前任务和观测,再将其结果交给一个小型扩散动作头生成连续动作序列:

  • 左上角:用语言指令 举例说明 Task Token 怎么产生;
  • 左下角:用当前 RGB 观测 举例说明 Observation Token 怎么产生
  • 绿色 Task:任务是什么,比如语言指令或 Goal Image。通常作为整个序列的任务条件。
  • 蓝色 Observation:每个时刻机器人当前看到的观测,比如 RGB 图像、机器人状态等。
  • 紫色 Readout:放在某个时刻的 Observation 后面,把"任务 + 到目前为止的观测"汇总起来。
  • Action Head → :拿 Readout 的表示去生成机器人动作;实际上 Octo 的 Action Head(输出转化为机器人动作 ) 是 Diffusion Action Head得到一个动作,整体上会生成一个段动作块Action Chunk(输出序列)

任务+观测 → 分词器 Tokenizer → Octo Transformer → Readout读出/汇总表示 → Diffusion Action Head → 动作块

  • :自然语言指令;
  • :目标图像;
  • :最近若干时刻的观测;
  • :语言、目标图像和观测对应的token;
  • :Octo Transformer;
  • :Readout Token产生的动作条件表示,里面汇总总结了:任务信息 + 当前观测信息
  • ,从高斯噪声开始进行多步去噪,真正生成连续动作块

(2)输入如何转换为Token

①语言指令

语言指令先经过文本Tokenizer,再输入预训练的:T5-base 约有111M参数,最终为每条指令产生16个语言embedding token。

Put the knife on the plate.

会被转换成:,论文实验发现,冻结T5-base的效果最好;换成更大的T5或微调其最后几层都没有带来明显提升。

②第三人称图像

图像编码器:Octo 不采用大型 ResNet 作为独立视觉骨干,而使用浅层卷积网络(shallow convolution stack)对 RGB 图像进行初步编码,再划分为 16×16 patches,形成视觉 tokens。

第三人称图像→浅层卷积网络→Patch→Visual Tokens​

指的是:摄像头装在桌子旁、墙上、支架上,能看到机械臂、桌面、物体等整体场景

第三人称图像经过数据增强后缩放为:256×256,再通过浅层卷积网络并切分为:16×16 的patch,得到:16×16=256个视觉token。

③腕部图像

图像编码器:Octo 不采用大型 ResNet 作为独立视觉骨干,而使用浅层卷积网络(shallow convolution stack)对 RGB 图像进行初步编码,再划分为 16×16 patches,形成视觉 tokens。

腕部图像→浅层卷积网络→Patch→Visual Tokens​

摄像头装在机械臂手腕/夹爪附近,看到的是机器人末端附近的局部画面,腕部图像缩放为:128×128 同样使用 16×16 patch,因此得到: 8×8=64 个视觉token。

④目标图像

图像编码器:Octo 不采用大型 ResNet 作为独立视觉骨干,而使用浅层卷积网络(shallow convolution stack)对 RGB 图像进行初步编码,再划分为 16×16 patches,形成视觉 tokens。

Goal Image→浅层卷积网络→Patch→Visual Tokens

目标图像与普通观测图像使用相似的视觉Tokenizer,但被标记为任务条件而不是当前环境观测。

所有token还会加入可学习的位置embedding,以便Transformer区分:

  • 这是任务token还是观测token;
  • 来自哪个摄像头;
  • 属于哪个真实时间步。

(3)Octo Transformer与分块注意力

Octo不是简单地把所有token完全混在一起,而是使用:

Block-wise Masked Attention,分块掩码注意力。

假设输入序列为:,其中:

  • :语言或目标图像等任务token;
  • :第 个时刻的观测token;
  • :第 个时刻的Readout Token。

①观测token的注意力规则

个时刻的观测token只能看到: 以及:,也就是:

可以看到任务条件、当前观测和历史观测,但不能看到未来观测。

这是因果结构,避免训练时泄露未来信息。

②缺失模态直接屏蔽

有些数据集没有:

  • 语言标注;
  • 腕部相机;
  • 第二个摄像头。

Octo不会要求每个数据集拥有完全相同的输入,而是把不存在的token位置屏蔽

因此,同一个Transformer可以处理不同数据集的不同传感器组合。

③Readout Token(读出/汇总表示)

Octo在每个观测块后加入一个可学习的Readout Token:,它类似BERT中的 [CLS] token。

Readout Token可以读取前面的任务和观测信息,但普通观测token不会反过来关注它。因此,它像一个"只读汇总器",把当前时刻之前的信息压缩成: 然后交给动作头。

所以:Readout Token不直接表示动作,而是动作生成所需的条件表示​。

(4)条件扩散动作头

①Transformer先生成条件表示

,其中 包含:

  • 当前任务;
  • 当前与历史图像;
  • 场景和物体信息;
  • 机器人当前应执行动作的上下文。

②从随机动作噪声开始

比如 Octo 一次要生成 4 个未来动作:,Diffusion Action Head 一开始生成的是一个同样形状的随机噪声动作块 其中 是一段完全随机的动作序列,即

③多次条件去噪

然后每一次 diffusion step 都对整个动作块一起去噪

  • :当前带噪动作块;
  • :Transformer产生的任务与观测条件;
  • :当前扩散步骤;
  • :小型去噪网络;
  • :噪声调度参数。

反复执行:,最终 就是连续动作块,等同于:整段未来动作一起越来越干净。

Octo的扩散动作头是一个三层MLP,隐藏维度为256,包含残差连接和LayerNorm,并使用20个扩散步骤。

④与原始Diffusion Policy的关系

Octo沿用了Diffusion Policy的基本思想,但做了一个非常重要的计算设计:大型Transformer只运行一次,重复去噪只发生在小型动作头中​

原始Diffusion Policy通常是:

视觉编码器+大型扩散策略网络

Octo则是:

通用Transformer只编码一次+小型扩散头重复去噪

因此,它把跨机器人通用表示和连续扩散控制进行了分工。

(5)动作块Action Chunking与闭环控制

Octo不是只预测当前一个动作,而是预测: 即未来多步动作块。

Action Chunking有两个作用:

①第一,整段动作共同生成,可以提高时间一致性,减少机械臂逐步预测时的抖动

②第二,多步预测能让策略形成较完整的局部动作意图,例如:靠近→下降→抓取→抬起

但机器人不会始终开环执行完整动作块,而是采用滚动时域控制

预测动作块→执行前若干步→重新观察→重新预测

论文没有把所有任务固定为同一动作块长度,而是允许根据下游控制频率调整。例如双臂ALOHA任务中,训练时预测64步动作,推理时执行前12步后重新规划。

(6)训练数据与跨机器人数据统一

Open X-Embodiment当时约包含:150万条机器人episode

Octo从中筛选出:80万条episode,来自25个子数据集。

①数据筛选

作者删除了:

  • 没有图像输入的数据;
  • 不使用末端增量动作的数据;
  • 图像分辨率过低的数据;
  • 任务过于重复的数据;
  • 过度小众且不利于通用训练的数据。

因此,Octo的主预训练动作空间仍以:Delta End-Effector Control 为主,并没有在预训练时原生统一所有关节控制形式。

②数据采样权重

权重较高的数据集包括:

数据集 训练采样权重
Fractal 17.0%
Kuka 17.0%
Bridge 17.0%
BC-Z 9.1%
Stanford Hydra 6.0%
Language Table 5.9%

这些百分比是:

每个训练batch中的平均采样权重。

不是原始80万条轨迹的简单数量占比。

作者会提高任务和场景更丰富的数据集权重,并降低重复性较强的大数据集权重。

图3展示了Octo预训练时25个子数据集在每个训练batch中的平均采样权重。占比最大的三部分是Fractal、Kuka和Bridge,三者各约占17%,其后为BC-Z约9.1%、Stanford Hydra约6.0%和Language Table约5.9%,其余数据集以较小比例共同提供不同机器人、场景和操作任务。图中的扇形面积不是80万条原始轨迹的严格数量占比,而是训练采样概率;作者首先根据数据集规模设置基础权重,再对任务和环境更加多样的数据集进行上调,对重复性过强的大数据集进行下调,以避免少数数据集主导训练。因此,Figure 3体现的核心设计是通过人工筛选和加权在"数据量"与"行为多样性"之间取得平衡,而不是把Open X-Embodiment中的全部数据等比例混合。

③缺失摄像头的处理

某数据集没有腕部相机时,使用零填充占位,再通过注意力掩码避免模型使用不存在的内容

④夹爪动作统一

作者将不同数据集的夹爪动作统一为:1=夹爪打开 0=夹爪闭合

最终选择绝对夹爪状态,而不是只在开关变化时记录动作的相对表示。

(7)预训练配置与模型规模

Octo提供两个主要版本。

模型 层数 隐藏维度 MLP维度 注意力头 参数量
Octo-Small 12 384 1536 6 27M
Octo-Base 12 768 3072 12 93M

另外还有消融实验使用的:Octo-Tiny=10M

主模型使用最近两帧观测:

也就是当前帧加一帧历史。作者发现,从一帧增加到两帧能明显提高性能,但继续增加历史长度的收益有限,主要训练参数为:

参数 设置
Optimizer AdamW
学习率 3×10−4
Warmup 2000步
学习率调度 逆平方根衰减
Weight Decay 0.1
梯度裁剪 1.0
Batch Size 2048

Octo-Base训练300k步,在TPU v4-128上约用14小时。论文公开了:

  • 27M和93M模型权重;
  • JAX微调代码;
  • 完整预训练流程;
  • Open X-Embodiment数据加载器;
  • JAX和PyTorch兼容的数据工具。

(8)Octo如何适配新输入与新动作空间

①新增观测输入

例如新机器人增加力/力矩传感器:,可以加入:

  • 新的轻量编码器;
  • 新的输入位置embedding;
  • 新的token块。

原有Transformer结构不需要推倒重建。

②新增动作空间

假设预训练输出是7维末端动作,但新机器人需要14维双臂关节动作:

可以重新初始化一个新的扩散动作头,使其输出新动作维数。

③结构可扩展不等于只训练新模块

这里要注意:

Figure 2表示加入新输入或动作头时,不需要重新初始化原有Transformer参数。

但实际微调时,作者发现冻结部分参数效果不如全量更新,因此最终采用:

新增必要模块+全模型微调​

统一微调配置为:

  • 约100条目标域示范;
  • 训练50k步;
  • 余弦学习率衰减;
  • 线性warmup;
  • 单张24GB A5000约5小时。

第五部分:实验效果

(1)实验设计与对比方法

图4汇总了Octo在4个机构、9种真实机器人设置上的评估,并将其分为直接控制和下游微调两组。左侧三项为直接控制评估,包括WidowX BridgeV2、UR5 Tabletop和RT-1 Robot;这些机器人、RGB观测形式和末端增量动作接口均与预训练数据兼容,因此模型无需额外目标域训练即可执行任务,但仍需要适应新的物体位置、光照、背景和轻微相机变化。右侧六项为微调评估,包括Berkeley Insertion、Stanford Coffee、CMU Baking、Berkeley Pick-Up、Berkeley Coke和Berkeley Bimanual,分别覆盖精密插入、长时程操作、新关节动作空间、新机器人形态和双臂控制。Berkeley Insertion还加入了力/力矩观测,Berkeley Pick-Up和Berkeley Bimanual使用了新的关节位置动作空间。因此,这组实验不是简单测试九个任务,而是系统检验Octo能否在任务、传感器、动作空间和机器人形态发生变化时继续复用预训练知识。

论文围绕三个问题展开实验:

  1. Octo能否直接控制多种机器人?
  2. Octo是否是有效的下游微调初始化?
  3. 哪些设计真正决定通用机器人策略的性能?

实验覆盖:9种真实机器人设置 来自: 4个机构

①直接控制实验

包括:

  • WidowX BridgeV2;
  • UR5 Tabletop;
  • RT-1 Robot。

这些机器人和接口在预训练数据中已经出现,因此属于:

训练分布内机器人上的直接使用。

但测试时仍改变:

  • 物体位置;
  • 光照;
  • 背景;
  • 干扰物;
  • 相机轻微位置。

②微调实验

包括:

  • Berkeley Peg Insertion;
  • Stanford Coffee;
  • CMU Baking;
  • Berkeley Pick-Up;
  • Berkeley Coke;
  • Berkeley Bimanual。

它们分别测试:

  • 新力/力矩输入;
  • 精细长时程任务;
  • 新动作空间;
  • 新机器人形态;
  • 单臂到双臂迁移。

③对比方法

直接控制对比:

  • RT-1-X,35M;
  • RT-2-X,55B。

下游微调对比:

  • ResNet+Transformer从头训练;
  • VC-1预训练视觉编码器;
  • Octo预训练权重微调。

(2)直接控制实验结果

Octo在WidowX、UR5和RT-1 Robot上直接执行语言条件任务。

论文报告:Octo平均成功率比RT-1-X高29个百分点​

在有RT-2-X结果的WidowX和RT-1 Robot任务上,Octo与55B参数的RT-2-X表现接近,而Octo-Base只有93M参数。

图5比较了RT-1-X、Octo-Base和RT-2-X在WidowX、UR5与RT-1 Robot三种真实机器人设置上的直接控制成功率。蓝色柱为35M参数的RT-1-X,绿色柱为93M参数的Octo,橙色柱为55B参数的RT-2-X。图中Octo在WidowX上的成功率约为0.5,明显高于RT-1-X约0.2,并与RT-2-X约0.5相近;在UR5上,Octo约为0.7,高于RT-1-X约0.37;在RT-1 Robot上,Octo约为0.8,高于RT-1-X约0.6,并接近RT-2-X约0.85。论文综合三种机器人报告Octo比RT-1-X平均高29个百分点,同时在有RT-2-X结果的WidowX和RT-1 Robot上表现相近。由于这些机器人和控制接口来自预训练分布,这里的zero-shot或out-of-the-box应理解为无需目标域微调的直接使用,而不是对完全未见机器人和新技能的零样本泛化。

(3)更细的零样本泛化结果

泛化类型 平均成功率
训练分布内任务 85%
新物体 80%
新环境 40%
新技能 5%

新技能测试包括:

  • 把杯子翻倒:10%;
  • 把方块插入槽中:0%。

因此Octo擅长:**同一技能下换物体,**但不擅长:机器人从未演示过的新操作技能

(4)下游微调实验结果

所有方法在约100条目标域示范上进行训练,每个任务评估20次。

方法 插入 咖啡 烘焙 拾取 Coke 双臂 平均
从头训练 10% 45% 25% 0% 20% 20% 20%
VC-1 5% 0% 30% 0% 10% 50% 15%
Octo微调 70% 75% 50% 60% 100% 80% 72%

Octo平均达到:72%,从头训练的最佳平均值为:20%

因此Octo领先下一最佳基线:72−20=52个百分点

这些实验分别证明:

  • Berkeley Insertion:可以新增力/力矩输入;
  • Berkeley Pick-Up:可以从末端控制切换为关节位置控制;
  • Berkeley Coke:可以适配预训练中未见的机器人;
  • Berkeley Bimanual:可以从单臂预训练扩展到14维双臂动作。

因此,这一组实验比单纯的任务成功率更重要,它证明了:

Octo的预训练表示可以跨输入接口、动作空间和机器人形态迁移​

表1比较了三种初始化方法在六个下游机器人设置上的微调效果:ResNet加Transformer从头训练、使用VC-1预训练视觉表示,以及使用Octo预训练权重。每个目标域约提供100条示范,各方法使用相同微调超参数,并在每个任务上评估20次。Octo在Berkeley Insertion、Stanford Coffee、CMU Baking、Berkeley Pick-Up、Berkeley Coke和Berkeley Bimanual上分别达到70%、75%、50%、60%、100%和80%,平均成功率为72%;从头训练平均仅20%,VC-1平均为15%。其中星号表示Berkeley Insertion加入了新的力/力矩观测,十字符号表示Berkeley Pick-Up和Berkeley Bimanual采用新的关节位置动作空间。该结果说明,Octo带来的不是单纯更好的视觉特征,而是可迁移的任务---观测---动作策略表示,能够在少量目标域示范下适配新传感器、新控制接口以及预训练中未出现的机器人形态。


(5)消融实验与关键设计结论

表2在WidowX平台上比较了Octo的训练数据、动作预测目标和网络架构设计,所有结果均为两项语言条件任务和两项目标图像条件任务共40次试验的平均成功率。完整Octo-Small达到83%;当训练数据缩减为RT-X使用的11数据集混合时降至60%,只使用Bridge单机器人数据时进一步降至43%,说明数据集的跨机器人和跨任务多样性对通用策略性能至关重要。将扩散动作头替换为256-bin离散分类后,成功率只有18%;替换为普通连续MSE回归后为35%,表明离散动作缺少精细连续控制能力,而MSE容易在多种合理动作之间产生平均化和犹豫行为。将Octo的Transformer-first架构替换为ResNet-50加Transformer后达到70%,虽然仍然较强,但低于完整模型的83%。因此,Octo的性能不是单一组件造成的,而是广泛的数据混合、扩散连续动作建模和可规模化Transformer架构共同作用的结果。

论文在WidowX上对Octo-Small进行消融。

模型设置 综合成功率
完整Octo-Small 83%
RT-X的11数据集混合 60%
只用Bridge单机器人数据 43%
离散动作分类头 18%
连续MSE动作头 35%
ResNet-50+Transformer 70%

①数据多样性重要

43%→60%→83% 说明训练数据从单机器人扩展到11个数据集,再扩展到25个数据集后,性能持续提高。论文的结论不是:

只需要增加轨迹总数。

而是:机器人、任务、物体和场景的多样性同样重要​

②扩散动作头重要

MSE动作头只有35%。原因是它容易对多种正确动作取平均,形成"犹豫型策略":

  • 移动很慢;
  • 不敢旋转夹爪;
  • 动作方向不明确。

离散动作头只有18%。它虽然动作更果断,但连续精度不足,容易错过抓取位置。

扩散动作头兼顾:连续精度+多模态动作分布

③Transformer-first结构更适合规模化

ResNet-50+小Transformer达到70%,低于完整Octo的83%。

Octo把大部分参数和计算集中在Transformer中,而视觉前端只使用浅层卷积。

但这不是说ViT结构在所有数据规模下都优于ResNet。作者发现,在只有约100条示范、从头训练时,ResNet反而更容易训练。

④模型规模

Octo从:10M→27M→93M 性能在UR5和WidowX任务上持续提高。更大的Octo-Base:

  • 对初始场景变化更稳定;
  • 更少过早尝试抓取;
  • 视觉场景理解更可靠。

图6研究了Octo模型规模对直接控制性能的影响。横轴为模型参数量,纵轴为语言条件任务上的zero-shot成功率,蓝线表示UR5,绿线表示WidowX。Octo-Tiny约10M参数,在两种机器人上的成功率接近0;Octo-Small为27M参数,在UR5和WidowX上分别约为0.30和0.20;Octo-Base为93M参数,两项成功率分别提高到约0.70和0.60。结果表明,在相同训练数据和策略设计下,增加Transformer容量能够显著改善场景识别、动作选择和对初始配置变化的鲁棒性。作者还观察到,Octo-Base比Small更少出现过早抓取,更能稳定判断物体和机械臂之间的空间关系。不过,该图每个点只基于每种机器人一个语言任务、10次试验,数据量较小,因此它能够支持"本实验范围内性能随规模提高"的结论,但不足以确定完整的机器人策略规模定律。


第六部分:Limitation → Next Paper:OpenVLA

Octo 已实现多机器人预训练、开源、灵活输入输出和高效微调,但其核心策略并不是建立在一个强大的 Internet-scale 预训练 VLM 上:语言主要由预训练 T5 编码,视觉由轻量 CNN 编码,机器人策略主体仍主要依靠机器人数据学习。因此,它在复杂视觉语义、语言 grounding 和开放世界泛化方面仍弱于基于大型 VLM 的 VLA。下一步自然是:能否直接从一个强大的预训练 VLM 出发,再用多机器人动作数据把它端到端微调成一个真正开放、可微调的 VLA?→ OpenVLA。

相关推荐
新知图书1 小时前
6.4 关键时刻:它自己修好了 Bug
人工智能·agent·ai agent·智能体
woshihuanglaoshi1 小时前
事务加持防超卖:ArkTS 在鸿蒙里玩转 TRANSACTION 出入库
学习·华为·harmonyos
深海鱼在掘金1 小时前
深入浅出RAG——第7章:基础篇实战:文档问答机器人
人工智能·typescript·命令行
Jay80591 小时前
一文讲清楚 Epoch、Batch 和 Iteration 的区别
人工智能
世人万千丶1 小时前
去重插入与超限淘汰:ArkTS 实现鸿蒙搜索历史的 LIMIT 艺术
运维·服务器·学习·华为·harmonyos·鸿蒙
深海鱼在掘金1 小时前
深入浅出RAG——第8章:RAG 的局限性及应对策略
人工智能·架构
lucas_AI1 小时前
1.2B 小模型赢过 235B 大模型:NaviDC-OCR 把文档解析卷明白了
人工智能·深度学习·算法
阿星AI工作室1 小时前
一文看懂爆火的 Graph Engineering,以及它和 Loop Engineering、Agent 循环到底啥关系
人工智能
杀生丸学AI2 小时前
【稀疏重建】StructSplat:基于非校准稀疏视图的可泛化3DGS
深度学习·3d·音视频·transformer·三维重建·空间智能