Octo 深度技术解读

An Open-Source Generalist Robot Policy
arXiv:2405.12213 · Octo Model Team (Berkeley, Stanford, Toyota, TRI, etc.) · 2024
Project · arXiv · GitHub
← 返回 VLA 技术站

0. 30 秒速览

Octo 是目前最轻量的通用机器人策略模型:小版 27M(ViT-S 级别),大版 93M(ViT-B 级别)。在 800K Open X-Embodiment 轨迹上预训练,用扩散策略(DDPM)生成连续动作块。单张 A100 即可微调适配新机器人。9 个机器人平台验证了零样本控制能力。

属性Octo-SmallOcto-Base
参数量27M(ViT-S 级别)93M(ViT-B 级别)
训练数据800K trajectories(Open X-Embodiment)
动作生成DDPM 扩散头(生成 action chunk)
训练成本Octo-Base: TPU v4-128, 14 小时
微调成本单 GPU(如 A100),数小时
任务输入语言指令 或 目标图像
观测输入RGB 图像(支持 1-2 个摄像头 + 2 帧历史)

1. 定位:轻量、通用、可微调

如果说 OpenVLA 是"用大语言模型做机器人"的重型方案,π0 是"用 Flow Matching 做高频灵巧控制"的前沿方案,那么 Octo 的定位是:小而美

维度OpenVLAπ0Octo
参数量7B3.3B27M / 93M
核心思路LLM + action tokenizationVLM + Flow MatchingViT + DDPM 扩散头
预训练成本64×A100未公开TPU v4-128 / 可缩减
微调成本LoRA on 单 GPU未开源全量微调 on 单 GPU
设计哲学越大越好精细架构够用就好

2. 架构详解

Octo 的架构可以看作一个"标准 ViT + 扩散头"的组合,但在输入处理上做了巧妙设计:

1
Task Tokenizer(任务编码器) 语言指令 → 预训练语言模型编码为 task tokens;或目标图像 → CNN 编码
2
Observation Tokenizer(观测编码器) RGB 图像 → 浅层 CNN → 切分为 patch 序列 + 位置编码
3
Transformer Backbone(ViT-S 或 ViT-B) Block-wise attention 处理 [task tokens, observation tokens, readout tokens]
4
Readout Tokens → Diffusion Action Head Readout token 聚合全局信息 → DDPM 扩散生成 action chunk

2.1 Task Tokenizer:两种指令方式

Octo 支持两种任务输入方式:

方式编码过程适用场景
语言指令"pick up the red cup" → 预训练语言模型 → task tokens灵活、自然交互
目标图像目标状态的照片 → 轻量 CNN → task tokens无语言依赖;更精确

训练时随机 drop 语言输入(50%概率),使模型同时学会两种方式。

2.2 Observation Tokenizer:图像 → Patch

每张 RGB 图像通过一个浅层 CNN(几层卷积)提取低级特征,然后像 ViT 一样切分为 patch 并展平。每个 patch 加上可学习的位置编码。Octo 使用2 帧 observation history——实验发现第 2 帧带来显著提升,但第 3 帧收益递减。

2.3 Block-wise Attention:灵活的注意力结构

这是 Octo 架构中最有创意的设计。不同于标准的全注意力(所有 token 互相 attend)或因果注意力(只看历史),Octo 使用块状注意力结构

# Token 序列排列:
[T_task] [O_t1_cam1] [O_t1_cam2] [O_t2_cam1] [O_t2_cam2] [R_readout]
#         ↑ 第1帧      ↑           ↑ 第2帧(历史)              ↑ 输出

# Attention 规则:
# • Task tokens → 可以 attend 所有 observation tokens(全局视野)
# • Observation tokens → 只能 attend 自己 + 之前的 tokens(因果/历史性)
# • Readout tokens → 可以 attend 所有 tokens(聚合全局信息)

为什么用 Block-wise Attention?

这个设计的核心好处是灵活性。微调时如果想添加新的传感器(如第三个摄像头),只需要在序列中插入新的 observation token 块,而不需要修改模型架构。Attention mask 自动适应新的 token 排列。

2.4 Readout Tokens:BERT 风格的全局表示

Octo 在序列末尾放置若干readout tokens(可学习的"哨兵"token)。它们类似 BERT 的 [CLS] token——本身不携带具体信息,但通过 attention 聚合所有 task + observation token 的信息,形成对当前状态的紧凑向量表示。

这些 readout token 的输出 embedding 被传递给Diffusion Action Head用于生成动作。

3. DDPM 扩散动作头

3.1 标准 DDPM 回顾

DDPM(Denoising Diffusion Probabilistic Models)是最经典的扩散模型。核心思想:

  1. 前向过程(加噪):逐步给真实数据添加高斯噪声,经过 T 步后变成纯噪声
  2. 反向过程(去噪):训练一个神经网络,学会逐步去噪,从纯噪声恢复出真实数据

