深度⏱ ~3 min
里程碑
⭐ 为何重要

奠定了 motion imitation 的 RL 范式:用『参考动作模仿目标 + 任务目标』联合训练,让物理仿真角色学会后空翻、跳马、武术等高动态技能。它是后续 AMP/ASE/PHC/UHC 整条 motion-imitation 与人形动作跟踪脉络的起点,第一次证明 RL + 物理仿真可复现接近动捕质量的角色技能。

数据集CMU MoCap
物理感知
实时
输入模态proprioception
📍 演进位置
建立在
  • RL locomotion
  • MoCap imitation
催生

论文:Peng, Abbeel, Levine(UC Berkeley); van de Panne(UBC). DeepMimic: Example-Guided Deep RL of Physics-Based Character Skills. ACM SIGGRAPH 2018 / ACM TOG 37(4), Article 143. arXiv:1804.02717. 🌐 · 代码:github.com/xbpeng/DeepMimic(C++/Python/Bullet)。

一句话直觉

让仿真人学动捕里的剧烈动作。

秘诀是每一步都对照参考里的某一帧。

DeepMimic 之于角色动画,像对着字帖学毛笔字。

不是闭眼发挥,而是每笔对照字帖。

是什么·为什么

要解决的问题:2018 年前,强化学习已经能让仿真人走、跑。

但生成的动作"丑且怪":上肢多余晃动、步态诡异。📎

问题根源是纯 task reward——只奖励前进速度、不摔倒。

这种信号太稀疏,策略找到的是"满足物理的任何解",不是"像人的解"。

老办法·一条:纯 task reward。

能走能跑,但动作丑。📎

老办法·另一条:kinematic 回放动捕。

动作好看,但不抗扰动、不与环境交互。

碰一下就崩。📎

DeepMimic 的转身:不再回放动捕,把它当参考。

每步都对齐参考里的某一帧。

reward 每步都对照参考里的某一帧,策略有了一条稠密信号。

再叠加 task 目标,得到"好看且可交互"的控制器。📎

DeepMimic 之于角色动画,就像对着字帖学毛笔字。

不是闭眼自由发挥(纯 task reward)。

而是每一笔都对照字帖(参考帧),写得既好看又有笔意。

方法核心(大白话):让仿真人学动捕里的剧烈动作(后空翻、踢腿、侧翻)。

每一步,reward 函数拿仿真人当前姿态和动捕里对应那一帧比一比。

比四样东西:关节角度、关节速度、手脚位置、质心位置。

四样都对齐才得高分。

pose(关节角度)占大头,所以学出来的动作整体骨架像人。📎

两个关键 trick

Trick 1·随机起点(RSI)。

每个 episode 开始时,不固定从动作起点开始。

而是从动捕里随机挑一帧作为初始状态。

没这个,后空翻永远学不出来。

策略学不会起跳,就永远碰不到"空中翻转"那一段的高 reward。

随机起点让策略一开始就常被扔到"空中翻转到一半",立刻能拿到高 reward。📎

Trick 2·早停(ET)。

一旦身体或头触地就立刻终止 episode,剩余时间 reward 全为 0。

不加这个,策略会躺地上"假装做动作"骗 reward。📎

结果:第一次让 RL 学会后空翻、踢腿、侧翻、头转等高动态技能。

之前 RL 只能走/跑,动态动作是手工控制器或回放的领域。📎

怎么做

核心机制·四件套

reference-state alignment(每步对照参考帧)+ RSI(随机起点)+ ET(早停)+ 多技能整合。📎

State s:每条 link 相对 root(pelvis)的位置、四元数旋转、线/角速度,全在角色局部坐标系。

再加一个 phase variable φ ∈ [0,1]φ=0 周期起点、φ=1 周期终点;cyclic motion 每周期 reset)。

任务里再加 goal g(如目标方向 2D 单位向量)。📎

Action a:不是 torque,是 PD controller 的目标朝向

spherical joint 用 axis-angle、revolute joint 用标量角。

这是关键设计:PD 把"低层阻尼/局部反馈"抽象掉,策略不必学底层控制。

策略以 30 Hz 查询。📎

精确 reward 公式(Sec.5.3)

每步总 reward 是 imitation 和 task 两项加权和:

$$r_t = 0.7\,r_t^I + 0.3\,r_t^G$$

权重 ω_I=0.7, ω_G=0.3 所有任务固定。

imitation reward 又分解为 4 个指数项,每项形如 exp(-c·||error||²)

r_I = 0.65·r_p + 0.1·r_v + 0.15·r_e + 0.1·r_c(inline 写法)。

