KiMoDO:用 700 小时动捕,把「人体动作生成」推到扩散模型的 GPT 时刻
🎯 为什么重要:动作生成卡在「数据饱和」很久了
人体动作生成(text-to-motion)过去几年看似在涨点,但圈内人都知道:benchmark 已经饱和到「方法分比 ground-truth 还高」的离谱程度。根因是 HumanML3D 这类公开数据集只有约 30 小时动捕——模型早把测试集「背下来」了。
下图把 KiMoDO 出现前后的格局画清楚——它选了第三条路:大而净的光学动捕 + 工业级扩散骨架。
💡 核心思想:直接 imputation + 两阶段(根/身体)解耦扩散
KiMoDO 的核心是一个「显式动作扩散模型」(在 pose 空间直接去噪,而不是隐空间),配合两个让它在 700h 数据上真正跑通的设计。
设计 1:imputation 控制——把约束「直接写进噪声输入」
给定一段噪声动作 $x_t$ 和用户约束(关键帧位置、关节旋转、2D 路径等),用一个二值 mask $m$ 标出哪些帧/哪些通道被约束,然后直接覆盖:
$\tilde{x}_t = m \odot x_{tgt} + (1-m) \odot x_t$ 然后把 $[\tilde{x}_t;\ m]$ 拼起来送给去噪器
关键直觉:「全局根」便于写约束、「局部根」便于学身体——所以两个表示各管一头,是论文做消融后反复确认的结论(Tab.1:单阶段或第二阶段也用全局根,foot skate 显著上升)。
🛠️ 工程关键:让 700h 数据真正变成「可控动作大模型」
| 设计 | 心智 | 为什么必要(消融证据) |
|---|---|---|
| ① smoothed root 表示 | 把骨盆位置的水平分量 (x,z) 重度平滑当根,y 高度不变;关节位置用相对该平滑根的局部表示 | 直接用骨盆做根 → foot skate 上升、走路会像「潜行/老人」(pelvis 摆动被压死)。平滑根正好对上动画师画路径的方式 |
| ② 全局关节旋转(6D) | 关节旋转用全局 6D 表示,不做 heading 规范化;首帧朝向用 c_dir token 控制 |
支持用户在世界系直接指定稀疏旋转约束(动画常用);并避免翻跟头/侧翻时局部表示突变导致训练不稳 |
| ③ 两阶段 interleaved 去噪 | 根 stage 和身体 stage 在每个去噪步都联合更新,端到端训练 | 对比单阶段同参数量:foot skate 7.59→3.87 cm/s,全身约束误差 8.37→2.67 cm。对比「先根后身体两段独立」:传统做法 |
| ④ 两阶段训练课程 | Phase 1 500k 步纯文本,Phase 2 500k 步文本+随机约束;约束 keyframe 数线性增加到 20 | 不课程化直接训 1M 步:约束误差全面上升(全身 5.80 vs 2.67 cm)。课程让 phase 1 学动作分布、phase 2 专心学约束服从 |
| ⑤ 数据增强:LLM 改写 + 缝合 | 用 Qwen3-32B 把动作描述改写成"A [subject]..."格式多种细节;随机缝合两段动作用扩散模型补过渡 | 让模型见多识广:复合动作、不同细节层级 prompt、长序列过渡,都能在测试时响应 |
| ⑥ classifier-free guidance 解耦 | $\hat{x}_0 = D_\emptyset + w_{text}(D_{text}-D_\emptyset) + w_{constr}(D_{constr}-D_\emptyset)$,默认 $w=2$ | 文本和约束强度可独立调节;论文发现加梯度引导几乎没用、还慢、还不稳,所以放弃了 |
梯度引导(GMD/OmniControl 那套)的逻辑是「模型预测后,对违反约束的方向加梯度推回去」——但每步去噪都要算一次雅可比,慢且容易震荡。imputation 直接把约束硬写进噪声输入,模型在训练时就见过「约束长这样」,推理时只要照抄就好。KiMoDO 证明了:在大数据加持下,imputation 单挑就够了——这是工程上极简的胜利。
📊 结果:scaling 全面奏效,约束误差压到厘米级
主结果(best 模型,SOMA 骨架,30fps,16 GPU)
| 维度 | 数字 |
|---|---|
| 训练数据 | 700 小时光学动捕(Bones Rigplay,170 人) |
| 模型规模 | 282M 参数(每个 transformer 16 层、8 头、latent 1024) |
| 训练步数 | 1M 步(500k 文本 + 500k 文本+约束) |
| 推理速度 | 单条 prompt 2~5 秒(RTX 3090,DDIM 100 步,最长 10 秒动作) |
| 全身关键帧误差 | 3.21 cm(关节位置) |
| 端 effector 误差 | 3.63 cm 位置 / 6.88° 旋转 |
| 2D 根 waypoint/path 误差 | 3.63 cm |
| 下游应用 | 直接在 Unitree G1 上生成 demo,再用 ProtoMotions 物理策略跟踪,真机部署 |
Scaling 消融(Tab.2 摘要,Rigplay 测试集)
| 变量 | 小 | 中 | 大(best) | 趋势 |
|---|---|---|---|---|
| 数据量 | 10%(FID 2.07、全身约束 4.60 cm) | 50%(1.81 / 3.13) | 100%(1.84 / 2.77) | 约束精度单调改善;10% 时退化显著 |
| 模型规模 | S 56M(R@3 64.0) | M 148M(69.2) | L 282M(71.9) | 越大越好;R@3 提升 ~8 个点 |
| Batch / GPU | 4 GPU(R@3 69.4) | 8 GPU(71.9) | 16 GPU(73.6) | 更多 GPU → 更稳的梯度估计 → 全线提升 |
🌐 在领域中的位置
KiMoDO 是动作扩散模型「走出学术 benchmark、进入工业级动作资产生产」的标志。它给 humanoid 机器人指了一条捷径:用文本+约束直接生成 G1 上的 kinematic demo,再用物理策略跟踪——把传统 teleop / 动捕这条慢路绕过去了。关联线索:动作生成扩散化(T05)、humanoid 全身控制(T09)。
❓ 常见误区
KiMoDO 是给机器人直接出动作的策略吗?
不是。它输出的是 kinematic(运动学)动作序列——只有关节角/位置、没有物理。要部署到真机还得加一层「物理策略」去跟踪这些参考动作(论文用 ProtoMotions,跟踪后再上 G1)。KiMoDO 的角色更像是「给机器人生成动捕演示数据」,替代昂贵的 teleop。
为什么不走 latent / 自回归 token 路线?
论文的明确选择:显式扩散 + imputation 才能让稀疏约束直接写进输入。latent 路线(MLD/MoMask)做文本很好,但要加稀疏约束得做测试时优化,又慢又难以精确。token 自回归则更不利——逐帧生成时无法直接覆盖任意帧的任意通道。
700 小时数据会开源吗?
Bones Rigplay 是 Bones Studio 的商业数据集(付费出售),不开源。但 KiMoDO 的模型权重和代码开源(GitHub nv-tlabs/kimodo),并提供 SOMA 和 Unitree G1 两个版本的 checkpoint。这其实是这篇工作的一个争议点:复现需要商业数据。
为什么不用梯度引导进一步提高约束精度?
论文明确试过:因为模型已经被 imputation 直接训练去服从约束,再加梯度引导几乎没增益,还显著拖慢推理、且对超参敏感不稳。结论是「直接条件 + classifier-free guidance」组合就够,工程上极简。
foot skate 是什么?为什么反复提?
脚在地面应该静止时却滑动——这是人体动作生成的经典瑕疵,看起来像「在冰上走」。KiMoDO 把 foot skate 当一等公民指标(cm/s),且发现 两阶段解耦 + smoothed root + 局部根 三个设计每个都能独立降低 foot skate。