尧图精选

HRNet 全身姿态估计实战:MMPose 中 COCO-WholeBody 133 关键点模型库配置与源码解析

🕒 发布时间:2026/9/17 6:17:56 📁 来源:尧图网络
HRNet 全身姿态估计实战MMPose 中 COCO-WholeBody 133 关键点模型库配置与源码解析【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本文以 hrnet_coco-wholebody.md 模型库文档为主体系统讲解 MMPose 中 HRNet 在 COCO-WholeBody 数据集上的 4 套官方配置。文章完整继承原文档的精度基准表并结合仓库源码配置文件、MSRAHeatmapcodec、CocoWholeBodyDataset数据集、CocoWholeBodyMetric评估器深入解析训练流程、数据流水线、损失与评估机制。读者读完将掌握如何读懂一张 topdown heatmap 全身姿态配置文件、133 关键点如何编码为热图、评估指标如何分区计算以及如何基于官方基准复现或扩展训练。一、任务背景COCO-WholeBody 与全身姿态估计COCO-WholeBodyECCV2020论文Whole-Body Human Pose Estimation in the Wild在 COCO 人体关键点数据集基础上扩展了脚部、面部与手部关键点标注使单人实例拥有133 个关键点。其组成在 coco_wholebody_dataset.py 的类文档中明确给出0-1617 个身体body关键点17-226 个脚部foot关键点23-9068 个面部face关键点91-13242 个手部hand关键点左右各 21 个。合计 133 个关键点对应一个 133 通道的热图输出。数据集的完整关键点定义名称、颜色、左右对称 swap 关系、骨架连接记录在数据集元信息 configs/base/datasets/coco_wholebody.py 中供数据加载、可视化与评估共享。本仓库中该数据集在 configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody 目录下提供了 HRNet、ResNet、VIPNAS、CSPNeXt 等主干网络的官方配置与基准。二、模型库总览HRNet 在 COCO-WholeBody v1.0 val 上的精度基准原文档给出的结果在 COCO-WholeBody v1.0 val 集上评测检测器为在 COCO val2017 上人体 AP 达56.4的检测模型该检测结果文件在配置中通过bbox_file指定见下文。下表完整继承自原文档4 个配置覆盖 HRNet-W32 / W48 两种骨干规模与 256×192 / 384×288 两种输入分辨率ArchInput SizeBody APBody ARFoot APFoot ARFace APFace ARHand APHand ARWhole APWhole ARckptlogpose_hrnet_w32256x1920.6780.7550.5430.6610.6300.7080.4670.5660.5360.636模型权重训练日志pose_hrnet_w32384x2880.7000.7720.5850.6910.7260.7830.5150.6030.5860.673模型权重训练日志pose_hrnet_w48256x1920.7010.7760.6750.7870.6560.7430.5350.6390.5790.681模型权重训练日志pose_hrnet_w48384x2880.7220.7910.6960.8010.7760.8340.5870.6780.6320.717模型权重训练日志其中 Whole AP / Whole AR 指基于全部 133 个关键点联合评估的整体指标而 Body、Foot、Face、Hand 为分区指标。模型权重与训练日志的下载地址记录在 model-index.yml 以及各配置对应的.yml元数据文件如 hrnet_coco-wholebody.yml中读者可据此定位权重与日志资源。从数据可以观察出规律提高输入分辨率256×192 → 384×288与加大骨干网络宽度W32 → W48都能显著提升全身各分区精度其中面部Face与脚部Foot这类精细关键点对分辨率尤为敏感。三、配置文件逐段解读以 W32 256×192 为例HRNet 系列 4 个配置文件位于 configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody命名遵循td-hm_hrnet-w{32,48}_8xb{batch}-210e_coco-wholebody-{size}.py的统一规则。下面以 td-hm_hrnet-w32_8xb64-210e_coco-wholebody-256x192.py 为主线完整解读并随时对比 W48 384×288 配置的差异。3.1 运行时与优化策略runtime / optimizer / scheduler_base_ [../../../_base_/default_runtime.py] # runtime train_cfg dict(max_epochs210, val_interval10) # optimizer optim_wrapper dict(optimizerdict(typeAdam, lr5e-4)) # learning policy param_scheduler [ dict( typeLinearLR, begin0, end500, start_factor0.001, by_epochFalse), # warm-up dict( typeMultiStepLR, begin0, end210, milestones[170, 200], gamma0.1, by_epochTrue) ] # automatically scaling LR based on the actual training batch size auto_scale_lr dict(base_batch_size512)训练轮数共训练 210 epoch每 10 个 epoch 在验证集上评估一次val_interval10优化器Adam初始学习率 5e-4注意 W32 配置 batch size 为 648 卡 × 64W48 配置为 32但两者都采用相同学习率学习率调度两段式——前 500 次迭代使用LinearLR线性预热从 0.001 倍学习率起步之后按 epoch 在milestones[170, 200]处分别衰减 10 倍gamma0.1自动学习率缩放auto_scale_lr dict(base_batch_size512)表示以 512 作为基准 batch size当实际训练总 batch size 与之不同时MMEngine 会按比例自动缩放学习率保证复现时超参的一致性。3.2 保存最优模型default_hooks dict( checkpointdict(save_bestcoco-wholebody/AP, rulegreater))save_best指向评估器输出的coco-wholebody/AP指标见 3.7 节评估器即每次验证后若全身整体 AP 提升则覆盖保存最佳权重rulegreater表示越大越好。3.3 Codec 设置MSRAHeatmap 热图编解码# codec settings codec dict( typeMSRAHeatmap, input_size(192, 256), heatmap_size(48, 64), sigma2)W48 384×288 配置则为input_size(288, 384), heatmap_size(72, 96), sigma3。可见热图尺寸约为输入尺寸的 1/4而 sigma高斯核标准差随分辨率从 2 增大到 3。该 codec 的实现位于 mmpose/codecs/msra_heatmap.py。其核心机制encode关键点 → 热图将关键点坐标除以scale_factor即input_size / heatmap_size缩放到热图坐标系再通过generate_gaussian_heatmaps生成 (K, H, W) 形状的高斯热图同时输出每个关键点的keypoint_weights用于损失加权该过程仅支持单实例编码assert keypoints.shape[0] 1与 topdown 范式每样本一个实例一致decode热图 → 关键点先通过get_heatmap_maximum取热图最大响应位置得到粗略坐标再经refine_keypoints利用响应值进行亚像素细化若开启unbiasedTrue则走 DarkPose 的refine_keypoints_dark无偏解码最后乘以scale_factor还原到输入图像坐标系并返回每个关键点的置信度分数。该 codec 还支持unbiasedDarkPose 无偏编码与blur_kernel_size参数仓库中同一目录下的 td-hm_hrnet-w32_dark-8xb64-210e_coco-wholebody-256x192.py 与 td-hm_hrnet-w48_dark-8xb32-210e_coco-wholebody-384x288.py 即是对应的 DarkPose 变体对应文档 hrnet_dark_coco-wholebody.md。3.4 模型结构TopdownPoseEstimator HRNet HeatmapHeadmodel dict( typeTopdownPoseEstimator, data_preprocessordict( typePoseDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], bgr_to_rgbTrue), backbonedict( typeHRNet, in_channels3, extradict( stage1dict( num_modules1, num_branches1, blockBOTTLENECK, num_blocks(4, ), num_channels(64, )), stage2dict( num_modules1, num_branches2, blockBASIC, num_blocks(4, 4), num_channels(32, 64)), stage3dict( num_modules4, num_branches3, blockBASIC, num_blocks(4, 4, 4), num_channels(32, 64, 128)), stage4dict( num_modules3, num_branches4, blockBASIC, num_blocks(4, 4, 4, 4), num_channels(32, 64, 128, 256))), init_cfgdict( typePretrained, checkpoint.../hrnet_w32-36af842e.pth), ), headdict( typeHeatmapHead, in_channels32, out_channels133, deconv_out_channelsNone, lossdict(typeKeypointMSELoss, use_target_weightTrue), decodercodec), test_cfgdict( flip_testTrue, flip_modeheatmap, shift_heatmapTrue, ))逐项说明TopdownPoseEstimatorMMPose 的 topdown 姿态估计器实现于 mmpose/models/pose_estimators其数据流为裁剪实例 → 骨干提取特征 → 头部预测热图 → 解码坐标PoseDataPreprocessor对输入图像做 ImageNet 风格标准化mean/std 为 BGR 顺序的 ImageNet 统计值bgr_to_rgbTrue说明默认读取的图像通道顺序为 BGRHRNet 骨干通过extra字段描述四阶段多分支高分辨率网络结构——stage1 为 1 分支 Bottleneck64 通道stage2 扩展为 2 分支32/64 通道stage3 为 3 分支32/64/128stage4 为 4 分支32/64/128/256。HRNet 的核心设计是全程保持高分辨率特征分支并通过重复的多尺度融合num_modules控制重复模块数在不同分辨率分支间反复交换信息这是它相比编码器-解码器结构在关键点定位精度上的优势所在。HRNet 的完整实现见 mmpose/models/backbones/hrnet.pyW48 差异num_channels变为 stage2 (48, 96)、stage3 (48, 96, 192)、stage4 (48, 96, 192, 384)且in_channels48使用 HRNet-W48 预训练权重hrnet_w48-8ef0771d.pthHeatmapHeadin_channels32取 HRNet 最高分辨率分支的通道数W48 为 48out_channels133对应 133 个关键点各输出一张热图deconv_out_channelsNone表示不使用反卷积升维直接由骨干的高分辨率特征预测热图损失KeypointMSELossuse_target_weightTrue表示用 codec 生成的关键点权重对每个关键点的 MSE 损失进行加权可见与不可见关键点区别对待测试配置flip_testTrue开启水平翻转测试增强原图与翻转图各自预测后融合flip_modeheatmap表示在热图层面进行翻转融合shift_heatmapTrue则对翻转后热图做 1 像素偏移校正弥补翻转采样导致的亚像素偏差。3.5 数据集与数据流水线dataset_type CocoWholeBodyDataset data_mode topdown data_root data/coco/ train_pipeline [ dict(typeLoadImage), dict(typeGetBBoxCenterScale), dict(typeRandomFlip, directionhorizontal), dict(typeRandomHalfBody), dict(typeRandomBBoxTransform), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typeGenerateTarget, encodercodec), dict(typePackPoseInputs) ] val_pipeline [ dict(typeLoadImage), dict(typeGetBBoxCenterScale), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typePackPoseInputs) ]数据集类CocoWholeBodyDataset实现于 mmpose/datasets/datasets/wholebody/coco_wholebody_dataset.py其parse_data_info方法将标注中的keypoints、foot_kpts、face_kpts、lefthand_kpts、righthand_kpts五段关键点拼接为 133 维coco_wholebody_dataset.py并将可见性统一映射为 0/1训练流水线加载图像 → 由 bbox 计算中心与尺度 → 水平随机翻转 → 随机半身采样RandomHalfBody强制包含上半身或下半身关键点提升半身场景鲁棒性→ 随机 bbox 扰动缩放/平移/旋转→ topdown 仿射变换到input_size→ 按 codec 生成热图标签 → 打包验证流水线不含任何随机增强仅做仿射变换到固定尺寸数据加载器训练集使用coco_wholebody_train_v1.0.json、图片前缀train2017/batch size 64W48 为 32shuffle 开启验证集使用coco_wholebody_val_v1.0.json、图片前缀val2017/。3.6 验证检测框来源bbox_fileval_dataloader dict( ... datasetdict( ... bbox_filedata/coco/person_detection_results/ COCO_val2017_detections_AP_H_56_person.json, pipelineval_pipeline, ))验证与测试阶段不直接使用标注中的 GT bbox而是加载COCO_val2017_detections_AP_H_56_person.json这一检测结果文件即文档标题所注detector having human AP of 56.4 on COCO val2017的检测器输出从而在检测姿态的完整链路上公平衡量姿态模型的性能。使用 GT bbox 与使用检测 bbox 的评测结果通常有明显差异这是阅读精度表时必须注意的前提条件。3.7 评估器CocoWholeBodyMetric 分区评估val_evaluator dict( typeCocoWholeBodyMetric, ann_filedata_root annotations/coco_wholebody_val_v1.0.json)CocoWholeBodyMetric实现于 mmpose/evaluation/metrics/coco_wholebody_metric.py它继承CocoMetric将 133 个关键点按body_num17, foot_num6, face_num68, left_hand_num21, right_hand_num21切分为五个分区并使用COCOeval依次对keypoints_body、keypoints_foot、keypoints_face、keypoints_lefthand、keypoints_righthand以及全量keypoints_wholebody六组配置分别执行 OKS 评估coco_wholebody_metric.py。不同分区使用不同的sigmas从数据集元信息sigmas字段读取反映各关键点的归一化标准差因此表格中的 Body / Foot / Face / Hand / Whole 指标是各自独立的评估结果不可混为一谈。评估器还支持format_only模式可在无 GT 标注时仅输出 COCO 格式的预测结果文件用于提交。四、从源码看数据与标注的完整链路综合上述源码可以梳理出 HRNet 全身姿态训练的数据链路CocoWholeBodyDataset.parse_data_info把五段关键点拼接成 (1, 133, 3) 并裁剪 bbox 到图像边界同时计算实例面积coco_wholebody_dataset.py数据流水线将裁剪实例仿射到 256×192或 384×288MSRAHeatmap.encode把图像坐标除以 4 的缩放因子以 sigma2或 3在 48×64或 72×96热图上铺置高斯峰输出 (133, H, W) 标签msra_heatmap.pyHRNet 输出 32或 48通道高分辨率特征HeatmapHead预测 133 通道热图与标签计算加权 MSE 损失验证时CocoWholeBodyMetric把预测结果按五个分区拆分用各自 sigmas 计算 AP/AR并在save_best钩子中跟踪coco-wholebody/AP。五、训练与测试命令仓库提供了标准训练/测试入口 tools/train.py 与 tools/test.py以及分布式脚本 tools/dist_train.sh、tools/dist_test.sh。单机多卡训练命令形如# 8 卡训练 HRNet-W32 256x192 配置 bash tools/dist_train.sh \ configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody/td-hm_hrnet-w32_8xb64-210e_coco-wholebody-256x192.py \ 8测试验证命令bash tools/dist_test.sh \ configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody/td-hm_hrnet-w32_8xb64-210e_coco-wholebody-256x192.py \ checkpoint路径 8运行前提按 docs/zh_cn/user_guides/prepare_datasets.md 将 COCO-WholeBody 数据放置于data/coco/目录标注文件annotations/coco_wholebody_*_v1.0.json与train2017/、val2017/图片并将检测框文件COCO_val2017_detections_AP_H_56_person.json放到data/coco/person_detection_results/下否则验证阶段会因缺少检测框文件而无法进行标准评测。数据集准备细节还可参考 docs/zh_cn/user_guides/train_and_test.md。六、同目录配置对比与选型建议在 configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody 目录下MMPose 还提供了同一任务的其他骨干配置便于横向对比与选型HRNet本文主体精度与速度的均衡选择W32/W48 两个规模、两种分辨率共 4 个基准另有 2 个 DarkPose 变体见 hrnet_dark_coco-wholebody.mdResNet-50/101/152经典简单基线结构SimpleBaselinestd-hm_res50_8xb64-210e_coco-wholebody-256x192.py等 6 个配置见 resnet_coco-wholebody.mdVIPNAS轻量骨干方案含 DarkPose 变体见 vipnas_coco-wholebody.md 与 vipnas_dark_coco-wholebody.mdCSPNeXtRTMPose 系列新一代高精度高效配置见 cspnext_udp_coco-wholebody.md。选型时可遵循的规律依据上述基准表追求全身整体精度选 HRNet-W48 384×288对脚/脸等小目标精细关键点要求高时优先提高输入分辨率资源受限场景可考虑 VIPNAS 或 CSPNeXt 轻量配置。七、总结本文围绕 MMPose 的 HRNet × COCO-WholeBody 模型库从任务定义133 关键点五分区、精度基准4 个官方配置、配置逐段解析优化策略、codec、模型结构、流水线、评估器到源码级数据链路与训练命令完成了完整闭环。核心要点可归纳为COCO-WholeBody 的 133 关键点由身体17 脚6 脸68 手42组成MMPose 通过CocoWholeBodyDataset一次性拼接加载配置使用MSRAHeatmapcodec 将关键点编码为 1/4 分辨率的高斯热图解码时带亚像素细化与可选翻转测试增强评估采用CocoWholeBodyMetric对五个分区分别计算 AP/AR模型库表格中的每列指标对应独立的 OKS 评估流程复现基准时需同时准备训练/验证标注、对应图片与人体检测框文件并可通过dist_train.sh/dist_test.sh一键训练与评测。读者可基于上述任一配置文件替换主干网络、调整输入分辨率或修改 codec 参数如启用 DarkPose 无偏编解码在同一数据与评估协议下开展自己的算法实验。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →