PyMAF项目全解:ICCV'21 Oral单目3D人体姿态与形状回归HMR工具有多强大?
【免费下载链接】PyMAF[ICCV 2021, Oral] PyMAF: 3D Human Pose and Shape Regression with Pyramidal Mesh Alignment Feedback Loop项目地址: https://gitcode.com/gh_mirrors/py/PyMAF
PyMAF是一个面向单目 3D 人体姿态估计与人体网格恢复(HMR)的开源 PyTorch 项目,出自 ICCV 2021 Oral 论文《PyMAF: 3D Human Pose and Shape Regression with Pyramidal Mesh Alignment Feedback Loop》。只需一张普通照片或一段视频,它就能回归出完整的 3D 人体姿态、体型形状(SMPL 参数)与相机位置,并直接渲染出贴合真实图像的 3D 人体网格。对于想快速上手人体姿态回归、复现论文或在此基础上做二次开发的同学,这是一个功能完整、代码清晰的参考实现 🚀
📌 一分钟了解 PyMAF 能做什么
PyMAF 的核心任务可以概括为一句话:从单张 RGB 图像回归出 SMPL 人体模型的姿态、体型和相机参数。
- 单目输入:一张照片或一段视频即可,无需深度传感器或多目相机
- 完整 3D 输出:SMPL 姿态(72维)、体型(10维 beta)、相机参数
- 网格恢复:输出可直接用于渲染的人体 3D 网格顶点
- 视频支持:内置多人跟踪,能处理视频中多人交叉、遮挡的场景
- 双任务:同时支持 2D 关键点定位评估与 3DPW 3D 姿态评估
它还有一个进阶版本 PyMAF-X(TPAMI 2023),在 SMPL-X 全身模型上进一步提升了 UV 对齐质量。
🔍 核心原理:金字塔网格对齐反馈循环
PyMAF 的命名来自Pyramid ofMesh-AlignedFeatures。整个网络是一个"预测—对齐—反馈"的迭代结构,这也是它精度领先的关键:
网格对齐特征提取(MAF)
网络先粗预测一版 SMPL 姿态,把人体网格投影回 2D 图像,再从网格顶点位置采样图像特征图上的特征(即"mesh-aligned features"),送进回归器进行下一轮修正。这一过程迭代多次(默认 3 次,见配置MODEL.PyMAF.N_ITER),让网格与真实人体逐步对齐,如同"金字塔"般逐层逼近。
实现位于 models/maf_extractor.py,其中MAF_Extractor类会加载降采样后的 SMPL 网格结构(data/mesh_downsampling.npz),沿网格顶点金字塔逐层提取特征并降维。
残差式迭代回归
回归器Regressor采用残差学习:每一轮只预测姿态、体型、相机的增量,叠加到上一轮结果上再送入 SMPL 前向计算,保证迭代过程稳定收敛。相关代码见 models/pymaf_net.py 中的Regressor与PyMAF两个类。
IUV 辅助监督:让网格"贴合"像素级更紧
除了姿态和体型,PyMAF 还引入 DensePose 风格的IUV 回归辅助监督:把图像每个像素映射到人体网格的 UV 纹理坐标,等价于预测"每个像素属于网格哪个位置",从而获得像素级的对齐监督。实现见 models/iuv_predictor.py 中的IUV_predict_layer(U、V、部件索引、UV 索引共 4 个分支)。
模型总览
输入图像 → ResNet-50 骨干 → 反卷积特征图 ├─ 网格对齐特征(MAF)提取 ├─ 21×21 空间网格特征 └─ 迭代回归器 ×3 轮(残差修正) → SMPL 前向 → 姿态 / 体型 / 相机 / 3D 网格骨干与结构配置均可在 configs/pymaf_config.yaml 中找到,例如BACKBONE: res50、MLP_DIM、损失权重LOSS.*等。
🚀 快速上手:3 步跑通单目 3D 人体姿态演示
PyMAF 官方提供了可直接运行的图像/视频 demo,无需自己写推理代码。
第 1 步:准备运行环境
需要 Python 3.8 与 PyTorch 1.9.0(CUDA 11.1 验证通过):
conda create --no-default-packages -n pymafx python=3.8 conda activate pymafx conda install pytorch==1.9.0 torchvision==0.10.0 cudatoolkit=11.1 -c pytorch -c conda-forge pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable" pip install -r requirements.txt第 2 步:获取必要文件
一条命令拉取网格降采样数据与 DensePose UV 数据:
bash fetch_data.sh此外还需手动准备:
| 文件 | 说明 |
|---|---|
| SMPL 模型(SMPL_*.pkl) | 需从官方渠道申请,放入data/smpl |
| 预处理数据 / final_fits | 从 SPIN 等渠道获取 |
| PyMAF 预训练权重 | 放入data/pretrained_model/ |
第 3 步:运行 Demo
单张图片输入:
python3 demo.py --checkpoint=data/pretrained_model/PyMAF_model_checkpoint.pt \ --img_file examples/COCO_val2014_000000019667.jpg视频输入(单人 / 多人均可):
python3 demo.py --checkpoint=data/pretrained_model/PyMAF_model_checkpoint.pt \ --vid_file examples/dancer.mp4示例素材已内置在仓库 examples/ 目录下:单张测试图、单人舞者视频dancer.mp4和多人视频flashmob.mp4。多人场景的跟踪由 multi_person_tracker_yolov8.py 提供,配合utils/pose_tracker.py完成逐帧平滑。
📊 评估与训练:如何验证效果、复现论文
评估命令速查
# COCO 2D 关键点定位评估 python3 eval_coco.py --checkpoint=data/pretrained_model/PyMAF_model_checkpoint.pt # 3DPW 3D 姿态评估 python3 eval.py --checkpoint=data/pretrained_model/PyMAF_model_checkpoint.pt --dataset=3dpwCOCO 评估只需额外下载coco_2014_val.npz放入data/dataset_extras/即可,流程非常轻量。
两阶段训练策略
PyMAF 采用论文中的两阶段训练,入口为 train.py:
# 阶段一:Human3.6M 单数据集训练 CUDA_VISIBLE_DEVICES=0 python3 train.py --regressor pymaf_net --single_dataset --misc TRAIN.BATCH_SIZE 64 # 阶段二:2D+3D 混合数据集继续训练 CUDA_VISIBLE_DEVICES=0 python3 train.py --regressor pymaf_net --pretrained_checkpoint path/to/ckpt.pt --misc TRAIN.BATCH_SIZE 64💡 官方强烈建议:使用 EFT 生成的标注训练可显著提升 baseline 效果,兼容标签文件已在项目公告中放出,详见 README 顶部的 Update 说明。
训练配置(学习率、损失权重、批大小等)集中在 configs/pymaf_config.yaml,例如KP_2D_W: 300、POSE_W: 60、PART_WEIGHTS: 0.3(24 个 DensePose 部件加权)。训练过程可通过 TensorBoard 监控./logs目录。
损失函数设计
PyMAF 的监督是多路组合的,各权重同样在 YAML 中可调:
| 损失 | 作用 | 默认权重 |
|---|---|---|
| KP_2D / KP_3D | 2D/3D 关键点回归 | 300 |
| POSE_W | SMPL 姿态 | 60 |
| SHAPE_W | 体型 beta | 0.06 |
| PART_WEIGHTS | DensePose 24 部件 | 0.3 |
| POINT_REGRESSION_WEIGHTS | UV 回归 | 0.5 |
🗂️ 项目结构导览
| 目录 | 内容 | 关键文件 |
|---|---|---|
| models/ | 网络结构 | pymaf_net.py(主网络)、maf_extractor.py(MAF)、iuv_predictor.py(IUV 头)、hmr.py(baseline)、smpl.py(SMPL 前向) |
| datasets/ | 数据与推理 | mixed_dataset.py(混合训练集)、coco_keypoint_dataset.py、inference.py(测试封装) |
| core/ | 训练基础设施 | base_trainer.py/trainer.py(训练器)、cfgs.py(配置解析)、train_options.py |
| utils/ | 工具集 | renderer.py(网格渲染)、pose_tracker.py(视频平滑)、densepose_methods.py(DensePose 标签转换)、transforms.py |
| configs/ | 配置 | pymaf_config.yaml |
| 根目录 | 入口脚本 | demo.py、train.py、eval.py、eval_coco.py、fetch_data.sh |
✨ 总结:谁适合使用 PyMAF?
- 3D 姿态 / HMR 方向的研究者:ICCV 2021 Oral 的完整开源实现,MAF 机制 + IUV 监督是精读"人体网格恢复"论文代码的绝佳样本
- 想快速出效果的开发者:3 步跑通 demo,图像、视频、单/多人场景开箱即用
- 需要强 baseline 的项目:配合 EFT 标签训练,可得到一个精度更高的 HMR baseline
相比传统"图像→SMPL 参数"的一次性回归,PyMAF 的网格对齐反馈循环让预测的 3D 人体与输入图像在像素级别逐步对齐——这正是它"强大"的底层原因。clone 仓库(https://gitcode.com/gh_mirrors/py/PyMAF)后,跟着上文的三步流程即可开始你的单目 3D 人体姿态回归之旅 🎯
【免费下载链接】PyMAF[ICCV 2021, Oral] PyMAF: 3D Human Pose and Shape Regression with Pyramidal Mesh Alignment Feedback Loop项目地址: https://gitcode.com/gh_mirrors/py/PyMAF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考