Octo 使用 cosine schedule(余弦噪声调度),标准 DDPM 训练目标:

# 训练:
# 1. 采样真实 action chunk: x_0
# 2. 随机采样时间步 k ∈ {1, ..., K}
# 3. 添加高斯噪声得到 x_k = √(α_k) · x_0 + √(1-α_k) · ε,  ε~N(0,I)
# 4. 训练网络预测噪声:loss = ||ε_θ(x_k, e, k) - ε||²
#    其中 e 是 readout token 的 embedding(条件信息)

# 推理:
# 从 x_K ~ N(0, I) 开始(纯噪声)
# 循环 K 步去噪,最终得到生成的 action chunk

3.2 动作块(Action Chunk)

Diffusion Action Head 一次生成多步连续动作(action chunk),而非单步。这与 π0 的 action chunking 概念一致——减少推理延迟、动作更平滑。

3.3 Octo 的 Diffusion vs π0 的 Flow Matching

维度Octo (DDPM)π0 (Flow Matching)
噪声路径马尔可夫链(弯曲路径)线性插值(直线路径)
推理步数较多(几十步)较少(~10 步)
数学框架SDE(随机微分方程)ODE(常微分方程)
训练稳定性更成熟,大量经验较新,但更高效
速度慢(多步去噪)快(少步积分)

4. 训练数据

4.1 Open X-Embodiment 800K 轨迹

Octo 从 Open X-Embodiment 中筛选了 800K 条轨迹(比 OpenVLA 的 970K 少,但覆盖更多机器人平台)。

4.2 Hindsight Goal Relabeling(事后目标重标注)

对于 goal-image 任务,不需要人工标注目标图像。Octo 使用 hindsight relabeling:

# 给定一条轨迹 [s_0, s_1, ..., s_T]
# 随机选择未来某个状态 s_j (j > current_step) 作为 "目标图像"
# 训练模型学会 "从当前状态到达 s_j"
# 这让所有训练轨迹都能用于 goal-conditioned 训练,无需额外标注

4.3 训练细节

参数Octo-SmallOcto-Base
BackboneViT-SViT-B
参数量27M93M
Batch size20482048
硬件TPU v4-32TPU v4-128
训练时长~7 小时~14 小时
优化器AdamW, inverse sqrt LR schedule, weight decay 0.1

5. 灵活微调:Octo 的核心卖点

Octo 最强的优势在于微调灵活性

5.1 添加新观测类型

你的机器人有第三人称摄像头 + 手腕摄像头?只需在序列中添加新的 observation token 块,微调时新 token 的 embedding 从零学习,已有 token 的参数从预训练继承。

5.2 添加新动作空间

从 7-DoF 换成 6-DoF?替换 Diffusion Action Head 的输出维度即可,backbone 不需要改。

5.3 微调成本

配置GPU时间数据量
Octo-Base 全量微调1× A1002-5 小时100-1000 条
Octo-Small 全量微调1× RTX 40901-3 小时100-500 条

对比:Octo vs OpenVLA 微调成本

OpenVLA 即使 LoRA 微调也需要冻结大部分 7B 参数,计算量大。Octo 全量微调(不冻结任何参数)就能在单 GPU 上完成——因为 93M 参数实在太轻了。这是 Octo 的核心吸引力。

6. 实验结果

Octo 在 9 个机器人平台(4 个机构)上验证了零样本控制:

平台类型零样本表现
WidowX (Bridge V2)低成本单臂优于专用策略
Google Robot移动单臂与 RT-1 相当
RT-1 RobotGoogle 原生有效控制
Franka桌面单臂微调后 SOTA

7. 三大 VLA 定位对比

维度OpenVLA (7B)π0 (3.3B)Octo (27-93M)
设计哲学LLM 即机器人精细架构轻量通用
动作输出离散 tokenFlow MatchingDDPM 扩散
最大能力语义理解强灵巧操作快速适配
开源程度完全开源仅论文完全开源
微调门槛中(LoRA+量化)低(单卡全量)

8. 工程权衡分析

✓ 优势

• 超轻量——27M/93M,单 GPU 微调,适合快速实验

• 模块化——可灵活添加/替换 observation 和 action 类型

• 完全开源——权重 + 代码 + 预训练 pipeline

• 扩散策略——支持多模态动作分布

• Goal image 支持——不依赖语言

✗ 代价

• 绝对性能不如 OpenVLA——93M vs 7B,语义理解较弱

• DDPM 推理较慢——多步去噪,不如 Flow Matching 高效

• 无 LLM 骨干——缺乏常识推理能力

9. 什么时候用 Octo?

场景推荐度理由
快速原型/实验★★★★★单 GPU 微调,快速迭代
低成本部署★★★★★27M 可以跑在边缘设备
多机器人适配★★★★★灵活微调支持新传感器/动作空间
复杂语义任务★★★☆☆无 LLM 骨干,语义理解有限
高频灵巧操作★★☆☆☆DDPM 推理慢于 Flow Matching