1. 人形模仿学习到底在解决什么问题
第一次接触人形模仿学习的人,脑子里冒出来的问题通常很朴素:为什么不让机器人直接学走路,非要先让它“看别人走”?这个疑问恰好戳中了这个方向最核心的痛点。人形机器人的自由度动辄二三十个,关节之间强耦合,一个简单的迈步动作背后是髋、膝、踝十几个电机的时序配合。如果从零开始用强化学习去探索,奖励信号稀疏得可怜——机器人可能在地上扭半天也拿不到一分,训练效率低到让人怀疑人生。
模仿学习的思路是把这件事反过来做:先给机器人看一段人类走路的动作数据,让它去“模仿”这段轨迹。动作数据本身就是稠密的监督信号,每一步都有明确的目标姿态,学习难度瞬间从“大海捞针”变成“照着描红”。这就是人形模仿学习最本质的价值——用参考动作把稀疏奖励问题转化成轨迹跟踪问题。
围绕这个核心思路,业界演化出了几条技术路线,热搜词里出现的DeepMimic、AMP、teacher-student、VQVAE基本覆盖了当前主流方案的骨架。DeepMimic是这套范式的开山之作,它把动作片段作为参考,用强化学习训练策略去跟踪参考动作的关节角度和末端位置,同时用一个相位变量告诉策略“现在模仿到动作的第几帧了”。AMP(Adversarial Motion Priors)换了个思路,不再逐帧跟踪,而是用一个判别器去判断“这段动作像不像人”,把模仿变成对抗式风格约束,动作自然度提升明显。teacher-student架构解决的是部署问题——训练时能拿到完整状态(比如全局坐标、接触力),真机上只有本体感受和少量传感器,于是先训一个“教师”用特权信息,再蒸馏出一个“学生”只用可观测信息。VQVAE则常出现在动作压缩和风格编码环节,把高维动作序列压成离散隐变量,方便做多风格切换和动作生成。
这套东西适合谁看?如果你正在做人形机器人的运动控制、动画角色驱动、或者任何需要“让智能体学会自然动作”的项目,这些经验都能直接迁移。哪怕你只是对强化学习落地感兴趣,teacher-student的知识蒸馏套路也是通用的工程手段。下面我按自己踩坑的顺序,把整条链路拆开讲。
2. 整体方案设计与技术选型思路
2.1 为什么是“模仿”而不是“纯强化”
纯强化学习在人形控制上不是不能用,而是太贵。以常见的28自由度人形为例,如果只给一个“往前走”的稀疏奖励,策略需要探索的联合动作空间维度是28维连续空间,随机探索撞上有效步态的概率几乎为零。我实测过,纯PPO从零训练一个稳定行走策略,在单卡上跑三五天是常态,而且换个初始姿态就得重训。
模仿学习把参考动作作为先验注入,相当于给探索过程装了个导航。参考动作可以是动捕数据、视频重定向后的关节轨迹、甚至手工设计的关键帧。策略的目标从“最大化稀疏奖励”变成“最小化与参考动作的偏差 + 完成指定任务”,梯度信号密集且方向明确。这就是为什么几乎所有能跑起来的人形模仿项目,底层都挂着一段参考动作。
2.2 DeepMimic、AMP、teacher-student各自的位置
这三者不是互斥关系,而是可以叠在一起用的。我习惯把它们理解成三个层次:
- DeepMimic层:负责“动作像不像”。逐帧跟踪参考姿态,给出关节角度误差、末端位置误差、速度误差等奖励项。它的优点是控制精度高,缺点是参考动作必须完整且质量高,遇到动作切换时容易僵硬。
- AMP层:负责“风格自不自然”。用判别器替代逐帧跟踪,只要求整体动作分布接近参考分布。好处是容忍度高、动作过渡自然,坏处是精度不如DeepMimic,容易出现“神似形不似”的情况。
- teacher-student层:负责“能不能上真机”。教师网络在仿真里用特权信息训练,学生网络通过监督学习模仿教师的动作输出,只依赖真机可获取的观测。这一步是仿真到现实的关键桥梁。
实际项目里我通常这样组合:先用DeepMimic或AMP训出一个教师策略,再用teacher-student蒸馏出可部署的学生策略。VQVAE则用在需要多风格切换的场景,比如同一个行走策略要能切换成“悠闲走”和“赶路走”两种风格,就用VQVAE把风格编码成离散码本,策略根据码本选择生成不同风格。
2.3 方案选型的几个关键权衡
选型时我主要看三个维度:参考动作的质量、部署平台的传感器配置、以及是否需要多风格。
参考动作如果是高质量动捕数据,DeepMimic能榨出最好的精度;如果参考动作来自视频重定向、噪声较大,AMP的对抗式约束更鲁棒。部署平台如果只有IMU和关节编码器,teacher-student几乎是必选项,因为教师用的全局位置、接触力这些信息真机拿不到。多风格需求则直接指向VQVAE或类似的隐变量方案。
提示:不要一上来就追求全套架构。我见过不少项目卡在teacher-student蒸馏阶段,回头发现教师策略本身就没训稳。先把单动作的模仿做扎实,再考虑蒸馏和风格扩展。
3. 核心细节解析与实操要点
3.1 参考动作的预处理:被低估的关键环节
参考动作的质量直接决定模仿上限。动捕数据通常带噪声、帧率不统一、坐标系和仿真环境对不上。我处理参考动作一般走这几步:
- 重定向:把源骨架的关节角度映射到目标人形的关节空间。这一步最容易出问题,因为源和目标的比例、关节轴向可能完全不同。我的做法是先对齐T-pose,再逐关节计算旋转偏移,最后用IK校验末端位置。
- 滤波:动捕噪声用Butterworth低通滤波,截止频率一般设在6-10Hz。截止频率太高噪声滤不干净,太低会把真实的高频动作细节抹掉。我通常从10Hz开始试,看动作回放有没有明显延迟再往下调。
- 重采样:统一到仿真步长,常见是30Hz或60Hz。重采样用样条插值而不是线性插值,线性插值在关节角度上会产生不自然的折角。
- 相位标注:DeepMimic需要相位变量,我一般用动作的归一化时间作为相位,周期性动作则用步态相位估计。
注意:重定向后的动作一定要在仿真里做一次“开环回放”,让机器人按参考轨迹动一遍,看有没有穿模、关节超限、脚底打滑。这一步能提前暴露80%的数据问题。
3.2 奖励函数设计:模仿学习的灵魂
奖励函数设计是模仿学习里最需要经验的部分。以DeepMimic风格的逐帧跟踪为例,我的奖励通常由这几项加权组成:
| 奖励项 | 含义 | 典型权重 | 注意事项 |
|---|---|---|---|
| 关节角度误差 | 当前关节角与参考角之差 | 0.5-0.65 | 用指数形式exp(-k*err)比线性更稳 |
| 末端位置误差 | 手脚末端与参考位置之差 | 0.1-0.2 | 需要正运动学计算,开销较大 |
| 速度误差 | 关节角速度与参考之差 | 0.05-0.1 | 权重过高会导致抖动 |
| 相位奖励 | 相位推进的连续性 | 0.1 | 防止策略卡在某一帧 |
| 任务奖励 | 前进速度、保持平衡等 | 0.1-0.3 | 根据任务目标调整 |
权重不是拍脑袋定的。我的经验是先用关节角度误差把动作训到“形似”,再逐步加入末端和速度项精修。一次性把所有项加满,策略容易在多个目标间摇摆,收敛慢甚至不收敛。
指数形式的误差项比线性好,因为它在误差小时梯度平缓、误差大时梯度陡峭,天然引导策略先解决大偏差。k值一般取2-10,动作幅度大的取小值,精细动作取大值。
3.3 AMP判别器的调参心得
AMP的核心是一个判别器,输入是状态转移对(当前状态、下一状态),输出是“像参考动作”的概率。策略的奖励里有一项是判别器给出的风格奖励。这里有几个坑:
- 判别器不能训太强:判别器太强,风格奖励全是负的,策略学不到有效梯度。我一般限制判别器的更新频率,比如策略更新4次、判别器更新1次。
- 梯度惩罚很重要:WGAN-GP里的梯度惩罚项能显著稳定训练。系数取10是常用值,我试过5和20,10最稳。
- 状态特征选择:判别器输入不要用原始关节角,用关节角、角速度、末端位置的组合,归一化后效果更好。
3.4 teacher-student蒸馏的观测对齐
蒸馏阶段最大的坑是观测空间不对齐。教师用的特权信息包括全局位置、线速度、接触力、甚至地形高度图,学生只能用本体感受(关节角、角速度、IMU)和历史观测。我的做法是:
- 学生网络输入加历史帧,通常堆叠最近10-20帧观测,弥补单帧信息不足。
- 教师和学生的动作输出空间必须完全一致,否则蒸馏目标就是错的。
- 蒸馏损失用MSE加一个动作平滑项,防止学生输出抖动。
提示:蒸馏时不要冻结教师,让教师继续用RL微调,学生跟着教师走,这样学生能学到教师持续改进后的行为,而不是一个静止的目标。
4. 实操过程与核心环节实现
4.1 环境搭建与仿真配置
我用的仿真环境是Isaac Gym,因为它支持GPU并行,几千个环境同时跑,人形模仿这种样本需求大的任务离不开并行。配置上几个关键点:
- 仿真步长设1/60秒,策略控制频率设30Hz,中间用PD控制器插值。
- 关节用位置控制模式,PD增益要调。刚度太低跟踪不上参考动作,太高会震荡。我的经验是髋关节刚度取200-400,膝关节取150-300,踝关节取100-200,具体看机器人质量分布。
- 接触摩擦系数取0.8-1.0,太低脚底打滑,太高动作僵硬。
4.2 教师策略训练:以DeepMimic为例
教师策略用PPO训练,网络结构是MLP,输入是当前状态加相位,输出是目标关节角。训练流程:
- 初始化策略网络,输出层用小的权重初始化,让初始动作接近参考动作的第一帧。
- 每个episode从参考动作的随机相位开始,避免策略只学会从固定起点模仿。
- 奖励按3.2节的表格加权,早期只开关节角度项,训到跟踪误差稳定后再加其他项。
- 用课程学习,先训单个动作片段,再训动作拼接,最后训带任务目标的完整动作。
我训一个行走动作大概需要2000-4000个iteration,每个iteration 4096个环境步,单卡A100上跑6-10小时。这个时间不算短,但比纯RL从零探索快了一个数量级。
4.3 学生策略蒸馏:从特权到可部署
教师训好后,蒸馏学生网络。学生输入是本体感受历史,输出和教师一样的动作。损失函数:
loss = MSE(student_action, teacher_action) + λ * smoothness_lossλ取0.01-0.05,smoothness_loss用相邻时间步动作差的L2范数。蒸馏时教师和学生同时在仿真里跑,教师用特权信息,学生用受限观测,每个step都算损失。我一般蒸馏500-1000个iteration,学生动作和教师的偏差能降到关节角5度以内。
蒸馏完一定要做消融验证:把学生的观测逐项去掉,看性能掉多少。如果去掉某一项性能暴跌,说明学生过度依赖那个观测,真机上如果没有对应传感器就会出问题。
4.4 VQVAE风格编码的接入方式
多风格场景下,我用VQVAE把参考动作序列压成离散码本。编码器输入一段动作窗口,输出隐变量,量化到码本后解码重构动作。策略训练时,把码本索引作为额外输入,策略就能根据索引生成对应风格的动作。
码本大小一般取32-128,太小风格区分度不够,太大训练不稳定。我试过64,在行走、跑步、跳跃三种风格上区分度刚好。VQVAE的重构损失用MSE加码本对齐损失,码本对齐损失系数取0.25是常用值。
注意:VQVAE训练和策略训练最好分开。先训好VQVAE,固定码本,再训策略。联合训练容易码本坍缩,所有动作都映射到同一个码。
5. 常见问题与排查技巧实录
5.1 训练不收敛的排查顺序
模仿学习训练不收敛,我按这个顺序查:
- 参考动作回放:先确认参考动作本身在仿真里能开环跑通,没有穿模和超限。
- 奖励量级:打印各项奖励的数值,看有没有某一项主导了总奖励。我遇到过末端位置误差项因为单位问题数值爆炸,把其他项全压没了。
- 相位推进:检查相位变量有没有正常推进,卡住的话策略会停在某一帧反复模仿。
- PD增益:增益不对会导致跟踪误差下不去,先单独调PD让机器人能稳定站在参考姿态。
- 学习率:PPO学习率取3e-4是起点,不收敛就降到1e-4试试。
5.2 动作抖动与穿模
动作抖动通常来自奖励里的速度项权重过高,或者PD刚度太大。我的处理办法是先把速度项权重砍半,看抖动是否缓解;如果还抖,降PD刚度10%-20%。穿模则是参考动作重定向没做好,或者碰撞体设置不对,需要回到数据预处理阶段修。
5.3 蒸馏后学生性能暴跌
学生性能暴跌,九成是观测不对齐或历史帧不够。先检查学生的观测归一化参数和教师是否一致,再增加历史帧长度。我遇到过学生只用单帧观测,蒸馏后走路直接摔,加到15帧历史后恢复正常。另一个原因是蒸馏损失权重不对,smoothness项太大导致学生动作过于保守,减小λ能改善。
5.4 常见问题速查表
| 现象 | 可能原因 | 排查动作 |
|---|---|---|
| 训练不收敛 | 奖励量级失衡 | 打印各项奖励数值 |
| 动作抖动 | 速度项权重高/PD刚度大 | 降权重、降刚度 |
| 穿模 | 重定向错误/碰撞体不对 | 回放参考动作检查 |
| 学生暴跌 | 观测不对齐/历史帧不足 | 对齐归一化、加历史帧 |
| 码本坍缩 | VQVAE联合训练 | 分开训练、固定码本 |
| 动作僵硬 | 参考动作质量差 | 滤波、重采样、换数据 |
5.5 几个我踩过的坑
第一个坑是相位变量用绝对时间而不是归一化时间,导致长动作后期相位数值很大,网络输入分布偏移,策略后期动作变形。改成归一化到0-1后解决。
第二个坑是蒸馏时教师用了随机动作噪声做探索,学生学到的动作带噪声,真机上抖得厉害。后来蒸馏阶段关掉教师的探索噪声,学生动作干净很多。
第三个坑是VQVAE码本初始化用均匀分布,训练早期大量码本死掉。改用k-means初始化码本,死码率从40%降到5%以下。
6. 工程落地的一些经验补充
6.1 仿真到现实的域随机化
学生策略上真机前,我一般做一轮域随机化微调:随机化机器人质量、关节摩擦、PD增益、IMU噪声、甚至地面摩擦。随机化范围不要太大,质量±10%、摩擦±20%是安全区间。随机化后学生策略的鲁棒性提升明显,我实测过,不做随机化的策略上真机走三步就摔,做了之后能稳定走几十步。
6.2 动作库的组织方式
多动作项目里,动作库的组织很关键。我按“动作类型-风格-速度”三层组织,每个动作片段带元数据(时长、周期、相位标注)。训练时按课程学习从简单动作到复杂动作,从单风格到多风格。动作切换用相位对齐,避免切换瞬间姿态跳变。
6.3 训练资源的估算
以28自由度人形、单动作DeepMimic为例,我的资源估算:
- 教师训练:单卡A100,6-10小时,显存占用约20GB(4096并行环境)。
- 学生蒸馏:单卡A100,2-4小时。
- VQVAE训练:单卡3090,1-2小时。
- 域随机化微调:单卡A100,2-3小时。
如果动作数量多,教师训练时间线性增长,但可以并行多个动作同时训,显存够的话一张A100能同时跑2-3个动作。
6.4 评估指标怎么定
我评估模仿质量主要看三个指标:关节角度跟踪误差(MPJPE)、动作自然度(用判别器打分)、任务完成度(前进距离、平衡时间)。MPJPE能到5度以内算优秀,10度以内算合格。自然度打分没有绝对标准,主要看相对提升。任务完成度根据具体任务定阈值。
这套流程我前后迭代了大半年,从最开始单动作都训不稳,到现在多风格切换加真机部署能跑通,中间踩的坑基本都写在上面了。人形模仿学习这个方向工程细节极多,论文里一句话带过的预处理,实际做起来可能占掉一半时间。我的建议是先把单动作的DeepMimic跑通,把奖励设计和PD调参的手感练出来,再往上叠AMP和teacher-student。基础不牢,后面蒸馏和风格扩展全是空中楼阁。