Q1:必须有动捕数据吗?
大部分技能需要 MoCap。
MoCap 是给真人穿感应衣录下的动作数据。
T-Rex/dragon 没有对应 MoCap,可以用 artist keyframe 替代。
无论哪种都需要手工 retarget 到角色骨架。📎
论文: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,三种方案)。📎
策略自动学会"当前最像哪个 clip 就跟哪个",无需手工 kinematic planner。
运行时用 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·Σ_j | q̂_t^j ⊖ q_t^j | ²)`(⊖ 为四元数差,取标量旋转弧度) | 2 | ||
r_v velocity | 关节角速度匹配(finite difference 估) | `exp(-0.1·Σ_j | q̂̇_t^j - q̇_t^j | ²)` | 0.1 | ||
r_e end-effector | 手脚 3D 世界坐标匹配(米) | `exp(-40·Σ_e | p̂_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):📎
网络与训练(Sec.5.2 + Appendix)。📎
N(μ(s), Σ),Σ 是固定对角协方差(不学习)。γ=0.95;GAE/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。局限:
图谱定位: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||²/σ²) 模板的变体。
建立在:
直接引出:
可以说没有 DeepMimic 就没有 AMP。
Open problems:
AMP 用 distribution matching 解掉,但带来对抗训练的新问题。[未确认]
大规模技能库要靠 ASE/BFM 等 latent skill 方向。[未确认]
能否学一个统一的 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 的工程门槛之一,限制了能学的角色种类。📎
2018 年前的 RL 已经能让仿真人走跑了,为什么生成的动作还那么丑?问题根源在哪?
💡 参考答案
用"对着字帖学毛笔字"或你自己举的类比,用自己的话解释:DeepMimic 是怎么让仿真人学会像人的剧烈动作的?
💡 参考答案
DeepMimic 的 reward 函数有四项加起来(pose 占大头)。除了 pose(关节角度对齐),还有什么?为什么不能只看 pose?
💡 参考答案
DeepMimic 用了两个关键 trick:RSI(随机起点)和 ET(早停)。挑一个解释它是干什么的、为什么必须要有。
💡 参考答案
DeepMimic 是 AMP 的直接前作。AMP 解决了 DeepMimic 的哪个最大痛点?(提示:想想"时间对齐"。)
💡 参考答案
大部分技能需要 MoCap。
MoCap 是给真人穿感应衣录下的动作数据。
T-Rex/dragon 没有对应 MoCap,可以用 artist keyframe 替代。
无论哪种都需要手工 retarget 到角色骨架。📎
原版 DeepMimic 默认一个 clip 一个 policy。
要学多个技能可以用三种 multi-skill 方案:multi-clip reward(取 max)、skill selector(one-hot 指令)、composite policy(MACE-like)。
实际 skill selector 能学 <10 个技能。📎
单 humanoid skill 约 60M samples。
8-core CPU 约 2 天,无 GPU。
Bullet 物理引擎 1.2 kHz,policy 30 Hz。
效率上被 Isaac Gym + AMP 之后的工作大幅超越。📎