枢纽
机器人29 embodiments from OpenX
数据集Open X-Embodiment 800k
上真机
实时
输入模态vision,language,proprioception

Octo:一个「什么机器人都能接」的通用机器人策略

Octo Model Team(UC Berkeley + Stanford + CMU + Google DeepMind)。arXiv 2405.12213, 2024。 项目页 · 全开源(JAX)· foundation modelVLA 线索 T01

🧠 一句话心智模型:以前的机器人策略像一个「焊死接口」的 U盘——只能接特定相机、特定动作空间。Octo 把策略改造成一个 Transformer 万能插座:输入是什么相机、什么任务说明(语言/目标图),输出是什么机器人、什么动作空间,都通过换 token 来切换。预训练 80 万条轨迹后,给 ~100 条新演示、几张消费级 GPU 几小时,就能 finetune 到全新机器人。

🎯 为什么重要:通用机器人策略(GRP)卡在「接口僵化」

CV/NLP 早就是「一个预训练大模型 + finetune」的范式。机器人却一直卡着——核心不是模型不够大,而是接口太杂

核心矛盾:不同机器人的传感器、动作空间、任务定义都不一样。A 机器人有腕部相机、B 没有;A 用末端位姿、B 用关节角;任务有时是「把 X 拿到 Y」,有时只有一张目标图。RT-X、RoboCat 这些前作能跨多个机器人,但你必须严格沿用预训练时的输入输出不能 finetune 到新的传感器或动作空间——这极大限制了通用性。

更别提最大的模型(如 RT-2-X 55B、RoboCat)都不开源——尽管同族的 RT-1-X(35M)已开源,但仍锁死接口、不能 finetune 到新传感器/动作空间。Octo 想做的就是:开源一个真正能「插件式」适配任意接口的 GRP。

💡 核心思想:一切皆 Token,输入输出即插即用

Octo 把策略重构成「统一的 token 进 → 统一的 token 出」的 Transformer。所有输入(图像、语言、本体感觉、目标图)都被各自的 tokenizer 转成 token 序列;所有输出(动作)通过一个 readout token + action head 解码。换接口 = 换 token,不动主干。

输入(任意组合) 语言指令 t5-base 编码 第三人称相机 CNN patch 腕部相机 (可选) 目标图 (可选) 缺失就 mask 掉 Octo Transformer block-wise 注意力 (ViT-S/B 规模) readout token 输出(任意动作) Diffusion Action Head 默认:delta EE 控制 换 Head → 关节控制 换 Head → 双臂/新 DOF finetune:加新 tokenizer / head,主干不动
图 1:Octo 的「token 万能插座」。输入和输出的类型/数量都可变,缺失就 mask,新增就加 tokenizer/head;Transformer 主干始终是同一套权重。

两个让「插座」真正好用的设计细节:

  • Block-wise 注意力 mask:观察 token 只能看当前及历史时刻,readout 只能被动读取。这让缺失的输入(比如没有腕部相机的数据集)可以直接全 mask 掉,不需要补零或重新训练
  • Diffusion Action Head:动作用扩散头预测,能表达多模态分布(同一观察可有多解)——论文消融显示它显著优于 MSE 回归和离散动作分类。

🛠️ 训练配方:800k 轨迹 + 25 个数据集

组件选择关键理由
预训练数据Open X-Embodiment 子集,25 个数据集 / 800k 轨迹当时最大的开源机器人操作数据集;多样性比单一数据集重要
模型规模Octo-Tiny 10M / Small 27M / Base 93M对标 ViT 梯队;规模越大 zero-shot 越好(Fig.6)
语言编码器t5-base(111M),冻结直接借用现成语义先验
视觉编码浅 CNN patch + ViT 主干(「transformer-first」)消融显示:大数据集上 ViT > ResNet;小数据上反过来
动作头Diffusion(DDPM,K 步去噪,只跑一次主干)多模态 + 高精度,>> MSE / 离散
finetune 配方全参数更新,50k 步,cosine decay比「冻结部分」更好;同一配方跑所有下游
🔮 直觉:为什么 ViT 在大数据上赢、小数据上输?
ViT 几乎不假设图像的局部性(patch 之间全靠 attention),所以表达力强但 sample efficiency 差。数据少时学不出 attention 结构,CNN 的「局部 + 平移不变」归纳偏置反而是免费的午餐。Octo 的结论很务实:数据规模到了,再去掉归纳偏置——这也是基础模型领域的通用规律。

📊 结果:开源模型打平 Google 闭源 55B

维度数字(论文实验)
Zero-shot 跨 9 个机器人平台4 个机构、单臂/双臂、语言/目标图任务
vs RT-1-X(35M,开源 baseline)平均成功率高 29%
vs RT-2-X(55B 闭源)表现相当(Octo 只有 93M 参数)
目标图条件 vs 语言条件目标图高 25%(图像携带的信息比语言更具体)
finetune 后(~100 演示)平均成功率72%(vs 训练-from-scratch 20%,VC-1 预训练 15%)
相对下一最好的 finetune baseline+52%
finetune 算力Octo-Base 5 小时 / 单卡 A5000(24GB)
支持新接口力-力矩本体感觉(Insertion)、关节位置控制(Pick-Up)、新机器人 embodiment(Coke/Bimanual)
关键洞察:Octo 的胜利不是「在某个任务上刷了 SOTA」,而是证明了「把 Transformer 当插座、用 token 切换接口、用扩散头出多模态动作」这一架构选择可以消化异构数据并迁移到全新设置。它的核心贡献是把 GRP 的工程门槛打到了消费级

🌐 在领域中的位置

RT-1(单机器人 transformer) RT-X / RoboCat(跨机器人但接口固定) Octo(接口可插拔 + 开源)⭐ OpenVLA / π0(VLA 大模型化)

Octo 是通用机器人策略「开源化 + 接口可插拔」的里程碑。它直接催生了后续一批开源 VLA(OpenVLA、HPT 等),并把「diffusion action head + token 万能接口」确立为 GRP 的标配。关联线索:T06 VLA 谱系

❓ 常见误区

Octo 是 VLA 吗?

是,但属于「low-level VLA」——它直接输出关节/末端动作,每步推理。它和 LLM-based VLA(RT-2、OpenVLA)的区别在于:Octo 没有内生的大语言模型,只用了 t5-base 编码语言。这让它轻得多(93M vs 7B+),也快得多,但牺牲了复杂推理。

Diffusion head 不会让推理很慢吗?

巧思在于:Transformer 主干只 forward 一次,输出一个 readout embedding;多步去噪完全发生在那个小 diffusion head 里。所以扩散的代价被限制在 head 内,不影响主推理。

800k 算「大」吗?

对机器人来说是当时最大的开源预训练集;但和 CV/NLP 的几十亿样本比还差好几个数量级。论文坦诚:模型在腕部相机(数据中只有 27%)和语言任务(只有 56%)上表现较弱——数据模态覆盖是瓶颈。

「finetune 到新动作空间」具体怎么做的?

替换 action head(比如 delta EE → 关节位置),加入新 head 的参数;主干 transformer 保留预训练权重一起更新。因为 readout token 是抽象嵌入,主干并不知道下游 head 长什么样——这正是「插座」设计的红利。