MoMask 用于 根据文本生成3D人体动作
核心思想
用 "mask建模(类似BERT填空)"来生成动作
👉 用"填空"的方式生成动作,而不是一步一步写(GPT)
用了一种分层的离散表示方法:把动作表示成 多层 token
第1层:粗动作、第2层:细节、第3层:更细节
如何分层
1️⃣ 先做基础层:用 VQ(向量量化)
得到 t0(基础token)
2️⃣ 然后做残差层:
每一层都做:误差 = 原始 - 已有表示,然后把误差再编码成 token:
t1(补误差)
t2(再补误差)
...
👉 后面的层是在"修正前面的误差"
两个Transformer
接下来用两个ransformer,而且是 双向的(像BERT)
分别是:
- Masked Transformer(生成基础层)
- Residual Transformer(补细节)
Masked Transformer训练
训练时:
- 随机mask一些动作token
- 输入文本(比如"向前走")
- 让模型去预测被mask的token
如:walk [MASK] turn
👉 模型学会填空
生成阶段
1️⃣ 一开始:
MASK, MASK, MASK, ...
2️⃣ 然后:
一轮一轮"填空" ,预测 → 保留高信心 → 其余的mask → 再预测
从全空白 → 反复填 → 得到完整动作
Residual Transformer
在基础动作生成后,用另一个模型来:
t0 → 预测 t1 → 预测 t2 → ...
每一层在上一层基础上补细节
Masked Transformer反复填,Residual Transformer逐层补细节
阶段1:生成"骨架"(t0) → 用 Masked Transformer(反复填)
阶段2:加"细节"(t1, t2...) → 用 Residual Transformer(逐层补)
1️⃣ MoMask 用"mask填空"的方式生成动作(不是GPT那种顺序生成)
2️⃣ 它把动作表示成"多层token"(粗 → 细)
3️⃣ 先生成基础动作,再逐层补细节
4️⃣ 又快又精细,比之前方法效果更好