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

MoMask:用「残差量化 + 双向 Masked Transformer」把文本→动作做到 FID 0.045

Chuan Guo, Yuxuan Mu, Muhammad Gohar Javed, Sen Wang, Li Cheng(University of Alberta)。arXiv:2312.00063v1 (2023-11-29);CVPR 2024。 项目页 · 开源 · text-to-motionaction_gen 线索 T04

🧠 一句话心智模型:T2M-GPT 用「单层 VQ + 自回归 GPT」生成动作已经很强,但还有两个洞:(1)单层 VQ 量化误差大;(2)GPT 只能从左到右逐 token 生成,错误会累积。MoMask 的解法:把动作压成 多层残差 token(粗→细,像图像金字塔),再换成 BERT 风格的 Masked Transformer——并行地把所有 mask 同时填出来。结果:15 步迭代(不论动作多长)就生成完毕,HumanML3D FID 从 T2M-GPT 的 0.141 砍到 0.045

🎯 为什么重要:自回归不是「动作生成」的唯一答案

T2M-GPT 这类 VQ-VAE + 自回归 GPT 的方案虽然打败了扩散,但作者敏锐地指出两个内生缺陷

核心矛盾
单层 VQ 的量化误差——动作被压进一个 codebook 后,细节必然丢失。这是表示能力的上限
自回归的单向解码——每个 token 只看前面的 token(local context),看不到全局;而且「错一步错到底」(误差累积)。
虽然离散扩散能做双向解码,但需要 几百步迭代,效率很差。

MoMask 同时解决这三个问题:

已有方案的痛点MoMask 的对应解法
单层 VQ 量化误差大Residual VQ (RVQ):第一层做粗量化,后续层依次量化「上一层没编码进去的残差」,多层叠加逼近原信号
自回归单向、误差累积BERT 式 Masked Transformer:base 层用双向注意力,「并行」预测所有 mask token——每个 token 都看得到全局上下文
离散扩散几百步太慢仅 ~10 步迭代:每步并行填一部分,置信度高的 token 锁定不重画,10 步就收敛

这套思路来自图像领域的 generative masked modeling(Muse、MAGE、Magvit 等)——把 BERT 的「mask 后预测」改造为生成范式。MoMask 是首个把它成功用到 3D 动作生成上的工作。

💡 核心思想:RVQ 多层 token + 两个 Transformer 分工

阶段 ① RVQ-VAE:动作 → 多层残差 token 动作 Encoder → b̃ VQ_0(base) VQ_1(残差) VQ_2...VQ_V r₀=b̃ r₁=r₀-b̂₀ ... t⁰ (base) t¹ (residual) t²...tᵛ Decoder → 动作 MPJPE 37.2mm ② M-Transformer:base 层 BERT 风格,双向 attention mask ratio γ(τ)=cos(πτ/2) ∈ [0,1] 训练:随机 mask + 预测 推理:全 mask → ~10 iter 并行填 每步:高置信 token 锁定,其他重 mask ③ R-Transformer:残差层 逐层向下预测 t¹, t², ..., tᵛ 输入:(t⁰,...,tʲ⁻¹) + text + layer indicator j 训练:给前 j 层 预测第 j+1 层 推理:base 定后 V-1 步逐层补 残差:低频结构 → 高频细节,逐层精细化 总流程 文本 → CLIP → 条件 c M-Transformer 生成 base 层 ~10 步并行 R-Transformer 逐层补残差 V-1 ≈ 4 步 RVQ Decoder → 动作 动作序列 ⏱ 总共 ~15 步迭代 不论动作多长 vs 自回归逐 token / 扩散几百步 → 显著更快
图 1:MoMask 架构(对应论文 Fig.2-3)。RVQ-VAE 把动作压成多层残差 token;M-Transformer(BERT 风)并行填 base 层;R-Transformer 逐层补残差。总计 ~15 步。

