MMPose 中 HRNet 在 PoseTrack18 上的 Top-Down 热图人体姿态估计:配置、训练策略与评测全流程解析

发布时间:2026/9/16 15:48:05
MMPose 中 HRNet 在 PoseTrack18 上的 Top-Down 热图人体姿态估计:配置、训练策略与评测全流程解析
MMPose 中 HRNet 在 PoseTrack18 上的 Top-Down 热图人体姿态估计配置、训练策略与评测全流程解析【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本文以 MMPose 模型库文档 hrnet_posetrack18.md 为主体完整梳理 HRNet 系列模型在 PoseTrack2018 验证集上的两套评测结果GT 检测框与 Cascade R-CNN 检测器并逐段解读对应训练配置文件w32 配置、w48 配置深入讲解 PoseTrack18 的 17 关键点定义、热图解码器、学习率策略、检测框过滤与 poseval 评测指标的底层实现帮助读者完整复现并理解该任务的训练与评测流程。1. 模型库结果总览两套评测设置下的 AP 指标hrnet_posetrack18.md 给出的核心信息是 PoseTrack2018 验证集上的两组 AP 结果。PoseTrack18 是视频姿态估计基准其关键特点是人物通常较小、被遮挡且密集因此模型输入与网络容量对精度影响显著文档同时报告了 HRNet-W32 与 HRNet-W48 两种宽度、两种输入分辨率共 4 个模型的结果。1.1 使用 GTground-truth检测框评测架构输入尺寸HeadShouElbWriHipKneeAnklTotalHRNet-W32256x19286.289.084.579.282.382.578.783.4HRNet-W32384x28887.189.085.180.280.682.879.683.7HRNet-W48256x19288.390.286.081.080.783.380.684.6HRNet-W48384x28887.890.086.281.381.083.480.984.61.2 使用 Cascade R-CNN (X-101-64x4d-FPN) 人体检测器评测模型库文档明确说明第二组结果使用 MMDetection 预训练的 Cascade R-CNNX-101-64x4d-FPN人体检测器提供的检测框进行评测。该检测器配置在仓库中同样有对应文件可参考 cascade_rcnn_x101_64x4d_fpn_1class.py。架构输入尺寸HeadShouElbWriHipKneeAnklTotalHRNet-W32256x19278.082.979.573.876.976.670.276.9HRNet-W32384x28879.983.680.474.574.876.170.577.3HRNet-W48256x19280.183.480.674.874.376.870.577.4HRNet-W48384x28880.283.880.975.274.776.771.777.8两组结果相差约 6~7 个 Total AP 点直观体现了上游人体检测框质量对 Top-Down 两阶段流水线的制约检测框质量提升时小目标/密集场景下姿态精度的衰减被放大Ankl 降幅最大。这与 PoseTrack 场景中目标尺寸偏小的特性一致。文档同时说明所有模型先在 COCO 数据集上预训练再在 PoseTrack18 上微调。这一流程在配置文件中通过load_from字段落实见下文第 4 节。2. PoseTrack18 数据集17 关键点定义与元信息PoseTrack18 相对 COCO 的 17 个关键点定义更为特殊头部被拆分为多个关键点。从数据集类 PoseTrack18Dataset 的源码可以看到它直接继承BaseCocoStyleDataset关键点顺序为0: nose 1: head_bottom 2: head_top 3: left_ear 4: right_ear 5: left_shoulder 6: right_shoulder 7: left_elbow 8: right_elbow 9: left_wrist 10: right_wrist 11: left_hip 12: right_hip 13: left_knee 14: right_knee 15: left_ankle 16: right_ankle其元信息关键点对、颜色、骨架连接、joint_weights、sigmas集中在 posetrack18.py 中joint_weights左右肘权重为 1.2、左右腕为 1.5高于躯干与腿部关键点的 1.0 或 1.2用于评测时按权重汇总 APsigmas每个关键点独立的 OKS 尺度标准差例如 nose 为 0.026、hip 为 0.107是 OKS 相似度计算的核心参数头部关键点nose/head_bottom/head_top与左右耳均标记typeupper左右关键点成对声明swap关系用于水平翻转增广时自动交换。PoseTrack18Dataset还支持bbox_file与filter_cfg参数当设置了检测框文件时评测阶段会改用检测框而非 GT 框这正是第 1.2 节结果的来源源码见 posetrack18_dataset.py#L34-L45。对应测试用例位于 test_posetrack18_dataset.py 与 test_posetrack18_video_dataset.py。3. 配置文件逐段解读以 HRNet-W32 (256x192) 为主线以下解析基于 td-hm_hrnet-w32_8xb64-20e_posetrack18-256x192.py其余三个配置w32-384x288、w48-256x192、w48-384x288结构一致仅网络宽度与输入分辨率不同。3.1 热图解码器 codeccodec dict( typeMSRAHeatmap, input_size(192, 256), heatmap_size(48, 64), sigma2)MSRAHeatmap是 SimpleBaseline 风格的仿射高斯热图编解码器输入裁剪图 (高 x 宽) 为 192×256对应热图 (48×64)即 4 倍下采样sigma控制高斯峰宽度256x192 输入用sigma2384x288 输入热图 72×96用sigma3见 w48-384x288 配置 L38-L39分辨率越高高斯越宽与像素密度匹配。3.2 模型主体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)))), headdict( typeHeatmapHead, in_channels32, out_channels17, deconv_out_channelsNone, lossdict(typeKeypointMSELoss, use_target_weightTrue), decodercodec), test_cfgdict(flip_testTrue, flip_modeheatmap, shift_heatmapTrue))各要点说明HRNet 四阶段多分辨率结构stage2 起保留 2/4/8/16 倍下采样共 4 个分支分支间通过交叉交换融合全程维持高分辨率特征。W32 与 W48 的差异仅在通道数——W48 各阶段通道为(48, 96, 192, 384)见 w48 配置 L64-L77而 W32 为(32, 64, 128, 256)out_channels17直接对应 PoseTrack18 的 17 个关键点W32 的头部输入通道in_channels32即 HRNet 最高分辨率分支的通道数W48 对应为 48KeypointMSELoss(use_target_weightTrue)按关键点所在像素的高斯幅值加权 MSE 损失使峰值区域权重更高flip_testTrue, flip_modeheatmap, shift_heatmapTrue测试时做左右翻转推理并对热图取平均flip 后热图镜像叠加shift_heatmapTrue在解码时采用 1/4 像素的局部极大值细化这两项是 Top-Down 热图模型的标准测试增强norm_cfg dict(typeSyncBN, requires_gradTrue)使用同步 BatchNorm配合多卡训练基础运行时配置 default_runtime.py 中的SyncBuffersHook会在每个 epoch 结束同步各卡 BN 的 running 统计量保证训练期与测试期 BN 行为一致。3.3 训练策略优化器、学习率与自动缩放train_cfg dict(max_epochs20, val_interval1) optim_wrapper dict(optimizerdict(typeAdam, lr5e-4)) param_scheduler [ dict(typeLinearLR, begin0, end500, start_factor0.001, by_epochFalse), # warm-up dict(typeMultiStepLR, begin0, end20, milestones[10, 15], gamma0.1, by_epochTrue) ] auto_scale_lr dict(base_batch_size512)微调共 20 个 epochAdam 初始学习率 5e-4远低于从头训练的 1e-3 量级符合微调惯例前 500 个 iteration 线性 warmup从 0.001×lr 升至 lr之后在第 10、15 个 epoch 将学习率各乘以 0.1auto_scale_lr按base_batch_size512线性缩放学习率默认配置每卡batch_size648 卡时总 batch 恰为 512学习率不变换用 4 卡则 lr 自动减半便于不同硬件规模复现。最佳模型保存策略也值得注意default_hooks dict( checkpointdict(save_bestposetrack18/Total AP, rulegreater, interval1))以验证集posetrack18/Total AP为准则按 epoch 保存最优权重其中指标前缀posetrack18来自PoseTrack18Metric的default_prefix见第 5 节。3.4 数据管线与预训练权重加载train_pipeline [ dict(typeLoadImage), dict(typeGetBBoxCenterScale), dict(typeRandomFlip, directionhorizontal), dict(typeRandomHalfBody), dict(typeRandomBBoxTransform), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typeGenerateTarget, encodercodec), dict(typePackPoseInputs) ]这是 Top-Down 热图训练的标准增强链GetBBoxCenterScale由检测框计算中心与尺度 →RandomFlip水平翻转 →RandomHalfBody随机保留半身框对遮挡/截断场景尤为重要→RandomBBoxTransform随机缩放平移 →TopdownAffine仿射裁剪到输入尺寸 →GenerateTarget用MSRAHeatmap编码生成热图标签。验证管线则去掉随机增广保持确定性裁剪。配置文件第 35 行通过load_from指定 COCO 预训练权重如 W32-256x192 加载td-hm_hrnet-w32_8xb64-210e_coco-256x192权重即文档中“先在 COCO 预训练再在 PoseTrack18 微调”的具体落地。注意load_from与断点续训的resume不同前者只加载权重用于迁移微调后者恢复完整训练状态定义见 default_runtime.py#L45-L46。数据加载器配置val_dataloader dict( batch_size32, ..., datasetdict( typedataset_type, data_rootdata_root, # data/posetrack18/ data_modedata_mode, # topdown ann_fileannotations/posetrack18_val.json, # comment bbox_file and filter_cfg if use gt bbox for evaluation bbox_filedata/posetrack18/annotations/ posetrack18_val_human_detections.json, filter_cfgdict(bbox_score_thr0.4), ...))这里同时给出两种评测模式的切换方法注释掉bbox_file与filter_cfg即回到 GT 检测框评测对应 1.1 节结果保留二者则使用检测器输出且bbox_score_thr0.4会丢弃置信度低于 0.4 的检测框对应 1.2 节结果。训练集使用annotations/posetrack18_train.json。4. 训练与评测命令在 MMPose 仓库根目录下已安装依赖并准备data/posetrack18/数据集多卡训练与评测的标准命令为# 多机多卡训练单机 8 卡 python -m torch.distributed.launch --nnodes1 --nproc_per_node8 \ --master_port29500 tools/train.py \ configs/body_2d_keypoint/topdown_heatmap/posetrack18/td-hm_hrnet-w32_8xb64-20e_posetrack18-256x192.py # 评测--work-dir 与训练时一致AP 评测需安装 poseval见 requirements/optional.txt python -m torch.distributed.launch --nnodes1 --nproc_per_node8 \ --master_port29500 tools/test.py \ configs/body_2d_keypoint/topdown_heatmap/posetrack18/td-hm_hrnet-w32_8xb64-20e_posetrack18-256x192.py \ work_dirs/.../latest.pth --evaluate AP单机单卡可将 launch 命令替换为python tools/train.py config。训练入口与测试入口分别为 tools/train.py 与 tools/test.py。5. 评测指标底层实现PoseTrack18Metric配置中声明的评测器val_evaluator dict( typePoseTrack18Metric, ann_filedata_root annotations/posetrack18_val.json)其实现位于 posetrack18_metric.py核心事实如下依赖 poseval类构造时检测poseval包是否可用缺失则直接抛出 ImportError要求安装见 requirements/optional.txt避免评测长时间空跑按视频序列分文件导出results2json会遍历 GT 目录下每个视频序列的 json 文件将预测结果按序列逐一写出再交给 poseval 的eval_helpers.load_data_direvaluateAP做逐帧多人 AP 计算_do_python_keypoint_eval评测口径输出Head AP / Shou AP / Elb AP / Wri AP / Hip AP / Knee AP / Ankl AP / AP8 项统计量与模型库表格中 7 个部位列加 Total 列完全对应默认参数score_modebbox_keypoint关键点分数回填检测框分数keypoint_score_thr0.2、nms_modeoks_nms、nms_thr0.9即按 OKS 相似度做非极大值抑制。这些默认值在 posetrack18_metric.py#L74-L83 中定义指标前缀default_prefix posetrack18所以日志与最佳权重选择中的指标名为posetrack18/Total AP与第 3.3 节 checkpoint hook 的配置呼应。6. 结果解读与配置选择建议综合模型库数据与配置实现可以得到以下可操作的结论网络宽度的收益 输入分辨率的收益GT 框设置下W32→W48 在 256x192 下 Total 从 83.4 提升到 84.61.2而 W32 提高分辨率只带来 0.3若追求精度优先选 W48-256x192 配置精度与 W48-384x288 持平但推理更省。检测框是端到端场景的第一瓶颈Cascade R-CNN 框下各模型 Total 仅 76.9~77.8其中 Ankl 全部跌破 72。若部署时检测器可换更强的模型仓库提供 cascade_rcnn_x101_64x4d_fpn_1class.py 等检测器配置可复用整体 AP 会显著优于姿态网络本身的提升空间。微调策略固定所有配置均为 COCO 预训练 20 epoch 微调 Adam 5e-4 [10,15] 里程碑衰减复现或迁移到类似视频基准如 Posetrack 其他年份时可沿用这套训练策略模板。7. 相关文件索引内容路径模型库文档本文主体hrnet_posetrack18.mdW32 训练配置256x192 / 384x288256x192 / 384x288W48 训练配置256x192 / 384x288256x192 / 384x288模型元数据结果 YAMLhrnet_posetrack18.yml数据集类posetrack18_dataset.py数据集元信息关键点/sigmas/joint_weightsposetrack18.py评测指标posetrack18_metric.py默认运行时hooks/SyncBuffersdefault_runtime.py训练/测试入口train.py / test.py数据集测试test_posetrack18_dataset.py【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考