HMR(Human Mesh Recovery)端到端人体形状与姿态恢复算法:MMPose 中的原理、训练数据与评估实践
【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose
本文以 HMR 算法文档 为骨架,结合 MMPose 仓库中的网格评估实现与 3D 人体网格数据集指南,系统讲解 HMR 从单张 RGB 图像恢复完整 3D 人体网格的核心原理、对抗训练机制、在 MMPose 中的支持情况,以及从数据准备到评估的完整实操路径。读完本文,你将理解 HMR 如何仅凭 2D 标注训练出可用的 3D 人体网格模型,并掌握在 MMPose 体系下为网格估计任务准备数据与进行相似度评估的具体方法。
一、HMR 算法概述:从单张图像到完整人体网格
HMR(End-to-end Recovery of Human Shape and Pose,CVPR'2018)由 Angjoo Kanazawa、Michael J. Black、David W. Jacobs、Jitendra Malik 等人提出,其核心目标是从单张 RGB 图像中端到端地重建出完整的人体 3D 网格(mesh)。
@inProceedings{kanazawaHMR18, title={End-to-end Recovery of Human Shape and Pose}, author = {Angjoo Kanazawa and Michael J. Black and David W. Jacobs and Jitendra Malik}, booktitle={Computer Vision and Pattern Recognition (CVPR)}, year={2018} }在 HMR 出现之前,主流人体姿态估计方法输出的通常是2D 或 3D 关节点位置。HMR 则更进一步,输出一种信息更丰富、实用性更强的网格表示(mesh representation),并且该网格由两类参数显式刻画:
- 形状参数(shape):描述人体高矮胖瘦等体型信息;
- 3D 关节角度(3D joint angles):描述人体姿态信息。
在 MMPose 的论文索引体系中,HMR 被归类于 algorithms(算法)目录,文档中以<!-- [ALGORITHM] -->标记,供文档站自动收集算法列表使用,同时在仓库更新日志中明确记录了「Support HMR for 3D human shape recovery」这一里程碑(见 docs/en/notes/changelog.md,发布于 v0.7.0 版本)。
二、方法核心:重投影损失驱动的端到端学习
HMR 在设计上有三个相互支撑的关键机制,这也是它区别于早期优化式(optimization-based)人体网格恢复方法的核心:
1. 直接回归 3D 参数,不依赖中间 2D 检测
HMR 是端到端框架:它不依赖任何中间 2D 关键点检测结果,而是直接从图像像素回归 3D 姿态与形状参数。给定一个包含人体的边界框(bounding box),模型即可实时运行。
2. 重投影损失(Reprojection Loss):让野外图像可训练
模型的主要优化目标是最小化关键点的重投影损失——即将预测的 3D 网格通过相机模型投影回 2D 平面,再与图像中可见的 2D 标注关键点计算误差。这一设计带来一个巨大优势:
由于只需要 2D 标注,HMR 可以使用大规模 in-the-wild(野外)图像进行训练,这些图像通常只有 2D ground truth 标注,而没有昂贵的 3D 真值。
3. 对抗判别器:约束病态的重投影问题
仅仅依赖重投影损失是高度欠约束(underconstrained)的——同一张 2D 投影可能对应无数种 3D 姿态与形状组合。为此,HMR 引入了一个对抗训练(adversarial training)机制:
- 训练一个判别器(adversary),用于判断某组人体形状与姿态参数是「真实」还是「伪造」;
- 判别器基于大规模 3D 人体网格数据库(如 CMU MoShed 数据)进行训练,从而学习到真实人体的形状/姿态先验分布;
- 回归器被要求生成的参数不仅要通过重投影损失贴合 2D 观测,还要能「骗过」判别器,使其输出符合真实人体分布。
通过这一对抗约束,HMR 学会了在 2D 观测模糊的情况下生成合理的 3D 人体网格。
训练模式:有无成对 2D-3D 监督均可
论文明确指出,HMR 可以在有或没有成对 2D-to-3D 监督(paired 2D-to-3D supervision)的情况下训练。这意味着:
- 当拥有带 3D 真值的数据(如 Human3.6M、MPI-INF-3DHP)时,可以加入 3D 监督信号;
- 当只有 2D 标注的野外数据(如 COCO、LSP)时,仅凭重投影损失 + 对抗先验即可完成训练。
这一灵活性是 HMR 能在真实场景图像上取得良好泛化能力的重要原因。
三、MMPose 中的 HMR 支持与评估工具
1. 支持历史
根据 更新日志,MMPose 在 v0.7.0(2020 年 9 月 30 日)版本中将「Support HMR for 3D human shape recovery」列为该版本的核心亮点(Highlights)之一,标志着 MMPose 正式具备 3D 人体网格恢复能力。同一版本还同步支持了 COCO-WholeBody、Frei-hand、CMU Panoptic HandDB、Human3.6M(H36M)等数据集,构成了围绕人体网格估计的数据生态。
2. 网格评估实现:Procrustes 相似变换
在评估环节,MMPose 提供 mmpose/evaluation/functional/mesh_eval.py,该文件头部明确标注:
# Adapted from https://github.com/akanazawa/hmr # Original licence: Copyright (c) 2018 akanazawa, under the MIT License.即该评估代码直接移植自 HMR 原作者的官方实现。其中核心函数为compute_similarity_transform(source_points, target_points),其作用与算法细节如下:
- 功能:计算一个相似变换(sR, t),使源点集
source_points(形状[N, 3])在变换后最接近目标点集target_points(形状[N, 3]),并返回变换后的源点集——即求解正交 Procrustes 问题; - 输入约束:两组点集点数必须相同(
N),且每个点均为三维坐标; - 求解步骤:
- 去除均值(mean removal),使两组点集中心对齐;
- 计算源点集的方差(用于恢复缩放尺度 scale);
- 计算两组点集的外积矩阵 K;
- 对 K 做 SVD 分解,构造旋转矩阵 R(并通过 Z 矩阵修正行列式符号,保证 det(R)=1);
- 由迹比值恢复尺度 scale;
- 恢复平移 t;
- 对源点集施加变换
scale * R · points + t。
在 3D 人体网格/关节点评估中,此类相似变换用于消除预测与真值之间的全局刚性对齐差异(旋转、缩放、平移),从而在姿态形状对齐后的空间内公平地度量误差。从源码结构看,该函数被设计为纯 numpy 实现、无外部依赖,可直接在评估 pipeline 中被复用。
四、训练数据准备:人体网格估计(3D Body Mesh)数据集指南
要复现 HMR 或在其基础上训练网格恢复模型,需要准备多组数据集。MMPose 在 3D 人体网格恢复数据集指南 中给出了完整规范,其核心原则是:为达到高质量的人体网格估计效果,通常需要联合多个数据集训练,涵盖不同标注类型(纯 2D、带 3D、带真实 SMPL 参数)以互补。
1. 标注文件:统一预处理格式
不同数据集的标注会被预处理成统一格式。官方提供两种方式获取:
- 按照 SPIN 的预处理流程自行生成标注文件;
- 直接下载官方打包好的
mesh_annotation_files.zip。
完成后目录结构应如下($MMPOSE指仓库根目录):
mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs `── data │── mesh_annotation_files ├── coco_2014_train.npz ├── h36m_valid_protocol1.npz ├── h36m_valid_protocol2.npz ├── hr-lspet_train.npz ├── lsp_dataset_original_train.npz ├── mpi_inf_3dhp_train.npz └── mpii_train.npz建议将数据集根目录软链接到$MMPOSE/data下;如果目录结构不同,需要同步修改配置文件中的对应路径。
2. SMPL 模型准备
人体网格估计依赖SMPL(Skinned Multi-Person Linear Model)参数化人体模型来生成网格,相关引用如下:
@article{loper2015smpl, title={SMPL: A skinned multi-person linear model}, author={Loper, Matthew and Mahmood, Naureen and Romero, Javier and Pons-Moll, Gerard and Black, Michael J}, journal={ACM transactions on graphics (TOG)}, volume={34}, number={6}, pages={1--16}, year={2015}, publisher={ACM New York, NY, USA} }需要准备三个关键文件,统一放置于$MMPOSE/models/smpl下:
mmpose ├── mmpose ├── ... ├── models │── smpl ├── joints_regressor_cmr.npy # 关节点回归器 ├── smpl_mean_params.npz # 平均参数(初始化用) └── SMPL_NEUTRAL.pkl # 性别中立的 SMPL 模型3. 各数据集组织规范
MMPose 的网格估计训练通常涉及以下数据集:
| 数据集 | 用途与说明 | 目录结构要点 |
|---|---|---|
| COCO(2014 Train) | 提供大规模 in-the-wild 2D 标注,用于重投影损失训练 | data/coco/train2014/*.jpg |
| Human3.6M | 提供 MoShed 化 3D 数据用于训练;测试图像需按 SPIN 流程从原始视频抽取(因许可限制无法再分发) | data/Human3.6M/images/S11_Directions_1.54138969_000001.jpg等 |
| MPI-INF-3DHP | 提供 3D 姿态监督;测试集包含 TS1~TS6 序列,训练集含 S1~S8 的 Seq1/Seq2 | data/mpi_inf_3dhp_test_set/TS*与data/S1/Seq1等 |
| LSP | 提供野外 2D 标注,使用高分辨率原版 | data/lsp_dataset_original/images/im0001.jpg |
| LSPET(HR-LSPET) | 大规模野外 2D 训练数据 | data/lspet_dataset/images/*.jpg+joints.mat |
| CMU MoShed Data | 对抗训练关键:真实世界 SMPL 参数用于训练判别器,包含在标注压缩包中 | data/mesh_annotation_files/CMU_mosh.npz |
其中特别值得注意的是CMU MoShed 数据:文档明确说明「Real-world SMPL parameters are used for the adversarial training in human mesh estimation」,即对抗判别器正是使用这些真实 SMPL 参数来学习「真实人体形状/姿态」的分布,与前述方法核心中的对抗机制一一对应。而 Human3.6M 的训练数据同样使用 HMR 提供的 MoShed 数据,但因许可限制官方不提供再分发,需自行获取原始视频与 MoShed 数据。
五、实验结论与适用场景
根据论文摘要的表述,HMR 的效果与适用性可以从三个维度理解:
- 对优化式方法的超越:在各类 in-the-wild 图像上,HMR 优于以往基于优化的网格输出方法(optimization-based methods);
- 多任务竞争力:在 3D 关节位置估计(3D joint location estimation)与部件分割(part segmentation)等下游任务上表现出有竞争力的结果;
- 实时性:给定包含人体的边界框后,模型可实时运行,具备实际部署的可行性。
在 MMPose 的项目语境下,HMR 代表的「参数化网格回归 + 对抗先验 + 重投影损失」范式,是 3D 人体网格恢复(3D Body Mesh Recovery)这一任务族的重要基线,与其配套的 3D 人体网格数据集指南 和 Procrustes 评估实现 共同构成了从数据、训练到评估的完整闭环。
六、总结
HMR 作为 CVPR'2018 提出的端到端人体网格恢复框架,其核心贡献可以凝练为三点:以 SMPL 形状/姿态参数为输出表示、以重投影损失为唯一监督信号从而支持野外 2D 图像训练、以对抗判别器补足欠约束问题。在 MMPose 仓库中,HMR 的印记清晰可见:v0.7.0 版本将其列为里程碑特性,评估侧保留了移植自 HMR 官方的相似变换代码,数据集侧则形成了覆盖 COCO、Human3.6M、MPI-INF-3DHP、LSP、LSPET、CMU MoShed 的完整准备规范。理解 HMR,也就理解了从 2D 姿态估计迈向 3D 人体网格重建的关键一跃。
【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考