权重 w_p=0.65, w_v=0.1, w_e=0.15, w_c=0.1(pose 占绝对大头)。

四项各自含义:pose 是关节方向匹配;velocity 是关节角速度匹配;end-effector 是手脚 3D 世界坐标匹配;CoM 是质心位置匹配。📎

RSI(Reference State Initialization)

每个 episode 开始时,固定从 motion 起点开始。

而是从参考 motion 里均匀随机采一帧状态作为初始状态。

论文明确把 RSI 描述为"reward 之外的第二条信息通道"。

参考 motion 既通过 reward(目标姿态)传信息,也通过初始状态分布(让策略先体验目标状态)传信息。📎

Early Termination(ET)

cyclic skill 训练时 episode 默认 20s。

一旦 torso/head 等关键 link 触地就立即终止,剩余时间 reward 全为 0。📎

两个论点:(1) reward shaping 的副效果——摔倒后躺地上"假装做动作"是 local optimum,ET 把这个 basin 砍掉。

(2) 类不平衡——没 ET 时早期训练数据 90% 是"地上挣扎"样本,ET 把数据分布 bias 到接近成功的样本。

Multi-skill integration(Sec.7,三种方案)📎

  1. Multi-Clip Reward:对 k 个 clip 各算 imitation reward 取 max。

策略自动学会"当前最像哪个 clip 就跟哪个",无需手工 kinematic planner。

  1. Skill Selector:goal 是 one-hot 向量指定要执行哪个 clip。
  2. Composite Policy(MACE-like):每个 clip 单独训一个子策略。

运行时用 value function 选当前最高分的执行。

常见误区(完整列表见本页末尾):"DeepMimic 的核心贡献是 PPO 吧?"

错。PPO 是现成的。

DeepMimic 的真正功臣是 reward 设计 + RSI + ET 三件套。

论文 ablation 明确:去掉 RSI 或 ET,大量动态技能学不出来。📎

深度

reward 各项精确公式(Sec.5.3,可直接复现)📎

含义公式(j 遍历 joint,e 遍历末端)系数 c
r_p pose关节方向匹配`exp(-2·Σ_jq̂_t^j ⊖ q_t^j²)`(⊖ 为四元数差,取标量旋转弧度)2
r_v velocity关节角速度匹配(finite difference 估)`exp(-0.1·Σ_jq̂̇_t^j - q̇_t^j²)`0.1
r_e end-effector手脚 3D 世界坐标匹配(米)`exp(-40·Σ_ep̂_t^e - p_t^e²)`40
r_c center-of-mass质心位置匹配`exp(-10·p̂_t^c - p_t^c²)`10

注意:pose 项是 sum-of-squared-joint-errors 再 exp(不是先平均)。

关节数越多该项对误差越敏感;系数 2 比较温和(σ²=0.5)。

end-effector 系数 40 很严(σ²=0.025 m²,1cm 偏差 reward 衰减到 exp(-0.4)≈0.67)——这是为了让手脚精确对齐。

task reward 示例(Target Heading,Sec.9)📎

$$r_t^G = \exp\!\left(-2.5\,\max(0,\; v^* - v_t^T d_t^*)^2\right)$$

只惩罚"速度不够",超过 v* 不罚。

RSI 为什么是必须的(论文用 backflip 举例)📎

若固定起点,策略必须先学会 jump 才能碰到"空中翻转"那一段的高 reward。

但学不会 jump 就永远碰不到——这是 deep RL 经典的 sparse-reward 探索陷阱。

RSI 让策略一开始就常被扔到"空中翻转到一半"的状态,立刻能拿到高 reward、学到"翻转到这一姿态是好的",再反推回起跳动作。

消融(Sec.10.4 + Fig.11)📎

  • 去掉 ET 后大量 skill 学不出来。
  • 去掉 RSI 后 backflip 等"长飞行相位"动作收不到正确 basin,策略只能学到"原地小跳"。
  • 这两个 trick 是 DeepMimic 能学动态技能的真正功臣,而非 PPO 本身

网络与训练(Sec.5.2 + Appendix)📎

  • Policy/Value 都是 2 层 FC,1024 → 512,ReLU,线性输出。
  • policy 输出高斯 N(μ(s), Σ)Σ固定对角协方差(不学习)。
  • 视觉任务(terrain heightmap):CNN(16 个 8x8 → 32 个 4x4 → 32 个 4x4)→ 64 FC,再与 state 拼接。
  • PPO 超参(Appendix):minibatch 256,batch 4096;γ=0.95GAE/TD λ=0.95;PPO clip ε=0.2;value stepsize 10⁻²;policy stepsize 5×10⁻⁵(humanoid/Atlas)、2×10⁻⁵(dragon/T-Rex);SGD momentum 0.9。
  • 物理:Bullet,1.2 kHz;policy 30 Hz。
  • 算力:单 humanoid skill 约 60M samples,8-core CPU 约 2 天,GPU

