ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MMsegmentation 中的 PSANet:逐点空间注意力网络的实现、配置与实战指南

MMsegmentation 中的 PSANet:逐点空间注意力网络的实现、配置与实战指南 MMsegmentation 中的 PSANet逐点空间注意力网络的实现、配置与实战指南【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation导读PSANetPoint-wise Spatial Attention Network逐点空间注意力网络是 OpenMMLab 语义分割工具箱 MMsegmentation 中内置的一个经典注意力分割算法核心思路是用自适应的注意力掩码让特征图上每个位置都能与所有其他位置建立联系从而突破卷积核局部感受野对复杂场景理解的限制。本文将结合仓库中的解码头源码 mmseg/models/decode_heads/psa_head.py、基础模型配置 configs/base/models/psanet_r50-d8.py 以及 configs/psanet 目录下的 16 个训练配置系统讲解 PSANet 的算法原理、PSAHead的逐参数含义、不同数据集下的模型表现与配置差异并给出可直接复制的训练与推理命令。读完本文你将能够在 MMsegmentation 中独立完成 PSANet 的配置解读、训练复现与结果评估。PSANet 算法核心思想动机卷积的局部性限制卷积神经网络中的信息流动天然受限于卷积滤波器的局部邻域设计这限制了网络对复杂场景的整体理解能力。例如在语义分割任务中一个像素是否属于汽车往往需要结合远处路面交通灯等上下文信息才能准确判断而局部感受野难以直接捕获这种长距离依赖。PSANet 针对这一问题提出了逐点空间注意力机制特征图上的每个位置都通过一个自适应学习的注意力掩码与其他所有位置建立连接相当于为每个空间位置学习一张全局注意力图。双向信息传播PSANet 的一个重要设计是支持场景解析中的双向信息传播collect汇聚模式收集其他位置的信息来辅助当前位置的预测信息流入distribute分发模式将当前位置的信息分发出去辅助其他位置的预测信息流出bi-direction双向模式同时进行汇聚与分发两条路径的信息在解码头中拼接融合。这种双向机制使得语义信息既可以从全局聚合到局部也可以从局部扩散到全局对应了 PSANet 论文在 ADE20K、PASCAL VOC 2012 和 Cityscapes 等多个场景解析数据集上的有效性验证。原文档给出的算法 Abstract 描述可在 configs/psanet/README.md 中查阅原文。PSAHead 源码结构与参数详解PSANet 在 MMsegmentation 中作为解码头实现类名为PSAHead完整实现在 mmseg/models/decode_heads/psa_head.py并通过MODELS.register_module()注册可在配置文件中直接以typePSAHead引用。其构造参数及其在源码中的默认值如下参数默认值说明mask_size必填tuple[int]PSA 注意力掩码尺寸通常等于输入特征图尺寸如(97, 97)psa_typebi-direction注意力方向可选collect、distribute、bi-direction源码 第 47 行 用assert强校验compactFalse是否对collect模式使用紧凑映射减少显存占用源码 第 137-140 行 中通过张量转置实现shrink_factor2注意力掩码的下采样因子用于控制 attention 矩阵的计算规模源码 第 122-135 行 会先将特征图 resize 后再生成掩码normalization_factor1.0注意力归一化因子若设为None则自动取mask_h * mask_w源码 第 54-55 行psa_softmaxTrue是否对注意力图做 softmax 归一化源码 第 143-144 行在内部结构上PSAHead由以下几部分组成reduce卷积用 1×1 卷积将输入通道数压缩到channels降低注意力计算开销attention卷积序列先经过 1×1ConvModule再经一个无 bias 的 1×1 卷积输出通道数为mask_h * mask_w即逐位置生成注意力掩码PSAMask算子来自mmcv.ops源码 第 11-14 行 的 try/except 导入负责将注意力掩码组织成矩阵乘所需的形式。若未安装含该算子的 mmcv构造时会抛出RuntimeError源码 第 44-45 行proj卷积与bottleneck卷积将注意力加权后的特征投影回原通道数再与恒等映射identity拼接后经 3×3 bottleneck 卷积融合cls_seg最终分类层输出num_classes通道的分割 logits。从源码结构可以看出bi-direction模式会额外构造一套reduce_p/attention_p/psamask_distribute分支源码 第 75-94 行两条分支分别执行汇聚与分发结果在通道维拼接后送入proj源码 第 182-188 行这也是双向模式显存占用明显更高的直接原因。测试用例佐证仓库测试文件 tests/test_models/test_heads/test_psa_head.py 覆盖了 PSAHead 的多种组合非法psa_type如gather触发AssertionError第 11-18 行bi-direction/collect/distribute三种模式均验证输出形状为(1, num_classes, 13, 13)验证shrink_factor1与compactTrue组合、psa_softmaxTrue等分支均能正确前向。这说明在 MMsegmentation 中PSANet 解码头是经过充分测试的稳定模块可以放心用于自定义实验。配置文件深度解析基础模型配置PSANet 的 R-50 骨架基础配置位于 configs/base/models/psanet_r50-d8.py核心结构如下backboneResNetV1cdepth50dilations(1, 1, 2, 4)即 D8 空洞策略out_indices(0, 1, 2, 3)预训练权重来自open-mmlab://resnet50_v1cdecode_headPSAHeadin_channels2048、in_index3取第 4 个 stage 的输出、channels512、mask_size(97, 97)、psa_typebi-direction、compactFalse、shrink_factor2、normalization_factor1.0、psa_softmaxTrue、dropout_ratio0.1、num_classes19Cityscapes、align_cornersFalse损失为CrossEntropyLossloss_weight1.0auxiliary_headFCNHeadin_channels1024、in_index2、channels256损失权重0.4用于深度监督data_preprocessorSegDataPreProcessormean/std 为 ImageNet 统计值bgr_to_rgbTrueseg_pad_val255测试设置test_cfgdict(modewhole)整图推理。各数据集配置的差异要点以 configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py 为例其通过_base_继承模型、数据集、运行时与调度四个基础文件仅需追加crop_size与data_preprocessor_base_ [ ../_base_/models/psanet_r50-d8.py, ../_base_/datasets/cityscapes.py, ../_base_/default_runtime.py, ../_base_/schedules/schedule_40k.py ] crop_size (512, 1024) data_preprocessor dict(sizecrop_size) model dict(data_preprocessordata_preprocessor)不同数据集的配置差异主要体现为对基础配置的覆写ADE20Kpsanet_r50-d8_4xb4-80k_ade20k-512x512.pycrop_size(512, 512)decode_head的mask_size(66, 66)、num_classes150auxiliary_head的num_classes150Pascal VOC 2012 Augpsanet_r50-d8_4xb4-20k_voc12aug-512x512.pycrop_size(512, 512)主、辅头num_classes21Cityscapes 769×769psanet_r50-d8_4xb2-40k_cityscapes-769x769.py主、辅头align_cornersTrue且test_cfg切换为滑窗推理modeslide, crop_size(769, 769), stride(513, 513)R-101 骨干如 psanet_r101-d8_4xb4-160k_ade20k-512x512.py仅通过model dict(pretrainedopen-mmlab://resnet101_v1c, backbonedict(depth101))覆写骨干其余结构完全复用。从中可以总结一个规律PSAHead 的mask_size需要与骨干输出特征图的分辨率匹配Cityscapes 512×1024 输入对应 97×97ADE20K 512×512 输入对应 66×66这是因为注意力掩码的维度直接由特征图空间尺寸决定。预训练模型结果一览configs/psanet/README.md 与 configs/psanet/metafile.yaml 记录了 PSANet 在三大数据集上的完整评测结果训练资源均为 4×V100指标为单尺度/多尺度翻转 mIoU各配置对应的模型权重与训练日志下载地址均登记在metafile.yaml中。Cityscapes19 类骨干输入尺寸迭代数显存(GB)mIoUmIoU(msflip)配置文件R-50-D8512×102440k7.077.6379.04psanet_r50-d8_4xb2-40k_cityscapes-512x1024.pyR-101-D8512×102440k10.579.1480.19psanet_r101-d8_4xb2-40k_cityscapes-512x1024.pyR-50-D8769×76940k7.977.9979.64psanet_r50-d8_4xb2-40k_cityscapes-769x769.pyR-101-D8769×76940k11.978.4380.26psanet_r101-d8_4xb2-40k_cityscapes-769x769.pyR-50-D8512×102480k-77.2478.69psanet_r50-d8_4xb2-80k_cityscapes-512x1024.pyR-101-D8512×102480k-79.3180.53psanet_r101-d8_4xb2-80k_cityscapes-512x1024.pyR-50-D8769×76980k-79.3180.91psanet_r50-d8_4xb2-80k_cityscapes-769x769.pyR-101-D8769×76980k-79.6980.89psanet_r101-d8_4xb2-80k_cityscapes-769x769.pyADE20K150 类骨干输入尺寸迭代数显存(GB)mIoUmIoU(msflip)配置文件R-50-D8512×51280k9.041.1441.91psanet_r50-d8_4xb4-80k_ade20k-512x512.pyR-101-D8512×51280k12.543.8044.75psanet_r101-d8_4xb4-80k_ade20k-512x512.pyR-50-D8512×512160k-41.6742.95psanet_r50-d8_4xb4-160k_ade20k-512x512.pyR-101-D8512×512160k-43.7445.38psanet_r101-d8_4xb4-160k_ade20k-512x512.pyPascal VOC 2012 Aug21 类骨干输入尺寸迭代数显存(GB)mIoUmIoU(msflip)配置文件R-50-D8512×51220k6.976.3977.34psanet_r50-d8_4xb4-20k_voc12aug-512x512.pyR-101-D8512×51220k10.477.9179.30psanet_r101-d8_4xb4-20k_voc12aug-512x512.pyR-50-D8512×51240k-76.3077.35psanet_r50-d8_4xb4-40k_voc12aug-512x512.pyR-101-D8512×51240k-77.7379.05psanet_r101-d8_4xb4-40k_voc12aug-512x512.py从结果表可以看到双向注意力带来的长距离上下文建模在 Cityscapes 这类高分辨率街景数据上收益明显R-101-D8 40k 达到 80.19 mIoU(msflip)而 ADE20K 这类类别极多的数据集上 PSANet 同样保持了竞争力更大输入尺寸769×769与更长训练计划80k/160k通常能带来 0.31.0 个点的稳定提升可作为复现实验时的对照维度。训练与推理实战以 Cityscapes 512×1024 配置为例可在仓库根目录直接使用官方训练脚本需按 docs/zh_cn 中的安装说明先完成 MMsegmentation 与数据集的准备# 单卡训练 python tools/train.py configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py # 多卡分布式训练4 卡 bash tools/dist_train.sh configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py 4 # 使用 metafile.yaml 中登记的预训练权重进行测试 python tools/test.py configs/psanet/psanet_r50-d8_4xb2-40k_cityscapes-512x1024.py \ /path/to/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth \ --eval mIoU几点实操注意事项显存规划bi-direction模式会同时计算 collect 与 distribute 两套注意力矩阵显存开销显著高于单方向模式。Cityscapes 512×1024 输入下 R-101 需约 10.5GB 显存769×769 输入下约 11.9GB显存受限时可改用collect或distribute模式并开启compactTruemask_size 匹配更换输入分辨率或骨干时需同步调整mask_size使其与骨干最后一级输出特征图的空间尺寸一致例如 Cityscapes 512×1024 → (97, 97)ADE20K 512×512 → (66, 66)否则注意力掩码维度会不匹配高分辨率测试769×769 配置默认使用modeslide滑窗推理crop_size(769, 769)、stride(513, 513)如果显存足够希望整图推理可将test_cfg改回modewhole依赖要求PSAHead 依赖mmcv.ops中的PSAMask算子需确保安装的是包含自定义 CUDA 算子的 mmcv 版本否则构建模型时会抛出RuntimeError。引用如果论文复现或对比实验中使用了 PSANet原文档提供了标准 BibTeX 引用inproceedings{zhao2018psanet, title{Psanet: Point-wise spatial attention network for scene parsing}, author{Zhao, Hengshuang and Zhang, Yi and Liu, Shu and Shi, Jianping and Change Loy, Chen and Lin, Dahua and Jia, Jiaya}, booktitle{Proceedings of the European Conference on Computer Vision (ECCV)}, pages{267--283}, year{2018} }小结本文以 configs/psanet/README.md 为骨架结合 mmseg/models/decode_heads/psa_head.py 的实现细节、configs/base/models/psanet_r50-d8.py 的基础配置、configs/psanet 下的 16 个实验配置以及 tests/test_models/test_heads/test_psa_head.py 的测试覆盖完整呈现了 PSANet 从算法动机、源码结构、配置编写到训练评估的全链路。掌握了psa_type、shrink_factor、compact、mask_size等关键参数的行为后你可以在此基础上方便地将其移植到自有数据集或与 FCN、PSPNet 等其他解码头进行公平对比实验。【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表