⏱ ~26 min
里程碑
⭐ 为何重要

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

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

P-DeepMimic-2018 · Example-Guided Deep RL of Physics-Based Character Skills

作者 / 机构:Xue Bin Peng, Pieter Abbeel, Sergey Levine (UC Berkeley); Michiel van de Panne (UBC)
发表:ACM SIGGRAPH 2018 / ACM TOG 37(4), Article 143
arxiv:1804.02717 · 代码github.com/xbpeng/DeepMimic(C++/Python,Bullet) · 项目页xbpeng.github.io/projects/DeepMimic/
在线索中的位置:T04 (motion prior) 与 T12 (agile locomotion) 的共同起点;AMP 的直接前作,奠定「reference-state alignment」范式。
一句话定位:第一篇用 RL + MoCap 学会 backflip/spinkick/cartwheel 等高动态技能的工作——核心贡献不是算法(PPO)而是 reward 设计 + RSI + early termination 三件套,从此物理角色动画进入「数据驱动 + RL」时代。


动机

2018 年前,deep RL 已经能在仿真里学到走、跑(Heess et al. 2017 等),但生成的动作"丑且怪":上肢多余晃动、步态诡异、姿态不自然。问题根源是纯 task reward(前进速度、不摔倒)信息太稀疏policy 找到的是"满足物理约束的任何解",不一定是"像人的解"。

同时,kinematic 方法(直接回放动捕)虽然动作好看,但不抗扰动、不与环境交互。DeepMimic 的洞察:把 MoCap 从"被回放的目标姿态"升级为"被对齐的参考状态",让 reward 每一步都对照参考,policy 就有了一条精细的稠密信号;再叠加上 task objective(如指定方向走),就能得到"好看且可交互"的控制器。这其实是对 [Peng et al. 2016](MACE)思路的深度化与大规模化。

方法核心

以下细节全部来自 PDF 正文 Sec.5–7 + Appendix(页码 143:4143:7143:15143:16)。

1. 状态、动作、参考

  • State $s$:每条 link 相对 root(pelvis)的位置、四元数旋转、线/角速度,全部在角色局部坐标系(root 在原点,x 轴朝 facing 方向)。再加一个 phase variable $\phi \in [0,1]$($\phi=0$ 周期起点、$\phi=1$ 周期终点;cyclic motion 每周期 reset)。任务里再加 goal $g$(如目标方向 2D 单位向量)。
  • Action $a$:不是 torque,而是 PD controller 的目标朝向——spherical joint 用 axis-angle、revolute joint 用标量角。这是关键设计:PD 把"低层阻尼/局部反馈"抽象掉,policy 不必学底层控制。policy 以 30 Hz 查询。
  • 参考 motion $\{\hat{q}_t\}$:MoCap(CMU/SFU)或 artist keyframe(T-Rex/dragon 没有 MoCap),手工 retarget 到角色。

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

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

$$r_t = \omega^I r_t^I + \omega^G r_t^G, \quad \omega^I = 0.7,\ \omega^G = 0.3\ \text{(所有任务固定)}$$

imitation reward 又分解为 4 个指数项,每项形如 $\exp(-\|\cdot\|^2 / \sigma^2)$(论文写成 $\exp(-c\|\cdot\|^2)$,$c = 1/\sigma^2$):

$$r_t^I = w^p r_t^p + w^v r_t^v + w^e r_t^e + w^c r_t^c$$

权重 $w^p = 0.65,\ w^v = 0.1,\ w^e = 0.15,\ w^c = 0.1$(pose 占绝对大头)。各项精确公式(论文 Sec.5.3):