局限

  1. 必须时间对齐:每一步都要对照参考的第 t 帧,策略不能自由改变节奏。面对地形扰动时无法 adapt 步频(AMP 解决)。📎
  2. 一个 clip 一个 policy:扩展到大量技能需要 multi-clip reward 或 composite policy,skill selector 只能学少量技能(实际 <10)。
  3. 依赖高质量 retargetMoCap 要手工 retarget 到角色骨架,T-Rex/dragon 没数据只能用 artist keyframe。
  4. 摔倒难恢复:偏离参考就被惩罚;robust to perturbation 能扛 720N·0.2s 推力(run),但跌倒后的 getup 需要单独训。
  5. CPU-only、单机 2 天/skill:效率上被 Isaac Gym + AMP 之后的工作大幅超越。

研究者视角

图谱定位:DeepMimic 是 T04 motion prior 线索的起点(reference-state alignment 范式),也是 T12 agile locomotion 的共同起点。📎

它把"物理角色动画"从 control theory 拉到 deep RL 阵营。

奠定 reference-state alignment 范式:之后所有"逐帧跟踪 MoCap"的工作(PHC、UHC、OmniH2O、ExBody、HumanPlus、BeyondMimic)reward 设计本质都是 exp(-||x - x_ref||²/σ²) 模板的变体。

建立在

  • PPO(Schulman et al. 2017)
  • MACE(Peng et al. 2016,composite policy 思路)
  • Tan et al. 2017(仿真 locomotion)

直接引出

  • AMP(Peng et al. 2021, arXiv:2104.02180):解掉 DeepMimic 的三个硬伤(必须时间对齐、鲁棒性差、单风格),把模仿从"状态对齐"升级到"分布对齐"。🌐
  • DeepMimic-style reward 成为 humanoid RL 标准(PHC/UHC/OmniH2O/HumanPlus/BeyondMimic 全沿用)。

可以说没有 DeepMimic 就没有 AMP。

Open problems

  1. 时间对齐的刚性:每步对照参考第 t 帧,策略不能改节奏。

AMP 用 distribution matching 解掉,但带来对抗训练的新问题。[未确认]

  1. 跨 clip 技能扩展:skill selector 实际只能学 <10 个技能。

大规模技能库要靠 ASE/BFMlatent skill 方向。[未确认]

  1. 摔倒恢复:偏离参考就被惩罚,恢复行为有限。

能否学一个统一的 get-up controller,仍开放。[未确认]

常见误区

"DeepMimic 的核心贡献是 PPO" —— 错。

PPO 是现成的,DeepMimic 没改 RL 算法。

真正的功臣是 reward 设计 + RSI + ET 三件套。

论文 ablation 明确:去掉 RSI 或 ET,大量动态技能学不出来。

DeepMimic 是 reward engineering + exploration trick 的胜利,不是算法创新。📎

"RSI 只是数据增强" —— 错。

论文明确把 RSI 描述为"reward 之外的第二条信息通道"。

数据增强是"多看些初始状态";RSI 是"让策略先体验目标状态,反推起跳动作"。

RSI 解决的是 sparse-reward 探索陷阱,不是泛化问题。📎

"reward 只看 pose" —— 错。

pose/velocity/end-effector/CoM 四项加权,pose 占 65% 但不是唯一。

end-effector 系数 40(最严)确保手脚精确对齐。

四项各有侧重,pose 给骨架,end-effector 给手脚位置,CoM 给整体重心。📎

"DeepMimic 不需要 retarget" —— 错。

MoCap 要手工 retarget 到角色骨架。

T-Rex/dragon 没有对应 MoCap,只能用 artist keyframe。

retarget 是 DeepMimic 的工程门槛之一,限制了能学的角色种类。📎

检查点

Q1

2018 年前的 RL 已经能让仿真人走跑了,为什么生成的动作还那么丑?问题根源在哪?

💡 参考答案

  • 根源:纯 task reward(只奖励前进速度、不摔倒)信息太稀疏。
  • 稀疏的后果:策略找到的是『满足物理约束的任何解』,不一定是『像人的解』——上肢多余晃动、步态诡异都属于这一类。
  • 关键区分:问题不在算法(PPO)而在 reward 设计——纯 task reward 没告诉策略『要像人』。
