全指南:数据集、模型配置与实战推理)
MMPose 2D 人体全身姿态估计Whole-Body全指南数据集、模型配置与实战推理【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose2D 人体全身姿态估计Whole-Body Pose Estimation的目标是在一张图像中同时定位人体的身体、面部、手部和脚部等全部稠密关键点是理解人体姿态与交互行为的基础技术。本指南以 configs/wholebody_2d_keypoint/README.md 为核心骨架结合仓库内的数据准备文档、完整模型配置与源码实现系统讲解 MMPose 中全身姿态估计的任务定义、主流方法Top-down / Bottom-up、支持的数据集与模型、训练配置要点以及可直接运行的推理 Demo。读完本文你将掌握如何在 MMPose 中准备 COCO-WholeBody / Halpe / UBody 数据、选择并配置合适的全身姿态模型以及通过多种方式完成单图、视频与流式输入的人体全身关键点检测。任务定义什么是 2D 人体全身姿态估计2D 人体全身姿态估计旨在定位整个人体上的稠密关键点包括身体body、面部face、手部hands与脚部feet。与仅关注 17 个身体关节点的常规人体姿态估计不同全身姿态估计需要同时处理不同尺度、不同精细度的多个身体部件例如面部表情关键点与手指关节关键点通常位于低分辨率区域对模型的细粒度定位能力提出了更高要求。以仓库中实际使用的 COCO-WholeBody 数据集为例其关键点共133 个编号分布如下见 mmpose/datasets/datasets/wholebody/coco_wholebody_dataset.py 的注释说明0-1617 个身体关键点17-226 个脚部关键点23-9068 个面部关键点91-13242 个手部关键点Top-down 与 Bottom-up 两大类方法现有方法可归为两类Top-down 方法将任务拆分为人体检测 单人体姿态估计两个阶段。先用检测器得到每个人的边界框再对每个框执行单人全身姿态估计。其精度通常更高但推理速度受检测器影响。Bottom-up 方法如 Associative Embedding, AE先在整张图像上检测出所有全身关键点再通过分组/关联算法将关键点聚合到各个人体实例上。其速度快但在拥挤场景下分组难度较大。在 MMPose 仓库中configs/wholebody_2d_keypoint/目录下目前主要提供的是 Top-down 体系的方法共分为三大系列各自目录下都带有独立的 README系列目录技术特点热力图 Top-downtopdown_heatmapHRNet / ResNet / CSPNeXt / ViPNAS 等骨干网络 高斯热图回归RTMPosertmposeSimCC 坐标分类 CSPNeXt 骨干面向实时推理DWPosedwpose基于 RTMPose 的两阶段知识蒸馏方案数据准备三大全身数据集数据准备请遵循 docs/en/dataset_zoo/2d_wholebody_keypoint.md。官方建议将数据集根目录软链接到$MMPOSE/data如果你的目录结构不同需要相应修改配置文件中的路径。MMPose 支持的全身姿态数据集包括COCO-WholeBody、Halpe与UBody三种此外配置文件还涉及基于它们衍生或组合训练的变体如 cocktail14 混合数据集。COCO-WholeBodyECCV2020COCO-WholeBody 在 COCO 2017 图像基础上扩充了全身标注图像可直接从 COCO 官网下载 2017 Train/Val 集标注文件coco_wholebody_train_v1.0.json与coco_wholebody_val_v1.0.json需按官方指引单独下载。建议的数据目录结构如下mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data │── coco │-- annotations │ │-- coco_wholebody_train_v1.0.json │ |-- coco_wholebody_val_v1.0.json |-- person_detection_results | |-- COCO_val2017_detections_AP_H_56_person.json │-- train2017 │ │-- 000000000009.jpg │ │-- ... -- val2017 │-- 000000000139.jpg │-- ...注意person_detection_results目录下的检测结果文件COCO val2017 人体检测框是评估阶段必需的Top-down 模型在验证时使用这些预检测的人体框而不是真实框。评估 COCO-WholeBody 还需要安装扩展版 COCO API版本不低于 1.5pip install xtcocotoolsHalpeCVPR2020HalpePaStaNet 项目配套数据集训练集图像来自 HICO-Det验证集图像来自 COCO val2017。将下载的图像、标注与检测结果按如下结构放置mmpose ├── ... ── data │── halpe │-- annotations │ │-- halpe_train_v1.json │ |-- halpe_val_v1.json |-- person_detection_results | |-- COCO_val2017_detections_AP_H_56_person.json │-- hico_20160224_det │ │-- anno_bbox.mat │ │-- anno.mat │ │-- README │ │-- images │ │ │-- train2015 │ │ │ │-- HICO_train2015_00000001.jpg │ │ │ │-- ... │ │ │-- test2015 │ │-- tools -- val2017 │-- 000000000139.jpg │-- ...Halpe 评估同样需要pip install xtcocotools。UBodyCVPR2023UBody 是一个面向真实生活场景的全身视频数据集包含 ConductMusic、Fitness、Interview、Movie、Olympic、Online_class、SignLanguage、Singing、Speech、TVShow、VideoConference 等 15 类场景每类下都有对应的annotations、videos与splits目录。数据准备包括三步从 OSX 项目主页下载视频与标注解压到$MMPOSE/data/UBody/运行仓库提供的转换脚本将视频转成图像并按 train/val 拆分python tools/dataset_converters/ubody_kpts_to_coco.py同样安装xtcocotools以支持 COCO-WholeBody 格式的评估。由于 UBody 覆盖了丰富的手势与面部表情它成为 DWPose 蒸馏训练与 RTMPose UBody 系列模型的关键数据来源。模型库与精度一览Top-down 热力图系列COCO-WholeBody / UBody2D热力图系列遵循 Simple Baselines 范式不直接回归关键点坐标而是让网络输出表征该位置是关键点可能性大小的热图。其结果表位于 configs/wholebody_2d_keypoint/topdown_heatmap/README.md评估条件为COCO-WholeBody v1.0 val检测器在 COCO val2017 上的人体 AP 为 56.4。模型输入尺寸Whole APWhole AR配置HRNet-w48Dark384x2880.6610.743hrnet_dark_coco-wholebody.mdHRNet-w32Dark256x1920.5820.671hrnet_dark_coco-wholebody.mdHRNet-w48256x1920.5790.681hrnet_coco-wholebody.mdCSPNeXt-m256x1920.5670.641cspnext_udp_coco-wholebody.mdHRNet-w32256x1920.5490.646hrnet_ubody-coco-wholebody.mdResNet-152256x1920.5480.661resnet_coco-wholebody.mdHRNet-w32256x1920.5360.636hrnet_coco-wholebody.mdResNet-101256x1920.5310.645resnet_coco-wholebody.mdS-ViPNAS-Res50Dark256x1920.5280.632vipnas_dark_coco-wholebody.mdResNet-50256x1920.5210.633resnet_coco-wholebody.mdS-ViPNAS-Res50256x1920.4950.607vipnas_coco-wholebody.md在 UBody2D 数据集val 集使用 GT 关键点评估上HRNet-w32256x192取得Whole AP 0.690 / Whole AR 0.729对应配置为 td-hm_hrnet-w32_8xb64-210e_ubody-256x192.py。RTMPose 系列COCO-WholeBodyRTMPose 是 MMPose 团队提出的高性能实时多人姿态估计框架。官方 README 中给出的 COCO-WholeBody 结果同样基于人体 AP 56.4 的检测器如下模型输入尺寸Whole APWhole AR详情RTMPose-m256x1920.5820.674rtmpose_coco-wholebody.mdRTMPose-l256x1920.6110.700rtmpose_coco-wholebody.mdRTMPose-l384x2880.6480.730rtmpose_coco-wholebody.md更细粒度的部件级指标Body / Foot / Face / Hand AP记录在 configs/wholebody_2d_keypoint/rtmpose/coco-wholebody/rtmpose_coco-wholebody.md 中。例如 384x288 输入的 RTMPose-l其 Whole AP 0.648 分解为Body AP 0.712、Foot AP 0.693、Face AP 0.882、Hand AP 0.579可见手部关键点是最难的子任务。RTMWCocktail14 混合训练系列cocktail14表示模型在14 个公开数据集上混合训练包括 AI Challenger、CrowdPose、MPII、sub-JHMDB、Halpe、PoseTrack18、COCO-WholeBody、UBody、Human-Art、WFLW、300W、COFW、LaPa、InterHand详见 rtmw_cocktail14.md。RTMW 使用RTMWHead支持可见性解码与跨尺度的高斯注意力384x288 输入下 RTMW-x 达到Whole AP 0.702 / Whole AR 0.781其中 Face AP 0.884、Hand AP 0.664。DWPose两阶段蒸馏系列DWPose README 提出了Distillation forWhole-bodyPose 两阶段蒸馏方案第一阶段设计权重衰减策略利用教师模型的中间层特征与最终 logits同时包含可见与不可见关键点从零监督学生模型第二阶段对学生模型自身进行自蒸馏仅需约 20% 的训练时间对 head 进行微调是一种即插即用的训练策略。DWPose 在 COCO-WholeBody 上把 RTMPose-l 的 whole-body AP 从 64.8% 提升到 66.5%甚至超过了 65.3% AP 的 RTMPose-x 教师模型。各尺寸模型结果如下模型输入尺寸Whole APWhole ARFLOPS(G)ORT-Latency(ms, i7-11700)TRT-FP16-Latency(ms, GTX 1660Ti)DWPose-t256x19248.558.40.5--DWPose-s256x19253.863.20.9--DWPose-m256x19260.669.52.2213.504.00DWPose-l256x19263.171.74.5223.415.67DWPose-l384x28866.574.310.0744.587.68从表中可以直观看到模型尺寸、精度与延迟之间的权衡DWPose-m 在 4ms 量级的 TRT-FP16 延迟下即可达到 60% 以上的 Whole AP。读懂全身姿态模型配置文件RTMPose 配置拆解以 rtmpose-l_8xb32-270e_coco-wholebody-384x288.py 为例一个完整的 RTMPose 全身姿态配置由以下几部分组成训练策略max_epochs270其中最后 30 个 epoch 通过PipelineSwitchHook切换到 stage2 数据增强旋转幅度从 80° 收窄到 60°、尺度扰动收窄到 [0.75, 1.25]、CoarseDropout 概率降为 0.5配合 EMA 权重平均ExpMomentumEMAmomentum0.0002与auto_scale_lrbase_batch_size512实现学习率的自动缩放。SimCC 编解码器codecRTMPose 不使用传统热图而使用坐标分类范式codec dict( typeSimCCLabel, input_size(288, 384), sigma(6., 6.93), simcc_split_ratio2.0, normalizeFalse, use_darkFalse)其底层实现见 mmpose/codecs/simcc_label.pysimcc_split_ratio决定标签分辨率例如输入宽w时 x 轴标签长度为w * simcc_split_ratiosigma控制高斯标签的宽度normalizeFalse表示不对标签做归一化use_darkTrue时解码阶段会调用 DARK 精细化后处理refine_simcc_dark。模型结构TopdownPoseEstimator mmdet 作用域下的 CSPNeXt 骨干archP5、channel_attentionTrueRTMCCHeadout_channels133即全身 133 个关键点final_layer_kernel_size7内含高斯注意力模块gau_cfgKLDiscretLossbeta10.label_softmaxTrue。数据流水线训练时依次执行LoadImage→GetBBoxCenterScale→RandomFlip→RandomHalfBody→RandomBBoxTransformscale_factor[0.6, 1.4]rotate_factor80→TopdownAffine→mmdet.YOLOXHSVRandomAug→AlbumentationBlur / MedianBlur / CoarseDropout→GenerateTarget→PackPoseInputs。评估配置val_dataloader中通过bbox_filedata/coco/person_detection_results/COCO_val2017_detections_AP_H_56_person.json指定检测框文件val_evaluator使用CocoWholeBodyMetriccheckpoint 以coco-wholebody/AP为保存依据。热力图系列配置对比热力图系列使用MSRAHeatmapcodec。以 td-hm_hrnet-w48_dark-8xb32-210e_coco-wholebody-384x288.py 为例输入 384x288、热图 96x72heatmap_size(72, 96)、sigma3、unbiasedTrue即 DARK 中的无偏编码优化器为 Adamlr5e-4采用 500 iter 线性 warm-up MultiStepLRmilestones[170, 200]骨干为 HRNetw48多分支并联高分辨率表示。UBody2D 上的 td-hm_hrnet-w32_8xb64-210e_ubody-256x192.py 结构与之相同只是输入降为 256x192、热图 64x48、sigma2。实战 Demo三种推理方式Demo 完整说明见 demo/docs/en/2d_wholebody_pose_demo.md。方式一整图作为边界框输入python demo/image_demo.py \ ${IMG_FILE} ${MMPOSE_CONFIG_FILE} ${MMPOSE_CHECKPOINT_FILE} \ --out-file ${OUTPUT_FILE} \ [--device ${GPU_ID or CPU}] \ [--draw_heatmap]以 ViPNAS-Res50Dark 模型为例python demo/image_demo.py \ tests/data/coco/000000000785.jpg \ configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody/td-hm_vipnas-res50_dark-8xb64-210e_coco-wholebody-256x192.py \ https://download.openmmlab.com/mmpose/top_down/vipnas/vipnas_res50_wholebody_256x192_dark-67c0ce35_20211112.pth \ --out-file vis_results.jpgCPU 推理时追加--devicecpu即可。方式二mmdet 人体检测 mmpose 姿态估计这是最常用的 Top-down 完整流程需要先安装 mmdet版本 3.0python demo/topdown_demo_with_mmdet.py \ ${MMDET_CONFIG_FILE} ${MMDET_CHECKPOINT_FILE} \ ${MMPOSE_CONFIG_FILE} ${MMPOSE_CHECKPOINT_FILE} \ --input ${INPUT_PATH} \ [--output-root ${OUTPUT_DIR}] [--save-predictions] \ [--show] [--draw-heatmap] [--device ${GPU_ID or CPU}] \ [--bbox-thr ${BBOX_SCORE_THR}] [--kpt-thr ${KPT_SCORE_THR}]示例命令检测器用 RTMDet-m person 模型姿态模型用 HRNet-w48Darkpython demo/topdown_demo_with_mmdet.py \ demo/mmdetection_cfg/rtmdet_m_640-8xb32_coco-person.py \ https://download.openmmlab.com/mmpose/v1/projects/rtmpose/rtmdet_m_8xb32-100e_coco-obj365-person-235e8209.pth \ configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody/td-hm_hrnet-w48_dark-8xb32-210e_coco-wholebody-384x288.py \ https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w48_coco_wholebody_384x288_dark-f5726563_20200918.pth \ --input tests/data/coco/000000196141.jpg \ --output-root vis_results/ --show该脚本同样支持以视频文件或 URL 作为--input实现视频全身姿态估计。如需保存预测结果到磁盘请指定--save-predictions。检测器的配置文件位于 demo/mmdetection_cfg/其中rtmdet_m_640-8xb32_coco-person.py与rtmdet_nano_320-8xb32_coco-person.py专为人体检测定制。方式三Inferencer 统一推理接口Inferencer 支持用模型别名替代配置权重路径并接受图像路径、视频路径、图像目录与摄像头等多种输入python demo/inferencer_demo.py tests/data/crowdpose \ --pose2d wholebody --vis-out-dir vis_results/crowdpose该命令会推断tests/data/crowdpose目录下所有图像并将可视化结果保存到vis_results/crowdpose。推理加速技巧官方 README 给出了两个提速建议对 Top-down 模型可在配置中将model.test_cfg.flip_testFalse关闭翻转测试例如 td-hm_hrnet-w48_dark-8xb32-210e_coco-wholebody-384x288.py 中的对应字段以牺牲少量精度换取近一倍推理速度换用更快的人体边界框检测器。训练与蒸馏从 RTMPose 到 DWPose常规训练以 RTMPose-lCOCO-WholeBody, 384x288为例使用 8 卡分布式训练bash tools/dist_train.sh \ configs/wholebody_2d_keypoint/rtmpose/coco-wholebody/rtmpose-l_8xb32-270e_coco-wholebody-384x288.py 8单卡训练与测试分别使用 tools/train.py 与 tools/test.py集群环境可使用 tools/slurm_train.sh。DWPose 两阶段蒸馏训练DWPose 的训练流程分为四个步骤见 configs/wholebody_2d_keypoint/dwpose/README.mdStep 1第一阶段蒸馏训练。以rtmpose_x_dis_l_coco-ubody-384x288.py教师为 RTMPose-x、学生为 RTMPose-l为例bash tools/dist_train.sh configs/wholebody_2d_keypoint/dwpose/ubody/s1_dis/rtmpose_x_dis_l_coco-ubody-384x288.py 8该配置的结构很能说明问题它基于学生模型配置_base_指向rtmpose-l_8xb32-270e_coco-ubody-wholebody-384x288.py然后将model整体替换为DWPoseDistiller其中teacher_pretrained指向教师权重、teacher_cfg与student_cfg分别指向师生配置distill_cfg定义了FeaLoss特征蒸馏alpha_fea0.00007将学生 1024 通道特征对齐到教师 1280 通道与KDLosslogits 蒸馏weight0.1两类损失。Step 2权重转换。蒸馏模型不是标准姿态模型需用 tools/misc/pth_transfer.py 转换python tools/misc/pth_transfer.py $dis_ckpt $new_pose_ckpt脚本会剥离student.前缀仅保留学生模型的 state_dict 并重新打包。Step 3第二阶段蒸馏。开始前需将 Step 2 得到的模型路径填入 S2 蒸馏配置的teacher_pretrained字段然后bash tools/dist_train.sh configs/wholebody_2d_keypoint/dwpose/ubody/s2_dis/dwpose_l-ll_coco-ubody-384x288.py 8Step 4再次转换权重。第二阶段的转换需要--two_dis标志因为此时需要从蒸馏器中拼接出教师骨干 学生 head的完整结构python tools/misc/pth_transfer.py $dis_ckpt $new_pose_ckpt --two_disDWPoseDistiller 源码要点蒸馏器的核心实现在 mmpose/models/distillers/dwpose_distiller.pyteacher由teacher_cfg构建并冻结requires_gradFalsestudent由student_cfg构建distill_cfg中所有use_thisTrue的损失会被注册进distill_lossesnn.ModuleDictinit_weights()会先加载teacher_pretrained权重再初始化学生two_dis开关区分第一/第二阶段蒸馏第二阶段会额外使用loss_mgd等自蒸馏损失。这也解释了为何 README 中反复强调转换步骤蒸馏器本身不是可直接部署的姿态估计模型只有通过pth_transfer.py转换后才可用于常规推理与评估。小结MMPose 的configs/wholebody_2d_keypoint/目录为 2D 全身姿态估计提供了一条从数据、模型到部署的完整链路数据层面COCO-WholeBody / Halpe / UBody 三大数据集均有规范的准备流程与目录结构说明模型层面覆盖传统热图范式HRNet、ResNet、CSPNeXt、ViPNAS、实时坐标分类范式RTMPose、RTMW/Cocktail14以及蒸馏增强范式DWPose并附有部件级精度明细与部署延迟参考工程层面单图/视频/Inferencer 三种推理方式可直接运行分布式训练与 DWPose 两阶段蒸馏的完整命令均可复现。无论是追求极致精度的学术研究还是追求低延迟的实时应用如数字人、动作捕捉、人机交互都可以在本目录中找到可落地的模型配置与训练方案。参考文档与配置索引任务总览configs/wholebody_2d_keypoint/README.md数据准备docs/en/dataset_zoo/2d_wholebody_keypoint.mdDemo 指南demo/docs/en/2d_wholebody_pose_demo.mdTop-down 热图系列configs/wholebody_2d_keypoint/topdown_heatmap/README.mdRTMPose 系列configs/wholebody_2d_keypoint/rtmpose/README.mdDWPose 系列configs/wholebody_2d_keypoint/dwpose/README.mdSimCC 编解码器实现mmpose/codecs/simcc_label.py数据集类实现mmpose/datasets/datasets/wholebody/coco_wholebody_dataset.py蒸馏器实现mmpose/models/distillers/dwpose_distiller.py权重转换工具tools/misc/pth_transfer.py【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考