Octo 是目前最轻量的通用机器人策略模型:小版 27M(ViT-S 级别),大版 93M(ViT-B 级别)。在 800K Open X-Embodiment 轨迹上预训练,用扩散策略(DDPM)生成连续动作块。单张 A100 即可微调适配新机器人。9 个机器人平台验证了零样本控制能力。
| 属性 | Octo-Small | Octo-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 帧历史) | |
如果说 OpenVLA 是"用大语言模型做机器人"的重型方案,π0 是"用 Flow Matching 做高频灵巧控制"的前沿方案,那么 Octo 的定位是:小而美。
| 维度 | OpenVLA | π0 | Octo |
|---|---|---|---|
| 参数量 | 7B | 3.3B | 27M / 93M |
| 核心思路 | LLM + action tokenization | VLM + Flow Matching | ViT + DDPM 扩散头 |
| 预训练成本 | 64×A100 | 未公开 | TPU v4-128 / 可缩减 |
| 微调成本 | LoRA on 单 GPU | 未开源 | 全量微调 on 单 GPU |
| 设计哲学 | 越大越好 | 精细架构 | 够用就好 |
Octo 的架构可以看作一个"标准 ViT + 扩散头"的组合,但在输入处理上做了巧妙设计:
Octo 支持两种任务输入方式:
| 方式 | 编码过程 | 适用场景 |
|---|---|---|
| 语言指令 | "pick up the red cup" → 预训练语言模型 → task tokens | 灵活、自然交互 |
| 目标图像 | 目标状态的照片 → 轻量 CNN → task tokens | 无语言依赖;更精确 |
训练时随机 drop 语言输入(50%概率),使模型同时学会两种方式。
每张 RGB 图像通过一个浅层 CNN(几层卷积)提取低级特征,然后像 ViT 一样切分为 patch 并展平。每个 patch 加上可学习的位置编码。Octo 使用2 帧 observation history——实验发现第 2 帧带来显著提升,但第 3 帧收益递减。
这是 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 排列。
Octo 在序列末尾放置若干readout tokens(可学习的"哨兵"token)。它们类似 BERT 的 [CLS] token——本身不携带具体信息,但通过 attention 聚合所有 task + observation token 的信息,形成对当前状态的紧凑向量表示。
这些 readout token 的输出 embedding 被传递给Diffusion Action Head用于生成动作。
DDPM(Denoising Diffusion Probabilistic Models)是最经典的扩散模型。核心思想:
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
Diffusion Action Head 一次生成多步连续动作(action chunk),而非单步。这与 π0 的 action chunking 概念一致——减少推理延迟、动作更平滑。
| 维度 | Octo (DDPM) | π0 (Flow Matching) |
|---|---|---|
| 噪声路径 | 马尔可夫链(弯曲路径) | 线性插值(直线路径) |
| 推理步数 | 较多(几十步) | 较少(~10 步) |
| 数学框架 | SDE(随机微分方程) | ODE(常微分方程) |
| 训练稳定性 | 更成熟,大量经验 | 较新,但更高效 |
| 速度 | 慢(多步去噪) | 快(少步积分) |
Octo 从 Open X-Embodiment 中筛选了 800K 条轨迹(比 OpenVLA 的 970K 少,但覆盖更多机器人平台)。
对于 goal-image 任务,不需要人工标注目标图像。Octo 使用 hindsight relabeling:
# 给定一条轨迹 [s_0, s_1, ..., s_T]
# 随机选择未来某个状态 s_j (j > current_step) 作为 "目标图像"
# 训练模型学会 "从当前状态到达 s_j"
# 这让所有训练轨迹都能用于 goal-conditioned 训练,无需额外标注
| 参数 | Octo-Small | Octo-Base |
|---|---|---|
| Backbone | ViT-S | ViT-B |
| 参数量 | 27M | 93M |
| Batch size | 2048 | 2048 |
| 硬件 | TPU v4-32 | TPU v4-128 |
| 训练时长 | ~7 小时 | ~14 小时 |
| 优化器 | AdamW, inverse sqrt LR schedule, weight decay 0.1 | |
Octo 最强的优势在于微调灵活性:
你的机器人有第三人称摄像头 + 手腕摄像头?只需在序列中添加新的 observation token 块,微调时新 token 的 embedding 从零学习,已有 token 的参数从预训练继承。
从 7-DoF 换成 6-DoF?替换 Diffusion Action Head 的输出维度即可,backbone 不需要改。
| 配置 | GPU | 时间 | 数据量 |
|---|---|---|---|
| Octo-Base 全量微调 | 1× A100 | 2-5 小时 | 100-1000 条 |
| Octo-Small 全量微调 | 1× RTX 4090 | 1-3 小时 | 100-500 条 |
对比:Octo vs OpenVLA 微调成本
OpenVLA 即使 LoRA 微调也需要冻结大部分 7B 参数,计算量大。Octo 全量微调(不冻结任何参数)就能在单 GPU 上完成——因为 93M 参数实在太轻了。这是 Octo 的核心吸引力。
Octo 在 9 个机器人平台(4 个机构)上验证了零样本控制:
| 平台 | 类型 | 零样本表现 |
|---|---|---|
| WidowX (Bridge V2) | 低成本单臂 | 优于专用策略 |
| Google Robot | 移动单臂 | 与 RT-1 相当 |
| RT-1 Robot | Google 原生 | 有效控制 |
| Franka | 桌面单臂 | 微调后 SOTA |
| 维度 | OpenVLA (7B) | π0 (3.3B) | Octo (27-93M) |
|---|---|---|---|
| 设计哲学 | LLM 即机器人 | 精细架构 | 轻量通用 |
| 动作输出 | 离散 token | Flow Matching | DDPM 扩散 |
| 最大能力 | 语义理解强 | 灵巧操作 | 快速适配 |
| 开源程度 | 完全开源 | 仅论文 | 完全开源 |
| 微调门槛 | 中(LoRA+量化) | — | 低(单卡全量) |
✓ 优势
• 超轻量——27M/93M,单 GPU 微调,适合快速实验
• 模块化——可灵活添加/替换 observation 和 action 类型
• 完全开源——权重 + 代码 + 预训练 pipeline
• 扩散策略——支持多模态动作分布
• Goal image 支持——不依赖语言
✗ 代价
• 绝对性能不如 OpenVLA——93M vs 7B,语义理解较弱
• DDPM 推理较慢——多步去噪,不如 Flow Matching 高效
• 无 LLM 骨干——缺乏常识推理能力
| 场景 | 推荐度 | 理由 |
|---|---|---|
| 快速原型/实验 | ★★★★★ | 单 GPU 微调,快速迭代 |
| 低成本部署 | ★★★★★ | 27M 可以跑在边缘设备 |
| 多机器人适配 | ★★★★★ | 灵活微调支持新传感器/动作空间 |
| 复杂语义任务 | ★★★☆☆ | 无 LLM 骨干,语义理解有限 |
| 高频灵巧操作 | ★★☆☆☆ | DDPM 推理慢于 Flow Matching |