Q2

用"对着字帖学毛笔字"或你自己举的类比,用自己的话解释:DeepMimic 是怎么让仿真人学会像人的剧烈动作的?

💡 参考答案

  • 对着字帖学毛笔字:不是闭眼自由发挥(纯 task reward),而是每一笔都对照字帖里的某一笔(参考帧)——每一笔对齐才有分。
  • 映射:『字帖』= 动捕数据;『每一笔对照字帖』= reward 每一步都拿仿真人姿态和动捕里对应那一帧比一比,关节角度/速度/手脚位置/质心位置四样对齐才得高分。
  • 关键补充:DeepMimic 不是回放动捕(字帖不是描红透写),而是『参考着对齐』——策略自由探索动作,但 reward 引导它越走越像字帖。
Q3

DeepMimic 的 reward 函数有四项加起来(pose 占大头)。除了 pose(关节角度对齐),还有什么?为什么不能只看 pose?

💡 参考答案

  • 其它三项:velocity(关节角速度匹配)、end-effector(手脚 3D 世界坐标匹配)、CoM(质心位置匹配)。
  • 为什么不能只看 pose:pose 只保证某一刻关节角度对,但不保证动作流畅(velocity)、不保证手脚在正确位置(end-effector)、不保证整体重心对(CoM)。
  • 举例:pose 对但手脚位置错,或速度不连续——动作会顿挫或位置漂移;多维 reward 才能逼出『既好看又自然』的动作。
Q4

DeepMimic 用了两个关键 trick:RSI(随机起点)和 ET(早停)。挑一个解释它是干什么的、为什么必须要有。

💡 参考答案

  • RSI(Reference State Initialization,随机起点):每个 episode 开始时,从动捕里随机挑一帧作为初始状态,而不是固定从动作起点开始。必须有的原因:固定起点时,策略学不会起跳就永远碰不到『空中翻转』那一段的高 reward(sparse reward 探索陷阱)——典型例子是后空翻;RSI 让策略一开始就常被扔到『空中翻转到一半』,立刻能拿到高 reward,再反推起跳动作。
  • ET(Early Termination,早停):一旦身体或头触地就立刻终止 episode,剩余时间 reward 全为 0。必须有的原因:没 ET 时策略会躺地上『假装做动作』骗 reward(local optimum);ET 直接把这个 basin 砍掉,逼策略学会真正的动作。
  • 关键:两个 trick 都是 reward 之外的工程手段——RSI 解决探索,ET 解决 reward hacking。论文 ablation 明确:去掉任一个大量动态技能学不出来。
Q5

DeepMimic 是 AMP 的直接前作。AMP 解决了 DeepMimic 的哪个最大痛点?(提示:想想"时间对齐"。)

💡 参考答案

  • DeepMimic 的最大痛点:必须时间对齐——每一步都要对照参考的第 t 帧,策略不能自由改变节奏。
  • 后果:面对地形扰动时无法 adapt 步频;一个 clip 只能训一个动作风格;节奏不能自由发挥。
  • AMP 的解法:用判别器做 distribution matching(分布对齐),不再要求逐帧对齐——策略只要整体分布像人就得分,节奏可以自由。

FAQ

Q1:必须有动捕数据吗?

大部分技能需要 MoCap。

MoCap 是给真人穿感应衣录下的动作数据。

T-Rex/dragon 没有对应 MoCap,可以用 artist keyframe 替代。

无论哪种都需要手工 retarget 到角色骨架。📎

Q2:一个 clip 训一个 policy 还是多个?

原版 DeepMimic 默认一个 clip 一个 policy。

要学多个技能可以用三种 multi-skill 方案:multi-clip reward(取 max)、skill selector(one-hot 指令)、composite policy(MACE-like)。

实际 skill selector 能学 <10 个技能。📎

Q3:为什么用 PD 目标角度而不是直接输出 torque?

PD 把"低层阻尼/局部反馈"抽象掉。

策略不必学底层控制,只需指定"想到达什么姿态"。

PD controller 自己算 torque 让角色朝目标姿态去。

这让策略学习更稳定、收敛更快。📎

Q4:需要多少算力?

单 humanoid skill 约 60M samples。

8-core CPU 约 2 天,无 GPU

Bullet 物理引擎 1.2 kHz,policy 30 Hz。

效率上被 Isaac Gym + AMP 之后的工作大幅超越。📎

Q5:真机用了吗?

没有。DeepMimic 是纯仿真工作(Bullet)。

真机部署需要 sim2real 等额外步骤。

DeepMimic 的贡献在动画与控制器,不是真机。📎