
MMPose 中 HRFormer 在 COCO 上的 2D 人体姿态估计顶下行热图方案配置与源码全解析【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmposeHRFormerHigh-Resolution Vision Transformer for Dense Prediction是 2021 年 NeurIPS 收录的高分辨率视觉 Transformer 骨干网络它将 HRNet 的多分辨率并行架构与局部窗口自注意力Local-Window Self-Attention相结合以 Transformer 的全局建模能力换取密集预测任务如姿态估计所需的高分辨率特征。本文以 configs/body_2d_keypoint/topdown_heatmap/coco/hrformer_coco.md 为核心骨架结合 MMPose 仓库中的 4 套 HRFormer COCO 训练配置、骨干网络实现 mmpose/models/backbones/hrformer.py 与 MSRA 热图编解码器 mmpose/codecs/msra_heatmap.py完整还原 HRFormer 在 COCO 人体关键点任务上的模型库、配置文件逐段解读、底层原理与训练/测试/推理实操帮助你彻底掌握这类高分辨率 Transformer姿态模型的落地方法。HRFormer 模型与 COCO 数据集背景算法来源HRFormer 由 Yuan 等人提出发表于 NeurIPS 2021论文标题为HRFormer: High-Resolution Vision Transformer for Dense Predict其核心思想是不再像 ViT 那样使用低分辨率、全局注意力的单尺度架构而是像 HRNet 一样并行维护多个分辨率的特征分支同时用局部窗口 Transformer 模块替换 HRNet 中的卷积残差块从而在保持高分辨率特征的同时引入自注意力的长程建模能力。官方引用格式bibtex如下可在你的论文中直接使用article{yuan2021hrformer, title{HRFormer: High-Resolution Vision Transformer for Dense Predict}, author{Yuan, Yuhui and Fu, Rao and Huang, Lang and Lin, Weihong and Zhang, Chao and Chen, Xilin and Wang, Jingdong}, journal{Advances in Neural Information Processing Systems}, volume{34}, year{2021} }评测数据集模型库结果在 COCO val2017 上评测数据集引用自Microsoft COCO: Common Objects in ContextECCV 2014inproceedings{lin2014microsoft, title{Microsoft coco: Common objects in context}, author{Lin, Tsung-Yi and Maire, Michael and Belongie, Serge and Hays, James and Perona, Pietro and Ramanan, Deva and Doll{\a}r, Piotr and Zitnick, C Lawrence}, booktitle{European conference on computer vision}, pages{740--755}, year{2014}, organization{Springer} }需要强调的是以下所有结果均为顶下行top-down方案先由检测器提供人体框再对每个检测框内的单人做关键点定位因此评测前提是使用在 COCO val2017 上人物 AP 为 56.4 的检测器。COCO 上的 HRFormer 模型库与性能总览hrformer_coco.md 记录了 4 个预训练模型HRFormer-Small / HRFormer-Base × 256x192 / 384x288其完整指标如下评测于 COCO val2017ArchInput SizeAPAP50AP75ARAR50ckptlogpose_hrformer_small256x1920.7380.9040.8120.7930.941hrformer_small_coco_256x192-5310d898_20220316.pthhrformer_small_coco_256x192_20220316.log.jsonpose_hrformer_small384x2880.7570.9050.8240.8070.941hrformer_small_coco_384x288-98d237ed_20220316.pthhrformer_small_coco_384x288_20220316.log.jsonpose_hrformer_base256x1920.7540.9060.8270.8070.943hrformer_base_coco_256x192-6f5f1169_20220316.pthhrformer_base_coco_256x192_20220316.log.jsonpose_hrformer_base384x2880.7740.9090.8420.8230.945hrformer_base_coco_384x288-ecf0758d_20220316.pthhrformer_base_coco_384x288_20220316.log.json从表中可以观察到三条规律输入分辨率是关键杠杆同一骨干从 256x192 提升到 384x288AP 提升约 1.9~2.0 个百分点small 0.738→0.757base 0.754→0.774但计算量与显存开销也随之显著增长骨干容量带来增益同样输入尺寸下base 比 small 高出约 1.6~1.7 个 AP 点AP75增益更明显base384x288 的 AP75达 0.842说明更强的骨干与大分辨率对精确定位更难的正样本提升更大。这些元数据同时记录在 hrformer_coco.yml 中含 Weights 字段该 yml 由 docs/en/collect_modelzoo.py 之类的工具统一维护可用于模型索引与自动下载。配置文件逐段深度解析4 套配置共享几乎完全相同的训练体系仅骨干结构small/base与编解码尺寸不同。下面以 td-hm_hrformer-base_8xb32-210e_coco-256x192.py 为主线逐段拆解。1. 基础配置与运行时_base_ [../../../_base_/default_runtime.py] # runtime train_cfg dict(max_epochs210, val_interval10)_base_继承 configs/base/default_runtime.py该文件提供默认的日志、checkpoint、随机种子、环境信息等运行时组件训练210 个 epoch每10 个 epoch验证一次。2. 优化器与参数分组optim_wrapper dict( optimizerdict( typeAdamW, lr5e-4, betas(0.9, 0.999), weight_decay0.01, ), paramwise_cfgdict( custom_keys{relative_position_bias_table: dict(decay_mult0.)}))采用AdamW初始学习率5e-4权重衰减0.01关键细节relative_position_bias_table相对位置偏置表不参与权重衰减decay_mult0.。这是从 Swin/HRFormer 系列继承的惯例——位置偏置参数本质上是坐标编码施加 L2 正则反而会限制其表达能力该表在源码 mmpose/models/backbones/hrformer.py 中以nn.Parameter定义尺寸为(2*Wh-1) * (2*Ww-1), num_heads窗口为 7x7 时即为(13*13, num_heads)。3. 学习率调度param_scheduler [ dict( typeLinearLR, begin0, end500, start_factor0.001, by_epochFalse), # warm-up dict( typeMultiStepLR, begin0, end210, milestones[170, 200], gamma0.1, by_epochTrue) ]前500 个 iteration做线性 warm-up起始为 1‰ 学习率帮助 Transformer 类模型稳定启动之后按MultiStepLR在170、200 epoch处各衰减 0.1 倍最终在 210 epoch 结束。4. 自动学习率缩放auto_scale_lr dict(base_batch_size256)MMPose 会按实际 batch size / 256的比例自动缩放学习率因此即使你把batch_size从 32 调整为其他值也能保持等效训练动力学。5. 编解码器Codec设置codec dict( typeMSRAHeatmap, input_size(192, 256), heatmap_size(48, 64), sigma2)这是MSRA 风格的高斯热图编解码器出自Simple Baselines for Human Pose Estimation and TrackingXiao et al., 2018input_size(192, 256)模型输入为宽 192、高 256heatmap_size(48, 64)输出热图分辨率为输入的 1/4sigma2高斯核标准差384x288 配置对应改为input_size(288, 384), heatmap_size(72, 96), sigma3高斯核随分辨率同步放大。从源码 mmpose/codecs/msra_heatmap.py 看MSRAHeatmap内部维护scale_factor input_size / heatmap_size此处为 4编码时把关键点坐标缩放后生成(K, H, W)的高斯热图并输出keypoint_weights供损失函数按可见性加权解码时先用get_heatmap_maximum取热图峰值再通过 refine_keypoints 做亚像素细化若开启unbiasedTrue则走 DarkPose 的refine_keypoints_dark最后乘回scale_factor还原到原图坐标。6. 模型结构TopdownPoseEstimatornorm_cfg dict(typeSyncBN, requires_gradTrue) model dict( typeTopdownPoseEstimator, data_preprocessordict( typePoseDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], bgr_to_rgbTrue), backbonedict(typeHRFormer, ...), headdict( typeHeatmapHead, in_channels78, out_channels17, deconv_out_channelsNone, lossdict(typeKeypointMSELoss, use_target_weightTrue), decodercodec), test_cfgdict( flip_testTrue, flip_modeheatmap, shift_heatmapTrue, ))归一化参数采用 ImageNet 统计量mean/std与bgr_to_rgbTrueMMCV 的默认图像加载顺序是 BGRHeatmapHead直接接骨干最高分辨率分支base 为 78 通道deconv_out_channelsNone表示不使用传统 SimpleBaseline 的反卷积上采样而是让 HRFormer 自带的高分辨率分支直接输出 1/4 分辨率热图out_channels17对应 COCO 的 17 个人体关键点损失为KeypointMSELoss且use_target_weightTrue即用keypoint_weights屏蔽被遮挡/未标注的关键点flip_testTrue测试时对原图与水平翻转图分别推理热图翻转对齐后取平均flip_modeheatmapshift_heatmapTrue会对翻转热图做 1 像素偏移修正——这是 COCO 评测中普遍使用、能稳定带来约 1 AP 点提升的技巧。7. 骨干网络 HRFormer 的 extra 配置这是 HRFormer 配置中最核心的部分直接决定网络形状backbonedict( typeHRFormer, in_channels3, norm_cfgnorm_cfg, extradict( drop_path_rate0.2, with_rpeTrue, stage1dict( num_modules1, num_branches1, blockBOTTLENECK, num_blocks(2, ), num_channels(64, ), num_heads[2], mlp_ratios[4]), stage2dict( num_modules1, num_branches2, blockHRFORMERBLOCK, num_blocks(2, 2), num_channels(78, 156), num_heads[2, 4], mlp_ratios[4, 4], window_sizes[7, 7]), stage3dict( num_modules4, num_branches3, blockHRFORMERBLOCK, num_blocks(2, 2, 2), num_channels(78, 156, 312), num_heads[2, 4, 8], mlp_ratios[4, 4, 4], window_sizes[7, 7, 7]), stage4dict( num_modules2, num_branches4, blockHRFORMERBLOCK, num_blocks(2, 2, 2, 2), num_channels(78, 156, 312, 624), num_heads[2, 4, 8, 16], mlp_ratios[4, 4, 4, 4], window_sizes[7, 7, 7, 7])), init_cfgdict( typePretrained, checkpoint...hrformer_base-32815020_20220226.pth), )各字段含义与影响字段含义说明drop_path_rate随机深度Stochastic Depth概率base 为 0.2small 为 0.1按层数线性插值分配给各 blockwith_rpe是否使用相对位置偏置Relative Position Bias开启时自注意力叠加可学习的位置偏置是窗口注意力在小窗口下恢复位置信息的关键stageN.num_branches该阶段并行分支数1→2→3→4与 HRNet 一致num_channels各分支通道数base64→(78,156)→(78,156,312)→(78,156,312,624)num_heads各分支自注意力头数随通道数翻倍而翻倍base 为 2/4/8/16mlp_ratiosFFN 隐藏层扩张倍数统一为 4window_sizes局部自注意力窗口大小统一为 7x7block模块类型stage1 用卷积BOTTLENECK降采样stage2-4 用HRFORMERBLOCKSmall 与 Base 的核心差异对比 td-hm_hrformer-small_8xb32-210e_coco-256x192.py项SmallBase通道数stage2-4(32,64)→(32,64,128)→(32,64,128,256)(78,156)→(78,156,312)→(78,156,312,624)注意力头数1/2/4/82/4/8/16drop_path_rate0.10.2Head in_channels3278预训练权重hrformer_small-09516375_20220226.pthhrformer_base-32815020_20220226.pth值得注意的是small 配置的 stage1 中写的是num_mlp_ratios[4]而 base 写的是mlp_ratios[4]——前者是历史命名遗留stage1 使用 BOTTLENECK 卷积块该字段实际不被使用两种写法均不影响运行源码在 hrformer.py 的blocks_dict中按block字符串选择Bottleneck或HRFormerBlock。8. 数据管线Pipelinetrain_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) ]训练管线依次完成加载图像 → 由 bbox 得到中心点与尺度 → 水平随机翻转 →随机半身RandomHalfBody以一定概率只保留上半身/下半身关键点增强局部定位鲁棒性→ 随机 bbox 扰动 → 仿射变换到输入尺寸 → 用 codec 生成训练目标 → 打包验证管线不做任何数据增强仅做仿射对齐。9. 数据加载与评测train_dataloader dict( batch_size32, num_workers2, persistent_workersTrue, samplerdict(typeDefaultSampler, shuffleTrue), datasetdict( typeCocoDataset, data_rootdata/coco/, data_modetopdown, ann_fileannotations/person_keypoints_train2017.json, data_prefixdict(imgtrain2017/), pipelinetrain_pipeline)) val_dataloader dict( batch_size32, num_workers2, persistent_workersTrue, drop_lastFalse, samplerdict(typeDefaultSampler, shuffleFalse, round_upFalse), datasetdict( typeCocoDataset, data_rootdata/coco/, data_modetopdown, ann_fileannotations/person_keypoints_val2017.json, bbox_filedata/coco/person_detection_results/COCO_val2017_detections_AP_H_56_person.json, data_prefixdict(imgval2017/), test_modeTrue, pipelineval_pipeline)) val_evaluator dict( typeCocoMetric, ann_filedata_root annotations/person_keypoints_val2017.json)顶下行评测需要预先检测的人体框bbox_file指向COCO_val2017_detections_AP_H_56_person.json即文档开头所述人物 AP 为 56.4 的检测器的检测结果评估用官方CocoMetric输出 AP / AP50/ AP75/ AR 等指标与模型库表格一致。10. 混合精度训练fp16 dict(loss_scaledynamic)配置末尾开启了 FP16 混合精度训练动态 loss scale可在 8 卡 x32 batch 的大规模训练下明显节省显存与加速。源码级原理HRFormer 骨干如何工作配置中的HRFORMERBLOCK等组件都实现在 mmpose/models/backbones/hrformer.py共 758 行通过MODELS.register_module()注册为HRFormer注册逻辑见 mmpose/models/backbones/hrnet.py 与 mmpose/registry.py。核心组件拆解1. 张量布局转换nlc_to_nchw / nchw_to_nlcTransformer 分支内以[N, L, C]序列化 token运算卷积融合时以[N, C, H, W]运算两个工具函数负责在两者间切换是整个混合架构的粘合剂。2. WindowMSAWindowMSA基于窗口的多头自注意力。输入按 7x7 窗口切块后做标准 QKV 注意力并叠加相对位置偏置relative_position_bias_table是一个可学习的(2Wh-1)(2Ww-1) × nH参数表通过relative_position_index索引后加到注意力分数上再经 softmax。若启用with_pad_mask还会对中心填充center-pad产生的 padding token 施加-inf掩码。3. LocalWindowSelfAttentionLocalWindowSelfAttention负责把任意尺寸的[N, L, C]特征切分为窗口先 center-pad 使 H、W 能被窗口整除切窗后调用 WindowMSA再逆变换并 de-pad 还原。这就是 HRFormer 与 Swin 的一个关键差异——HRFormer 不做 window shift 的跨窗口信息交换跨窗口交互由 HRNet 风格的多分支并行与多分辨率融合承担。4. CrossFFNCrossFFNHRFormer 的前馈网络与众不同它回到卷积域1x1 卷积 → GELU → 3x3 深度卷积depthwise逐通道卷积→ GELU → 1x1 卷积每步后接 SyncBN。深度卷积以极低参数量引入了局部空间上下文比纯 MLP 式 FFN 更契合姿态估计这类需要空间细节的任务。5. HRFormerBlockHRFormerBlock残差结构为x DropPath(attn(LN(x)))与x DropPath(ffn(LN(x)))两级叠加其中注意力使用 LayerNormtransformer_norm_cfgdict(typeLN, eps1e-6)FFN 内部用 SyncBN——这也是配置中norm_cfg与transformer_norm_cfg分开配置的原因。6. HRFomerModule 与 HRFormerHRFomerModule、HRFormerHRFomerModule继承自 HRNet 的HRModule保留多分支 多分辨率融合_make_fuse_layers中高分辨率分支经上采样、低分辨率分支经步长 2 卷积对齐通道只把普通残差块替换为 HRFormerBlockHRFormer类继承HRNet在初始化时用torch.linspace(0, drop_path_rate, 总层数)把随机深度概率均匀分配到 stage2-4 各 block源码 hrformer.py并将上采样方式固定为 bilinear。测试验证仓库在 tests/test_models/test_backbones/test_hrformer.py 中提供 HRFormer 骨干的单元测试覆盖前向输出形状4 个分辨率层级等内容可作为你改动extra配置后验证网络是否正确的参考。训练、测试与推理实操以下命令基于仓库标准工具 tools/train.py 与 tools/test.py均需先按 docs/en/installation.md 完成环境安装与 COCO 数据准备。单机训练python tools/train.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrformer-base_8xb32-210e_coco-256x192.py多卡训练可直接复用仓库脚本bash tools/dist_train.sh configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrformer-base_8xb32-210e_coco-256x192.py 8得益于auto_scale_lr dict(base_batch_size256)训练器会自动按实际 batch 缩放学习率。测试与评测使用 tools/test.py 加载预训练权重评测 COCO val2017python tools/test.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrformer-base_8xb32-210e_coco-256x192.py \ /path/to/hrformer_base_coco_256x192-6f5f1169_20220316.pth权重与训练日志的文件名即上表 ckpt/log 列下载地址记录于 hrformer_coco.yml 的Weights字段日志中还包含完整训练曲线可用于复现与对比。推理 Demo仓库提供通用推理脚本 demo/inferencer_demo.py用法示意python demo/inferencer_demo.py 图片或视频路径 \ --pose2d configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrformer-base_8xb32-210e_coco-256x192.py \ --vis-out-dir 输出目录顶下行方案的完整端到端示例检测器 姿态模型可参考 demo/docs/zh_cn/2d_human_pose_demo.md 与 demo/docs/en/2d_human_pose_demo.md。调参与选型建议基于上文配置与源码分析可总结出以下可落地的经验先定分辨率再定骨干若追求极致精度且显存充足直接选hrformer-base_384x288AP 0.774若需要平衡速度hrformer-small_256x192AP 0.738是轻量选择相对位置偏置不衰减是必要的custom_keys中的decay_mult0与init_weights中的trunc_normal_init(std0.02)hrformer.py配套微调预训练模型时务必保留FP16 动态 loss scale 已内置fp16 dict(loss_scaledynamic)开箱即用替换骨干时的联动修改若把extra的通道数改大必须同步把head.in_channels改为 stage1 分支的通道数small 为 32base 为 78并保持 codec 的heatmap_size与输入尺寸的比例1/4评测一致性验证/测试必须使用与模型库相同的bbox_file人物 AP 56.4 的检测结果否则 AP 无法与表内数值直接对比。小结本文以 hrformer_coco.md 的模型库为核心完整继承了 4 套 HRFormer 配置的精度指标并深入 td-hm_hrformer-base_8xb32-210e_coco-256x192.py 等配置文件的每一段再下沉到 mmpose/models/backbones/hrformer.py 与 mmpose/codecs/msra_heatmap.py 的源码实现讲解了窗口自注意力、相对位置偏置、CrossFFN、随机深度、MSRA 高斯热图编解码等关键原理。掌握了这些内容你不仅能在 MMPose 中直接复现与部署 HRFormer 姿态模型也能自如地将其迁移到其他 top-down 姿态任务换数据集、改分辨率、调整骨干容量理解高分辨率 Transformer 在密集预测任务中的设计范式。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考