枢纽
数据集HumanML3D, KIT-ML
输入模态text

MotionCLIP:把动作 manifold「贴」到 CLIP 的语义空间里

Guy Tevet, Brian Gordon, Amir Hertz, Amit H. Bermano, Daniel Cohen-Or(Tel Aviv University)。SIGGRAPH 2022 · arXiv:2203.08063。 项目页 · 全开源 · action_genCLIPtext-to-motion

🧠 一句话心智模型:CLIP 学过 4 亿图文对,从未见过一段 3D 人体动作。但只要你把动作自编码器的 latent 空间硬贴到 CLIP 空间上(用文本对齐 + 渲染图对齐),动作就被「免费」注入了 CLIP 的全部语义知识。于是输个「Spiderman」就能生成蛛网摆荡——这种动作训练集里根本没有。

🎯 为什么重要:动作生成的「数据稀缺」与「语言丰富」之间的桥

2022 年前,文本→动作的最大瓶颈是数据。最大的数据集(KIT ~11 小时、BABEL ~40 小时)和「人类动作的真实分布 + 自然语言的描述力」相比,仍然像一勺水对一片海:

核心矛盾:动作捕捉极贵(按小时计),文本标注更贵且粗(BABEL 只给 260 类标签)。在这个量级的数据上训练生成模型,既学不到动作语义也学不到语言长尾——「蜘蛛侠摆荡」「威廉姐妹发球」这种描述永远在分布外。

MotionCLIP 的回答是:不指望在动作数据里学到语言,而是把动作空间「贴」到已经学过语言的 CLIP 上

CLIP latent space(冻结,ViT-B/32) 已在 4 亿图文对上预训练 "a person walks forward" rendered pose frame z_p motion latent L_text L_image 推理时:"Spiderman" → CLIP text enc → 直接喂给 motion decoder → 蛛网摆荡(训练集从未见过)
图 1(对应论文 Fig.2):训练时让 motion latent $z_p$ 同时靠近文本和渲染图在 CLIP 空间的位置;推理时任意文本都能解码成动作。

💡 核心思想:用两个对齐损失,把动作 latent「钉」到 CLIP 上

MotionCLIP 的核心是一个 Transformer 自编码器(论文 Fig.3):编码器把动作序列 $p_{1:T}$ 压成一个 latent $z_p$,解码器从 $z_p$ 还原动作。重点是两个对齐损失,让 $z_p$ 同时贴近「文本的 CLIP 嵌入」和「渲染图的 CLIP 嵌入」:

$$L = L_{recon} + \lambda_{text}\underbrace{\left(1 - \cos(\mathrm{CLIP}_{text}(t), z_p)\right)}_{L_{text}} + \lambda_{image}\underbrace{\left(1 - \cos(\mathrm{CLIP}_{image}(s), z_p)\right)}_{L_{image}}$$

其中 $L_{recon}$ 是动作的 L2 重建(关节朝向 + 顶点位置 + 关节速度),$\lambda_{text}=\lambda_{image}=0.01$(小权重,但对齐信号极强)。

Transformer Encoder 8 层 p_1...p_T (SMPL) z_p Transformer Decoder 8 层 p̂_1...p̂_T L_text(文本对齐) L_image(渲染图对齐) 两个 CLIP 编码器 全程冻结 推理时:文本 → CLIP text enc → z_p → Decoder
图 2(对应论文 Fig.3):训练时双对齐;推理时绕过 motion encoder,直接拿 CLIP 文本嵌入当 $z_p$ 喂给 decoder。
🔮 直觉:为什么 CLIP 没见过动作,对齐还能 work?
关键是 CLIP 的语义结构是组合式、连续的:「walking」和「running」在它里面靠得很近,「Spiderman」靠近「web」「swing」「jump」。MotionCLIP 只需要把动作 latent 局部对齐到这些语义点,CLIP 自己的插值与组合能力就会自动填补「训练集没见过的动作」。这就是为什么输「couch」会得到坐下——CLIP 知道 couch 和 sit 语义近。

🛠️ 四个让「免费语言能力」真生效的设计

设计心智为什么必要
① 双对齐(text + image)同时用 CLIP 文本编码器和图像编码器监督 $z_p$文本标签稀疏粗(BABEL 260 类),单独用文本对齐会塌缩(消融:去 text loss,Top-1 从 40.9% 掉到 4.54%);图像监督提供更细粒度信号
② 渲染一帧而非整段从每个 60 帧序列里随机选 1 帧,用 Blender + SMPL-X 渲染成图CLIP 是单图模型;用 1 帧代表整段动作的「语义快照」,让对齐可行
③ 重建损失 + 速度项$L_{recon}$ = 关节朝向 L2 + 顶点 L2 + 相邻帧差分 L2差分项等效于监督速度,避免「位置对了但动作卡顿/抖动」
④ 冻结 CLIPCLIP-ViT-B/32 完全不更新,只训 Transformer AE保护 CLIP 的语义结构;如果放开 CLIP 训练,几十小时动作数据会把它「拉坏」

