第一部分:基本收录情况
| 项目 | 内容 |
|---|---|
| 论文全名 | 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能否在任务、传感器、动作空间和机器人形态发生变化时继续复用预训练知识。
论文围绕三个问题展开实验:
- Octo能否直接控制多种机器人?
- Octo是否是有效的下游微调初始化?
- 哪些设计真正决定通用机器人策略的性能?
实验覆盖: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比较了三种初始化方法在六个下游机器人设置上的微调效果: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带来的不是单纯更好的视觉特征,而是可迁移的任务---观测---动作策略表示,能够在少量目标域示范下适配新传感器、新控制接口以及预训练中未出现的机器人形态。