两个关键巧思:

  • Mask ratio 用 cosine 调度 $\gamma(\tau) = \cos(\frac{\pi \tau}{2})$:训练时不是固定 mask 比例(BERT 原版用 15%),而是从 0 到 1 平滑采样。这让模型学会「从全 mask 一路填到全可见」的整条路径——和推理时「从全 mask 开始填」对齐,消除 train/test gap
  • Replacing-and-Remasking(RRmask):推理时每步把所有 mask token 都预测一遍,但只把置信度最高的几个「锁定」,其他重新 mask 再预测——类似 MaskGIT 在图像上的策略。这让生成过程「先确定整体骨架,再补细节」,避免早早锁定错误。

🛠️ 四个让 MoMask 真正高效的关键设计

设计心智为什么必要
① Residual VQ(RVQ)第 0 层做粗量化;第 j 层量化第 j-1 层的残差 $r_{j+1} = r_j - \hat{b}_j$多层叠加逼近原信号——从单层 VQ 的 0.070 FID 降到多层 RVQ 的 0.019(Table 2 重建)
② Quantization Dropout(QDropout)训练时随机跳过一些残差层(ratio q)让 R-Transformer 学会处理不完整的残差链,提升鲁棒性;最佳 q ≈ 0.2-0.4
③ M-Transformer(BERT)base 层用双向 attention,训练随机 mask,推理全 mask 并行填双向 vs 自回归单向——每个 token 都看得到全局上下文,避免误差累积
④ R-Transformer(残差)单网络处理所有残差层,输入 layer indicator j用一个模型处理 V 层残差——参数共享,效率高
🔮 直觉:为什么「并行 mask 填空」比「自回归逐 token」更适合动作生成?
动作的相邻 token 高度相关(姿势前后依赖),自回归逐 token 生成时「错一步错到底」。Masked Transformer 并行填时,每个 mask 位置都能看到所有未 mask 的上下文(包括「未来」)——相当于做「带约束的全局优化」。再加上 RRmask(每步锁定高置信 token),整体效果是「先定骨架后补细节」,错误不会单向累积

训练规模:M-Transformer 与 R-Transformer 各 6 层 / 6 heads / dim 384;Transformer 的 batch=64(HumanML3D)/ 32(KIT-ML),RVQ-VAE 的 batch=512;linear warmup 2000 iter 到 lr 2e-4(论文未明示后续 LR 衰减形式)。Mask ratio 用 cosine 调度 γ(τ)=cos(πτ/2)。RVQ-VAE 沿用 T2M-GPT 的 EMA + Code Reset 套路。论文未给单卡训练时长(§4.1 实现细节简短)。

📊 关键结果:FID 0.045(比 T2M-GPT 提升 3×)+ 推理更快

Table 1:HumanML3D

方法R-Precision Top-1 ↑Top-2 ↑Top-3 ↑FID ↓MM-Dist ↓MModality ↑
MDM(扩散)0.6110.5445.5662.799
MLD(潜扩散)0.4810.6730.7720.4733.1962.413
T2M-GPT(VQ+GPT)0.4920.6790.7750.1413.1211.831
MoMask (base)0.5040.6990.7970.0823.0501.050
MoMask(完整)0.5210.7130.8070.0452.9581.241

关键观察:FID 从 T2M-GPT 的 0.141 → MoMask 0.045(3.1× 改善)。注意 MoMask(base)——仅用 base 层 + M-Transformer——FID 已经 0.082,说明 Masked 建模本身就比自回归 GPT 强;RVQ 残差再加 0.037 的提升。

Table 1:KIT-ML:MoMask FID 0.204(vs T2M-GPT 0.514,2.5× 改善)。

Table 2:RVQ-VAE 重建 + 设计消融(HumanML3D)

方法重建 FID ↓生成 FID ↓
T2M-GPT VQ0.0700.141
MoMask (V=2)0.0490.072
MoMask (V=4)0.0270.069
MoMask (V=5, 最佳)0.0190.051(base)/ 0.045(含 R-Trans)

