枢纽
输入模态text,proprioception

KiMoDO:用 700 小时动捕,把「人体动作生成」推到扩散模型的 GPT 时刻

Davis Rempe*, Mathis Petrovich* 等(NVIDIA)。技术报告 arXiv:2603.15546v1(2026-03-16)。 项目页 · 开源代码 + 权重 · action_genhuman motion diffusionhumanoid demos

🧠 一句话心智模型:动作生成的扩散模型一直做不大,是因为公开动捕数据只有 30 小时,benchmark 早就饱和了。KiMoDO 把训练数据 ×23 放大到 700 小时光学动捕(商业数据集 Bones Rigplay,由 Bones Studio 出品),再叠上「两阶段扩散 + 直接 imputation 控制接口」,一次性喂给机器人一个能听话、能被各种稀疏关键帧/路径/文本指挥的「动作生成大模型」。

🎯 为什么重要:动作生成卡在「数据饱和」很久了

人体动作生成(text-to-motion)过去几年看似在涨点,但圈内人都知道:benchmark 已经饱和到「方法分比 ground-truth 还高」的离谱程度。根因是 HumanML3D 这类公开数据集只有约 30 小时动捕——模型早把测试集「背下来」了。

核心矛盾:要做一个真能指挥的动作生成模型(输文本 + 「这只手第 30 帧到这里」、「根轨迹走这条 S 形」),需要 大规模 + 高质量 + 多样 的动捕数据;可公开数据要么小而净(mocap),要么大而脏(视频重建)。

下图把 KiMoDO 出现前后的格局画清楚——它选了第三条路:大而净的光学动捕 + 工业级扩散骨架

小而净:HumanML3D ~30h · mocap 干净 · 但 benchmark 饱和 ❌ 方法分已超过 GT 大而脏:Motion-X / MotionMillion · 144h ~ 2000h · 视频重建 + LLM 文本 ⚠️ 动作质量打折 KiMoDO ✅ 700h 光学动捕 · Bones Rigplay(170 人) · 人标 + 27 关节统一 大 × 净 × 多样 控制接口对比(稀疏关键帧 / 稀疏关节 / 2D 路径 / 全身关键帧): GMD / OmniControl 需 ControlNet / 引导优化 CondMDI imputation,小数据 KiMoDO:单模型原生支持所有约束 无需 ControlNet 微调 / 测试时优化 / 额外 RL
图 1:左:KiMoDO 选的「大而净」数据路线。右:在控制接口上,它把原本需要一堆 trick 才能拼出来的能力,压到一个 imputation 训练的扩散模型里。

💡 核心思想:直接 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]$ 拼起来送给去噪器

输入 📝 文本 · "A person walks then waves" 🎯 约束 · 关键帧位置 · 端 effector 旋转 · 2D waypoint/path · 脚接触标志 噪声 x_t mask m ↓ 覆盖(imputation) x̃_t = x̃ Stage 1: 根去噪器 预测全局根 r̂_glob (位置 + 朝向) 支持稀疏全局根约束 全局→局部 Stage 2: 身体去噪器 以局部根为条件 预测身体 b̂ 更容易学,foot skate ↓ 干净动作 x̂_0 = [r̂;b̂] 每个去噪步都同时更新根和身体(interleaved),不是先根后身体两段独立做
图 2:两阶段 interleaved 去噪器。Stage 1 先预测全局根(便于直接 imputation 全局约束),再把它转成局部根喂给 Stage 2(便于学稳定的身体动作)。两个 stage 在每个去噪步同时更新。

关键直觉:「全局根」便于写约束、「局部根」便于学身体——所以两个表示各管一头,是论文做消融后反复确认的结论(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$ 文本和约束强度可独立调节;论文发现加梯度引导几乎没用、还慢、还不稳,所以放弃了
🔮 直觉:为什么 imputation 比梯度引导更香?
梯度引导(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 / GPU4 GPU(R@3 69.4)8 GPU(71.9)16 GPU(73.6更多 GPU → 更稳的梯度估计 → 全线提升
关键洞察:三个 scaling 维度(数据 / 模型 / batch)各管一摊——数据主要救约束服从,模型主要救文本理解和 FID,batch size 全面提升。这跟 LLM 的 scaling law 形态不完全一样:动作扩散模型上,数据多样性比单纯堆参数更稀缺。也正因如此,KiMoDO 没有冲到 1B 参数(论文明说训练稳定性吃不消、没数据吃不动)。

🌐 在领域中的位置

MDM / HumanML3D 时代(显式扩散,30h 小数据) MLD(隐空间扩散)/ MoMask(mask)/ MotionGPT(自回归 token) GMD / OmniControl(加 ControlNet 才能控约束) KiMoDO(大数据 × imputation 原生可控)⭐ GenMo / 视频数据 scaling(走向通用人动模型)

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。