MotionGPT:把人体动作当成一门「外语」
🎯 为什么重要:把「多任务动作模型」从一锅炖里解出来
之前的动作生成工作各自为政:MDM 做文本→动作,TM2T 做动作→文本,动作预测又是一篇论文。每篇都是专用模型 + 配对数据——一个任务一种架构,互不迁移。
MotionGPT 借鉴了 BEiT-3 「image as a foreign language」的思路,提出 「motion as a foreign language」:
💡 核心思想:动作 VQ-VAE + 统一词汇表 + 指令微调
核心链条有三步,缺一不可:
最关键的一招是 VQ-VAE 动作分词器:把动作序列 $m_{1:M}$ 通过 1D 卷积编码器压到隐向量,再量化到最近的码本条目:
$$z_i = Q(\hat{z}_i) := \arg\min_{z_k \in Z} \|\hat{z}_i - z_k\|_2$$
这样每 4 帧动作被压成一个「词」(token),整个动作序列变成一段「外文」。MotionGPT 选 $K=512$ 个词(Table VIII 显示这是最优),和 T5 原本的 32000 个英文 wordpiece 拼成一张大词表。
🛠️ 工程关键设计
| 设计 | 心智 | 为什么必要 |
|---|---|---|
| ① VQ-VAE 离散量化 | 每 4 帧动作压成一个码本索引(共 512 个「词」) | 让动作能进语言模型词表,与英文共享 backbone |
| ② 统一词汇表 $V = V_t \cup V_m$ | 原始 T5 词表 + 512 个动作 token,加 <som>/<eom> 边界符 | 动作和文本可以在同一序列里混合出现 |
| ③ T5 encoder-decoder | 直接用 Flan-T5-Base (220M) 初始化,不重新训语言 | 继承海量语言预训练知识,零成本拿到「语法」 |
| ④ Span corruption 无监督训练 | 随机 mask 15% 输入 token,让模型还原 | 学到 token 之间的统计关系,类似 BERT/T5 MLM |
| ⑤ 指令模板构造 | 15 个核心任务 × 几十种问法 = 1000+ 模板 | 把多样任务变成「听 prompt 做事」,提升零样本能力 |
| ⑥ EMA + codebook reset | 码本更新用滑动平均 + 死词重置 | 避免码本崩塌(少数词被反复用),提高利用率 |
"motion as a foreign language" 不是修辞——是真的把动作当成一种没人学过的小语种:先学字母表(VQ-VAE),再学语法(预训练),再学「翻译成英文」(指令微调)。整条 pipeline 和 NLP 一模一样,唯一区别是字母表是用 VQ-VAE 学出来的,不是人给的。这意味着 NLP 任何新进展(CoT、RLHF)都可以平移过来。
📊 结果:一个模型 4 个任务,全都接近或超过 SOTA
| 任务(HumanML3D) | MotionGPT | 对比 SOTA |
|---|---|---|
| 文→动作 FID ↓ | 0.232(微调后) | T2M-GPT 0.116;MLD 0.473;MDM 0.544 |
| 文→动作 R-Precision Top-3 ↑ | 0.778 | T2M-GPT 0.775;MLD 0.772 |
| 动作→文 Bleu@4 ↑ | 12.47 | TM2T 7.00 |
| 动作→文 Cider ↑ | 29.2 | TM2T 16.8 |
| 动作预测 FID ↓ | 0.905 | MDM 6.031 |
| 动作中间填空 FID ↓ | 0.214 | MDM 2.698 |
| 其他维度 | 数字 |
|---|---|
| 模型规模 | Small 60M / Base 220M / Large 770M(Base 性价比最高) |
| 推理速度(FPS) | Small 421、Base 222、Large 119(Tesla V100) |
| 训练规模 | 8 张 V100,预训练 300K 步 + 指令微调 300K 步 |
| 用户研究 | vs MDM 73% 偏好 MotionGPT;vs T2M-GPT 65%;接近 GT |
🌐 在领域中的位置
MotionGPT 是第一个把动作生成完全纳入语言模型范式的统一框架。它的「motion tokenization + instruction tuning」配方被后续 motion-language 工作(如 MotionGPT-2、MotionLLM)直接继承。属于 T-动作生成 线索中「token 化 + LLM 化」路线的奠基者。
❓ 常见误区
为什么 VQ 离散化比连续潜变量(如 MLD 的高斯潜空间)更好?
因为只有离散 token 才能无缝接入语言模型——LLM 本质是在「词」的离散空间做自回归。连续潜变量需要单独的扩散/流匹配头,没法直接和文本共享一个 decoder。代价是 VQ 会有少量量化误差,但论文 Table VIII 显示 $K=512$ 时重建 MPJPE 仅 55.8 mm,足够好。
这个模型能控制机器人吗?
不能直接控制。MotionGPT 产出的是人类动作序列(SMPL 格式),不是机器人关节指令。它解决的是「认知层:理解动作、生成动作语义」。要落地到机器人,还需要 retargeting + 下层 WBC(如 H2O、HOVER)把人动映射到机件角。
为什么不用更大的 LLM(如 LLaMA-7B)?
论文做了实验:770M 已经吃不满,再大也没用,因为动作数据太少。作者明说:「当动作数据达到百万、十亿级时,大模型才能发挥优势」。这是动作生成领域当时的普遍困境。
指令微调(Step 3)真的有用吗?
有用。Table IX 消融(Base 模型):去掉指令微调只做 motion-language 预训练,文→动作 FID 从 0.160 升到 0.365,且模型完全丧失动作预测/中间填空能力(这两项无指令微调时无法完成,表中标「-」)。指令微调让模型「听懂 prompt」,是解锁多任务的关键。(注:Table IX 中 FID 0.324 / 预测 1.643 那一行对应的是去掉预训练、只做指令微调,别混淆。)