残差层数 V 越多,重建 FID 越低(重建 MPJPE 亦同步下降:T2M-GPT 58.0mm → V=5 时 29.5mm);但生成 FID 在 V=5 之后反而变差(V=6 时 FID 回升至 0.076,R-Transformer 负担过重)——论文找到 V=5 是甜蜜点

Fig.7:推理超参扫描——最佳 guidance scale s ≈ 410 步迭代就收敛(更多步无增益)。

用户研究(Fig.5):MoMask 与 MDM/MLD/T2M-GPT 对比都获多数偏好;42% 用户认为 MoMask 与真值动作持平(即分不出哪个是生成的)。

额外应用:时序 Inpainting(Fig.6)——无需重训,直接 mask 一段动作让 MoMask 补全。68% 用户偏好 MoMask 而非 MDM

关键洞察:MoMask 的贡献不仅是「又降了 FID」,而是把动作生成从「自回归范式」推进到「双向 mask 范式」。同时它证明了 RVQ(残差量化)+ Masked Transformer 这一组合在动作生成上的潜力——后续工作(如 MaskMoMo、MotionGPT 等)大多沿此方向。15 步迭代的效率也打开了实时应用(游戏、VR)的门槛。

🌐 在领域中的位置

MDM / MotionDiffuse(扩散) T2M-GPT(VQ-VAE + 自回归 GPT 反超扩散) MoMask(RVQ + Masked Transformer 双向并行)⭐ MotionGPT / MaskMoMo(mask 建模扩展)

MoMask 是动作生成「双向 mask 建模」范式的奠基。它和 T2M-GPT 形成有趣对照:同样的 VQ 表示,把自回归换成 mask 建模,FID 又砍 3×。这强化了「动作 = 离散 token 序列」这一表示的合理性,同时确立了 generative masked modeling 在动作领域的地位。关联线索:T08 动作生成谱系

❓ 常见误区

「Masked Transformer」和 BERT 是一回事吗?怎么用于生成?

BERT 原本是判别式模型——只能预测 mask,不能凭空生成。MoMask 借鉴 Ghazvininejad 等(2019)和 Muse 的做法:推理时从「全 mask」开始,每步并行预测所有 mask,锁定高置信的,重 mask 其他的,迭代 ~10 步直到全填满。这就是「generative masked modeling」。

「Residual VQ」和普通 VQ 有什么不同?

普通 VQ 把向量量化一次:$\hat{b} = Q(r_0)$,残差 $r_0 - \hat{b}$ 就丢了。RVQ 把残差再量化:$r_1 = r_0 - \hat{b}_0$, $\hat{b}_1 = Q(r_1)$, $r_2 = r_1 - \hat{b}_1$, ...——多层叠加 $\sum_j \hat{b}_j$ 越来越逼近原向量。这是音频编码(EnCodec、SoundStream、AudioLM)里的成熟技术,MoMask 把它搬到动作上。

15 步迭代真的够吗?动作会不会很短时就不准?

论文 Fig.7 实测:~10 步就收敛,更多步无增益。原因是每步并行填多个 token,而不是像自回归逐个填——15 步内填完几十个 token 完全够用。对短动作尤其友好。

MoMask 有什么局限?

论文 §5 自承三条:(1)多样性较低——精度高但生出来的动作变化不够(MModality 比 MLD/MDM 低);(2)需要输入目标长度(不像 T2M-GPT 用 End token 自动停),得配一个 text2length 模块;(3)快速变向动作(如原地旋转)生成不准——这是 VQ 系方法的通病。

它和 T2M-GPT 到底什么关系?继承还是替代?

「继承 + 改造」。MoMask 的 RVQ-VAE 训练直接复用 T2M-GPT 的 EMA + Code Reset;但把单层 VQ 换成 RVQ、把自回归 GPT 换成 Masked + Residual 双 Transformer。结果:表示精度更高、生成更快、FID 更好。可以看作 T2M-GPT 路线的自然进化版