Q1:PHC 和 UHC 是同一篇论文吗?
不是。PHC 是 ICCV 2023 论文(arXiv 2305.06456),讲第一个无外力覆盖 98.9% AMASS 的 controller。
UHC/PULSE 是 ICLR 2024 续作(arXiv 2310.04582),把 PHC 升级到 100% 并蒸馏成 latent space。
注意:UHC 旧版(2023.02)是另一篇会议文,是 PHC 的 baseline(带 RFC)。🌐
论文:Luo, Cao, Winkler, Kitani, Xu. Perpetual Humanoid Control (PHC),ICCV 2023;arXiv:2305.06456。🌐 续作 Universal Humanoid Motion Representations (UHC/PULSE),ICLR 2024;arXiv:2310.04582。本页统一讲两篇——PHC 是基座 controller,UHC/PULSE 是它的升级 + 蒸馏。
让仿真人形学会模仿几乎所有人类动作。
跌倒了还能爬起来。
秘诀是分阶段加码训练 + 一个按难度投票的总指挥。
PHC 之于 humanoid 控制,就像老匠人带徒弟。
一个师傅教不动,就请下一位按难度分工。
要解决的问题:让人形 policy 模仿大规模人类动捕数据 AMASS。
AMASS 有 1 万多段、40 多小时动作。
到 2023 年初,单 policy 在整个 AMASS 上高保真模仿没人做到。📎
老办法的痛点:之前的方法用"上帝之手"。
就是在仿真里加一个额外的外力把人形 puppet 起来。
能 cover 97% AMASS,但力破坏物理真实感。
人形会飞、漂浮、甩来甩去。
还有的 policy 一跌倒就 reset。
没法用 webcam 实时驱动 avatar。📎
PHC 的转身:不用外力,单 policy 覆盖 98.9% AMASS。
而且自带 fall recovery——跌倒了能自然爬起来。📎
关键三件套:分阶段训练、AMP 判别器、跌倒降级。
方法核心(大白话):分阶段加码训练 + 总指挥投票。
Step A 训第一个 primitive P1。
P1 在整个数据集训到收敛。
总有一些"难 clip"它学不会。
Step B 把 P1 冻结,新初始化 P2。
P2 只在那些难 clip 上训。
P2 还学不会的更难 clip,再开 P3 训。
最后开一个 P_F。
它专门处理"跌倒/faraway"三类失败态。
不学逐关节模仿,只学"爬起来走到参考 root 位置"。
Step C 训一个 composer 网络。
它看当前状态,输出每个 primitive 的权重。
所有 primitive 同时激活。
按权重投票决定最终动作。
权重高的 primitive 主导这一步的动作。
reward 三件套:模仿、AMP、energy。
模仿 reward 衡量"和参考姿态有多近"。
AMP 判别器是关键——跌倒姿态在动捕里没有。
AMP 仍能约束"爬起来的动作像人"。
energy 惩罚防 policy 抖脚。📎
跌倒降级:三类失败态——躺在地上、偏离参考太远、两者组合。
触发时 goal 从"逐关节模仿"降级成"point-goal 导航"。
意思是只跟踪 root 的位置和朝向,其他关节 goal 全部置零。
P_F 只在 locomotion 子集上训,让 AMP 偏简单分布。📎
UHC/PULSE 的升级:
PHC 是 98.9%。
UHC(PHC+)清洗脏数据 + 改训练节奏,拉到 100%。🌐
PULSE 把 PHC+ 的 motor skill 蒸馏成一个 latent。
下游任务不再需要从零训,也不需要对抗学习。
直接在 latent space 上做 RL 就能产生自然动作。
一句话类比:PHC 之于 humanoid 控制,就像老匠人带徒弟。
一个师傅教不动,就请下一位按难度分工。
composer 是总指挥,按当前任务的难度投票决定听谁的。
跌倒降级是"先别学跑步,先爬回起点"。
你会看到:单 policy 无外力覆盖 98.9% AMASS。
PHC+ 升级到 100%。
PULSE latent 让下游任务零对抗学习复用 motor skill。
后续 OmniH2O、HOVER 都依赖 PHC 的 recovery 机制。📎
核心机制·三件套。📎
PMCP(Progressive Multiplicative Control Policy):📎
Multiplicative Control Policy(MCP)的合并方式:所有 primitive 同时激活。
按权重相乘 policy 分布。
不是 MoE 的 top-1 选一个。
是"top-inf MoE"——所有 primitive 都参与。
合并后是高斯。
mean 和 variance 都按权重加权。📎
reward 公式(Eq. 1):📎
$$r_t = 0.5\,r^g_t + 0.5\,r^\text{amp}_t + r^\text{energy}_t$$
读法:三项相加。
第一项 r^g 是模仿 reward。
含 joint position / rotation / linear vel / angular vel 四项指数加权和。
第二项 r^amp 是 AMP 判别器 reward。
10 帧窗口的 proprioception 判别。
第三项 r^energy 是 energy 惩罚。
系数 -0.0005,关节扭矩乘角速度求和。
精确 imitation reward 权重(PHC 附录 hyperparameter 表):📎
joint position 权重 0.5。
joint rotation 0.3。
linear vel 0.1。
angular vel 0.1。
三类失败态 + point-goal 降级(Eq. 3):📎
P_F 的 trick:fail-state 下屏蔽非 root 的参考信息。
$s^g$ 只保留 root 的位置和朝向,非 root 关节 goal 全部置 identity。
这把目标从"逐关节 imitation"降级成 point-goal navigation。
P_F 的 reward 是 point-goal + AMP + energy(Eq. 4)。
关键工程细节·Relaxed Early Termination(RET):📎
UHC 旧的终止条件是所有关节离参考 > 0.5 m 就 reset。
PHC 发现 ankle/toe 关节因仿真脚和真人多段脚 dynamics mismatch 硬跟会失衡。
所以把 ankle 和 toe 移出 termination 条件。
imitation/discriminator reward 仍保留这些关节,防动作不人类。
这个小细节对成功率影响显著。
PULSE 的 latent space 蒸馏(UHC,Sec. 4):🌐
encoder-decoder + learnable prior 三件套。
encoder 把状态压成 latent z。
decoder 从 z 还原 action。
prior 是 conditioned on proprioception 的 learnable 分布(不是 VAE 的零均值高斯)。
loss 是 PHC+ action 的 L2 回归 + latent 平滑 + KL。
下游任务 action 是 residual 到 prior mean,固定 variance 0.22。
latent dim = 32(约 humanoid DoF 69 的一半)。
常见误区(先抛一个):以为"98.9% AMASS"意味着 PHC 能生成 100% 想得到的人形动作。
错。
PHC 是 tracker——只能模仿参考动作,不是 generative model。
"100% 覆盖"指能模仿 100% AMASS,不是能生成 AMASS 之外的新行为。📎
PHC 的 goal state 构成:📎
goal state $s^g_t$ 是参考姿态和当前姿态的差。
含 root rotation $\hat\theta_{t+1}\ominus\theta_t$、translation、linear/angular velocity 等。
action $a_t \in \mathbb{R}^{23\times 3}$ 是 SMPL 23 个 actuated joint 的 PD target。
关键决定:$q^d_t = a_t$,完全移除对参考的依赖。
之前方法用 $q^d_t = \hat q_t + a_t$(参考 + 残差),但 PHC 直接用 action 当 PD target——这才能处理 noisy/ill-posed reference。
网络架构:📎
所有 discriminator/primitive/value/composer 网络 2 层 MLP [1024, 512]。
primitive 输出 Gaussian action。
PULSE 的 encoder/decoder/prior 是 3 层 MLP,policy/primitive 是 6 层 MLP。
discount 0.99。Isaac Gym 仿真,SMPL 24 rigid body(23 actuated)结构,$\beta \in \mathbb{R}^{10}$ body shape。
*实验·PHC vs UHC+RFC(Table 1,AMASS-Train)**:📎
UHC/PULSE 的实验:🌐
应用 demo:webcam 30 fps 实时驱动多 avatar。
OCSort 多人追踪 + Gaussian filter 平滑。
in-betweening 用 PHC 的 recovery 能力填补 MDM 生成的 disjoint 片段。📎
为什么 AMP 对 fall recovery 关键:跌倒姿态在 MoCap 里没有。
纯 imitation reward 在 fail-state 没参考可比。
AMP 判别器从所有 MoCap 里学了"动作整体分布像人"的标准。
所以爬起来的动作虽没逐帧参考,但仍被约束"像人"。📎
局限:
图谱定位:PHC/UHC 是 T04 motion prior 线索的转折 4。📎
是 BFM(2025)的直接前身——把 ASE/CALM 的"技能库"升级成"单 policy 覆盖全 AMASS"。
PHC 干净地移除了"上帝之手"residual force,让物理仿真人形从"demo"走向"基础设施"。
PULSE 是第一个真正 universal 的 motion latent space,是 BFM "motor foundation" 概念的雏形。
演化谱系:
副产品:
Open problems:
能否压回单 policy 且保留 100% 覆盖?BFM 给了部分答案但未完全解决。[未确认]
能否让 latent 既 universal 又可按"走路/踢/跳"寻址?CALM 路线的开放问题。
到四足、灵巧手的迁移需要重新设计。[未确认]
BFM 走向 generative,但是否能保持 PHC 的物理真实性仍是开放问题。
"PHC 解决了 humanoid 控制问题" —— 部分错。
PHC 解决的是"单 policy 无外力覆盖全 AMASS + fall recovery"。
它不解决 task goal、不解决真机部署(要 retarget)、不解决 generative。
PHC 是 motion tracker + latent foundation,不是 end-to-end robot controller。📎
"98.9% 意味着能生成 98.9% 的人形动作" —— 错。
98.9% 指"能模仿 98.9% 的 AMASS clip"。
PHC 是 tracker,需要参考动作做输入。
不是 generative model。📎
"PMCP 是 MoE(mixture of experts)" —— 不准确。
MoE 通常是 top-1 选一个 expert。
PMCP 是 top-inf:所有 primitive 同时激活,按权重相乘 policy 分布。
composer 输出权重不是 hard 选一个。📎
"PULSE latent 维度是 64–128" —— 错。
论文 §5.1 明确 latent dim = 32(约 humanoid DoF 69 的一半)。
32 维是经验最优,更高 latent 维度下游 RL 探索失败。🌐
"PHC 主模型用 5+ primitive" —— 不准确。
PHC 主模型 §5.1 实际是 4 个 primitive(含 $P^{(F)}$)。
消融 §C 测了 2–8 个。
UHC/PHC+ 改进后只用 3 个(含 $P^{(F)}$)就到 100%。📎
PHC 训练时一个 primitive 不够,要开 P2、P3……最后还有个 P_F。每个新 primitive 训什么数据?P_F 又为什么和别的 primitive 不一样?
💡 参考答案
PHC 的 reward 三件套是什么?AMP 判别器在 fall recovery 这种"动捕里没有的姿态"上为什么还能起作用?
💡 参考答案
用"老匠人带徒弟——一个师傅教不动就请下一位按难度分工"或自己举的类比,用自己的话解释 PMCP 是怎么工作的。
💡 参考答案
PHC 的 P_F 在三类失败态下,把目标从"逐关节模仿"降级成什么?为什么要降级?
💡 参考答案
PHC 的 composer 决定动作时,是像传统 MoE 那样"选一个 primitive 用",还是别的方式?请用话描述。
💡 参考答案
不是。PHC 是 ICCV 2023 论文(arXiv 2305.06456),讲第一个无外力覆盖 98.9% AMASS 的 controller。
UHC/PULSE 是 ICLR 2024 续作(arXiv 2310.04582),把 PHC 升级到 100% 并蒸馏成 latent space。
注意:UHC 旧版(2023.02)是另一篇会议文,是 PHC 的 baseline(带 RFC)。🌐
不能直接用。
PHC 在 SMPL 仿真结构上训,retarget 到真机人形还需额外工作。
OmniH2O 才补上这一步——把 PHC 当 motor policy,VR/RGB 驱动 Unitree H1 真机。📎
hard-negative mining 是把难 clip 加权重新训同一个 policy。
PMCP 是冻结已学好的 primitive,新 primitive 专攻难 clip——抗 catastrophic forgetting。
加上 composer 平滑过渡,比单一 policy 反复"学新的忘旧的"稳得多。📎
作者试过。
RL-only 训不出好 latent(探索噪声大)。
RL + supervised 混合反而更差(RL 噪声污染 latent)。
所以 PULSE 完全 supervised distillation,硬约束在 PHC+ 的 action 分布上。🌐
高。
PHC 复现 1–2 个月(数据清洗 + 多 primitive 训练 + composer)。
PULSE distillation 再 2–3 周。
代码已开源(项目页 zhengyiluo.github.io/PHC/),是直接起点。🌐