ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

mmpose 中的 Lite-HRNet 轻量级高分辨率骨干网络:从条件通道加权原理到实战配置

mmpose 中的 Lite-HRNet 轻量级高分辨率骨干网络:从条件通道加权原理到实战配置 mmpose 中的 Lite-HRNet 轻量级高分辨率骨干网络从条件通道加权原理到实战配置【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmposeLite-HRNetLite-HRNet: A Lightweight High-Resolution NetworkCVPR 2021是面向人体姿态估计等密集预测任务的轻量级高分辨率骨干网络。本文以 mmpose 仓库中的算法文档为核心结合 LiteHRNet 源码实现、单元测试 与 COCO/MPII/手部关键点的真实训练配置系统讲解其论文核心思想、逐模块源码结构、extra配置字典的每个字段以及从训练到评估的完整实操方法帮助你理解并直接上手这一经典轻量级骨干。论文核心思想用条件通道加权替代 1x1 卷积Lite-HRNet 论文Yu Changqian 等人CVPR 2021的目标是构建一个高效的高分辨率网络用于人体姿态估计。其出发点非常直接把 ShuffleNet 中高效的 shuffle block 直接移植到 HRNet高分辨率网络上就能获得优于 MobileNet、ShuffleNet 以及 Small HRNet 等主流轻量级网络的性能。论文随后指出一个关键观察shuffle block 中大量使用的 pointwise1x1卷积成为了计算瓶颈。为此论文引入了一个轻量级单元——条件通道加权Conditional Channel WeightingCCW用它来替换 shuffle block 中昂贵的 1x1 卷积。该方案的核心性质如下复杂度优势通道加权的计算复杂度与通道数呈线性关系远低于 1x1 卷积的二次方时间复杂度信息交换桥梁权重从所有通道以及 HRNet 并行分支中天然可用的多个分辨率上学习得到用这些权重作为跨通道、跨分辨率信息交换的桥梁补偿被移除的 1x1 卷积所承担的角色通用性Lite-HRNet 在人体姿态估计上表现出色同时可以以同样的轻量化方式直接迁移到语义分割任务。对应的 BibTeX 引用收录于算法文档 docs/src/papers/backbones/litehrnet.mdinproceedings{Yulitehrnet21, title{Lite-HRNet: A Lightweight High-Resolution Network}, author{Yu, Changqian and Xiao, Bin and Gao, Changxin and Yuan, Lu and Zhang, Lei and Sang, Nong and Wang, Jingdong}, booktitle{CVPR}, year{2021} }mmpose 中的源码实现模块逐层拆解mmpose 将 Lite-HRNet 完整实现于 mmpose/models/backbones/litehrnet.py并通过 backbones 注册表 以LiteHRNet名称注册可在配置文件中直接以typeLiteHRNet引用。整份实现由一组相互独立、职责清晰的模块组成下面逐一说明。1. 空间加权 SpatialWeighting对应源码 SpatialWeighting是一个经典的 SESqueeze-and-Excitation风格模块先用全局平均池化nn.AdaptiveAvgPool2d(1)压缩空间信息再经两个 1x1ConvModule得到逐通道权重最后与原特征x * out相乘。其构造参数包括channels输入通道数ratio通道压缩比默认 16在ConditionalChannelWeighting中被固定传 4act_cfg默认(dict(typeReLU), dict(typeSigmoid))即第一个卷积用 ReLU、最后一个卷积用 Sigmoid 生成 (0,1) 区间权重conv_cfg/norm_cfg分别控制卷积层与归一化层类型。2. 跨分辨率加权 CrossResolutionWeighting对应源码 CrossResolutionWeighting它是 Lite-HRNet 区别于一般 SE 模块的关键输入是多分辨率特征列表x其前向流程为——将除最小分辨率以外的特征F.adaptive_avg_pool2d池化到最小尺寸与最小分辨率特征拼接通过两个 1x1 卷积total_channel - total_channel/ratio - total_channel生成聚合权重按各分支通道数torch.split切分再F.interpolatenearest 模式回各自分辨率并与原特征逐元素相乘。这样每个分支的通道权重都同时利用了所有分支所有分辨率的信息正是论文所述从所有通道、多个分辨率学习权重的直接体现。3. 条件通道加权 ConditionalChannelWeighting对应源码 ConditionalChannelWeighting它是替换 shuffle block 中 1x1 卷积的完整基本单元前向流程为将每个分支特征按通道chunk(2, dim1)分为x1、x2两路x1直通identity 分支x2依次经过跨分辨率加权、3x3 深度可分离卷积groupschannel的分组卷积与空间加权两路torch.cat拼接后执行channel_shuffle(s, 2)通道混洗完成跨组信息交换。其中深度卷积与通道混洗共同承担了原 1x1 卷积跨通道混合的职责而权重计算复杂度保持与通道数线性相关。该模块还支持with_cp梯度检查点选项开启后可节省显存但会降低训练速度。4. Stem 与 IterativeHeadStem源码先经过一个 stride2 的 3x3 卷积得到stem_channels的特征再将通道对半分为两条路径分支 1 走深度卷积1x1 卷积下采样分支 2 走 InvertedResidual 式expand→depthwise→linear下采样最后拼接并通道混洗输出进入第一阶段。IterativeHead源码当with_headTrue时挂载对多分辨率特征按从低到高的顺序逐级用DepthwiseSeparableConvModule投影并自低分辨率向高分辨率F.interpolatebilinear累加特征实现跨分辨率的迭代式特征增强。5. ShuffleUnit 与 LiteHRModuleShuffleUnit源码标准 ShuffleNetV2 的 InvertedResidual 单元stride1 时短接一半通道、stride1 时两个分支都参与下采样最终统一做channel_shuffleLiteHRModule源码HRNet 风格的高分辨率模块module_type支持LITE使用ConditionalChannelWeighting权重块由_make_weighting_blocks构建与NAIVE使用ShuffleUnit分支由_make_naive_branches构建两种模式with_fuseTrue时通过_make_fuse_layers构建跨分支融合层高分辨率分支向上采样、低分辨率分支向下采样最后求和并经 ReLU 输出。源码注释特别提示融合求和时y不能以 0 初始化否则精度会下降 0.5~1 mAP。6. LiteHRNet 整体前向LiteHRNet 主类 的前向流程为Stem → 逐阶段 transition跨阶段通道转换与分支扩充→ LiteHRModule 堆叠 → IterativeHead可选。最终输出为(x[0], )的单元素元组第一分支高分辨率特征。主类还提供norm_eval选项训练时可将 BatchNorm 层的 running stats 冻结参考其train方法对_BatchNorm的遍历处理。通道混洗操作由独立工具函数 channel_shuffle 提供把(N, C, H, W)张量 reshape 为(N, groups, C/groups, H, W)交换第 1、2 维后重整回原形状。核心配置extra字典逐字段详解LiteHRNet 的深度结构完全由backbone下的extra字典驱动这既是它灵活性所在也是上手时需要重点理解的配置面。以 COCO 上 LiteHRNet-18 配置 为例backbonedict( typeLiteHRNet, in_channels3, extradict( stemdict(stem_channels32, out_channels32, expand_ratio1), num_stages3, stages_specdict( num_modules(2, 4, 2), num_branches(2, 3, 4), num_blocks(2, 2, 2), module_type(LITE, LITE, LITE), with_fuse(True, True, True), reduce_ratios(8, 8, 8), num_channels( (40, 80), (40, 80, 160), (40, 80, 160, 320), )), with_headTrue, )),各字段含义与取值范围如下字段含义说明stem.stem_channelsStem 首层输出通道源码中经第一个 stride2 的 3x3 卷积得到stem.out_channelsStem 输出通道数决定第一阶段的输入通道LiteHRNet-18/30 均为 32stem.expand_ratio中间隐藏层通道扩张比mid_channels round(stem_channels * expand_ratio)用于 InvertedResidual 式下采样分支num_stages阶段数量每阶段新增一个更低分辨率分支典型值为 3stages_spec.num_modules每阶段堆叠的 LiteHRModule 数量LiteHRNet-18 为(2, 4, 2)LiteHRNet-30 为(3, 8, 3)是 18 与 30 深度的主要差异stages_spec.num_branches每阶段的分支分辨率数(2, 3, 4)从 1/2 分辨率逐步扩到 1/4、1/8stages_spec.num_blocks每阶段每个模块内的 block 数(2, 2, 2)stages_spec.module_type模块类型LITE使用条件通道加权块NAIVE使用 ShuffleUnit源码对非法值会抛ValueErrorstages_spec.with_fuse是否启用跨分支融合层全部为Truestages_spec.reduce_ratios跨分辨率加权的通道压缩比全部为 8即total_channel/8stages_spec.num_channels各阶段每分支的通道数逐阶段从(40, 80)扩到(40, 80, 160)、(40, 80, 160, 320)with_head是否使用 IterativeHead姿态估计任务通常为True源码 docstring 示例中演示过False场景在 LiteHRNet docstring 示例 中可以找到与上述配置一致的最小可运行用法构造模型后输入(1, 1, 32, 32)张量输出第一分支形状为(1, 40, 8, 8)。模型库结果COCO 与 MPII 基准仓库模型库记录了 Lite-HRNet 在 COCO 与 MPII 两个数据集上的公开复现结果详见 litehrnet_coco.md 与 litehrnet_mpii.md可作为训练效果的对照参考。COCO val2017使用在 COCO val2017 上人体 AP 为 56.4 的检测器架构输入尺寸APAP^50AP^75ARAR^50LiteHRNet-18256x1920.6420.8670.7190.7050.911LiteHRNet-18384x2880.6760.8760.7460.7350.919LiteHRNet-30256x1920.6760.8800.7560.7360.922LiteHRNet-30384x2880.7000.8830.7760.7580.926MPII val setMean/Mean0.1PCK 指标架构输入尺寸MeanMean0.1LiteHRNet-18256x2560.8590.260LiteHRNet-30256x2560.8690.271对应的配置入口分别是 COCO 四种组合、MPII 两种组合如 LiteHRNet-30 on MPII以及手部关键点场景的 coco-wholebody-hand 配置。从配置到训练完整实操流程训练调度与超参LiteHRNet 相关配置的训练协议一致以 COCO 384x288 为例训练轮数max_epochs210每 10 轮验证一次优化器Adam学习率lr5e-4学习率调度前 500 iter 使用LinearLR线性 warm-upstart_factor0.001按 iter 计算随后MultiStepLR在 170/200 轮衰减gamma0.1自动缩放学习率auto_scale_lr dict(base_batch_size512)当实际 batch size 与基准不一致时自动等比缩放 LRCheckpoint 选择COCO 配置用save_bestcoco/AP、MPII 用PCK、手部配置用AUC均按更大更好保存最优权重。编解码与模型头LiteHRNet 配置统一采用MSRAHeatmapcodec例如 COCO 384x288 配置为dict(typeMSRAHeatmap, input_size(288, 384), heatmap_size(72, 96), sigma3)MPII 256x256 与手部 256x256 则为heatmap_size(64, 64), sigma2。模型头使用无上采样转置卷积的HeatmapHeadheaddict( typeHeatmapHead, in_channels40, # 必须与 LiteHRNet 第一分支输出通道一致 out_channels17, # COCO 17 个关键点MPII 为 16手部为 21 deconv_out_channelsNone, lossdict(typeKeypointMSELoss, use_target_weightTrue), decodercodec),注意in_channels40与extra.stages_spec.num_channels的第一分支 40 通道严格对应。测试阶段启用翻转测试test_cfgdict(flip_testTrue, flip_modeheatmap, shift_heatmapTrue)。数据流管线训练管线依次为LoadImage → GetBBoxCenterScale → RandomFlip水平→ RandomHalfBody → RandomBBoxTransformrotate_factor60scale_factor(0.75, 1.25)→ TopdownAffine → GenerateTarget → PackPoseInputs验证/测试管线仅保留LoadImage → GetBBoxCenterScale → TopdownAffine → PackPoseInputs。COCO 评测时验证集需提供检测框文件person_detection_results/COCO_val2017_detections_AP_H_56_person.json并使用CocoMetric评估MPII 则使用MpiiPCKAccuracy并指定headbox_file。训练与测试命令在完成数据准备COCO 数据置于data/coco/MPII 置于data/mpii/目录结构见 prepare_datasets 文档后即可使用仓库标准的训练入口 tools/train.py 与测试入口 tools/test.py# 单卡训练 python tools/train.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_litehrnet-18_8xb32-210e_coco-384x288.py # 多卡分布式训练tools/dist_train.sh 用法见文件头注释 bash tools/dist_train.sh configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_litehrnet-18_8xb32-210e_coco-384x288.py 8 # 测试并评估 python tools/test.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_litehrnet-18_8xb32-210e_coco-384x288.py /path/to/checkpoint.pth模型库 md 文件中同时提供了各架构预训练权重与日志的下载入口可下载后直接用于推理或微调。此外也可以借助 inferencer_demo.py 快速体验推理效果。单元测试如何验证实现正确性test_litehrnet.py 从两个层面保证了实现与预期一致LiteHRModule 单测分别构造module_typeLITE与NAIVE的单分支模块输入(2, 40, 56, 56)张量断言输出形状不变并验证非法module_typenone会触发ValueErrorLiteHRNet 整体前向使用与真实配置一致的extraLiteHRNet-18 结构输入(2, 3, 224, 224)断言返回类型为 tuple 且最后一层输出形状为(2, 40, 56, 56)同时覆盖LITE与NAIVE两种模式以及init_weights初始化流程。这些断言直接约束了第一分支输出 40 通道高分辨率特征这一与HeatmapHead(in_channels40)对接的关键约定是配置与实现一致性的第一道保障。总结Lite-HRNet 通过在 HRNet 多分辨率框架中引入条件通道加权与跨分辨率加权以线性复杂度的通道信息交换替代 shuffle block 中的 1x1 卷积在保持高分辨率特征优势的同时显著降低计算开销。在 mmpose 仓库中它形成了从算法文档docs/src/papers/backbones/litehrnet.md、源码实现mmpose/models/backbones/litehrnet.py、单元测试到 COCO/MPII/手部三类数据集的完整闭环extra配置字典提供了从 18 层到 30 层、从 256x192 到 384x288 的灵活扩展能力。对于需要轻量级骨干支撑的实时人体姿态估计场景LiteHRNet 是经过基准验证的可靠选择。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表