📊 关键结果:用户偏好 + 抽象语言「无中生有」

文本→动作用户研究(与 JL2P 对比,preference score)JL2PMotionCLIP
In-domain set(标签在两数据集都见过)23.3%76.7%
Out-of-domain set(奥运会运动项,两边都没见过)24.7%75.3%
风格迁移用户研究(vs. Aberman et al. 专门设计的风格迁移模型)Aberman et al.MotionCLIP
平均偏好(8 种风格)62.1%37.9%
赢/平的风格(Happy、Angry 赢;Drunk 平)赢 Happy (68.7%)、Angry (56.5%),平 Drunk (50%)
动作识别消融(BABEL-60)Top-1Top-5
MotionCLIP(完整)40.9%57.71%
w/o image loss(去渲染图对齐)35.05%50.26%
w/o text loss(去文本对齐)4.54%18.37%
2s-AGCN(专门设计的动作识别网络,监督训练)41.14%73.18%
关键洞察:MotionCLIP 的 Top-1(40.9%)和专门设计的 2s-AGCN(41.14%)几乎打平——而 MotionCLIP 根本不是为识别训的,只是个自编码器。去 text loss 直接掉到 4.54%,说明语义性能几乎全部来自 CLIP 对齐,与动作数据本身关系不大。这是「foundation model 的语义远比任务数据宝贵」的早期实证。
训练细节(论文 §4.1)数值
数据集BABEL(基于 AMASS,~40 小时 mocap,260 类标签)
预处理下采样到 30 fps,切成长度 60 的片段;SMPL $\beta=0$ 中性身体
动作表示$p_i \in \mathbb{R}^{24\times 6}$(23 个关节 + 全局朝向,各 × 6D 旋转表示)
Transformerencoder 8 层 + decoder 8 层
CLIPViT-B/32,全程冻结
损失权重$\lambda_{text} = \lambda_{image} = 0.01$

🌐 在领域中的位置

JL2P / Language2Pose(跨模态嵌入,无 CLIP) TEMOS(VAE + Transformer,多样但仍在动作数据内) MotionCLIP(贴 CLIP,免费拿语义)⭐ MDM / MotionDiffuse(diffusion + CLIP 文本条件) / T2M-GPT

MotionCLIP 是动作生成「外挂 foundation model」路线的起点。它的核心 trick(把任务 latent 贴到 CLIP/BigGAN 等预训练空间)被后续无数工作复用——从 3D 形状生成、字体生成到机器人策略。同年稍晚的 MDM(Tevet et al. 2022,同作者)把扩散模型 + CLIP 文本条件接上,把生成质量再推一阶;T2M-GPT(2023)则把 VQ-VAE 加进来。MotionCLIP 的核心遗产是:当任务数据稀缺,去找一个已经学过世界的 foundation model 把 latent 拉过去——这条思路后来在 VLA(RT-2、π0)里继续生效。

❓ 常见误区

MotionCLIP 是 CLIP 的微调吗?

不是。CLIP 全程冻结,不动一个参数。MotionCLIP 训的是一个独立的 Transformer 自编码器,只用 CLIP 作为「latent 空间的参照系」。这是它能保留 CLIP 全部语言知识的关键。

那它的动作生成质量比 TEMOS / MDM 强吗?

绝对质量不一定更强,但泛化能力压倒性领先。论文里和 TEMOS 没有直接定量对比(不同数据集:BABEL vs KIT),但 MotionCLIP 的杀手锏是抽象语言和分布外动作——「Spiderman」「couch」「Williams sisters」这种是其他方法做不到的。

为什么 text loss 那么关键,image loss 反而不那么关键?

消融显示:去 text 掉到 4.54%,去 image 只掉到 35.05%。原因是 BABEL 的文本标签已经携带语义,CLIP 文本编码器能直接利用;而渲染图只是 1 帧,信息密度低,更多是辅助对齐(防止 latent 在 CLIP 空间里乱漂)。但 image loss 对分布外泛化很重要——它提供了文本没说的细节。

它真的是「无监督」地学到了动作语义吗?

不完全是。它用了 BABEL 的文本标签(虽然是粗的 260 类)。完全无监督的话,CLIP 对齐会塌掉——因为没有锚点告诉它哪段动作对应哪段文本。论文的「自监督」指的是渲染图那一路,因为图是程序自动渲染的,不需要额外标注。

能用在机器人动作上吗?

不能直接用。MotionCLIP 输出的是 SMPL 人体动作(23 个关节 + 全局朝向),而机器人是另一套关节。但「把策略 latent 贴到 CLIP/语言空间」的思路被 RT-2 / VLA 直接继承——只不过那边贴的不是动作 latent,是 token 序列。