CLIPort:把「语义大脑」和「空间小脑」缝在一起
🎯 为什么重要:精准操作和语义泛化,鱼和熊掌
2021 年机器人操作分两派,各管一头:
· 端到端 Transporter——能精准抓放,但没语义。换个目标颜色就得重训;让它「pack the pink block」,它根本不懂 pink 是啥。
· CLIP 等视觉-语言大模型——语义强、能泛化到未见类别,但没空间精度。问它「抓哪儿」它答不出像素坐标,更别提厘米级放置。
论文标题就是答案——「What and Where Pathways」,借用了认知心理学的双流假说(ventral 腹侧通路认「是什么」,dorsal 背侧通路认「在哪」)。作者把这个脑科学类比直接搬进网络架构。
💡 核心思想:动作 = pick + place,两个 affordance 图
CLIPort 把所有桌面任务统一成「pick 一个位置 → place 到另一个位置」的原语(无论是 packing、stacking、folding、sweeping)。关键在于它不预测物体,而是预测动作——这就是 Transporter 的「action-centric」思想:绕开目标检测/分割,直接对每个像素问「在这儿 pick 合理吗?」
两个工程细节非常关键:
- 语言怎么注入? 把 CLIP 句编码(1024 维)下采样到通道维,tile(铺成 H×W 大小),再与解码器特征逐元素乘(Hadamard 积)。这复用了 CLIP 训练时的「图文点积对齐」性质,同时保持空间维度不丢。
- 横向连接(lateral):空间流在每个解码层把特征 concat 进语义流,再用 1×1 卷降维。这让语义流不丢失 RGB-D 的几何细节。
🛠️ 实验设计:10 仿真任务 + 9 真机任务 + 见/未见切分
| 维度 | 设置(PDF 溯源) |
|---|---|
| 仿真平台 | Ravens(PyBullet)+ UR5e + 吸夹;3 个相机 640×480 重建 top-down RGB-D heightmap |
| 10 个仿真任务 | packing-box-pairs、packing-seen/unseen-google-objects(seq / group)、separating-piles、stack-block-pyramid、towers-of-hanoi、align-rope、assembling-kits、put-blocks-in-bowl 等(Fig.1) |
| 「seen vs unseen」切分 | 颜色:seen={yellow,brown,gray,cyan} / unseen={orange,purple,pink,white},共用 {red,green,blue};物体:56 个 Google Scanned Objects 拆 37 seen + 19 unseen |
| 训练规模 | n ∈ {1, 10, 100, 1000} demo;单任务 200K iter(2 GPU 天),多任务 600K iter(6 GPU 天);batch size 1;k=36 离散旋转 |
| 真机 | Franka Panda,9 个真实任务,仅 179 个 image-action 对训练一个多任务模型 |
| 评估指标 | Ravens 0–100 分(含部分分数,如装对 3/5 → 60 分);每配置 100 次评估;真机每任务 5–10 次测试 |
对照基线(剥离子实验)
| 变体 | 结构 | 意义 |
|---|---|---|
| Transporter-only | 只用空间流(RGB-D),不给语言 | 测「没有语义能蒙到多少」 |
| CLIP-only | 只用语义流(RGB + 语言),无深度 | 测「没有空间精度能做到多少」 |
| RN50-BERT | ResNet50 + BERT(替代 CLIP) | 验证 CLIP 预训练对齐的必要性 |
| CLIPort (single) | 双流,每个任务训一个 | 主模型 |
| CLIPort (multi) | 双流,10 个任务训一个 | 测多任务共享 |
| CLIPort (multi-attr) | 多任务模型,在其他任务的 seen+unseen 上训,只把目标任务的 unseen 留作泛化测试 | 测「跨任务属性迁移」(如在其他任务见过 pink,能否迁移到 packing pink) |
📊 关键结果(PDF Table 1 / Table 2 / Fig.3)
| 对比 | 饱和点(seen 平均,n=1000) | 含义 |
|---|---|---|
| Transporter-only | ~50% | 不用语言,只能蒙训练时最常见的动作 |
| CLIP-only | ~76% | 有语义但无深度/空间精度,「最后一公里」放不准 |
| CLIPort (single) | >90% | 双流合起来才能跨过 90% 门槛 |
CLIP 是在 RGB 图文对上训的,没深度,也没厘米级空间感。它能告诉你「抓那个蓝色方块」,但放的时候差几个像素就崩——尤其是 stacking、assembling-kits 这种要精度的任务。Transporter 那条 RGB-D + 等变卷积的流恰好补这一刀。
多任务 vs 单任务
CLIPort(multi) 在 Table 1 共 72 个评估配置里,有 41/72 = 57% 的配置胜过单任务模型——共享数据 + 语言条件让「pink 在一个任务里见过,迁移到另一个任务」成为可能。
跨任务属性迁移(CLIPort multi-attr)
| 任务 | CLIPort(multi) | CLIPort(multi-attr) | 提升 |
|---|---|---|---|
| put-blocks-in-bowls-unseen-colors (n=1000) | 45.8 | 75.7 | +29.9 |
| towers-of-hanoi-seq-unseen-colors (n=1000) | 68.7 | 96.9 | +28.2 |
| packing-box-pairs-unseen-colors (n=1000) | 71.4 | 80.3 | +8.9 |
真机(Table 2,179 demo 训一个多任务模型)
| 任务 | 训练样本 | 测试次数 | 成功率 |
|---|---|---|---|
| Stack Blocks | 5 (13) | 10 | 70.0% |
| Put Blocks in Bowl | 5 (10) | 10 | 65.0% |
| Pack Objects | 10 (31) | 10 | 60.0% |
| Move Rook | 4 (29) | 10 | 70.0% |
| Fold Cloth | 9 (9) | 10 | 57.0% |
| Read Text | 2 (26) | 10 | 55.0% |
| Loop Rope | 4 (12) | 10 | 60.0% |
| Sweep Beans | 5 (23) | 5 | 60.6% |
| Pick Cherries | 4 (26) | 5 | 75.0% |
🌐 在领域中的位置
CLIPort 是 「互联网大模型先验」首次干净地注入机器人操作的样板——证明了「冻结 CLIP + 小机器人头」这条路 work。它和 PerAct、RVT 等「预训练感知 + 操作头」一脉相承,也间接启发了后来 VLA 把整条管线压进一个 transformer 的思路。
❓ 常见误区
CLIPort 训练了 CLIP 吗?
CLIP 完全冻结,只用它的预训练权重做特征提取(视觉 ResNet50 和句编码器都不更新)。可训练的是解码器 + Transporter 的空间流 + 融合层。
为什么不用 CLIP 直接输出动作?
因为 CLIP 没见过深度、没经过动作监督。它的图像特征是 RGB 上的语义,不是 SE(2) 等变的——同一个物体平移一下,特征就变。Transporter 的 FCN 通过卷积天然等变,才能精准对应到像素坐标。论文 §4.2 的 CLIP-only 基线(76% 饱和)就是直接证据。
「action-centric」具体什么意思?
Transporter 不检测「物体」,而是直接检测「动作」——对每个像素问「在这 pick 合理吗」。这绕开了实例分割、pose 估计这些中间表示,对颗粒物(咖啡豆堆)、可变形物(绳子、布)这类没清晰物体边界的场景特别有用。
它和 BC 行为克隆什么关系?
CLIPort 就是模仿学习——从专家 demo 学。它的贡献不是「新的模仿学习算法」,而是新的网络架构(双流)+ 新的先验来源(CLIP),让 BC 在语言条件下能泛化到未见语义。
局限?
(1) 只支持 pick-and-place 原语,非桌面 / 非 top-down 场景不适用;(2) 长程任务(如 align-rope)多任务训练时覆盖率不足,反而比单任务差;(3) 真机性能仍受 demo 数量限制——论文估计要 50–100 demo 才能稳;(4) oracle 终止条件,实际部署还得另接终止判定。