资讯详情

MMPose 中的 HRNetV2:高分辨率表示学习的骨干网络实现与实战配置

📅 2026/9/17 7:50:13 | 华诺云谱 👁 阅读
MMPose 中的 HRNetV2:高分辨率表示学习的骨干网络实现与实战配置
MMPose 中的 HRNetV2高分辨率表示学习的骨干网络实现与实战配置【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose导读本文围绕 OpenMMLab 姿态估计工具箱 MMPose 中引入的HRNetV2High-Resolution NetworkTPAMI2019骨干网络展开重点解析其全程保持高分辨率表示 多分辨率并行连接 重复跨分辨率信息交换的核心设计思想并结合仓库中 mmpose/models/backbones/hrnet.py 的源码实现、单元测试与 COCO 姿态估计配置文件说明如何在 MMPose 中配置、训练与测试基于 HRNetV2 的 top-down 热图模型。读完后你将掌握 HRNetV2 的架构原理、extra配置字典中每个参数的含义以及从 w32 到 w48 变体的完整实战方案。HRNetV2 论文核心为什么全程高分辨率更优本文关联文档 docs/src/papers/algorithms/hrnetv2.md 是 HRNetV2 论文的元数据页其摘要明确指出高分辨率表示high-resolution representation对姿态估计这类位置敏感position-sensitive的视觉任务至关重要。在 HRNet 之前主流框架如 ResNet、VGGNet的做法是通过由高分辨率到低分辨率的串行卷积子网络high-to-low resolution convolutions in series先把输入图像编码成低分辨率表示再通过上采样等操作从低分辨率表示中恢复高分辨率。这种先降后升的设计在恢复过程中不可避免地损失空间精度。HRNet 则反其道而行之其两大关键特性是并行连接多个高分辨率到低分辨率的卷积流connect the high-to-low resolution convolution streams in parallel反复进行跨分辨率的信息交换repeatedly exchange the information across resolutions。由此得到的表示语义更丰富、空间更精确semantically richer and spatially more precise。论文在人体姿态估计、语义分割、目标检测等多个任务上验证了 HRNet 作为通用骨干网络的优越性。对应地仓库还收录了同系列的 CVPR2019 原始论文页 docs/src/papers/algorithms/hrnet.md两者共同构成 MMPose 对 HRNet 家族的完整论文支撑。article{WangSCJDZLMTWLX19, title{Deep High-Resolution Representation Learning for Visual Recognition}, author{Jingdong Wang and Ke Sun and Tianheng Cheng and Borui Jiang and Chaorui Deng and Yang Zhao and Dong Liu and Yadong Mu and Mingkui Tan and Xinggang Wang and Wenyu Liu and Bin Xiao}, journal{TPAMI}, year{2019} }MMPose 中 HRNet 的源码级架构实现MMPose 的 HRNet 骨干网络实现在 mmpose/models/backbones/hrnet.py通过MODELS.register_module()注册为HRNet可直接在配置中以typeHRNet引用。整个实现由HRNet骨干与HRModule模块两个类构成。Stem 网络两段式 4 倍下采样进入 stage 之前输入先经过 stem 网络hrnet.py#L311-L335连续两个kernel_size3, stride2的卷积 BN ReLU把输入图像从 1 倍分辨率降到 1/4 分辨率并把通道数扩张到 64。这意味着 HRNet 的最高分辨率分支实际上是原始图像的 1/4后续所有并行分支都在这一分辨率之上叠加更低分辨率的流。四个 Stage 与过渡层Transition Layer骨干网络由 stage1 至 stage4 四级构成stage 之间通过_make_transition_layerhrnet.py#L410-L455过渡stage1单分支1/4 分辨率使用 4 个 Bottleneck 块相当于一个缩小版 ResNetstage2新增 1/8 分辨率分支共 2 条并行分支stage3新增 1/16 分辨率分支共 3 条并行分支stage4新增 1/32 分辨率分支共 4 条并行分支。每个新阶段都会从已有分支中通过步长为 2 的卷积生长出一条更低分辨率的流同时保持原有高分分支继续并行运行。这与串行编码 再恢复的传统主干形成鲜明对比。HRModule并行分支 融合层每个 stage 由若干个HRModule串联而成。HRModulehrnet.py#L14-L211内部包含两部分分支组_make_branches每条分辨率分支由若干BasicBlock/Bottleneck组成默认每个模块 4 个 block从源码注释 every branch has 4 BasicBlocks/Bottlenecks 可确认融合层_make_fuse_layers负责跨分辨率信息交换。融合层是 HRNet 的灵魂所在其交换逻辑hrnet.py#L137-L190为从低分辨率到高分辨率j i低分辨率特征先经过1×1卷积对齐通道再用nn.Upsample按2**(j-i)倍上采样同分辨率j i直连None从高分辨率到低分辨率j i通过stride2的3×3卷积逐级下采样中间级还会插入 BN ReLU。forwardhrnet.py#L194-L211中各分支先独立计算再把来自所有分支的特征逐像素求和并经过 ReLU 输出从而让每一条分支都能反复接收到来自其他分辨率的信息——这正是论文中 repeated multi-scale fusions 的直接代码体现。输出单尺度 vs 多尺度HRModule的multiscale_output参数控制模块输出为False时融合层只输出最高分辨率分支num_out_branches 1为True时输出所有并行分支。默认情况下只有 stage4 的最后一个模块由_make_stage根据stage4_cfg.get(multiscale_output, False)决定hrnet.py#L393-L396因此骨架默认输出单尺度特征这与 top-down 热图头HeatmapHead的in_channels直接取最高分辨率分支通道数的配合方式一致。辅助特性frozen_stages、zero_init_residual 与 norm_evalHRNet的__init__还提供若干工程化选项frozen_stages冻结前 N 个 stage含对应 transition用于迁移学习或微调场景由_freeze_stageshrnet.py#L525-L549实现-1表示不冻结zero_init_residual将残差块最后一个 BN 层初始化为 0使残差块初始行为接近恒等映射norm_eval训练时将 BN 保持为 eval 模式仅影响 BN 及其变体可在train()中通过 hrnet.py#L603-L610 看到其对_BatchNorm的遍历处理。这些行为都有对应的单元测试验证见 tests/test_models/test_backbones/test_hrnet.py其中test_hrnet_backbone构造了完整的 4 阶段 HRNet断言feat[-1].shape [2, 32, 56, 56]输入 224×224 时最高分辨率分支输出 56×56 特征并逐一验证了zero_init_residual与frozen_stages3时 BN 的training标志与requires_grad状态。配置详解w32 与 w48 的 extra 字典在 MMPose 中配置 HRNet 不需要改动任何代码只需在骨干配置中传入extra字典。以 td-hm_hrnet-w32_8xb64-210e_coco-256x192.py 为例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, checkpointhttps://download.openmmlab.com/mmpose/ pretrain_models/hrnet_w32-36af842e.pth), )各参数含义如下与HRNet.__init__及_make_stage的实现一一对应参数含义取值说明num_modules该 stage 内 HRModule 的数量stage3 用 4、stage4 用 3更多模块意味着更多次跨分辨率融合num_branches并行分辨率分支数stage1 为 1之后逐级 1最多 4block残差块类型字符串映射到blocks_dict {BASIC: BasicBlock, BOTTLENECK: Bottleneck}hrnet.py#L282num_blocks每个模块中各分支的 block 数量元组长度必须等于num_branches否则_check_branches会抛出ValueErrornum_channels各分支基础通道数元组长度必须等于num_branchesBasicBlock的 expansion 为 1Bottleneck的 expansion 为 4由get_expansion计算multiscale_outputstage4 专用是否输出多尺度特征默认False输出最高分辨率分支w32 与 w48 的差异集中体现在 stage2~stage4 的num_channelsHRNet-w32(32,64)/(32,64,128)/(32,64,128,256)头部in_channels32HRNet-w48见 td-hm_hrnet-w48_8xb32-210e_coco-256x192.py为(48,96)/(48,96,192)/(48,96,192,384)头部in_channels48。通道数翻倍带来更强的表示能力但计算量也相应增大——因此 w32 使用batch_size648×64w48 降低为batch_size328×32。两个变体都通过init_cfgdict(typePretrained, ...)加载 OpenMMLab 发布的 ImageNet 预训练权重w32 为hrnet_w32-36af842e.pthw48 为hrnet_w48-8ef0771d.pth这是保证收敛速度与最终精度的关键。训练与测试实战完整 top-down 模型配置HRNet 在 MMPose 中通常作为 top-down 热图范式TopdownPoseEstimator HeatmapHead的骨干使用。以 w32/256×192 为例完整模型定义由以下部分组成td-hm_hrnet-w32_8xb64-210e_coco-256x192.pycodecMSRAHeatmapinput_size(192, 256)、heatmap_size(48, 64)、sigma2即输入 256×192 时热图下采样 4 倍到 64×48高斯核标准差 2headHeatmapHeadin_channels32w32 最高分辨率分支通道数、out_channels17COCO 关键点数、deconv_out_channelsNone不使用反卷积上采样直接以骨干输出的 1/4 分辨率特征预测热图、损失为KeypointMSELoss(use_target_weightTrue)test_cfg开启flip_testTrue、flip_modeheatmap、shift_heatmapTrue的测试时水平翻转集成。训练配套设置包括Adam 优化器lr5e-4、LinearLR前 500 iter 的 warm-upstart_factor0.001、MultiStepLR在 epoch 170/200 处以gamma0.1衰减、总 210 epoch并使用auto_scale_lr dict(base_batch_size512)按实际 batch size 自动缩放学习率checkpoint 保存以coco/AP为指标取优。数据管线与评估train pipeline 由RandomFlip、RandomHalfBody、RandomBBoxTransform、TopdownAffine按codec[input_size]仿射对齐与GenerateTarget按 encoder 生成高斯热图标签构成验证与测试管线只保留仿射对齐与打包。评估使用CocoMetrictop-down 范式需要外部检测器提供人体框配置中通过bbox_file指向 COCO val2017 的检测结果文件。启动训练与测试的标准命令为详见 docs/zh_cn/user_guides/train_and_test.md 与 docs/en/user_guides/train_and_test.md# 单卡训练 python tools/train.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-210e_coco-256x192.py # 多卡训练需先安装 mmengine 的分布式工具 bash tools/dist_train.sh configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-210e_coco-256x192.py 8 # 测试 python tools/test.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-210e_coco-256x192.py checkpoint路径已发布模型与精度基准MMPose 官方在 COCO val2017 上发布了 w32/w48 的预训练模型指标整理自 hrnet_coco.md人体检测器在 COCO val2017 上 human AP 为 56.4模型输入尺寸APAP⁵⁰AP⁷⁵ARAR⁵⁰pose_hrnet_w32256×1920.7490.9060.8210.8040.945pose_hrnet_w32384×2880.7610.9080.8260.8110.944pose_hrnet_w48256×1920.7560.9080.8260.8090.945pose_hrnet_w48384×2880.7670.9110.8320.8170.947从表中可观察到两个规律一是同一模型在 384×288 输入下 AP 普遍优于 256×192更高输入分辨率保留更多空间细节二是 w48 在相同输入尺寸下 AP 高于 w32。这些模型权重可通过对应配置页中的 ckpt 链接下载用于直接测试或微调。与增强 / 编解码器方案组合HRNet 作为骨干可以与 MMPose 中的多种编解码器与训练增强自由组合仓库中提供了一系列现成配置UDPUnbiased Data Processing解决热图编解码中的坐标偏移偏差配置见 td-hm_hrnet-w32_udp-8xb64-210e_coco-256x192.py。根据 hrnet_udp_coco.mdw32/UDP 在 256×192 下 AP 提升到 0.762w48/UDP 达 0.768且 AP⁷⁵ 同步提升DARKDistribution-Aware coordinate Representation见 td-hm_hrnet-w32_dark-8xb64-210e_coco-256x192.py通过分布感知的坐标解码提升关键点定位精度FP16 混合精度见 td-hm_hrnet-w32_fp16-8xb64-210e_coco-256x192.py降低显存占用、加速训练多种数据增强包括 CoarseDropouttd-hm_hrnet-w32_coarsedropout-8xb64-210e_coco-256x192.py、GridMask、Photometric 等用于提升泛化能力。此外HRNet 骨架并不局限于 COCO 人体姿态仓库中configs/下大量 animal、face、hand 等 topdown_heatmap 配置同样以 HRNet 作为骨干例如动物关键点数据集 ap10k、人脸数据集 wflw 等充分体现了 HRNetV2 作为通用高分辨率骨干的跨任务适用性。总结HRNetV2TPAMI2019以并行高-低分辨率流 反复跨分辨率融合的设计取代了传统降采样编码-上采样恢复的范式为姿态估计提供了空间更精确、语义更丰富的表示。在 MMPose 中源码实现位于 mmpose/models/backbones/hrnet.py核心是HRNet骨干与HRModule分支组 融合层注册名为HRNet通过extra字典即可完整刻画网络结构num_branches、num_modules、num_blocks、num_channels、block无需修改代码w32 / w48 等变体及 UDP、DARK、FP16、多种增强的组合配置均可直接复用训练/测试命令统一由 tools/train.py 与 tools/test.py 入口执行。无论你是要在 COCO 上复现论文基线还是将 HRNetV2 作为骨干接入自己的姿态估计或分割任务上述源码解析与配置说明都提供了从原理到实战的完整路径。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。