MMSegmentation 中的 HRNet 语义分割实践:高分辨率并行骨干网络的原理、配置与模型基准

📅 发布时间:2026/9/15 22:25:13
MMSegmentation 中的 HRNet 语义分割实践:高分辨率并行骨干网络的原理、配置与模型基准
MMSegmentation 中的 HRNet 语义分割实践高分辨率并行骨干网络的原理、配置与模型基准【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation导读本文以 MMSegmentation 仓库中 configs/hrnet/README.md 为骨架系统讲解 HRNetHigh-Resolution Network这一以全程保持高分辨率表示为核心思想的骨干网络从论文提出的并行多分辨率结构与跨分辨率信息交换原理到其在 mmseg/models/backbones/hrnet.py 中的完整实现细节再到仓库内置的 FCN HRNetV2p 全量配置与跨数据集基准结果最后给出基于本仓库的实际训练与测试命令。读完本文你将能够理解 HRNet 与 ResNet 等串行下采样骨干的本质差异读懂extra四阶段配置的结构化含义并直接在 MMSegmentation 中复现 Cityscapes、ADE20K 等数据集上的 HRNet 语义分割实验。HRNet 的设计动机从先下采样再恢复到全程保持高分辨率对于语义分割这类位置敏感position-sensitive的视觉任务高分辨率表示至关重要。传统 SOTA 框架如 ResNet、VGGNet的处理方式是通过一条高分辨率 → 低分辨率串行连接的子网络对输入图像编码得到低分辨率表示再从编码后的低分辨率表示中恢复高分辨率输出。这一先降后升的路径不可避免地会造成空间细节损失。HRNet 提出了截然不同的思路——在整个处理过程中始终维持高分辨率表示。原文档 Abstract 概括了它的两个关键特性并行连接将高 → 低分辨率的卷积流以并行方式组织connect the high-to-low resolution convolution streamsin parallel而不是串行堆叠反复交换信息在不同分辨率分支之间重复进行信息交换repeatedly exchange the information across resolutions使各分辨率分支相互增益。由此得到的特征表示在语义上更丰富semantically richer、在空间上更精确spatially more precise这也是 HRNet 在人体姿态估计、语义分割、目标检测等任务上都能作为更强骨干的原因。源码级解析MMSegmentation 中的 HRNet 实现HRNet 骨干在仓库中注册为HRNet见 mmseg/models/backbones/hrnet.py#L217-L218其核心构件包括 stem 网络、四个 stage、transition 层与HRModule。模块划分HRModule 与分支结构HRModulehrnet.py#L14-L19是 HRNet 的基本组成单元每个分支包含 4 个 BasicBlock/Bottleneck且融合/交换Fusion/Exchange发生在本模块内部。它由两部分构成branches_make_brancheshrnet.py#L115-L123按num_branches构建并行分支每个分支用num_blocks[i]个 block 处理num_channels[i]通道的特征fuse_layers_make_fuse_layershrnet.py#L125-L189实现跨分辨率信息交换具体规则为从低分辨率分支j向高分辨率分支i融合时j i使用 1×1 卷积对齐通道数再做scale_factor2**(j-i)的双线性上采样align_cornersFalse这是 HRNet 的约定设置同一分辨率分支j i直接相加从高分辨率向低分辨率融合时j i使用若干个 3×3 stride2 卷积逐级下采样对齐。前向过程forwardhrnet.py#L191-L214先让每个分支独立计算再将各分支特征经 fuse_layers 融合后接 ReLU输出num_out_branches个尺度的特征。整体结构四阶段并行扩展HRNet.__init__hrnet.py#L299-L422严格校验extra必须包含stage1stage4四个阶段且每个阶段的num_blocks、num_channels长度必须等于num_branches否则直接抛出断言错误仓库测试 tests/test_models/test_backbones/test_hrnet.py 中即验证了仅 3 个 stage 会报错分支数与 block 数不匹配会报错这两个约束。整体前向流程hrnet.py#L596-L631为stem两个 stride2 的 3×3 卷积conv1、conv2 BN ReLU将输入从 3 通道变换为 64 通道分辨率降为 1/4stage1单个分支的layer1默认 Bottleneck输出 64 通道transition1把 stage1 的输出扩展为 2 条分支进入 stage22 分支transition2扩展为 3 条分支进入 stage33 分支transition3扩展为 4 条分支进入 stage44 分支最终输出 4 个不同分辨率的特征层级。每个 stage 由_make_stagehrnet.py#L529-L568串行堆叠num_modules个 HRModule。值得注意的细节是multiscale_outputFalse时仅在 stage 的最后一个 module 关闭多尺度输出使模型只输出最高分辨率分支的特征供只需单尺度特征的下游头使用该行为在 test_hrnet.py 的test_hrmodule与test_hrnet_backbone中均有断言验证。训练期细节冻结阶段与 BN 统计frozen_stages默认 -1即不冻结任何参数控制阶段冻结norm_eval开启时在train()中会将所有 BatchNorm 强制置为 eval 模式冻结其 running statshrnet.py#L633-L642。with_cp可开启梯度检查点checkpoint以省显存换速度。这些参数均在配置文件中直接可调。配置实战从 FCNHRNetV2p 配置文件看懂extra结构仓库 configs/hrnet 目录下共 45 个训练配置文件全部采用FCN 解码头 HRNetV2p 骨干的组合覆盖 W18-Small、W18、W48 三种宽度规格与 Cityscapes、ADE20K、Pascal VOC 2012 Aug、Pascal Context、Pascal Context 59、LoveDA、Potsdam、Vaihingen、iSAID 九大数据集。基础模型配置_base_/models/fcn_hr18.pyW18 规格的完整模型定义位于 configs/base/models/fcn_hr18.py其extra结构清晰展示了四阶段配置的五个键num_modules、num_branches、block、num_blocks、num_channelsmodel dict( typeEncoderDecoder, pretrainedopen-mmlab://msra/hrnetv2_w18, backbonedict( typeHRNet, norm_cfgnorm_cfg, # dict(typeSyncBN, requires_gradTrue) norm_evalFalse, 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(18, 36)), stage3dict(num_modules4, num_branches3, blockBASIC, num_blocks(4, 4, 4), num_channels(18, 36, 72)), stage4dict(num_modules3, num_branches4, blockBASIC, num_blocks(4, 4, 4, 4), num_channels(18, 36, 72, 144)))), decode_headdict( typeFCNHead, in_channels[18, 36, 72, 144], # 对应 4 个分支输出通道 in_index(0, 1, 2, 3), channelssum([18, 36, 72, 144]), # 270四分支拼接后的通道数 input_transformresize_concat, # 上采样到同一尺度后拼接 kernel_size1, num_convs1, dropout_ratio-1, num_classes19, # Cityscapes 默认 19 类 loss_decodedict(typeCrossEntropyLoss, use_sigmoidFalse, loss_weight1.0)), train_cfgdict(), test_cfgdict(modewhole))几个关键点的源码对应关系input_transformresize_concat正是为 HRNet 这类多分支骨干设计的特征聚合方式——四路特征先各自上采样到最大分辨率再沿通道拼接后送入 1×1 卷积分类这是 FCN 解码头能消费 HRNet 多尺度输出的前提各 stage 的num_channels即该阶段各分支的宽度W18 / W48 只是把num_channels整体放大见下文。数据集配置与训练计划Cityscapes 数据集配置位于 configs/base/datasets/cityscapes.py其中crop_size (512, 1024)训练管线包含RandomResizescale(2048, 1024)ratio_range(0.5, 2.0)、RandomCropcat_max_ratio0.75、RandomFlip、PhotoMetricDistortion测试管线采用TestTimeAug多尺度img_ratios[0.5, 0.75, 1.0, 1.25, 1.5, 1.75] 水平翻转 TTA。训练计划位于 configs/base/schedules/schedule_80k.py80k 迭代版本。完整训练配置示例以 configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py 为例它通过_base_继承四个基础文件仅需补齐crop_size与data_preprocessor_base_ [ ../_base_/models/fcn_hr18.py, ../_base_/datasets/cityscapes.py, ../_base_/default_runtime.py, ../_base_/schedules/schedule_80k.py ] crop_size (512, 1024) data_preprocessor dict(sizecrop_size) model dict(data_preprocessordata_preprocessor)从 W18 升级到 W48只改四个数W48 版本的配置文件 configs/hrnet/fcn_hr48_4xb2-80k_cityscapes-512x1024.py 展示了如何在保持结构不变的情况下扩大网络宽度——只需覆写 stage2stage4 的num_channels并把预训练权重切换为hrnetv2_w48同时同步更新解码头的in_channels_base_ ./fcn_hr18_4xb2-80k_cityscapes-512x1024.py model dict( pretrainedopen-mmlab://msra/hrnetv2_w48, backbonedict( extradict( stage2dict(num_channels(48, 96)), stage3dict(num_channels(48, 96, 192)), stage4dict(num_channels(48, 96, 192, 384)))), decode_headdict( in_channels[48, 96, 192, 384], channelssum([48, 96, 192, 384])))而 W18-Small 规格如 configs/hrnet/fcn_hr18s_4xb2-80k_cityscapes-512x1024.py则将各 stage 的num_channels与解码头in_channels按 (18→16, 36→32, 72→64, 144→128) 的规律缩减同时pretrained指向hrnetv2_w18_small。三种规格的区别完全由配置文件驱动模型实现本身无需改动。遥感与航空数据集的两个特例iSAID所有 iSAID 配置如 configs/hrnet/fcn_hr18s_4xb4-80k_isaid-896x896.py的 Crop Size 均为896x896。原文档注明这是遵循 PointFlowFlowing Semantics Through Points for Aerial Image Segmentation实现的选择并非 HRNet 本身的限制LoveDA / Potsdam / Vaihingen这三个遥感数据集均采用 512x512 裁剪、80k 迭代、4 卡 batch size 4 的标准配置用于评测 HRNet 在高分辨率遥感影像上的表现。结果与模型基准以下所有基准均来自原文档configs/hrnet/README.md在 4×V100 GPU 上训练获得每张表格的 config 列可直接点击进入仓库内配置文件模型权重与训练日志.pth / .log.json的完整下载地址收录在 configs/hrnet/metafile.yaml 中。Cityscapescrop 512x1024MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W18-Small512x1024400001.723.74V10073.8675.91configFCNHRNetV2p-W18512x1024400002.912.97V10077.1978.92configFCNHRNetV2p-W48512x1024400006.26.42V10078.4879.69configFCNHRNetV2p-W18-Small512x102480000--V10075.3177.48configFCNHRNetV2p-W18512x102480000--V10078.6580.35configFCNHRNetV2p-W48512x102480000--V10079.9380.72configFCNHRNetV2p-W18-Small512x1024160000--V10076.3178.31configFCNHRNetV2p-W18512x1024160000--V10078.8080.74configFCNHRNetV2p-W48512x1024160000--V10080.6581.92configADE20Kcrop 512x512MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W18-Small512x512800003.838.66V10031.3832.45configFCNHRNetV2p-W18512x512800004.922.57V10036.2737.28configFCNHRNetV2p-W48512x512800008.221.23V10041.9043.27configFCNHRNetV2p-W18-Small512x512160000--V10033.0734.56configFCNHRNetV2p-W18512x512160000--V10036.7938.58configFCNHRNetV2p-W48512x512160000--V10042.0243.86configPascal VOC 2012 Augcrop 512x512MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W18-Small512x512200001.843.36V10065.568.89configFCNHRNetV2p-W18512x512200002.923.48V10072.3074.71configFCNHRNetV2p-W48512x512200006.222.05V10075.8778.58configFCNHRNetV2p-W18-Small512x51240000--V10066.6170.00configFCNHRNetV2p-W18512x51240000--V10072.9075.59configFCNHRNetV2p-W48512x51240000--V10076.2478.49configPascal Contextcrop 480x480MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W48480x480400006.18.86V10045.1447.42configFCNHRNetV2p-W48480x48080000--V10045.8447.84configPascal Context 59crop 480x480MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W48480x48040000--V10050.3352.83configFCNHRNetV2p-W48480x48080000--V10051.1253.56configLoveDAcrop 512x512MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W18-Small512x512800001.5924.87V10049.2849.42configFCNHRNetV2p-W18512x512800002.7612.92V10050.8150.95configFCNHRNetV2p-W48512x512800006.209.61V10051.4251.64configPotsdamcrop 512x512MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W18-Small512x512800001.5836.00V10077.6478.8configFCNHRNetV2p-W18512x512800002.7619.25V10078.2679.24configFCNHRNetV2p-W48512x512800006.2016.42V10078.3979.34configVaihingencrop 512x512MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W18-Small512x512800001.5838.11V10071.8173.1configFCNHRNetV2p-W18512x512800002.7619.55V10072.5774.09configFCNHRNetV2p-W48512x512800006.2017.25V10072.5073.52configiSAIDcrop 896x896MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)configFCNHRNetV2p-W18-Small896x896800004.9513.84V10062.3062.97configFCNHRNetV2p-W18896x896800008.307.71V10065.0665.60configFCNHRNetV2p-W48896x8968000016.897.34V10067.8068.53config注896x896是 iSAID 数据集的 Crop Size遵循 PointFlowFlowing Semantics Through Points for Aerial Image Segmentation实现中的设置。从结果可观察出清晰的规律同等迭代数下模型宽度W18-Small → W18 → W48与训练时长40k → 80k → 160k均能带来稳定的 mIoU 提升而msflip多尺度翻转测试普遍比单尺度评估高 12 个点其中 Cityscapes 上 HRNetV2p-W48 在 160k 迭代时取得 80.65 / 81.92 的领先成绩。训练与测试在 MMSegmentation 中复现 HRNet 实验本仓库的完整训练/测试指南见 docs/zh_cn/user_guides/4_train_test.md单卡训练命令格式为python tools/train.py ${配置文件} [可选参数]例如基于 Cityscapes 训练 FCN HRNetV2p-W1880k 迭代python tools/train.py configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py若训练中断需从检查点恢复或要用预训练权重初始化可使用--resume与--cfg-options load_frompython tools/train.py ${配置文件} --resume --cfg-options load_from${检查点}多卡分布式训练则使用仓库自带的tools/dist_train.shbash tools/dist_train.sh configs/hrnet/fcn_hr18_4xb2-80k_cityscapes-512x1024.py ${GPU_NUM}测试命令格式为python tools/test.py ${配置文件} ${模型权重文件} [可选参数]例如python tools/test.py configs/hrnet/fcn_hr48_4xb2-80k_cityscapes-512x1024.py ${权重路径}如需启用 msflip 多尺度翻转测试以复现表格中的mIoU(msflip)指标可传入测试参数开启 TestTimeAug数据集配置中已内置tta_pipeline。权重文件可从 configs/hrnet/metafile.yaml 中按模型名如fcn_hr48_4xb2-80k_cityscapes-512x1024检索对应的 .pth 与 .log.json 下载地址其中 .log.json 记录了完整训练曲线便于核对基准。小结HRNet 通过并行多分辨率分支 跨分辨率反复信息交换两条设计原则在语义分割任务中证明了全程保持高分辨率路线的有效性。在 MMSegmentation 中其实现集中在 mmseg/models/backbones/hrnet.py配置模板集中在 configs/base/models/fcn_hr18.py规模化实验配置与跨 9 大数据集的完整基准则收录在 configs/hrnet 目录下。无论是理解其源码结构、快速更换 W18/W48 规格还是复现 Cityscapes、ADE20K 等基准结果都可以完全基于本仓库开箱即用。引用原文档configs/hrnet/README.md中给出的论文引用信息inproceedings{SunXLW19, title{Deep High-Resolution Representation Learning for Human Pose Estimation}, author{Ke Sun and Bin Xiao and Dong Liu and Jingdong Wang}, booktitle{CVPR}, year{2019} }【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考