含义公式($j$ 遍历所有 joint,$e$ 遍历末端)系数 $c$
$r_t^p$ pose关节方向匹配$\exp\!\left(-2 \sum_j \lVert\hat{q}_t^j \ominus q_t^j\rVert^2\right)$($\ominus$ 为四元数差,取 scalar rotation in rad)2
$r_t^v$ velocity关节角速度匹配(finite difference 估)$\exp\!\left(-0.1 \sum_j \lVert\dot{\hat{q}}_t^j - \dot{q}_t^j\rVert^2\right)$0.1
$r_t^e$ end-effector手脚 3D 世界坐标匹配(米)$\exp\!\left(-40 \sum_e \lVert\hat{p}_t^e - p_t^e\rVert^2\right)$40
$r_t^c$ center-of-mass质心位置匹配$\exp\!\left(-10 \lVert\hat{p}_t^c - p_t^c\rVert^2\right)$10

注意:pose 项是 sum-of-squared-joint-errors 再 exp(不是先平均),所以关节数越多该项对误差越敏感;系数 2 比较温和($\sigma^2 = 0.5$)。end-effector 系数 40 很严($\sigma^2 = 0.025 \text{m}^2$,1cm 偏差 reward 衰减到 $\exp(-0.4) \approx 0.67$),这是为了让手脚精确对齐。

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

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

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

3. RSI(Reference State Initialization)—— 探索的关键 trick

每个 episode 开始时,固定从 motion 起点开始,而是从参考 motion 里均匀随机采一帧状态作为初始状态(PDF Sec.6.1)。论文用 backflip 举例说明为什么这是必须的:

  • 若固定起点,policy 必须先学会 jump 才能碰到"空中翻转"那一段的高 reward。但学不会 jump 就永远碰不到,所以永远学不会翻转——这是 deep RL 经典的 sparse-reward 探索陷阱。
  • RSI 让 policy 一开始就常被扔到"空中翻转到一半"的状态,立刻能拿到高 reward、学到"翻转到这一姿态是好的",再反推回起跳动作。

论文明确把 RSI 描述为"reward 之外的第二条信息通道":参考 motion 既能通过 reward(目标姿态)也能通过 initial state distribution(先让 policy 体验目标状态)传递信息。

4. Early Termination(ET)—— 类不平衡的解药

cyclic skill 训练时 episode 默认 20s。一旦 torso/head 等关键 link 触地就立即终止,剩余时间 reward 全为 0(PDF Sec.6.2)。论文两个论点:

  1. reward shaping 的副效果:摔倒后躺地上"假装做动作"是 local optimum(reward 还能拿一半),ET 直接把这个 basin 砍掉。
  2. 类不平衡:没 ET 时,早期训练数据 90% 是"地上挣扎"样本,网络容量被浪费在建模这些无效状态。ET 等于把数据分布 bias 到"接近成功的样本",类似监督学习里的重采样。

消融(Sec.10.4 + Fig.11):去掉 ET 后大量 skill 学不出来;去掉 RSI 后 backflip 等"长飞行相位"动作收不到正确 basin,policy 只能学到"原地小跳"。这两个 trick 是 DeepMimic 能学动态技能的真正功臣,而非 PPO 本身。

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

(1) Multi-Clip Reward:$r_t^I = \max_{j=1..k} r_t^{I,j}$,对 $k$ 个 clip 各算 imitation reward 取 max。policy 自动学会"当前最像哪个 clip 就跟哪个",可在 clip 间切换,无需手工 kinematic planner(区别于 Peng 2017a)。

(2) Skill Selector:goal $g_t$ 是 one-hot 向量指定要执行哪个 clip,policy 学一个能按指令切换技能的统一控制器。每个 cycle 开始随机采 $g_t$。

