Q1:MDM 生成的动作能直接控制机器人吗?
不能。MDM 纯运动学、不进物理,动作可能穿地、不平衡、脚滑。要喂机器人必须经基于物理的模仿器(PHC/UHC)做物理化。📎
论文:Guy Tevet, Sigal Raab, Brian Gordon, Yonatan Shafir, Daniel Cohen-Or, Amit H. Bermano. Human Motion Diffusion Model. ICLR 2023, Tel Aviv University. arXiv:2209.14916. 🌐 · 代码:github.com/GuyTevet/motion-diffusion-model。
给一句话,就生成一段会动的人。
秘诀是把"去噪"从画图搬到动作上。
人体动作扩散之于文字动画,就像爵士即兴之于看谱演奏。
同一句"走路",每次能走出不同的步态。
要解决的问题:让一段文字变成一段人的动作。
比如输入"一个人向前走两步然后转身",输出就是一串姿势连成的动画。
这叫文字到动作的生成。📎
老办法的硬伤:以前的做法像一个"压缩-还原"的罐头机。
把所有动作压成一个标准形状的小球,再从球里还原出动作。
这种标准形状有个致命假设——一个描述只对应一个动作。
可真实世界是"多对多"的。
"踢"这个字,可以是踢足球,也可以是空手道踢。
同一个动作,又可以用千万种说法描述。
罐头机把这种丰富性压成单峰,生成的动作死板又单调。📎
这项工作的转身:换成"扩散",也就是逐步去噪。
从一团完全随机的噪声出发,一步步把动作细节"修"出来。
同一句话、换一团初始噪声,能修出不同的合理动作。
所以"多对多"自然就实现了,不会被压成单峰。
扩散在画图上已经证明了能表达多解。
这里是第一次把它成功搬到动作上。📎
方法核心(大白话):四件事一起,让它又轻又好。
第一件是"骨架不用画图那套"。
画图去噪用的是一种专门处理方格网格的网络。
可动作是"一串按时间排的姿势",不是方格图。
所以换成处理时间序列的骨架,每一帧当一个词。
这样既能处理任意长度,又比画图网络轻一两个数量级。
第二件是最关键的巧思——"直接修动作,而不是修噪声"。
通常去噪网络学的是"这团噪声里该抹掉哪部分噪声"。
但动作有些重要的物理约束,比如"脚踩地时不能滑"。
这些约束没法套在"噪声"上,因为噪声没有"脚"这种概念。
所以这里让网络直接输出"我猜的干净动作"。
这样一来,所有动作层面的约束都能直接算在输出上。
脚滑了就罚、位置错了就罚、抖动了就罚。
这是把动作生成的老经验接进新框架的关键一招。
第三件是"一个模型兼两职"。
训练时偶尔(一成概率)把文字条件抠掉,让模型也学"没有条件时该怎么生成"。
于是同一个模型既会"听指挥",也会"自由发挥"。
生成时在两者之间外推,调一个甜点档位,兼顾像不像和丰不丰富。
第四件是"白送的编辑能力"。
因为去噪是一步步修的,每一步都可以强行规定一部分动作不变。
比如"开头和结尾固定,让模型补中间",就是时间衔接。
"上半身固定,让模型改下半身",就是局部编辑。
这些都不用重新训练,只改生成过程。📎
为什么直接修动作这一招关键:动作生成的老办法都靠几条"几何约束"。
位置要对、速度要顺、脚踩地不能滑。
这些约束必须在"动作"层面算,不能在"噪声"层面算。
让网络直接输出动作,这些老经验才接得进来。
否则换了新框架,反而丢了多年积累的好东西。📎
你会看到:一张消费级显卡,训三天就达到最好水平。
一段文字生成的动作,有四成多的情况甚至比真实录像更受人喜欢。
后续的文字到舞蹈、视频到动作、机器人动作生成,几乎都把它当起点。📎
一句话类比:动作扩散之于文字动画,就像爵士即兴之于看谱演奏。
同一份谱(一句话),每次都变出不同版本。
核心机制·四件事叠成一个轻量扩散模型:换骨架、预测干净样本、无分类器引导、白送编辑。📎
骨架:transformer encoder-only(不是 U-Net)。
动作数据是"N 帧 × J 关节 × D 维"的时间序列,不是 2D 空间网格。
U-Net 的 2D 卷积优势用不上。
transformer 天生处理时间序列,encoder-only 又比 encoder-decoder 轻。
模型 8 层、latent dim 512、batch 64,比图像扩散小两个数量级。📎
关键设计·预测干净样本而不是噪声。
标准扩散让网络预测"该抹掉哪部分噪声"。
MDM 改成让网络直接输出"我猜的干净动作"。
因为输出直接是动作,所以能在它上面加几何约束。
而噪声层面加不了——噪声没有"关节位置""足触地"这些物理意义。
这是把动作生成文献积累的几何约束搬进扩散的关键 trick。📎
三个几何约束(加在预测的干净动作上):
细节公式留到下方深度部分。📎
Classifier-free guidance:同模型同时学条件 + 无条件。
训练时按 10% 概率把文字条件抠掉,让模型也学"没有条件时怎么生成"。
于是同一个模型既会"听指挥",也会"自由发挥"。
采样时做"条件 - 无条件"差值的外推。
论文实测引导强度 2.5 是保真和多样的甜点(强度为 1 是纯条件,小于 1 偏多样,大于 1 偏保真)。📎
text-to-motion 用 frozen CLIP-ViT-B/32 文本编码器把文字编成条件向量。
CLIP 是冻结的,MDM 不训 CLIP。📎
编辑(无训练,只改采样):用 diffusion inpainting 思路。
给定一段动作的子集(时间前缀+后缀做 in-betweening,或部分身体关节做 body part editing)。
每个采样步用输入子集覆写预测动作的对应维度。
让生成结果保留输入、补全缺失,可带条件也可无条件。📎
常见误区(先抛一个,完整版见末尾):"MDM 生成的动作能直接喂给机器人执行?"
——不能。MDM 是纯运动学的,不进物理仿真。
生成的动作可能穿地、不平衡、脚滑。
要喂机器人必须再过一层"基于物理的模仿器"(如 PHC/UHC)做物理化。📎
正确理解:MDM 是"画"动作,不是"做"动作。
前向/反向过程与预测目标。训练时把干净动作 $x_0$ 按噪声调度加噪到 $x_t$。MDM 直接预测 $\hat x_0$,simple loss:📎
$$\mathcal{L}_\text{simple} = \mathbb{E}_{x_0 \sim q(x_0|c),\, t\sim[1,T]} \big\|x_0 - G(x_t, t, c)\big\|_2^2$$
三个几何 loss(Eq.3–5):
总 loss:$\mathcal{L} = \mathcal{L}_\text{simple} + \lambda_\text{pos}\mathcal{L}_\text{pos} + \lambda_\text{vel}\mathcal{L}_\text{vel} + \lambda_\text{foot}\mathcal{L}_\text{foot}$。📎
注:HumanML3D 表示已显式含 joint positions 和 foot contact labels,所以 text-to-motion 实验里不用几何 loss;只在 action-to-motion 用 rotation 表示时才用。
模型结构细节(Fig.2):
Classifier-free guidance 采样(Eq.7):
$$G_s(x_t,t,c) = G(x_t,t,\emptyset) + s\cdot\big(G(x_t,t,c) - G(x_t,t,\emptyset)\big)$$
$s=1$ 纯条件采样,$s<1$ 偏多样性,$s>1$ 外推偏保真。$s=2.5$ 是 sweet spot。📎
采样:T=1000 步,cosine noise schedule。每步预测 $\hat x_0$,按 DDPM 重新加噪回 $x_{t-1}$,迭代到 $x_0$。📎
实验结果:三个任务——text-to-motion、action-to-motion、unconditional。
训练成本:单 RTX 2080 Ti(消费级),约 3 天,500K steps。比同时期图像扩散小一两个数量级——论文强调的 lightweight。📎
局限:
图谱定位:MDM 是 T08(带物理的动作生成)线索的起点 / 转折 1——把扩散搬进动作域的开山之作。📎
与 T05(Diffusion Policy)同源技术、不同目标:T05 用扩散生成控制 action(控制用),MDM 用扩散生成 kinematic motion 序列(生成用)。
与 Diffusion Policy 的核心区别(生成用 vs 控制用):📎
| 维度 | MDM(生成用) | Diffusion Policy(控制用) |
|---|---|---|
| 目标 | 生成动作序列(动画/视频用) | 生成机器人 action chunk(控制用) |
| 是否上物理 | 否,纯 kinematic | 是,输出进机器人/仿真执行 |
| 条件 | text(CLIP 编码)/ action class | 视觉观测 + 本体感觉 |
| 架构 | transformer encoder-only | 1D temporal CNN 或 transformer |
| 预测目标 | $\hat x_0$(sample) | $\epsilon$ 或 $\hat x_0$ |
| 能否直接喂机器人 | 不能,需物理模仿器翻译 | 能,输出直接是 action |
核心区别一句话:MDM 是"画动作",Diffusion Policy 是"做动作"。
MDM 生成的动作漂亮但不能直接控制机器人,要喂机器人还需 PHC/UHC 这类基于物理的模仿器当"物理翻译层"——这正是 PHC 论文里用 MDM 当输入做 in-betweening 的用法。
这是 T08 线索的核心矛盾:"生成"和"控制"之间的物理鸿沟。📎
继承与催生:
两个关键遗产:
Open problems:
"MDM 生成的动作能直接喂机器人" —— 错。MDM 是纯运动学的,不进物理仿真。生成的动作可能穿地、不平衡、脚滑。要喂机器人必须再过一层基于物理的模仿器(PHC/UHC)做物理化。📎
MDM 是"画"动作,不是"做"动作。
"MDM 预测的是噪声" —— 错。MDM 直接预测干净样本 $\hat x_0$,不是噪声 $\epsilon$。这是能否套几何 loss 的关键——噪声没有"关节位置""足触地"这些物理意义。📎
预测 $\hat x_0$ 才能把动作生成积累的几何约束接进来。
"MDM 用 U-Net 做去噪网络" —— 错。MDM 用 transformer encoder-only。动作是时间序列不是 2D 网格,U-Net 的 2D 卷积优势用不上。📎
transformer 处理时间序列更自然,且比图像扩散轻一两个数量级。
"MDM 训练 CLIP 文本编码器" —— 错。CLIP-ViT-B/32 是冻结的,MDM 不训 CLIP,只用它把 prompt 编码成条件向量。📎
CLIP 提供文本理解,MDM 只训扩散模型本身。
"编辑能力要单独训一个模型" —— 错。编辑(时间衔接、局部身体部位)无需重训,只改采样过程——每步用输入子集覆写 $\hat x_0$ 对应维度即可。📎
编辑是扩散 inpainting 的副产品。
老办法("压缩-还原"的罐头机式方法)在"踢"这个字上为什么会生成死板单调的动作?从"它假设一个描述对应几个动作"这个角度说。换成扩散后为什么就好了?
💡 参考答案
MDM 让去噪网络直接输出"我猜的干净动作",而不是常见的"该抹掉哪部分噪声"。这个改动为什么关键?它让什么原本做不到的事变成可能?
💡 参考答案
MDM 用处理时间序列的骨架,而不是画图去噪用的那种方格网格网络。从"动作数据的形状"角度解释为什么这样更合适?
💡 参考答案
MDM 训练时偶尔会把文字条件抠掉。这种"一个模型兼两职"的设计,在生成时怎么用,调那个"甜点档位"是在兼顾什么和什么?
💡 参考答案
MDM 的编辑(开头结尾固定补中间、上半身固定改下半身)不用重新训练。从"去噪是一步步修"这个机制推断,为什么能白送这种能力?
💡 参考答案
不能。MDM 纯运动学、不进物理,动作可能穿地、不平衡、脚滑。要喂机器人必须经基于物理的模仿器(PHC/UHC)做物理化。📎
为了能套几何 loss(位置、速度、foot contact)。这些约束必须在"动作"层面算,噪声层面没有物理意义。这是把动作生成老经验接进扩散的关键 trick。📎
单张 RTX 2080 Ti(消费级),约 3 天,500K steps。比同时期图像扩散小一两个数量级。📎
同源技术、不同目标。都用扩散,但 MDM 是"画"动作(生成动画,不进物理),Diffusion Policy 是"做"动作(生成机器人 action,进物理执行)。MDM 输出要喂机器人还需物理模仿器翻译。📎
不用。编辑靠扩散 inpainting——每步用输入子集覆写对应维度,纯改采样过程,不重训。可做时间衔接和身体部位编辑。📎