Ch18: 多模态生态——ImageBind / AnyMAL / 3DShape2VecSet
Ch18: 多模态生态——ImageBind / AnyMAL / 3DShape2VecSet
前置章节:Ch17: Sim-to-Real——仿真训练与真机部署 后续章节:Ch19: 射频感知——RF-Pose / milliMap / PanoRadar 返回目录
18.1 开篇:五感俱全的机器人
18.1.1 闭着眼睛端咖啡
请你现在做一个思想实验:闭上眼睛,想象面前桌上有一杯刚泡好的咖啡。你需要端起它,喝一口,再放回桌面。
即使完全闭着眼,你也能完成这件事。怎么做到的?
首先,你的手向前伸出去,指尖碰到了杯壁——触觉告诉你"杯子在这里"。杯壁有点烫——触觉再告诉你"刚泡的,小心"。你调整了握杯的位置,握在杯壁稍上方比较不烫的地方。端起杯子,你的手腕感觉到重量——本体感觉(proprioception)告诉你"杯子大概八分满"。送到嘴边,你听到液体轻微晃动的声音——听觉帮你确认杯子没有倾斜太多。你喝了一口,放回桌面——杯底碰到桌面发出"嗒"的轻响——听觉确认"杯子放稳了"。
整个过程,你没有用到视觉,但你不断地在用触觉、本体感觉、听觉这三种感官协作,完成了一个人类觉得无比简单的任务。
18.1.2 人类的多模态融合是无意识的
你可能觉得上面的描述有点刻意——"谁会闭着眼睛喝咖啡?"但这个思想实验的重点不是"能不能闭着眼做",而是让你意识到:即使在睁着眼的正常情况下,你也在不断地无意识融合多种感官的信息。
你看到咖啡杯的同时,手也在感受杯子的温度。你听到隔壁桌有人说话的同时,眼睛也在看说话的人。你的大脑从来不是"只用一个感官工作"——它始终在并行处理来自所有感官的信号,并把它们融合成一个统一的"世界理解"。
神经科学的研究表明,人脑中负责不同感官的皮层区域之间有大量的直接连接——视觉皮层(V1)和听觉皮层(A1)之间存在反馈投射,触觉信号会影响视觉注意力的分配。这种跨感官的深度整合是在几百毫秒内自动完成的——你甚至意识不到自己在做多模态融合。
机器人要达到类似的鲁棒性,也需要类似的多模态融合能力。这就是本章要讨论的核心问题。
18.1.3 但前面十章的机器人只有"眼睛"
- Ch08 的 CLIP:让 AI 学会"看图认字"——输入是图像和文本
- Ch09 的 BLIP-2/LLaVA:让 AI 能看图说话——输入还是图像和文本
- Ch10 的 SayCan:让 LLM 指挥机器人——LLM 通过文本思考,机器人通过 RGB 相机观察
- Ch11 的 RT-1/RT-2:端到端 VLA——输入是 RGB 图像 + 文本指令
- Ch13 的 Diffusion Policy:学动作分布——观察还是图像
- Ch17 的 Sim-to-Real:仿真到真机——传感器主要是 RGB 相机和关节编码器
注意到一个模式了吗?几乎所有系统的"感知"都以视觉为主。少数系统用到了深度相机或 IMU 的本体感觉,但没有一个系统真正把音频、触觉、热成像这些模态作为核心输入来处理。
这在仿真器里没什么问题——仿真器给你的都是完美的 RGB 图像和精确的关节角度。但在真实世界里,这种"只靠眼睛"的策略有三个致命盲区。
18.1.4 视觉的三个致命盲区
盲区一:暗处
机器人走进一间没开灯的仓库,RGB 相机拍到的是一片漆黑。但如果它有热成像传感器,它能看到热源(人、运行中的设备、发热的管道)。如果它有麦克风,它能听到设备运转的嗡嗡声。如果它有 LiDAR,它能在完全黑暗中重建 3D 空间结构。视觉失效了,但其他感官还能工作。
这不是一个罕见的场景。家庭环境中的夜间、仓库的角落、楼道、电梯间——光照不足的环境在真实世界中极其常见。在 Ch17 中我们讨论了域随机化(DR)——通过在仿真中随机改变光照条件来提升策略的鲁棒性。但 DR 只能让策略在"稍暗"的环境中继续工作,在"完全黑暗"的环境中它无能为力——因为 RGB 图像中没有任何有用的信号可以提取。唯一的出路是引入不依赖可见光的传感器。
盲区二:透明和反光物体
这是一个工程上被严重低估的问题。结构光深度相机(如 RealSense D435)在玻璃杯、镜面、透明塑料瓶上几乎完全失效——结构光打在透明表面上直接穿过去或者被镜面反射到别处,深度读数要么是零、要么是错误值。RGB 图像也很难:一个装了水的透明玻璃杯和一个空的透明玻璃杯,看起来几乎一样。但如果机器人能用触觉传感器握住杯子,它立刻知道有没有水——重量不同。
这个问题在厨房场景中尤为严峻。厨房里充满了玻璃杯、透明瓶子、不锈钢餐具——恰恰是家庭服务机器人最需要工作的地方。2022 年 ClearGrasp 等工作专门研究了透明物体的深度估计,但效果仍然不够可靠。结合触觉传感器(接触后才有信号但非常精确)和视觉(远距离但对透明物体不准确),可能是更好的策略。
盲区三:接触才有的信息
有一类信息只有在物理接触的瞬间才存在。比如:一个物体是硬的还是软的?表面是粗糙的还是光滑的?螺丝拧紧了没有?这些信息在相机画面里完全看不到——你必须摸到它。触觉传感器(如 GelSight、BioTac)能提供毫米级的接触力分布和形变信息,但它只在接触瞬间有意义——你不能"远距离触摸"一个物体。
再想一个更日常的例子:你在超市里挑选水果。你会怎么判断一个牛油果熟没熟?你用手指轻轻按一下——如果按下去有微微弹性但不太软,就是刚好成熟的。这个判断纯粹基于触觉。任何相机——无论 RGB、深度、还是热成像——都无法从外观上精确判断牛油果的成熟度。对于需要做精细操作的机器人(装配、烹饪、包装),触觉信息不是"锦上添花",而是"缺了就做不了"。
这三个盲区说明了一件事:没有任何单一传感器能覆盖所有场景。每种传感器都有自己擅长的场景和失效的条件。真正鲁棒的具身 AI 必须像人类一样,融合多种模态的信息——用视觉定位远处的目标,用深度感知理解 3D 空间结构,用音频检测不可见的事件,用触觉获取接触时的精细信息,用 IMU 感知自身的运动状态。
18.1.5 核心问题:怎么把所有模态放进同一个空间?
在 Ch08 中,CLIP 解决了一个版本的多模态对齐问题:它把图像和文本映射到同一个嵌入空间,使得语义相关的图文对在空间中距离更近。这个方法极其强大——它让零样本分类、跨模态检索、开放词汇检测都成为可能。
但 CLIP 只对齐了两种模态。现在我们的需求升级了:不只是图+文,还有音频(环境声、语音指令)、深度(结构化 3D 信息)、热成像(温度分布)、IMU(机器人的运动状态)、触觉(接触力分布)、甚至 3D 形状(物体的几何结构)。
怎么把它们全部拉到同一个空间?
天真的做法是:给每一对模态都收集配对数据,然后做对比学习。6 种模态就有 C(6,2) = 15 对,每对都需要大规模配对数据集。这个数据量是不现实的——你上哪去找百万量级的"音频-热成像"配对数据?
本章介绍三条不同的技术路线,它们用不同的方式绕过了这个数据瓶颈。
18.1.6 三条技术路线预览
路线一:以图像为枢纽的对齐(18.3 节,ImageBind)
核心想法:不需要所有模态两两配对。只要每种模态都和图像配对过,就能通过图像这个"中间人"间接实现所有模态之间的对齐。就像一群互不认识的人,只要他们都认识同一个中间人,就能通过中间人建立间接联系。
路线二:冻结 LLM + 投射层(18.4 节,AnyMAL)
核心想法:大语言模型(LLM)已经是强大的推理引擎。不需要重新训练它——只需要给每种模态训练一个轻量级的"翻译器"(投射层),把模态信号翻译成 LLM 能理解的 token 格式。LLM 的推理能力不变,但现在它能"听懂"图像、音频、IMU 等各种输入了。
路线三:把 3D 形状也变成可对齐的向量(Part 2,3DShape2VecSet)
核心想法:3D 形状不像图像那样是规则的网格,它可能是点云、网格、体素、甚至隐式场。怎么把这些不同表示统一成一个固定长度的向量,使其能参与对比学习和跨模态对齐?3DShape2VecSet 用一组可学习的查询向量和交叉注意力机制,把任意 3D 表示压缩成一组固定数量的向量。
18.1.7 传感器互补性一览
在深入具体技术之前,先用一张表格建立直觉:不同传感器各自的优势和劣势是什么?它们如何互补?
| 传感器 | 优势 | 劣势 | 典型失效场景 |
|---|---|---|---|
| RGB 相机 | 高分辨率、低成本、信息丰富 | 受光照影响、无深度信息 | 黑暗、强逆光、高动态范围 |
| 深度相机 | 精确 3D 几何、不受纹理影响 | 透明/反光物体失效、范围有限 | 玻璃杯、镜子、远距离 |
| 热成像 | 不依赖可见光、可检测温度异常 | 分辨率低、价格高 | 温度均匀的场景 |
| 麦克风 | 360° 感知、穿墙/遮挡无影响 | 嘈杂环境精度下降 | 极度安静或极度嘈杂的场景 |
| IMU | 高频率、自身运动感知、不受外界影响 | 漂移、无环境感知 | 静止状态(信号无意义) |
| 触觉传感器 | 接触力精确、材质判断 | 仅在接触时有效、覆盖范围极小 | 远距离目标、非接触阶段 |
从表格中可以看出一个清晰的模式:每种传感器的"劣势"恰好可以被另一种传感器的"优势"弥补。RGB 相机在暗处失效→热成像接手;深度相机对透明物体失效→触觉接手;麦克风在安静环境无信号→视觉接手。这种天然的互补性正是多模态融合的物理基础。
18.1.8 本章的阅读路线
本章分两个部分。Part 1(本文件)覆盖 18.1–18.4,重点精读 ImageBind 和 AnyMAL。Part 2 覆盖 18.5–18.7,精读 3DShape2VecSet 并讨论多模态技术的融合趋势。
在正式进入 ImageBind 之前,我们需要先回顾 CLIP 的核心概念——因为 ImageBind 的整个设计都建立在 CLIP 的基础之上。
18.2 回顾 CLIP:多模态对齐的起点
18.2.1 为什么要回顾
本节不是重复 Ch08 的内容。Ch08 用了 1500 行从动机、架构、训练、实验到局限做了完整精读。这里只提炼出理解 ImageBind 必须掌握的四个核心概念。如果你对以下任何一个概念感到模糊,建议回 Ch08 重读对应章节。
18.2.2 核心概念一:对比学习的几何直觉
CLIP 的训练目标,用一句话说就是:把语义相关的图文对拉近,把不相关的推远。
想象一个高维球面(实际上是 512 维或 768 维,但可以想象成一个地球仪的表面)。训练开始时,所有图像向量和文本向量随机散布在球面上——"猫的图片"可能在北极,"a photo of a cat"可能在南极,完全不挨着。CLIP 的训练过程就是不断地调整这些向量的位置:一张猫的图片和"a photo of a cat"这段文字,应该被推到球面上相邻的位置;而同一张猫图和"a photo of a truck"这段文字,应该被推到球面上尽可能远的位置。
训练结束后,这个球面就变成了一个"语义地图"——意思相近的概念聚集在一起,意思不同的概念分散在远方。猫的图片和猫的文字描述挨在一起;卡车的图片和卡车的文字描述挨在一起;而猫和卡车的概念在球面上距离很远。
为什么这个几何直觉对理解 ImageBind 很重要?因为 ImageBind 要做的事情本质上和 CLIP 一样——只不过球面上不再只有两种颜色的点(图像点和文本点),而是有六种颜色的点(图像、文本、音频、深度、热成像、IMU)。ImageBind 的训练目标是让同一个语义概念的六种模态表示都聚集在球面的同一区域。
18.2.3 核心概念二:InfoNCE 损失函数
CLIP 使用的是 InfoNCE(Noise-Contrastive Estimation)损失函数。一个 batch 有 N 个图文对 (I₁,T₁), (I₂,T₂), ..., (Iₙ,Tₙ)。对于第 i 个图像 Iᵢ,正样本是它的配对文本 Tᵢ,负样本是同一 batch 中所有其他文本 T₁, ..., Tᵢ₋₁, Tᵢ₊₁, ..., Tₙ。
损失函数的形式是:
L_image = -1/N Σᵢ log [ exp(sim(Iᵢ, Tᵢ)/τ) / Σⱼ exp(sim(Iᵢ, Tⱼ)/τ) ]
其中 sim(·,·) 是余弦相似度,τ 是温度参数。图像→文本方向有一个损失,文本→图像方向有一个对称的损失,最终损失是两者的平均。
直觉上,这个损失函数做了一件事:对于每一张图,让它"认出"自己的文本描述——就像在 N 个人里"认出"自己的朋友。N 越大(batch size 越大),"人群"越嘈杂,认人越难,学到的表示质量越好。CLIP 原论文使用的 batch size 是 32768。
18.2.4 核心概念三:温度参数 τ
温度参数 τ 控制的是 softmax 分布的"尖锐程度"。
- τ 很大(比如 1.0):所有相似度得分被"压平",正样本和负样本之间的差异变小,模型很难区分谁是正样本。训练信号弱。
- τ 很小(比如 0.01):相似度差异被急剧放大,模型对微小的差异极度敏感,梯度可能不稳定。
- 合适的 τ(CLIP 用的是可学习的 log τ,初始化约 1/0.07 ≈ 14.3,训练后稳定在 1/20 到 1/100 之间):在区分能力和梯度稳定性之间取得平衡。
为什么 ImageBind 也需要理解温度?因为 ImageBind 在训练多种模态的对比学习时,不同模态对的最优温度可能不同。音频-图像对的语义粒度和深度-图像对的语义粒度可能差异很大,统一用一个 τ 可能不是最优的。ImageBind 最终使用了可学习的温度参数,让模型自己找到每对模态的最优温度。
18.2.5 核心概念四:CLIP 的局限
CLIP 强大但有两个根本局限:
局限一:只支持两种模态。 CLIP 的整个训练流程只涉及图像和文本。如果你想加入音频作为第三种模态,CLIP 的架构没有现成的位置给它——你需要设计新的方案。
局限二:只能判断"像不像",不能推理。 CLIP 能告诉你一张图和一段文字的匹配度是 0.87,但它无法回答"这张图里的人在做什么?为什么?接下来可能发生什么?"这类需要推理能力的问题。这个局限正是 BLIP-2/LLaVA 在 Ch09 中解决的问题——给 CLIP 接上一个 LLM。但即使是 BLIP-2/LLaVA,也只支持图像+文本的输入。
ImageBind 解决了局限一(把模态数从 2 扩展到 6);AnyMAL 同时解决了局限一和局限二(多模态输入 + LLM 推理能力)。
18.3 ImageBind:以图像为中心的六模态统一
18.3.1 核心洞察:你不需要认识所有人
一个聚会的类比
想象你参加一个 100 人的大聚会。你想和所有人都建立联系。天真的做法是:和每个人都单独聊一次——需要 C(100,2) = 4950 次一对一对话。这显然不现实。
但有一个聪明的做法:聚会里有一位特别受欢迎的人——小王。每个人都认识小王。你只需要认识小王就够了。因为当你想找"那个穿红衣服、说话声音很大、带了一条金毛的人"时,你问小王,小王知道那是谁。所有人都通过小王建立了间接的联系网络。
ImageBind 的核心洞察与此完全一致:图像就是那个"小王"。 几乎所有传感器数据都有自然的图像配对——摄像头和麦克风同时录制就有了视频-音频对,RGB-D 相机同时输出 RGB 和深度图就有了图像-深度对,热成像相机和 RGB 相机并排安装就有了图像-热成像对,手机的摄像头和 IMU 同时记录就有了图像-IMU 对。
这意味着你不需要 C(6,2) = 15 种配对数据集。你只需要 5 种:(图像, 文本)、(图像, 音频)、(图像, 深度)、(图像, 热成像)、(图像, IMU)。数据收集的复杂度从 O(N²) 降到了 O(N)。
六种模态
ImageBind 对齐的六种模态分别是:
| 序号 | 模态 | 典型传感器 | 与图像配对的数据来源 |
|---|---|---|---|
| 1 | 图像/视频 (Image/Video) | RGB 相机 | 中心枢纽,不需要配对 |
| 2 | 文本 (Text) | — | CLIP 的 400M 图文对 |
| 3 | 音频 (Audio) | 麦克风 | AudioSet、VGGSound 等视频数据集(视频自带音轨) |
| 4 | 深度 (Depth) | 深度相机 | SUN RGB-D、ScanNet 等 RGB-D 数据集 |
| 5 | 热成像 (Thermal) | 红外相机 | LLVIP 等 RGB-热成像配对数据集 |
| 6 | IMU | 惯性测量单元 | Ego4D(头戴设备同时记录视频和 IMU) |
注意,图像和文本的配对继承自 CLIP——ImageBind 的视觉编码器直接从 CLIP 的 ViT-H 初始化。这意味着 ImageBind 不需要从零训练图像-文本对齐,而是站在了 CLIP 的肩膀上。
18.3.2 架构设计:六个编码器,一个空间
整体架构
ImageBind 的架构出奇地简洁。用一句话概括:六种模态各有独立的 Transformer 编码器,但所有编码器的输出都被映射到同一个 d 维嵌入空间。
注意区分两个容易混淆的概念:
- "共享嵌入空间"——所有编码器的输出向量住在同一个空间里,维度相同(d=1024),可以直接计算余弦相似度。这是 ImageBind 的核心设计。
- "共享编码器权重"——所有编码器使用相同的参数。ImageBind 不是这样做的。每种模态有自己独立的编码器,参数完全不同。
为什么不共享权重?因为不同模态的原始数据格式差异太大。音频的梅尔频谱图(Mel spectrogram)和 RGB 图像虽然都是 2D 矩阵,但它们的空间语义完全不同——图像的横轴和纵轴是空间坐标,梅尔频谱图的横轴是时间、纵轴是频率。用同一组卷积核去处理它们,学到的特征会很糟糕。
视觉编码器:ViT-H
ImageBind 的视觉编码器是 ViT-H(Vision Transformer - Huge),直接从 OpenCLIP 的预训练权重初始化。ViT-H 的规模是:
| 参数 | 值 |
|---|---|
| 隐藏维度 | 1280 |
| 注意力头数 | 16 |
| Transformer 层数 | 32 |
| Patch 大小 | 14×14 |
| 参数量 | ~632M |
ViT-H 接收 224×224 的图像,切成 16×16 = 256 个 patch(实际是 (224/14)² = 256),每个 patch 通过线性投影变成 1280 维的 token。加上一个 [CLS] token,共 257 个 token 送入 Transformer。最终取 [CLS] token 的输出作为图像的全局表示,再通过一个线性投影头映射到 1024 维的共享嵌入空间。
其他模态的编码器
每种非图像模态都有自己的 Transformer 编码器,但输入预处理方式不同。ImageBind 的巧妙之处在于,尽可能把其他模态的数据"格式化"成类似 2D patch 的结构,从而能复用 ViT 的架构(尽管权重不共享)。
音频编码器:
原始音频信号首先被转换成梅尔频谱图——一个 2D 的时间-频率矩阵,通常尺寸为 128(频率 bin)×204(时间帧),对应约 2 秒的音频。这个 2D 矩阵被当成一张"图像"来处理:切成 16×16 的 patch,每个 patch 通过线性投影变成 token。然后送入一个和 ViT 架构相同(但权重独立)的 Transformer。
踩坑提醒:梅尔频谱图的 2D 结构和图像的 2D 结构在语义上完全不同。图像中相邻的 patch 在物理空间中也相邻(空间局部性);但梅尔频谱图中横向相邻的 patch 在时间上相邻,纵向相邻的 patch 在频率上相邻。这种差异意味着虽然架构可以复用,但位置编码(position embedding)需要独立学习——不能直接搬图像的位置编码来用。
深度编码器:
深度图本质上就是一张单通道"图像",每个像素值表示该点到相机的距离(通常以毫米或米为单位)。ImageBind 把深度图当作单通道图像处理:重复三次变成"伪三通道"(或者直接用单通道的线性投影),然后和 RGB 图像一样切 patch、投影、送 Transformer。
热成像编码器:
热成像图和深度图类似,也是单通道的 2D 矩阵,每个像素值表示温度。处理方式与深度图几乎完全相同。
IMU 编码器:
IMU(惯性测量单元)输出的是 6 维时序数据:3 轴加速度(aₓ, aᵧ, a_z)+ 3 轴角速度(ωₓ, ωᵧ, ω_z)。这不是一张 2D "图像",而是一个 1D 时间序列。IMU 的采样频率通常很高(200Hz),5 秒的数据就有 1000 个时间步 × 6 维 = 6000 个数值。
ImageBind 把 5 秒的 IMU 数据切成等长的时间片段(每个片段约覆盖 0.1-0.2 秒),每个片段内的多个时间步被拼成一个向量,作为一个 token 送入 Transformer。这种做法类似于 ViT 对图像切 patch,但只沿时间维度切。
为什么 IMU 数据对具身 AI 重要?因为 IMU 记录的是机器人自身的运动状态——它在走、在跑、在转弯、在上下楼梯。这种信息在 RGB 图像中很难直接获取(图像只能看到外部世界,看不到机器人自身的运动),但对于运动规划和状态估计至关重要。Ego4D 数据集中的 IMU 数据来自头戴式设备,记录了佩戴者的头部运动——这和机器人的 IMU 传感器记录机器人身体运动是同一类信号。
架构总结:输入到输出的数据流
任意模态输入
→ 模态特定的预处理(RGB: patch化; 音频: 梅尔频谱图→patch; 深度/热成像: 单通道→patch; IMU: 时间片段→token)
→ 模态特定的线性投影(每种模态独立的投影矩阵)
→ 加上模态特定的位置编码
→ 独立的 Transformer 编码器(架构相同、权重不同)
→ 取 [CLS] token
→ 模态特定的投影头(线性层,映射到 1024 维)
→ 共享嵌入空间中的 1024 维向量
所有模态最终输出的都是 1024 维的向量,可以直接用余弦相似度计算任意两个模态之间的语义距离。
这个架构设计的精髓在于"底层多样化,顶层统一化"。底层每种模态有自己的预处理和编码器——因为不同模态的原始数据格式确实千差万别,强行统一会损失信息。但顶层所有编码器的输出都被映射到同一个 1024 维空间——因为在语义层面上,"狗叫声""狗的照片""狗的深度图""狗的热成像"说的都是同一件事。
踩坑提醒:1024 维的嵌入空间对于六种模态来说是否太小了?一种模态的信息被压缩成一个 1024 维向量,会不会丢失太多细节?答案是:对于语义级别的对齐("这是狗还是猫"),1024 维绰绰有余。但对于细粒度的理解("这只狗是什么品种""声音的具体频率特征"),信息确实会损失。这也是为什么 ImageBind 更适合做跨模态检索和零样本分类,而不太适合做需要细粒度理解的任务。
18.3.3 训练策略:只训练 (图像, X) 对
损失函数
ImageBind 的训练损失就是标准的 InfoNCE 对比损失——和 CLIP 完全一样。对于每一种非图像模态 M,损失是:
L_M = -1/N Σᵢ log [ exp(sim(Iᵢ, Mᵢ)/τ_M) / Σⱼ exp(sim(Iᵢ, Mⱼ)/τ_M) ]
加上反方向的对称项:
L_I = -1/N Σᵢ log [ exp(sim(Mᵢ, Iᵢ)/τ_M) / Σⱼ exp(sim(Mᵢ, Iⱼ)/τ_M) ]
总损失是所有模态对损失的加和:
L_total = Σ_M (L_M + L_I) / 2
其中 τ_M 是每种模态对独立的可学习温度参数。论文实验表明,最优温度通常在 1/20 到 1/100 的范围内——和 CLIP 论文的发现一致。
训练的关键约束
这里有一个非常重要的细节:训练过程中,图像编码器(ViT-H)的权重是冻结的。
为什么?因为图像编码器已经从 CLIP 预训练中学到了高质量的视觉表示和图像-文本对齐。如果在 ImageBind 的训练过程中允许图像编码器的权重更新,那么在用 (图像, 音频) 对训练时,图像编码器可能会"忘记"它从 CLIP 学到的图像-文本对齐——这就是灾难性遗忘(catastrophic forgetting)。
冻结图像编码器意味着:共享嵌入空间的"坐标系"由 CLIP 的图像-文本对齐定义,不会改变。其他模态的编码器需要学习的是:把自己的输出"搬"到这个已经建好的坐标系中。
踩坑提醒:这个设计选择有一个隐含假设——CLIP 学到的嵌入空间对于非图像模态来说也是一个好的目标空间。如果 CLIP 的嵌入空间因为某种原因不适合表示音频或 IMU 的语义结构,那么强迫其他模态对齐到这个空间可能会损失信息。后来的 LanguageBind(2023)研究了以文本为中心枢纽的替代方案,发现在某些任务上效果更好。
数据集
ImageBind 使用的五种配对数据集:
| 模态对 | 数据集 | 规模 |
|---|---|---|
| (图像, 文本) | 继承自 CLIP(OpenCLIP 训练) | ~400M 对 |
| (视频, 音频) | AudioSet | ~2M 段 |
| (图像, 深度) | SUN RGB-D | ~10K 对 |
| (图像, 热成像) | LLVIP | ~16K 对 |
| (视频, IMU) | Ego4D | ~5M 片段 |
注意数据量的巨大差异:图文对有 4 亿,但热成像对只有 1.6 万——差了四个数量级。ImageBind 能在如此少量的配对数据上学到有用的热成像表示,很大程度上归功于冻结图像编码器提供的稳定锚点——锚点不动,新模态只需要学习对齐到锚点就行,不需要同时协调多个移动目标。
踩坑提醒:如果你想复现 ImageBind 或做类似的多模态对齐实验,数据量不平衡是一个需要特别注意的问题。热成像和 IMU 的数据量比图文对少了数个数量级。在实际训练中,需要对小数据集做过采样(oversampling)或对大数据集做降采样(downsampling),否则训练会被图文对主导,其他模态的对齐质量会很差。ImageBind 论文中通过调整不同模态对的采样比例来缓解这个问题。
18.3.4 涌现式零样本对齐:最惊人的发现
什么是涌现式对齐?
ImageBind 论文中最令人惊讶的实验结果是:从未一起训练过的模态对之间,竟然能互相检索和分类。
具体来说,训练过程中只用了 (图像, 音频) 对和 (图像, 深度) 对——从来没有一个 (音频, 深度) 的配对数据参与训练。但训练结束后,你给模型一段"狗叫声"的音频,它能从一堆深度图中找到"狗"的深度图。反过来,给一张"厨房"的深度图,它能从一堆音频中找到"水龙头流水"的声音。
这种能力被论文称为"涌现式零样本对齐"(emergent zero-shot alignment)。
为什么会涌现?传递性
原因其实不神秘——它是向量空间中的传递性。
回到聚会的类比。假设 Alice 和小王聊过天,知道小王在聚会地图的左上角。Bob 也和小王聊过天,也知道小王在左上角。虽然 Alice 和 Bob 从来没直接交流过,但他们都知道小王的位置——这意味着他们对"聚会地图"的坐标系有共同的理解。如果 Alice 在小王旁边(语义上和小王相关),Bob 在小王对面(语义上和小王不相关),那么 Alice 也在 Bob 对面。
用数学说:如果音频编码器学到了 audio("狗叫") ≈ image("狗")(因为训练了音频-图像对),而深度编码器学到了 depth("狗形深度图") ≈ image("狗")(因为训练了深度-图像对),那么 audio("狗叫") ≈ depth("狗形深度图")——因为它们在嵌入空间中都挨着 image("狗")。
更准确地说,这种传递性成立有一个前提条件:所有模态的编码器都把"语义等价"的内容映射到嵌入空间中的同一个区域。这个前提正是 InfoNCE 对比学习强制保证的——训练迫使语义匹配的图像-音频对的向量尽可能接近,语义匹配的图像-深度对的向量也尽可能接近。如果"狗叫"和"狗的照片"在嵌入空间中重合,"狗的深度图"和"狗的照片"在嵌入空间中也重合,那么"狗叫"和"狗的深度图"自然也重合了。
再用一个更贴切的类比:A 和 B 说普通话交流。B 和 C 也说普通话交流。A 和 C 虽然从未直接对话过,但他们说的是同一种"语言"(嵌入空间的坐标系),所以当他们最终碰面时,可以直接用普通话交流——不需要额外学习。
数字验证
论文用实验证实了涌现式对齐的有效性:
| 任务 | 数据集 | 零样本准确率 |
|---|---|---|
| 音频→文本分类 | ESC-50(环境声分类) | 66.9% |
| 音频→文本分类 | AudioSet(20 类) | 67.0% |
| 深度→文本分类 | NYU-v2 | 54.0% |
注意"音频→文本分类"的含义:模型从来没有见过 (音频, 文本) 的配对数据。它训练时只见过 (图像, 文本) 和 (图像, 音频)。但因为涌现式对齐,音频向量和文本向量可以直接比较——给一段音频,找到嵌入空间中最近的文本标签,就完成了分类。
ESC-50 的 66.9% 意味着,在 50 个环境声类别中(如雨声、狗叫、键盘敲击、直升机),模型有三分之二的概率能正确识别——而这个能力是"免费"获得的,不需要任何音频-文本的配对训练。
作为参考,ESC-50 上的监督学习方法(直接在音频-标签对上训练)的准确率约 95%。所以 66.9% 距离专用模型还有不小差距——但请记住,ImageBind 的音频编码器从未见过任何音频-文本对,它的"文字能力"完全是从图像空间间接继承的。从零(完全没有音频-文本训练)到 66.9%,这个跳跃是令人惊讶的。
深度→文本分类在 NYU-v2 上的 54.0% 也值得分析。NYU-v2 是一个室内场景数据集,有"卧室""厨房""客厅"等类别。54.0% 的准确率意味着模型能在大约一半的情况下从深度图中判断出这是什么类型的房间——仅凭几何结构信息,不看任何颜色或纹理。这个能力也是从未直接训练过的。
涌现式对齐的边界
涌现式对齐不是万能的。传递性的精度受两个因素限制:
第一,锚点精度。如果音频-图像对齐本身不够精确(比如"水流声"同时出现在"瀑布"和"水龙头"两种完全不同的图像场景中),那么通过图像中转传递到深度模态时,误差会累积。
第二,语义粒度。图像-文本对齐在 CLIP 中做到了非常细的粒度(能区分"金毛犬"和"拉布拉多")。但图像-热成像对齐的数据集只有 1.6 万对,粒度远没那么细。通过热成像中转传递到其他模态时,精度会受限于最弱的那条链路。
18.3.5 与 CLIP 的全面对比
下面这张表格系统对比了 CLIP 和 ImageBind 的核心差异。建议你把这张表格和 Ch08 的 CLIP 总结对照着看,会对两者的关系有更清晰的理解。
| 维度 | CLIP | ImageBind |
|---|---|---|
| 模态数 | 2(图像 + 文本) | 6(图像 + 文本 + 音频 + 深度 + 热成像 + IMU) |
| 对齐策略 | 直接对齐(图↔文) | 以图像为枢纽(图↔X) |
| 训练数据需求 | 1 种配对数据集(图文) | 5 种配对数据集(每种和图像配对) |
| 涌现能力 | 无(只有两种模态,无法传递) | 有(未配对模态间的零样本对齐) |
| 视觉编码器 | ViT-L( |
ViT-H(~632M),从 CLIP 初始化 |
| 总参数量 | ~428M(ViT-L + 文本 Transformer) | ~1.2B(6 个编码器 + 投影头) |
| 嵌入维度 | 512 或 768 | 1024 |
| 图像编码器训练状态 | 全参数训练 | 冻结(权重来自 CLIP) |
从表中可以看到一个重要的"继承"关系:ImageBind 并不是从零开始构建的。它的视觉编码器和图文对齐直接继承自 CLIP。ImageBind 的贡献在于:在 CLIP 建好的"地基"上,以极低的代价扩展了四种新模态。这种"站在巨人肩膀上"的策略使得六模态统一变得可行——否则从零训练一个六模态对比学习系统的数据和计算需求将会是天文数字。
18.3.6 局限与思考
局限一:图像中心假设的脆弱性
ImageBind 的整个架构都建立在一个假设上:图像是所有模态的"自然枢纽"——每种模态都能找到与图像配对的数据。
但如果某种模态和图像的对应关系天然很弱呢?
考虑 EEG 脑电信号。一个人在想象一只猫时,他的脑电波确实包含了"猫"的语义信息——但你很难找到一个同时记录脑电和第一人称视觉图像的大规模数据集,使得每一帧脑电都有一帧精确对应的图像。EEG 信号更多地和语义概念(词、句子、意图)相关,而不是和具体的视觉图像相关。
对于这类模态,以文本为枢纽可能比以图像为枢纽更合适。2023 年提出的 LanguageBind 正是探索了这个方向——用文本作为中心锚点,让其他模态对齐到语言空间。在某些语义理解任务上,LanguageBind 超越了 ImageBind。
局限二:对比学习的根本限制
对比学习的目标是学习"相似性判断"——判断两个输入是否语义相关。但它不学习"怎么用这些信息来做事"。
举个具体的例子:ImageBind 能把"玻璃碎裂的声音"和"碎玻璃的图像"对齐到嵌入空间的同一区域。但它不能回答"听到玻璃碎裂的声音后,机器人应该做什么?"这个问题需要推理能力——而对比学习不提供推理能力。
这正是 AnyMAL 要解决的问题:不仅要理解多模态输入(用 ImageBind 的编码器),还要用 LLM 的推理能力把理解转化为行动。
局限三:静态对齐 vs. 动态融合
ImageBind 把每种模态独立编码成一个 1024 维的向量,然后在嵌入空间中比较。这是一种"静态对齐"——每种模态的表示在生成时不知道其他模态的存在。
打个比方:这就像你同时收到一张照片和一段录音,但你必须先看完照片写下你的理解,再听完录音写下你的理解,最后才能比较两份理解。你在看照片时不知道录音内容,在听录音时也不知道照片内容——你无法让一种感知帮助你解读另一种感知。
但人类的多模态感知不是这样工作的。当你端起一杯咖啡时,你的视觉(看到杯子在手中)和触觉(感受杯子的温度和重量)是动态融合的——视觉会影响你如何解读触觉信号("看到杯子里有热气 → 预期杯壁会烫"),触觉也会修正你的视觉判断("看起来杯子很满 → 端起来很轻 → 其实只有半杯")。
这种跨模态的动态交互在 ImageBind 中是缺失的。每种模态独立编码,最终只在嵌入空间中"见面"——这时候已经太晚了,信息已经被压缩成了一个 1024 维的向量,无法再进行细粒度的跨模态推理。
后来的工作如 Meta 的 AnyMAL 和 Google 的 PaLM-E 在一定程度上解决了这个问题——它们把多模态信息送入 LLM 的自注意力机制中,让不同模态的 token 可以互相关注(attend to each other)。在 Transformer 的自注意力层中,视觉 token 可以 attend to 音频 token,从而实现真正的跨模态信息交互——这是 ImageBind 的纯对比学习框架做不到的。
18.4 AnyMAL:让大语言模型理解万物
18.4.1 动机:翻译官和同声传译
一个翻译官的类比
想象联合国有一位精通中文的超级翻译官(LLM)。这位翻译官读过几乎所有中文书籍、学术论文、新闻报道、百科全书——他的知识面极广,推理能力极强。给他一段中文描述,他能回答任何问题、做任何推理。
但他有一个限制:他只懂中文文字。他看不到图像(不知道一张照片里有什么),听不到声音(不知道一段录音在说什么),也感受不到运动(不知道一组 IMU 数据代表什么姿态)。
怎么办?给他配一组同声传译:
- 翻译甲(视觉投射器):看到一张图,迅速把视觉内容"翻译"成中文描述交给翻译官
- 翻译乙(音频投射器):听到一段声音,迅速把音频内容"翻译"成中文描述交给翻译官
- 翻译丙(IMU 投射器):感受到一组运动数据,迅速把运动含义"翻译"成中文描述交给翻译官
翻译官本人的能力没有任何变化——他还是那个精通中文的超级知识人。但通过这组同声传译,他现在能"理解"图像、音频、IMU 等各种输入了。
这就是 AnyMAL(Any-Modality Augmented LLM)的核心思想。论文全名是"AnyMAL: An Efficient and Scalable Any-Modality Augmented Language Model",由 Meta 在 2023 年发表。
"Efficient"指训练成本低——只需训练占总参数不到 0.1% 的投射模块。"Scalable"指模态扩展容易——每增加一种新模态,只需增加一个小的投射模块。"Any-Modality"指理论上支持任意模态——只要有预训练的编码器和一定量的配对数据。
从 BLIP-2 到 AnyMAL 的逻辑递进
如果你读过 Ch09,你会发现 AnyMAL 的思路和 BLIP-2/LLaVA 高度相似——都是"冻结 LLM,只训练中间桥接模块"。区别在于:
- BLIP-2 只桥接了一种模态(图像→LLM)
- LLaVA 也只桥接了一种模态(图像→LLM),但用了更简单的投射方式(线性层 vs Q-Former)
- AnyMAL 桥接了多种模态(图像 + 音频 + IMU + ... → LLM),每种模态各有一个投射器
从这个角度看,AnyMAL 是 BLIP-2/LLaVA 思路在模态维度上的自然扩展。
18.4.2 架构设计:三大组件
AnyMAL 的架构由三个组件构成:基座 LLM、多模态编码器、投射模块。
组件一:基座 LLM(冻结的推理引擎)
AnyMAL 使用 LLaMA-2 作为基座 LLM,论文实验了 7B、13B、70B 三种规模。LLM 的全部权重在整个训练过程中保持冻结——这是一个关键设计决策。
为什么冻结?三个理由:
第一,保护推理能力。LLM 经过大规模预训练和人类反馈对齐(RLHF),已经具备了强大的推理、知识回忆、指令跟随能力。这些能力是用万亿量级的 token 训练出来的。如果在多模态训练中解冻 LLM 的权重,这些能力可能被损害——多模态训练数据的规模远小于 LLM 预训练数据(几百万 vs 几万亿 token),解冻后 LLM 会在新数据上过拟合,同时丢失在旧数据上学到的能力。这就是机器学习中经典的灾难性遗忘(catastrophic forgetting)问题。
第二,降低计算成本。全参数微调 LLaMA-2-70B 需要数百个 GPU 跑数天。以 70B 模型为例,全参数微调至少需要 560GB GPU 显存(按 BF16 精度计算,每个参数 2 字节 × 4 倍状态 = 8 字节/参数),这意味着至少需要 7 张 80GB 的 A100。冻结 LLM 后,只需要训练投射模块——参数量约 50M,不到 LLM 的 0.1%,单张 A100 就能跑起来。
第三,模块化可替换。当更强的 LLM 出现时(比如 LLaMA-3、Qwen-2),你只需要重新训练投射模块,不需要重新训练整个系统。投射模块的训练只需要几小时到几天——远快于全参数微调的数周时间。这意味着你可以快速跟上 LLM 社区的迭代速度。
组件二:多模态编码器(感知层)
AnyMAL 使用预训练好的多模态编码器来提取各种模态的特征表示。论文主要使用了两种编码器来源:
ImageBind 编码器。 直接复用 18.3 节介绍的 ImageBind 的模态编码器。对于图像,使用 ImageBind 的 ViT-H 视觉编码器;对于音频,使用 ImageBind 的音频编码器;对于 IMU,使用 ImageBind 的 IMU 编码器。这些编码器在 ImageBind 的训练中已经学会了把各种模态映射到统一的嵌入空间。
CLIP 编码器。 对于图像和文本模态,也可以使用 CLIP 的编码器作为替代。论文的消融实验表明,对于纯视觉-语言任务,CLIP 和 ImageBind 的表现差异不大。
这些编码器的权重在 AnyMAL 训练过程中也是冻结的。这意味着 AnyMAL 的训练只更新投射模块的参数——整个系统中超过 99% 的参数都是冻结的。
组件三:投射模块(翻译器)
投射模块是 AnyMAL 中唯一被训练的部分。每种模态有一个独立的投射模块,负责把该模态编码器的输出"翻译"成 LLM 的 token 嵌入空间中的向量。
投射模块的设计有几种选择:
简单线性投射(Linear Projection)。 一个线性层:y = Wx + b,把编码器输出的 d_enc 维向量映射到 LLM 的 d_llm 维 token 嵌入空间。参数量 = d_enc × d_llm + d_llm。对于 ImageBind(d_enc=1024)和 LLaMA-2-70B(d_llm=8192),参数量约 840 万——这个数字和 LLM 的 70B(700 亿)参数相比,只有万分之一。这和 LLaVA 在 Ch09 中使用的投射方式完全一致。
为什么这么简单的线性层就能工作?直觉上,ImageBind 的编码器已经学到了高质量的多模态语义表示——"狗"的音频、"狗"的图像、"狗"的深度图都被映射到了嵌入空间的同一区域。投射层需要做的不是"理解"这些表示(理解的工作已经被编码器做完了),而只是"格式转换"——把 1024 维的编码器输出空间变换到 8192 维的 LLM token 空间。这种线性变换在几何上就是一个仿射映射,足以完成格式转换的任务。
多层 MLP。 两到三层的全连接网络,中间加 GELU 激活函数。典型配置是:1024 → 4096 → 8192,或 1024 → 4096 → 4096 → 8192。比线性投射有更强的非线性映射能力,参数量增加到几千万量级,但相比 70B 的 LLM 仍然微不足道。MLP 的非线性能力在某些情况下有助于更好地对齐编码器空间和 LLM 空间之间的语义结构——当两个空间的语义拓扑不完全一致时,简单的线性映射可能无法精确地保持所有语义关系。
对比 BLIP-2 的 Q-Former 和 Flamingo 的 Perceiver Resampler。 AnyMAL 论文发现,对于多模态 LLM 的投射任务,简单的 MLP 投射和复杂的 Q-Former/Perceiver Resampler 在最终性能上差距不大——但 MLP 投射的训练速度快得多,也更容易调试。这个发现和 LLaVA 论文的结论一致:简单桥接优于复杂桥接(在有足够大的基座 LLM 的前提下)。
| 投射方式 | 代表工作 | 参数量 | 特点 |
|---|---|---|---|
| Q-Former | BLIP-2 | ~188M | 用可学习的查询向量做交叉注意力,信息瓶颈 |
| Perceiver Resampler | Flamingo | ~194M | 类似 Q-Former,用固定数量的 latent token 采样 |
| 线性层 | LLaVA / AnyMAL | ~8M | 最简单,训练最快 |
| MLP (2-3层) | AnyMAL | ~25-50M | 比线性层更强的非线性映射 |
整体数据流
用一个完整的例子说明 AnyMAL 处理多模态输入的流程:
用户输入:[一张厨房的图片] + [一段水龙头流水的音频] + "图片和声音描述的是什么场景?请推测接下来可能发生什么。"
处理流程:
1. 图片 → ImageBind 视觉编码器(冻结)→ 1024 维向量
→ 视觉投射器(训练)→ 8192 维 LLM token
2. 音频 → ImageBind 音频编码器(冻结)→ 1024 维向量
→ 音频投射器(训练)→ 8192 维 LLM token
3. 文本 → LLM tokenizer → 文本 token 序列
4. 组装输入序列:[视觉token] [音频token] [文本token: "图片和声音描述的是什么场景?..."]
5. 序列 → LLaMA-2-70B(冻结)→ 自回归生成回答
6. 输出:"图片显示了一个现代厨房,水槽区域有水龙头。音频是水龙头开着流水的声音。
结合两者,这个场景是有人在厨房洗东西。接下来可能是关掉水龙头、擦干盘子、
或者开始做饭。"
注意第 4 步中,视觉 token、音频 token 和文本 token 被拼接成一个统一的序列送入 LLM。LLM 的自注意力机制让这些不同来源的 token 能互相关注——这就解决了 ImageBind 的"静态对齐"局限(18.3.6 节提到的局限三)。在 LLM 内部,视觉 token 可以影响模型对音频 token 的解读,音频 token 也可以影响模型对视觉 token 的理解。
这里有一个微妙但重要的区别:在 ImageBind 中,每种模态被独立编码成一个向量,然后在嵌入空间中比较——模态之间没有"对话"。而在 AnyMAL 中,不同模态的 token 在 LLM 的 Transformer 层中经过了数十轮自注意力计算——每一轮中,每个 token 都能看到所有其他 token 的信息。这种深度交互让 LLM 能做出 ImageBind 做不到的跨模态推理。
踩坑提醒:投射后的多模态 token 和原始文本 token 虽然都住在同一个 d_llm 维空间里,但它们的分布特性可能很不同。文本 token 是 LLM 在数万亿 token 上训练出来的"原住民",而投射过来的多模态 token 是"移民"——它们的统计分布可能和原住民不太一样。这个分布不匹配是阶段一训练需要解决的核心问题之一:让投射模块学会把多模态编码器的输出映射到 LLM "习惯"的分布范围内。
18.4.3 两阶段训练
AnyMAL 的训练分为两个阶段,和 LLaVA 的训练策略高度相似(参见 Ch09),但扩展到了多模态。
阶段一:大规模弱标注对齐(Alignment)
目标:让投射模块学会"粗糙的翻译"——把模态编码器的输出映射到 LLM 能理解的 token 空间中。
训练数据:大规模的弱标注配对数据,例如:
| 模态对 | 数据来源 | 规模 |
|---|---|---|
| 图像-文本 | CC3M, CC12M, LAION 子集 | 数百万对 |
| 音频-文本 | AudioCaps, Clotho | 约 50K 对 |
| 视频-文本 | WebVid, VATEX | 数百万对 |
| IMU-文本 | Ego4D 的 narration | 数百万对 |
训练目标:标准的下一 token 预测(next token prediction)。给定多模态输入和对应的文本描述,让 LLM 预测文本描述中的每个 token。
这个阶段的要点是"量大质低"——数据噪声很多(互联网爬来的图文对质量参差不齐),但海量数据足以让投射模块学到基本的模态-语言对应关系。
阶段二:高质量指令微调(Instruction Tuning)
目标:让模型学会"精确地遵循指令"——不仅能理解多模态输入,还能按照用户的具体要求格式化输出。
训练数据:精心构造的高质量指令-回答对,例如:
- [图片] + "详细描述这张图片中的所有物体及其空间关系" → 长文本描述
- [音频] + "这段声音来自什么环境?列出你能识别的所有声音" → 音频场景分析
- [图片 + 音频] + "这两个输入是否来自同一场景?给出你的判断和理由" → 跨模态推理
- [IMU 数据] + "根据这段运动数据,这个人在做什么活动?" → 活动识别
这些指令数据通常是用 GPT-4 生成的(类似 LLaVA 的做法):先用 GPT-4V 对图片生成详细描述,然后基于这些描述构造多种指令-回答对。
踩坑提醒:阶段二的数据质量远比数据量重要。AnyMAL 论文的消融实验表明,用 100K 高质量指令数据训练的模型,在多模态理解和指令跟随上,显著优于用 1M 低质量数据训练的模型。这和 LLM 领域的普遍发现一致——LIMA 论文的名言"Less Is More for Alignment"在多模态场景中同样成立。
训练的关键数字
| 参数 | 值 |
|---|---|
| 基座 LLM | LLaMA-2-70B(冻结) |
| 编码器 | ImageBind(冻结) |
| 可训练参数 | 仅投射模块(约 50M,占总参数量的 <0.1%) |
| 阶段一训练 | 数百万样本,数天 |
| 阶段二训练 | 约 100K 样本,数小时 |
| 总训练成本 | 远低于从零预训练一个多模态 LLM |
18.4.4 关键实验结果
单模态理解
AnyMAL 在多个单模态理解基准上的表现:
| 任务 | 基准 | 指标 | AnyMAL-70B | 对比方法 |
|---|---|---|---|---|
| 图像描述 | COCO Captioning | CIDEr | 99.5 | BLIP-2: 144.5* |
| 视觉问答 | VQAv2 | Accuracy | 67.8% | BLIP-2: 65.0% |
| 音频描述 | AudioCaps | CIDEr | 77.8 | — |
| IMU 描述 | Ego4D-IMU | CIDEr | 52.5 | — |
*注:COCO CIDEr 分数的差异主要来自评估设置(AnyMAL 使用生成式评估,BLIP-2 使用检索增强评估),不能直接比较绝对值。
几个值得注意的结论:
第一,音频理解是真实的。AnyMAL 能根据一段音频生成准确的文字描述(AudioCaps CIDEr 77.8),这意味着音频投射器成功地把音频信息"翻译"成了 LLM 能理解的 token。
第二,IMU 理解也是真实的。IMU 数据是最不直观的模态——6 维时序数值,人类看了也很难直接解读。但 AnyMAL 能从 IMU 数据推断出"这个人在走路/跑步/骑自行车"等活动描述(Ego4D-IMU CIDEr 52.5)。
第三,跨模态推理能力存在但不完美。当同时给 AnyMAL 图片和音频时,它有时能做出合理的跨模态推理("图片是一个体育场,音频是欢呼声,所以可能正在举行一场比赛"),但也经常犯错或忽略其中一个模态的信息。
规模效应
AnyMAL 论文最重要的发现之一是明确的规模效应:
| 基座 LLM 规模 | VQAv2 准确率 | COCO CIDEr | AudioCaps CIDEr |
|---|---|---|---|
| LLaMA-2-7B | 58.2% | 82.3 | 61.4 |
| LLaMA-2-13B | 62.7% | 91.1 | 68.9 |
| LLaMA-2-70B | 67.8% | 99.5 | 77.8 |
结论很清晰:基座 LLM 越大,多模态理解能力越强。 从 7B 到 70B,VQAv2 准确率提升了近 10 个百分点,AudioCaps CIDEr 提升了 16 个点。
这个发现的含义是:多模态理解的瓶颈不在投射模块(它只有几千万参数),而在基座 LLM 的推理能力。更大的 LLM 能更好地"消化"投射模块送来的多模态 token,做出更准确的理解和推理。
踩坑提醒:规模效应不是无限的。从 7B 到 13B 的提升幅度比从 13B 到 70B 更大——边际收益在递减。而且更大的 LLM 意味着更高的推理成本和延迟,对于实时性要求高的机器人应用来说,70B 可能太大了。实际部署时需要在性能和延迟之间权衡。
18.4.5 与其他多模态 LLM 的对比
2023-2024 年出现了多个多模态 LLM。下面对比它们的核心设计选择:
| 维度 | Flamingo | BLIP-2 | LLaVA | AnyMAL | PaLM-E |
|---|---|---|---|---|---|
| 时间 | 2022.04 | 2023.01 | 2023.04 | 2023.09 | 2023.03 |
| 基座 LLM | Chinchilla 70B | FlanT5 / OPT | Vicuna 7B/13B | LLaMA-2 7B/13B/70B | PaLM 540B |
| LLM 冻结? | 是(gated cross-attn 可训练) | 阶段一冻结,阶段二可选 | 是(投射层可训练) | 是(投射层可训练) | 否(全参数微调) |
| 投射方式 | Perceiver Resampler + Gated XAttn | Q-Former | 线性层 / MLP | MLP | 线性投射 + 混入 LLM |
| 支持模态 | 图像 + 文本 | 图像 + 文本 | 图像 + 文本 | 图像 + 音频 + IMU + 文本 | 图像 + 机器人状态 + 文本 |
| 训练成本 | 非常高 | 中等 | 低 | 低 | 极高 |
| 新模态扩展性 | 困难(需重训 XAttn) | 困难(需重训 Q-Former) | 容易(加一个投射层) | 容易(加一个投射层) | 困难(需重训整个 LLM) |
这张表格揭示了几个重要的趋势:
趋势一:冻结 LLM 成为主流。 早期的 PaLM-E 选择了全参数微调——把图像 token 直接混入 PaLM 540B 的输入层,然后端到端微调整个 540B 参数。这种做法的好处是 LLM 能深度理解视觉信息,但代价是极其昂贵的训练成本和可能的语言能力退化。后来的 LLaVA 和 AnyMAL 都转向了冻结 LLM 的路线——实验表明,只要投射层训练得当,冻结 LLM 的多模态理解能力并不逊色于全参数微调,而训练成本低了两个数量级。
趋势二:投射方式越来越简单。 Flamingo 用了复杂的 Perceiver Resampler + Gated Cross-Attention,需要在 LLM 的每一层插入新的注意力模块;BLIP-2 用了 Q-Former 做信息瓶颈压缩;LLaVA 和 AnyMAL 发现一个简单的线性层或 MLP 就够了。这不是因为简单方法更"聪明",而是因为当基座 LLM 足够大(70B+)时,LLM 自身的注意力机制就能完成跨模态信息的融合和理解——不需要额外的复杂桥接模块来"帮忙"。
趋势三:AnyMAL 的扩展性优势。 如果明天你想给系统加一种新模态(比如触觉),各方案需要做什么?Flamingo 需要在 LLM 的每一层都加入新的 gated cross-attention 模块并重新训练;BLIP-2 需要训练一个新的 Q-Former;PaLM-E 需要重新微调整个 540B 的 LLM。而 AnyMAL 只需要训练一个新的 MLP 投射层(几千万参数),其余所有组件都不用动。这种"即插即用"的扩展性是 AnyMAL 架构最有吸引力的特点之一。
AnyMAL 和 PaLM-E 的深度对比
PaLM-E 值得单独讨论,因为它代表了和 AnyMAL 截然相反的设计哲学。
PaLM-E 的核心观点是:不要冻结 LLM——让 LLM 直接"沉浸"在多模态数据中,从而获得更深层的多模态理解。 它把视觉 token、机器人状态 token、场景描述 token 全部混入 PaLM 的输入,然后全参数微调 PaLM 540B。
结果确实令人印象深刻:PaLM-E 在机器人操作任务上的规划成功率显著高于冻结 LLM 的方案。特别是在需要空间推理("把红色方块放在蓝色方块的右边")和因果推理("如果我推倒这个积木塔会发生什么")的任务上,全参数微调让 LLM 学到了纯文本训练中不存在的物理直觉。
但 PaLM-E 的代价也很明显:
第一,训练成本。全参数微调 PaLM 540B 需要数千个 TPU 跑数周。相比之下,AnyMAL 训练投射层只需要几十个 GPU 跑数天。
第二,语言退化。论文报告了在多模态微调后,PaLM-E 在某些纯语言基准(如常识推理)上的性能有所下降——全参数微调确实导致了一定程度的灾难性遗忘。PaLM-E 论文通过在微调数据中混入大量纯文本数据来缓解这个问题,但不能完全消除。这个现象和 Ch17 中的灾难性遗忘是同一类问题——模型在学新东西的同时忘掉了旧东西。
第三,不可替换性。PaLM-E 的多模态能力和 PaLM 540B 的权重深度耦合。当 Google 发布 PaLM-2 或 Gemini 时,PaLM-E 的多模态能力不能直接迁移——需要重新做全参数微调。而 AnyMAL 的投射层在理论上可以尝试迁移到新的基座 LLM(虽然可能需要微调)。在 LLM 技术快速迭代的 2023-2025 年,这种"可替换性"是一个非常实际的工程优势。
在具身 AI 领域,这两种路线之间的选择目前没有定论。如果你的目标是最强的空间推理和物理理解能力,PaLM-E 的全参数微调可能更好;如果你的目标是快速迭代、低成本地支持新模态和新基座 LLM,AnyMAL 的冻结+投射路线更实用。
踩坑提醒:2024 年后的趋势可能让这个选择变得不那么重要。Gemini、GPT-4o 等模型从预训练阶段就开始接触多模态数据——不再需要后期的投射或微调。这相当于跳过了"先训练纯文本 LLM,再接上多模态投射层"的两步走,直接做"从头开始的多模态预训练"。这条路线需要的计算资源远超 AnyMAL 和 PaLM-E,但产出的模型在多模态理解的深度上可能超越两者。
18.4.6 对具身 AI 的意义
从"翻译后再推理"到"直接推理"
回顾 Ch10 中的规划系统。SayCan 的工作流程是:
RGB 图像 → 图像描述器("桌上有一个红色可乐罐和一个绿色雪碧罐")
→ 纯文本描述 → LLM 规划("1.走向桌子 2.拿起红色可乐罐 3.走向用户 4.递出")
→ 技能选择 → 执行
注意中间有一个关键步骤:"图像描述器"把视觉信息翻译成文本。这个翻译过程会丢失大量信息——原始图像中的空间关系、物体的精确尺寸和位置、颜色的细微差别、场景的整体布局——都在"翻译成一句话"的过程中被压缩掉了。
Inner Monologue 的做法更进一步:它引入了多轮对话,让机器人在执行过程中不断向 LLM "汇报"当前观察。但汇报仍然是文本形式的——"我看到杯子在桌子的左边"——而不是直接把图像送给 LLM。
AnyMAL(以及 PaLM-E)改变了这个范式。现在机器人可以直接把 RGB 图像、深度图、音频、IMU 数据送给 LLM,让 LLM 在"看到"原始传感器信号的基础上做推理,而不是依赖中间的文本翻译。
用翻译官的类比来说:以前是"有人先把图片内容写成文字,翻译官再读文字做判断"——翻译官始终看不到原始图片。现在是"翻译官直接看到图片做判断"——虽然他是通过同声传译(投射层)"看"到的,但信息损失比文字描述小得多。
具体应用场景
有了 AnyMAL 类的多模态 LLM,机器人可以做以下以前做不到(或做不好)的事情:
场景一:听声辨物。 机器人在厨房里听到玻璃碎裂的声音。以前它需要转头找到碎玻璃才知道发生了什么;现在它可以直接把音频送给 LLM,LLM 推理出"有东西碎了,可能需要清理",然后规划相应的动作。
场景二:触觉引导的操作。 机器人需要把一个螺丝拧紧。以前它只能盲拧到预设的力矩值;现在它可以把触觉传感器的力-位移数据送给 LLM,LLM 判断"力矩曲线显示螺丝即将到底,应该停止"。
场景三:多模态异常检测。 一台工业机器人在装配流水线上工作。突然它听到一声不正常的嗡嗡声(音频),同时 IMU 检测到异常振动(IMU),但视觉上看不出任何问题(图像正常)。多模态 LLM 可以综合三种信号推断:"音频和 IMU 异常但视觉正常,可能是内部轴承磨损——建议停机检修。"
场景四:语音+视觉联合理解。 一个人对着机器人说"把那个给我",同时用手指了一下。"那个"是一个纯语言的指代,需要结合视觉(看到手指方向和可能被指的物体)和音频(理解自然语言指令)才能消歧。传统流水线需要分别做语音识别、指代消解、目标检测,然后把结果拼起来。多模态 LLM 可以一次性地把语音和画面都送进去,让模型自己做端到端的消歧。
这些场景的共同点是:单一模态不足以做出正确判断,多种模态的信息需要被融合在一起推理。 而 AnyMAL 提供了一种统一的框架来做这种融合。
与 Ch10 规划的关系
更宏观地看,AnyMAL 代表了 LLM-based 机器人规划的一个重要进化方向。在 Ch10 中,我们看到了三种规划方案,它们的共同特点是:LLM 只能通过文本接口和机器人交互。LLM 收到的是文本描述("桌上有红色可乐罐"),输出的也是文本指令("拿起红色可乐罐")。
AnyMAL 打通了一条新的路径:LLM 可以直接接收传感器数据。这意味着未来的规划系统可以不再需要一个单独的"观察到文本翻译"模块——LLM 自己就是感知和推理的一体化引擎。
这条路径和 Ch11 的端到端 VLA 在精神上是一致的——都在追求"减少模块间的信息瓶颈"。RT-2 让 VLM 直接输出动作 token(省掉了"LLM 文本规划→技能映射"的中间步骤);AnyMAL 让 LLM 直接接收多模态感知(省掉了"传感器信号→文本描述"的中间步骤)。最终的理想形态可能是一个既能直接处理多模态感知、又能直接输出动作控制的端到端模型——而这正是 2024-2025 年研究的前沿方向。
可以用一个简单的进化图谱来理解这个趋势:
2022: 传感器 → 文本描述 → LLM 规划 → 技能选择 → 底层控制(SayCan)
↑ ↑
信息瓶颈① 信息瓶颈②
2023: 传感器 → 多模态编码器 → 投射 → LLM 推理(AnyMAL)
↑
信息瓶颈减少
未来: 传感器 → 统一多模态模型 → 动作输出(端到端多模态 VLA)
↑
无中间瓶颈
每一步进化都在减少信息传递链路中的瓶颈数量。
踩坑提醒:虽然 AnyMAL 让 LLM 能"直接理解"传感器数据,但当前的理解深度仍然有限。LLM 对图像 token 的理解不如专用视觉模型精细,对 IMU token 的理解更是粗糙的。在实际部署中,AnyMAL 更适合做高层语义推理("发生了什么?应该做什么?"),而底层控制("手臂关节应该转多少度?")仍然需要专用的控制策略。这和 Ch10 中 SayCan 的分层架构——LLM 做高层规划、RL 策略做底层控制——的思想是一致的。
18.4.7 从 ImageBind + AnyMAL 看多模态技术栈
回顾本章 Part 1 走过的路,可以清晰地看到一个技术栈的分层结构:
层级 | 技术 | 解决的问题
──────────────────────────────────────────────────────────────
底层:模态编码 | ViT, AST等 | 把原始信号变成向量
| |
中层:模态对齐 | ImageBind | 让不同模态的向量住在同一空间
| | → 支持跨模态检索和零样本分类
| |
上层:多模态推理 | AnyMAL | 让 LLM 基于多模态输入做推理
| | → 支持问答、描述、规划
| |
应用层:具身控制 | 未来工作 | 基于多模态理解直接输出动作
| | → 端到端多模态 VLA
ImageBind 解决了中层问题——把六种模态统一到同一个嵌入空间。AnyMAL 解决了上层问题——让 LLM 在这个统一空间之上做推理。但应用层——直接把多模态理解转化为机器人动作——目前还在研究的早期阶段。
值得一提的是,这个技术栈的每一层都是"可替换"的。底层的模态编码器可以换(从 ViT-H 换成 ViT-G,从 AST 换成 Whisper 的音频编码器),中层的对齐框架可以换(从 ImageBind 换成 LanguageBind),上层的推理模型可以换(从 LLaMA-2 换成 LLaMA-3 或 Qwen)——每一层的替换不需要其他层跟着改动。这种模块化的技术栈设计让多模态具身 AI 系统能够快速跟上各组件的技术进步。
18.4.8 Part 1 总结:三个核心收获
在进入 Part 2 之前,让我们提炼出 Part 1 最重要的三个收获:
收获一:多模态对齐不需要两两配对。 ImageBind 证明了,只要选一种"枢纽模态"(图像),让其他模态都和它对齐,就能通过传递性实现所有模态之间的间接对齐。这个洞察把数据收集的复杂度从 O(N²) 降到了 O(N),使得六模态甚至更多模态的统一成为可能。
收获二:冻结 LLM + 轻量投射是多模态 LLM 的高效路线。 AnyMAL 证明了,不需要全参数微调一个巨大的 LLM——只需要训练占总参数不到 0.1% 的投射模块,就能让 LLM "理解"多种模态的输入。这种路线的训练成本低两个数量级,且支持灵活替换基座 LLM 和新增模态。
收获三:多模态是具身 AI 的必经之路。 真实世界中没有任何单一传感器能覆盖所有场景。视觉在暗处失效、深度在透明物体上失效、触觉只有接触时才有效。只有融合多种模态的信息,机器人才能在真实世界中鲁棒地工作。ImageBind 和 AnyMAL 提供了实现这种融合的技术基础。
18.5 3DShape2VecSet:让 3D 形状成为多模态一等公民
类比:300 页的书压缩成 512 张卡片
想象你面前有一本 300 页的百科全书,每一页的内容长度不同——有的是整页文字,有的只有一张图。现在要求你把这本书的所有信息浓缩到恰好 512 张标准尺寸的索引卡上,而且不管原书有多厚或多薄,卡片数量永远是 512。
这就是 3DShape2VecSet 解决的核心问题:3D 形状千差万别(有的物体简单如球体,有的复杂如章鱼),但我们需要一种固定长度的表示,让下游模型能统一处理。
在多模态的语境下,文本有固定维度的句向量(Ch08 CLIP),图像有固定大小的 patch embedding(ViT),但 3D 形状一直没有一个"标准格式"。3DShape2VecSet 就是给 3D 世界补上这块拼图。
传统 3D 表示的三大痛点
在理解 VecSet 之前,先看为什么已有的 3D 表示都不够好:
痛点一:点云——无序且大小不定。 点云就是一堆 (x, y, z) 坐标的集合。一个杯子可能用 1024 个点描述,一辆车可能需要 100,000 个点。这种不定长让标准的 Transformer 很难直接处理——你不能把不同长度的序列塞进同一个 batch 而不做大量 padding。更麻烦的是,点云是无序集合(同样的物体,把点打乱顺序,物体没变),这要求模型具有排列不变性。
痛点二:体素——内存爆炸。 体素就是把 3D 空间切成小方块(像 3D 像素)。如果你想要 256×256×256 的分辨率,就需要存储 1677 万个格子。每个格子一个浮点数就是 64MB,这还只是一个物体。对机器人来说,场景里有几十个物体,内存根本扛不住。
痛点三:网格——拓扑复杂。 三角网格是游戏和电影常用的格式,但它的数据结构(顶点 + 面 + 法线 + UV)非常复杂,不同网格的拓扑结构不同,很难用神经网络直接生成或处理。
踩坑提醒:很多初学者一听到"3D 表示"就想到点云,然后直接用 PointNet。但 PointNet 的全局特征是一个单一向量,丢失了大量局部几何细节。VecSet 用 512 个向量保留了丰富的局部信息,这是关键区别。
VecSet 编码器:Cross-Attention 压缩术
VecSet 的编码器核心思想很简单:用一组固定数量的"询问向量"(learnable queries)去"提问"不定长的 3D 点采样,获得固定长度的回答。
具体流程:
输入:从物体表面随机采样 N 个点(N 可以是任意值,比如 2048、10000)
每个点是 (x, y, z, nx, ny, nz)——坐标 + 法向量
Step 1: 初始化 512 个 learnable query vectors,每个维度 32
Q ∈ R^{512×32}
Step 2: 将 N 个采样点通过小型 MLP 编码为 key-value
K, V ∈ R^{N×32}
Step 3: Cross-Attention
output = softmax(Q · K^T / √d) · V
结果:512×32 的固定尺寸潜在向量集
Step 4: 几轮 Self-Attention 让 512 个向量互相交流
最终输出:VecSet ∈ R^{512×32}
关键设计选择:
- 为什么是 512×32 而不是一个 16384 维向量? 因为保持"集合"结构让后续的 Diffusion 模型可以逐元素去噪,比在高维单向量上做扩散稳定得多。
- 为什么用 Cross-Attention 而不是 Pooling? Cross-Attention 允许不同的 query 关注不同的局部区域——query #1 可能专注于物体的把手,query #200 可能专注于底座。这比 max-pooling 保留了更多空间信息。
VecSet 解码器:给定查询点预测占据
编码完成后,如何把 VecSet 变回 3D 形状?答案是隐式函数解码:
输入:VecSet ∈ R^{512×32}
查询点 p = (x, y, z)——空间中任意一点
Step 1: 将 p 通过位置编码 + MLP 变成 query
q_p ∈ R^{32}
Step 2: Cross-Attention:q_p 作为 query,VecSet 作为 key-value
attended = CrossAttn(q_p, VecSet, VecSet)
Step 3: MLP 头预测 occupancy(占据概率)
o(p) = σ(MLP(attended)) ∈ [0, 1]
重复:对空间中密集采样的点都做一次预测
o > 0.5 的点构成物体表面(Marching Cubes 提取网格)
这个设计的美妙之处在于:分辨率可以无限细。你想要多精细的重建,就采样多密集的查询点。不像体素那样被格子分辨率锁死。
重建质量:IoU 达到 0.963——也就是说重建出的形状和原始形状有 96.3% 的体积重合。这已经非常接近完美了。
VecSet 上的 Diffusion 生成
有了固定长度的 VecSet 表示,生成就变成了一个标准的扩散问题——和 Ch13 Diffusion Policy 的思路完全相同,只是去噪的目标从"机器人动作序列"变成了"3D 形状的潜在表示"。
训练:
1. 把训练集中的每个 3D 物体编码为 VecSet z_0 ∈ R^{512×32}
2. 标准 DDPM:z_t = √ᾱ_t · z_0 + √(1-ᾱ_t) · ε
3. 训练去噪网络 ε_θ(z_t, t) 预测噪声
生成:
1. 从 z_T ~ N(0, I) 开始
2. 逐步去噪 T → 0
3. 得到 z_0,用解码器重建 3D 形状
生成质量对比(ShapeNet 椅子类别):
| 方法 | 1-NNA↓ | Coverage↑ |
|---|---|---|
| 点云扩散 (PVD) | 62.8 | 46.2 |
| 体素扩散 | 58.3 | 49.1 |
| VecSet 扩散 | 46.7 | 51.8 |
1-NNA 越低越好(越接近 50% 表示生成分布和真实分布越难区分)。VecSet 扩散比点云扩散的 1-NNA 好了约 16 个百分点——论文标题中"16 倍"的来源。
踩坑提醒:1-NNA(1-Nearest Neighbor Accuracy)是生成模型的评估指标,不是分类准确率。它的直觉是:如果你混合真实样本和生成样本,然后用最近邻分类,准确率越接近 50% 说明两组分布越像。远高于 50% 说明生成的和真实的"一眼就能区分"。
连接 Diffusion Policy(Ch13)
回忆 Ch13 的 Diffusion Policy:
Diffusion Policy: 噪声 → 去噪 → 动作序列 a_{t:t+H}
VecSet Diffusion: 噪声 → 去噪 → 3D 形状 VecSet z_0
核心范式完全相同:在一个有意义的潜在空间中做扩散去噪。 区别只在"去噪的目标是什么":
- Diffusion Policy 去噪得到动作(怎么动)
- VecSet Diffusion 去噪得到形状(长什么样)
- 未来:两者结合——根据目标物体的 3D 形状生成最优抓取动作
对机器人的意义
为什么具身 AI 需要关心 3D 表示?三个理由:
理由一:操作需要理解几何。 抓取一个杯子,机器人需要知道杯壁厚度、把手位置、重心在哪。这些信息在 2D 图像里是模糊的(遮挡、视角依赖),但在 3D 表示里是精确的。
理由二:仿真需要 3D 模型。 Ch17 讲的 sim-to-real 要求仿真环境里有物体的 3D 模型。VecSet 可以从少量视图快速重建,或者直接生成新物体来增强仿真训练集的多样性。
理由三:多模态融合的桥梁。 有了 VecSet,3D 形状就和文本、图像一样有了固定维度的表示。可以把 VecSet 投射到 ImageBind 的共享空间,实现"看到一个物体的图片 → 检索它的 3D 模型 → 规划抓取"的完整管线。
# 伪代码:从图像到抓取规划的管线
image_embed = clip_encode(camera_image) # Ch08 CLIP
vec_set = retrieve_3d_model(image_embed) # VecSet 检索
grasp_pose = diffusion_policy(vec_set, robot_state) # Ch13 Diffusion Policy
条件生成:文本/图像引导 3D 形状
VecSet 不仅能无条件生成随机 3D 物体,还支持条件扩散——给定文本描述或参考图像,生成对应的 3D 形状:
条件生成架构:
1. 文本条件:CLIP text encoder → 文本嵌入 c_text
2. 图像条件:CLIP image encoder → 图像嵌入 c_img
3. 去噪网络变为 ε_θ(z_t, t, c)——条件注入
条件注入方式(两种):
方式 A: Cross-Attention——c 作为额外的 key-value
方式 B: AdaLN——c 调制 LayerNorm 的 scale 和 shift(类似 DiT)
这对机器人来说意义重大:语言指令"帮我拿那个蓝色杯子"→ CLIP 编码 → 条件生成/检索最匹配的 3D 模型 → 规划抓取姿态。整条链路首次打通。
与 NeRF / 3D Gaussian Splatting 的对比
初学者可能会问:"3D 重建不是有 NeRF 和 3DGS 了吗?为什么还需要 VecSet?"
| 维度 | NeRF / 3DGS | VecSet |
|---|---|---|
| 输入 | 多视角图像(几十张) | 点云采样 |
| 输出 | 视角合成(渲染图像) | 几何占据(重建形状) |
| 生成能力 | 不原生支持 | 原生支持(扩散) |
| 实时渲染 | 3DGS 可以 | 需要 Marching Cubes |
| 下游操作 | 难以直接用于抓取规划 | 占据函数直接给出碰撞信息 |
简单说:NeRF/3DGS 擅长"从外面看"(视图合成),VecSet 擅长"从里面理解"(几何重建 + 生成)。机器人操作更需要后者。
局限性
- 编码速度:Cross-Attention 对大点云的计算量不小,实时性不够——对 10,000 个点做 512 个 query 的 cross-attention,在 RTX 3090 上约需 15ms,对于实时控制(1kHz)来说太慢,但对规划级决策(10Hz)足够
- 只处理单物体:场景级 3D 理解需要额外的分割和组合。当前的解决方案是先用 SAM 分割场景中的各个物体,再对每个物体分别编码 VecSet
- 固定 512 维:极复杂物体可能信息损失(不过对大多数家用物品足够了)。论文实验显示,从 256 增加到 512 有明显提升,但从 512 增加到 1024 改善很小——说明 512 是一个性价比甜点
踩坑提醒:如果你想复现 VecSet,注意点云采样的归一化很重要。所有物体需要先归一化到 [-1, 1] 的单位立方体内,否则不同大小的物体会导致 cross-attention 的尺度不一致,训练不收敛。
18.6 触觉:机器人的第六感
为什么视觉不够
闭上眼睛,伸手去口袋里摸钥匙——你能准确地找到它、拿出来、插进锁孔。这整个过程完全不依赖视觉。现在想象一个只有眼睛没有触觉的机器人做同样的事:它看不见口袋里面,不知道手指碰到的是钥匙还是硬币,更不知道该用多大力气。
触觉是操作的本质感官,视觉只是辅助。三个视觉的盲区:
- 透明/反光物体:玻璃杯在视觉里几乎不可见,但手一摸就知道形状
- 材质属性:丝绸和棉布看起来可能类似,但触感完全不同(摩擦系数、柔软度)
- 力反馈:握鸡蛋要多轻、拧螺丝要多紧——这些信息只有触觉能提供
踩坑提醒:很多人觉得"加个力传感器不就行了"。但原始力信号(6 维力/力矩)不包含空间信息——你不知道力来自手指的哪个部位。触觉传感器(如 GelSight)提供的是高分辨率空间触觉图像,信息量比力传感器大几个数量级。
Sparsh:触觉的 Foundation Model
就像 CLIP(Ch08)是视觉-语言的基础模型,Sparsh 是触觉模态的第一个基础模型。
核心思想:用 MAE(Masked Autoencoder)对大量无标签触觉图像做自监督预训练,学到通用的触觉特征。
MAE 预训练流程:
1. 输入:GelSight 触觉图像(高分辨率凝胶形变图)
2. 随机遮挡 75% 的 patch
3. 编码器只处理可见的 25%
4. 解码器重建被遮挡的 75%
5. 损失:重建像素误差
预训练数据:YCB 物体集 + 工业零件 + 日常物品
数万次触摸采集
为什么这被称为触觉的"ImageNet 时刻"?因为在 Sparsh 之前,每个触觉任务都需要从头训练——检测滑动是一个模型,估计硬度是另一个模型,识别纹理又是一个。Sparsh 提供了一个通用特征提取器,下游任务只需加一个小型线性头就能工作。
下游任务表现:
| 任务 | 从头训练 | Sparsh + 线性探测 |
|---|---|---|
| 滑动检测 | 78.2% | 89.4% |
| 硬度分类 | 71.5% | 84.1% |
| 纹理识别 | 65.3% | 79.8% |
| 接触面积估计 | MAE 0.15 | MAE 0.08 |
GelSight 工作原理简介
为了更好理解 Sparsh,先快速了解它处理的数据来源——GelSight 触觉传感器:
GelSight 结构:
┌────────────────────────┐
│ 透明弹性凝胶体 │ ← 接触物体时会形变
│ (涂有反光涂层) │
├────────────────────────┤
│ LED 阵列(RGB 三色) │ ← 从不同角度照亮凝胶底面
├────────────────────────┤
│ 微型摄像头 │ ← 拍摄凝胶底面的形变图像
└────────────────────────┘
工作原理:
1. 物体按压凝胶 → 凝胶表面形变
2. 形变改变了反光涂层的角度
3. RGB LED 从不同方向照射 → 形变区域的颜色改变
4. 摄像头捕获颜色变化图 → 通过光度法重建 3D 形变
输出:高分辨率触觉图像(通常 320×240 或更高)
类似于物体表面的"指纹"——凹凸纹理、边缘、接触形状一览无余
一张 GelSight 图像包含的信息量惊人:接触位置、接触面积、法向力分布、切向力方向、物体表面纹理——全部在一帧图像里。这就是为什么可以用视觉 SSL 方法(MAE)来处理触觉数据。
Sparsh-X:触觉内部的 ImageBind
如果说 Sparsh 是单模态(只处理触觉图像),Sparsh-X 就是触觉内部的多模态对齐。
触觉传感器不只有 GelSight 这种光学式的。一个完整的触觉系统可能包含:
- 触觉图像(GelSight / DIGIT):凝胶形变的高分辨率图像
- 音频(接触麦克风):碰撞声、摩擦声
- IMU(惯性测量):指尖加速度和角速度
- 力/力矩(F/T 传感器):6 维力信号
Sparsh-X 用 ImageBind 式的对比学习把这四种触觉子模态对齐到同一个空间:
对比学习目标:
- (触觉图像, 音频) 同一次触摸 → 拉近
- (触觉图像, IMU) 同一次触摸 → 拉近
- (触觉图像, 力) 同一次触摸 → 拉近
- 不同触摸的配对 → 推远
结果:任何子模态的特征都可以互相检索
实际意义:便宜的触觉传感器(只有 IMU)可以借用昂贵传感器(GelSight)学到的知识。这对成本敏感的消费级机器人很重要。
Tactile-VLA / TLA:触觉接入决策
有了好的触觉特征,下一步是让机器人在决策时利用这些信息。Tactile-VLA(TLA) 的做法直截了当:
标准 VLA(Ch12 回顾):
输入:[视觉 token, 语言指令 token, 本体感觉 token]
输出:动作
Tactile-VLA:
输入:[视觉 token, 语言指令 token, 本体感觉 token, 触觉 token]
输出:动作
触觉 token 来源:
GelSight 图像 → Sparsh 编码器 → 投射层 → token
关键实验——防止捏碎物体:
| 任务:拿起鸡蛋 | 成功率 | 破碎率 |
|---|---|---|
| VLA(无触觉) | 72% | 18% |
| VLA + 力阈值硬编码 | 85% | 5% |
| Tactile-VLA | 91% | 2% |
Tactile-VLA 不需要人工设定力阈值,它从数据中学会了"感觉到阻力增大时减小握力"的策略。
Sim-to-Real 在触觉上更严重
Ch17 讨论了视觉的 sim-to-real gap(域随机化、系统辨识等方法)。触觉的 sim-to-real gap 比视觉严重得多,原因是:
- 胶垫形变是非线性的:GelSight 的硅胶在不同温度、不同老化程度下弹性系数不同,仿真器很难精确建模
- 接触动力学复杂:摩擦力取决于表面微观结构、湿度、接触历史——这些在仿真中通常被简化为库仑摩擦模型
- 传感器个体差异大:两个同型号的 GelSight,因为灌胶工艺略有不同,输出图像就有明显差异
SAPIEN 仿真器(Ch17 提到)的文档里明确写道:"触觉仿真仅供参考,不建议直接 zero-shot 迁移"。当前最好的做法是在真机上做少量触觉数据采集 + domain adaptation。
踩坑提醒:如果你的任务需要精确力控(如装配、磨光),不要指望纯仿真训练出来的触觉策略能直接 zero-shot 到真机。至少需要 10-50 次真机触觉采集做 fine-tune。
触觉传感器的硬件生态
选择触觉传感器时,了解当前硬件选项很重要:
| 传感器 | 类型 | 分辨率 | 成本 | 适用场景 |
|---|---|---|---|---|
| GelSight Mini | 光学式 | 320×240 | ~$300 | 研究、精细操作 |
| DIGIT (Meta) | 光学式 | 240×320 | ~$50 | 大规模数据采集 |
| BioTac | 多模态 | 19 电极 | ~$5000 | 灵巧手操作 |
| ReSkin | 磁性 | 5×5 | ~$10 | 低成本大面积覆盖 |
| uSkin | 电容式 | 16×16 | ~$200 | 工业抓取 |
Sparsh 和 Sparsh-X 主要在 DIGIT 和 GelSight 上验证。如果你的预算有限,DIGIT 是最佳选择——便宜、开源设计、社区活跃。
触觉与视觉的融合策略
触觉和视觉不是"二选一",而是互补关系:
感知阶段融合策略:
接近阶段(距离 > 5cm):
纯视觉 → 定位物体、估计粗略姿态
接触前(距离 < 5cm):
视觉 + 深度 → 精确对齐,规划接触点
接触中:
触觉为主 → 确认接触、检测滑动、调整力度
视觉为辅 → 监控全局状态
操作中(如旋转、插入):
触觉为主 → 力反馈引导动作
本体感觉辅助 → 关节角度跟踪
这个分阶段策略已经在多个研究中被验证有效。关键洞察是:不同阶段的主导模态不同,而不是简单地把所有模态 concat 在一起。
18.7 音频模态:机器人的耳朵
声音里的物理信息
敲一下西瓜,听声音判断生不生——这是用声音获取物体内部状态的日常例子。对机器人来说,声音同样携带了视觉和触觉都难以获取的物理信息:
- 碰撞声 → 材质:金属声、塑料声、木头声——材质不同,频谱差异巨大
- 液体声 → 容器状态:倒水时音调升高说明水面在上升(瓶子快满了)
- 电机声 → 机械状态:异常嗡嗡声可能意味着关节卡住了
- 语音 → 人类意图:不只是语义("帮我拿杯子"),还有情绪(焦急时语速加快)
AudioLM:语义和声学的分层
AudioLM 是 Google 2022 年提出的音频生成模型,核心创新是把音频分解成两层 token:
原始音频波形(16kHz, 连续)
↓
┌────────────────────────────────┐
│ 语义 token(w2v-BERT 提取) │ ← 捕获"说了什么/什么类型的声音"
│ 粗粒度,~25 token/秒 │
└────────────────────────────────┘
+
┌────────────────────────────────┐
│ 声学 token(SoundStream 编解码)│ ← 捕获"听起来什么样"
│ 细粒度,~200 token/秒 │
└────────────────────────────────┘
生成流程(自回归):
Stage 1: 根据前文生成语义 token(决定内容)
Stage 2: 根据语义 token 生成声学 token(填充细节)
Stage 3: SoundStream 解码器 → 波形
为什么这个分层设计重要? 因为它把"说什么"和"怎么说"解耦了。对机器人来说,语义层告诉你"这是一个碰撞声",声学层告诉你"碰撞的具体频谱特征(金属?塑料?)"。
AudioPaLM:音频与文本统一
AudioPaLM 更进一步:把音频 token 和文本 token 塞进同一个词表,让 LLM 同时"读"和"听"。
传统多模态 LLM(如 AnyMAL, Ch18.4):
文本 token: [你好, 世界, ...]
音频: encoder → 连续嵌入 → projector → 对齐到 LLM 空间
AudioPaLM:
统一词表: [你, 好, 世, 界, ..., <audio_0>, <audio_1>, ..., <audio_8191>]
音频 token 和文字 token 完全平等,LLM 直接预测下一个 token(可能是文字也可能是音频)
这意味着一个模型可以:
- 听到语音 → 输出文本(语音识别)
- 读到文本 → 输出语音(语音合成)
- 听到一种语言 → 说出另一种语言(语音翻译)
- 所有这些用同一个自回归 LLM 完成
音频对具身 AI 的意义
回到机器人场景,音频模态的三个用途:
用途一:环境感知补充。 视觉告诉你"有一个杯子",音频告诉你"杯子里有液体"(晃动声)。两者结合才是完整的场景理解。
用途二:交互状态监测。 机器人拧瓶盖时,"咔哒"声意味着拧到位了——这个信号比力觉更清晰。
用途三:自然语音交互。 Ch12 讲的 VLAS(Voice-Language-Action-System)直接把语音波形作为输入,跳过 ASR 环节。好处是保留了说话人的语调、紧急程度等 paralinguistic 信息。
与 ImageBind 音频通道的关系
回顾 Ch18.3:ImageBind 的六个模态之一就是音频。它用 AudioMAE 编码 2 秒音频片段,对齐到与图像共享的空间。
AudioPaLM 和 ImageBind 在音频处理上的区别:
| 维度 | ImageBind 音频 | AudioPaLM |
|---|---|---|
| 编码方式 | 连续嵌入(AudioMAE) | 离散 token(SoundStream) |
| 与文本关系 | 对比对齐(分离空间) | 统一词表(同一空间) |
| 主要用途 | 跨模态检索、zero-shot | 音频生成、理解、翻译 |
| 对 LLM 的要求 | 不需要 LLM | LLM 是核心 |
对具身 AI 的启示:如果你只需要"听到声音判断是什么"(分类/检索),用 ImageBind 式的对比对齐就够了。如果你需要"听到指令后说话回复"(对话),需要 AudioPaLM 式的统一词表。
音频在具身 AI 中的实际应用案例
为了让上面的理论更具体,看几个已经被验证的应用:
案例一:倒水任务。 机器人往杯子里倒水,需要知道什么时候停。纯视觉方案需要从上方俯视液面(但手挡住了),纯力觉方案需要精确称重(噪声大)。听液面上升时音调变化是最鲁棒的方案——物理原理是空腔共振频率随水面高度单调变化。
# 伪代码:基于音频频谱的倒水停止判断
def should_stop_pouring(audio_stream):
spectrum = fft(audio_stream[-0.5s]) # 最近 0.5 秒的频谱
dominant_freq = argmax(spectrum)
# 频率超过阈值说明杯子快满了
if dominant_freq > FULL_THRESHOLD:
return True
return False
案例二:材质识别。 机器人用工具敲击物体表面,录音分析频谱。金属高频成分多、衰减慢("叮——");木头低频为主、衰减快("咚");塑料介于两者之间。这个信息可以辅助抓取力度的选择。
案例三:异常检测。 工业机器人在执行重复任务时,电机异响、关节咔嗒声可能是机械故障的前兆。用 AudioLM 式的模型学习"正常声音"的分布,偏离时报警——比等到力矩传感器检测到异常要早很多。
踩坑提醒:机器人环境里的音频质量通常很差——电机噪声、环境回声、多声源混合。直接把实验室预训练的音频模型搬到真机上效果会大打折扣。建议做两件事:(1) 用近场麦克风阵列而非单麦克风,(2) 做噪声增强(noise augmentation)训练。
音频 token 化方法对比
理解不同的音频 tokenization 对选择方案很重要:
| 方法 | Token 类型 | 速率 | 重建质量 | 语义保留 |
|---|---|---|---|---|
| w2v-BERT | 语义 token | 25/秒 | 不可重建 | 高 |
| SoundStream | 声学 token | 200/秒 | 高 | 低 |
| EnCodec (Meta) | 声学 token | 75/秒 | 高 | 中 |
| AudioMAE | 连续嵌入 | patch 级 | N/A | 中 |
| Whisper encoder | 连续嵌入 | 帧级 | N/A | 高(语音) |
对机器人来说,如果只需要理解环境声音(分类),用 AudioMAE 或 w2v-BERT 的语义特征就够了。如果需要生成语音回复用户,需要 SoundStream/EnCodec 的声学 token 来保证音质。
18.8 OneLLM 与 FroMage:其他多模态路线速览
OneLLM:8 模态统一编码器
OneLLM(CVPR 2024)走了一条比 ImageBind 更激进的路线:一个编码器处理 8 种模态。
支持的模态:图像、音频、视频、点云、深度图、IMU、fMRI(脑电)、触觉。
核心设计——渐进对齐训练:
阶段 1:图像-文本对比学习(像 CLIP)
阶段 2:冻结图像路径,加入音频和视频的 modality-specific tokenizer
阶段 3:继续加入点云、深度
阶段 4:加入 IMU、fMRI、触觉
每个阶段冻结已训练的部分,只训练新模态的 tokenizer + 共享 transformer 的 adapter
与 ImageBind 的关键区别:
| 维度 | ImageBind | OneLLM |
|---|---|---|
| 编码器 | 每个模态独立编码器 | 一个共享 Transformer + 模态 tokenizer |
| 对齐策略 | 以图像为锚的对比学习 | 渐进式对齐 |
| 新模态扩展 | 需要新编码器 | 只需新 tokenizer |
| 模态数量 | 6 | 8 |
| 计算效率 | 多编码器,参数多 | 共享参数,更紧凑 |
对具身 AI 的看法:OneLLM 的"一个编码器走天下"在理论上更优雅,但实践中每个模态的 tokenizer 设计仍然需要大量工程。而且机器人的实时性要求意味着你可能不想把所有模态都过一个大 Transformer——延迟太高。
FroMage:AnyMAL 的简化前身
FroMage(Frozen Retrieval over Multimodal data for Autoregressive Generation)可以看作 AnyMAL(Ch18.4)的极简版本:
FroMage 架构:
视觉编码器(CLIP ViT,冻结)
↓
线性投射层(可训练,1 层 MLP)
↓
冻结 LLM(OPT-6.7B)
↓
输出:文本 or 检索到的图像
与 AnyMAL 的对比:
- AnyMAL 用多模态 projector(多层 Transformer),FroMage 只用线性层
- AnyMAL 支持 6 模态,FroMage 只支持图文
- AnyMAL 有两阶段训练,FroMage 端到端一阶段
FroMage 的历史意义:它证明了"冻结 LLM + 极简投射"这条路线是可行的。这个发现直接启发了 AnyMAL、LLaVA 等后续工作。虽然 FroMage 本身精度不高,但它把"多模态 LLM 不需要从头训练"的信念植入了社区。
踩坑提醒:FroMage 论文发表于 2023 年初,当时还在用 OPT-6.7B。如今 LLM 能力强了数量级,FroMage 的架构重新用在更强的 LLM 上效果会好很多。但线性层的表达力上限仍然是瓶颈——这就是为什么 AnyMAL 升级到了多层 projector。
多模态 LLM 发展时间线
把这些方法放在时间线上看,能更清楚地理解技术演进:
2022.01 Flamingo (DeepMind) ← Perceiver Resampler + 冻结 LLM
2022.11 FroMage ← 线性投射 + 冻结 LLM(最简方案)
2023.01 BLIP-2 (Salesforce) ← Q-Former + 冻结 LLM
2023.04 LLaVA ← 线性投射 + 指令微调
2023.05 ImageBind (Meta) ← 六模态共享空间(无 LLM)
2023.09 AnyMAL (Meta) ← ImageBind 编码器 + 多层投射 + 冻结 LLM
2023.12 OneLLM ← 一个共享编码器 + 8 模态
2024.03 3DShape2VecSet ← 3D 向量集表示
2024.06 Sparsh ← 触觉 Foundation Model
趋势:
- 投射层从 1 层线性 → Q-Former → 多层 Transformer(复杂度递增)
- 模态覆盖从 2(图文)→ 6 → 8(持续扩展)
- 从"对齐到共享空间" → "投射到 LLM" 的范式分化
这条时间线的核心教训:每一步都是在"保持 LLM 冻结"的约束下增加新能力。 这是工程实用性的胜利——全量训练一个多模态 LLM 的计算成本是天文数字,而"冻结 + 投射"让小团队也能做前沿研究。
18.9 多模态对齐的统一视角
三种范式
纵观本章所有方法,多模态融合可以归纳为三种范式:
范式一:共享嵌入空间(Shared Embedding Space)
代表:ImageBind、OneLLM、CLIP
模态 A → 编码器 A → 向量 a ∈ R^d
模态 B → 编码器 B → 向量 b ∈ R^d
模态 C → 编码器 C → 向量 c ∈ R^d
所有向量住在同一个 d 维空间
对比学习:配对的 (a, b) 余弦相似度 → 最大化
优点:简洁、可扩展、支持 zero-shot 跨模态检索 缺点:只有"相似 vs 不相似"的粗粒度对齐,没有推理能力
范式二:投射到 LLM(Project-to-LLM)
代表:AnyMAL、FroMage、LLaVA、BLIP-2
模态 X → 编码器 → 投射层 → token 序列
↓
冻结 LLM(承担推理)
↓
文本输出/动作
优点:继承 LLM 强大的推理和指令遵循能力 缺点:LLM 的 token 瓶颈限制了空间信息的保留
范式三:潜在向量集(Latent Vector Set)
代表:3DShape2VecSet
模态 X → Cross-Attention 编码 → 固定大小的向量集(如 512×32)
↓
扩散/自回归生成 or 下游任务
优点:保留丰富的空间/结构信息,适合生成任务 缺点:没有内建的语言推理能力,需要额外的 LLM 接入
它们互补不替代
一个完整的具身 AI 系统很可能需要三种范式的组合:
场景理解层:
ImageBind(范式一)做跨模态检索和快速匹配
"这个声音和哪个物体相关?" → 嵌入空间最近邻
推理规划层:
AnyMAL/VLA(范式二)做高层决策
"看到桌上有杯子和盘子,用户说'把水倒进杯子'" → LLM 规划步骤
3D 操作层:
VecSet(范式三)做精细几何理解
"这个杯子的把手在哪?最佳抓取角度是什么?" → 3D 重建 + 抓取规划
回顾具身 AI 全景:Ch08-Ch18 如何串联
让我们从高处俯瞰本系列到此为止的知识图谱:
Ch08 CLIP: 视觉-语言对齐的基石
↓
Ch09 Embodied CLIP: CLIP 用于机器人导航
↓
Ch10 RT-2/VLM: 视觉语言模型直接输出动作
↓
Ch11 Open-vocabulary: 开放词汇目标检测
↓
Ch12 VLA/VLAS: 视觉-语言-动作统一模型 + 语音接入
↓
Ch13 Diffusion Policy: 扩散去噪生成动作
↓
Ch14 Imitation Learning: 模仿学习数据收集
↓
Ch15 World Models: 预测未来的世界模型
↓
Ch16 Scaling Laws: 数据和模型的缩放定律
↓
Ch17 Sim-to-Real: 仿真到真机的迁移
↓
Ch18 多模态融合(本章):
├── ImageBind: 六模态共享空间
├── AnyMAL: 多模态 → LLM 推理
├── VecSet: 3D 形状表示
├── Sparsh: 触觉基础模型
├── AudioPaLM: 音频-文本统一
└── OneLLM/FroMage: 其他路线
每一章解决具身 AI 的一个核心问题。多模态融合是"感知"的终极形态——一个真正有用的机器人不能只看(视觉)、只听话(语言),它需要同时看、听、摸、理解 3D、感受力反馈,然后用这些综合信息做出合理的动作。
未来方向
方向一:端到端多模态 VLA。 当前大多数系统是"编码器+投射层+LLM"的拼接。未来可能出现从头训练的、原生支持 6+ 模态的大型 VLA。
方向二:模态缺失的鲁棒性。 真实场景中传感器会坏、会遮挡。模型需要在部分模态缺失时仍然工作。ImageBind 的新兴对齐给了一些启示(未直接训练的模态对也能检索),但还远远不够。
方向三:主动感知。 不是被动地"有什么模态就用什么",而是主动决定"现在应该看哪里/听什么/摸哪里"。这需要把感知和决策统一在同一个闭环里。
方向四:个性化触觉。 每个人/机器人的手不同,触觉传感器有个体差异。快速适应新传感器的 few-shot 方法很重要。
方向五:时序多模态融合。 当前大部分方法处理的是单帧/单片段的多模态输入。但机器人的操作是持续的——需要在时间序列上融合视觉流、触觉流、音频流。如何在 Transformer 的有限上下文窗口里高效编码这些多模态时间序列,是一个开放问题。World Models(Ch15)的视频预测思想可能在这里有用。
从"能用"到"好用"的工程挑战
理论上的多模态融合很美好,但工程落地有很多现实问题:
挑战 1: 时间同步
视觉: 30 FPS
触觉: 60-100 FPS
音频: 16000 Hz
本体感觉: 1000 Hz
→ 如何对齐这些不同频率的信号流?
→ 通常做法:以最低频率(视觉)为基准,其他模态下采样或用时间窗聚合
挑战 2: 计算预算分配
真机推理延迟预算: ~50ms(20Hz 控制)
视觉编码器: ~20ms
触觉编码器: ~5ms
音频编码器: ~10ms
LLM 推理: ~30ms
总计: 65ms(超预算!)
→ 需要异步处理或模态选择性激活
挑战 3: 故障处理
传感器坏了怎么办?
→ 需要 graceful degradation——模态缺失时不能崩溃
→ 训练时随机 dropout 某些模态可以增强鲁棒性
踩坑提醒:多模态系统的 debug 难度比单模态高一个数量级。当输出不对时,你不知道是哪个模态的编码有问题、投射层有问题、还是融合方式有问题。建议:先让每个模态单独工作正确,再组合。逐步加模态比一次全上要靠谱得多。
18.10 总结与反思
三个核心教训
教训一:对齐比表示更重要。
ImageBind 用的视觉编码器(ViT-H)和音频编码器(AudioMAE)都不是最好的单模态模型。但通过对比学习对齐,它在跨模态任务上超过了各个单模态 SOTA。这告诉我们:让不同模态"说同一种语言"比让单个模态理解得更深更重要。
教训二:冻结比重训更实际。
AnyMAL 冻结 LLM、VecSet 冻结编码器——这不是妥协,而是工程智慧。重新训练一个 70B 的 LLM 需要数千张 GPU,但加一个投射层只需要几张。在具身 AI 这种数据稀缺、迭代快速的领域,"冻结大模型 + 训练小接口"是唯一可行的策略。
教训三:3D 是具身 AI 绕不开的模态。
视觉是 2D 投影,丢失了深度和遮挡信息。触觉是局部的,只覆盖接触区域。只有 3D 表示才能提供完整的空间几何,而这是操作(抓取、放置、装配)的基础。VecSet 让 3D 第一次有了"可以和其他模态平等对话"的能力。
选择指南表
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 跨模态检索(图→音、文→3D) | ImageBind | 共享空间天然支持 |
| 多模态问答/推理 | AnyMAL + 强 LLM | 需要语言推理能力 |
| 3D 物体生成/重建 | VecSet + Diffusion | 固定维度 + 高质量 |
| 触觉特征提取 | Sparsh / Sparsh-X | 触觉 SSL 基础模型 |
| 语音理解+生成 | AudioPaLM | 统一词表最自然 |
| 力敏感操作(鸡蛋/玻璃) | Tactile-VLA | 触觉直接接入策略 |
| 模态数量 > 6 且计算受限 | OneLLM | 共享参数更紧凑 |
| 快速原型验证 | FroMage 式线性投射 | 最简架构,迭代快 |
给初学者的建议
如果你刚开始做具身 AI 的多模态融合:
- 先跑通 CLIP(Ch08)——理解对比学习的核心机制
- 再看 AnyMAL 的 projector 训练——理解"如何把新模态接入已有 LLM"
- 根据你的具体任务选择模态——不是模态越多越好,而是要看任务需要什么信息
- 触觉和 3D 的数据收集是瓶颈——先确认你有数据再选方法
通向下一章
本章讨论的所有模态——视觉、音频、触觉、3D——都有一个共同限制:它们依赖直接的物理接触或可见的波(光波、声波)。
但现实世界有很多场景超出了这些模态的能力范围:
- 墙后面有人在走动——视觉看不见,声音可能听不清
- 浓雾/烟尘中的物体——光学传感器全部失效
- 黑暗中的定位——没有光就没有视觉
射频(Radio Frequency) 信号可以穿墙、穿烟、无视黑暗。下一章将介绍射频感知——RF-Pose 用 WiFi 信号透视人体姿态,milliMap 用毫米波雷达建图,PanoRadar 用全向射频做 360° 感知。这是具身 AI 感知能力的又一次质的飞跃:从"看得见的世界"扩展到"看不见但存在的世界"。
前置章节:Ch17: Sim-to-Real——仿真训练与真机部署 后续章节:Ch19: 射频感知——RF-Pose / milliMap / PanoRadar 返回目录
本章涉及论文 18 篇
点击查看论文笔记全文,标有 ● 的为已读。