(3) Composite Policy(MACE-like):每个 clip 单独训一个 $(\pi^i, V^i)$,运行时用 value function $V^i(s)$ 选当前最高分的子 policy 执行。适合 skill 数量大、单 policy 学不过来的场景。

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

  • Policy/Value 都是 2 层 FC,1024 → 512,ReLU,线性输出;policy 输出高斯 $\mathcal{N}(\mu(s), \Sigma)$,$\Sigma$ 是固定对角协方差(不学习)。
  • 视觉任务(terrain heightmap):CNN(16 个 8x8 → 32 个 4x4 → 32 个 4x4)→ 64 FC,再与 state 拼接进主网络。
  • PPO 超参(Appendix,全角色共用除 stepsize):minibatch 256,每次 4096 samples;$\gamma=0.95$;GAE/TD $\lambda=0.95$;PPO clip $\epsilon=0.2$;value stepsize $10^{-2}$;policy stepsize $5\times 10^{-5}$(humanoid/Atlas)、$2\times 10^{-5}$(dragon/T-Rex);SGD momentum 0.9。
  • 物理:Bullet,1.2 kHz;policy 30 Hz。
  • 算力:单 humanoid skill 约 60M samples,8-core CPU 约 2 天,GPU

为什么重要

  1. 奠定 reference-state alignment 范式:之后所有"逐帧跟踪 MoCap"的工作(PHC、UHC、OmniH2O、ExBody、HumanPlus、BeyondMimic)reward 设计本质都是这个 $\exp(-\|x-x^{ref}\|^2/\sigma^2)$ 模板的变体。
  2. 首次让 RL 学会 backflip/spinkick/cartwheel/headspin 等高动态技能:之前 RL 只能学到 walk/run,动态动作是手工控制器或 kinematic 回放的领域。这把"物理角色动画"从 control theory 拉到 deep RL 阵营。
  3. 揭示了 RSI/ET 的重要性:这两个 trick 看起来工程性,但论文用 ablation 明确证明没有它们就学不出动态技能。后续 AMP/PHC/UHC/HOVER 全部继承。
  4. 是 AMP 的直接前作:AMP 论文开篇就是"DeepMimic 留下三个硬伤(必须时间对齐、鲁棒性差、单风格)",AMP 用 distribution matching 解掉这三个问题。可以说没有 DeepMimic 就没有 AMP。

局限

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

复现要点

基于 PDF Sec.5–7 + Appendix 的精确数字,可直接落地

  • reward 4 项系数 $c$:pose=2, velocity=0.1, end-effector=40, CoM=10;权重 $w^p=0.65, w^v=0.1, w^e=0.15, w^c=0.1$;$\omega^I=0.7, \omega^G=0.3$。
  • action = PD 目标角度(不是 torque),spherical joint 用 axis-angle。
  • 必须实现 RSI:每 episode 从参考 motion 随机采一帧初始化。没有 RSI 几乎学不出 backflip/frontflip/spinkick 等 long-flight-phase 动作(ablation 明确)。
  • 必须实现 ET:torso/head 触地立刻终止,剩余 reward 全置 0。
  • 网络极简:1024-512 FC + ReLU,不需要更复杂。
  • PPO clip 0.2(不是 AMP 那种 0.02),$\gamma=0.95$,$\lambda=0.95$,minibatch 256 / batch 4096。
  • 物理 1.2 kHz / policy 30 Hz:这是 Bullet 配置;Isaac Gym 实现可调到 200 Hz 仿真 + 50 Hz policy 仍能学。
  • 起点:原仓库 xbpeng/DeepMimic(C++/Python/Bullet,最忠实但工程旧);Isaac Gym 实现可参考 real-stanford/dex_pdtZhiwenZhao42/Humanoid-Gym 里的 DeepMimic-style reward。
  • 常见坑:(1) pose reward 用四元数差取 scalar 部分,不是直接四元数相减;(2) end-effector 是世界坐标不是局部坐标,要先转到世界系;(3) phase variable 必须包含在 state 里,否则 policy 不知道当前在 clip 哪个位置。

相关

  • 建立在: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-style reward 成为 humanoid RL 标准(PHC/UHC/OmniH2O/HumanPlus/BeyondMimic 全沿用)。
  • 本仓库笔记交叉引用
  • T04-motion-prior-amp-to-bfm.md(DeepMimic 是 reference-state 起步,转折 1)
  • T12-agile-locomotion.md(高动态技能 tracking 起点)
  • T03-reward-design-evolution.md(motion-prior reward 演化)
  • P-AMP-2021.md(直接后继,本笔记多次对照)