MMSegmentation 中的 FastFCN 与 JPU 模块:用联合金字塔上采样替代骨干网络膨胀卷积
发布时间:2026/9/16 13:31:43 锦皓数字建站

MMSegmentation 中的 FastFCN 与 JPU 模块用联合金字塔上采样替代骨干网络膨胀卷积【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation本文以 configs/fastfcn/README.md 为骨架结合 MMSegmentation 仓库中 JPUJoint Pyramid Upsampling模块的完整源码、FastFCN 系列配置文件与对应单元测试系统讲解 FastFCN 的动机、JPU 的实现原理、三种解码头组合的配置方法以及 Cityscapes 与 ADE20K 上的复现结果。读完本文你将掌握如何在 MMSegmentation 中直接调用 JPU 颈部模块、读懂并复用 FastFCN 全套配置文件并理解其在语义分割中提速三倍而不损失精度的工程思路。FastFCN 要解决什么问题现代语义分割方法如 DeepLabV3、PSPNet通常依赖在骨干网络末端使用**膨胀卷积dilated convolution**来保持特征图的高分辨率从而获得精细的分割结果。但膨胀卷积会带来两个显著代价计算复杂度高高分辨率特征图上的卷积操作大幅增加 FLOPs内存占用大高分辨率特征图本身以及随之而来的大感受野中间结果会显著抬高显存峰值。FastFCNFast Fully Convolutional Network论文出自 Wu Huikai 等人arXiv:1903.11816的核心观点是把在骨干网络中提取高分辨率特征图这件事重新表述为一个联合上采样问题并据此提出 Joint Pyramid UpsamplingJPU模块用它替换耗时耗内存的膨胀卷积。论文报告的结果是在不损失性能的前提下计算复杂度降低三倍以上并在 Pascal ContextmIoU 53.13%与 ADE20Kfinal score 0.5584上达到当时的 SOTA同时推理速度快约 3 倍。JPU 是一个即插即用模块可以挂接到 DeepLabV3、PSPNet、EncNet 等已有方法上。MMSegmentation 仓库将其实现为颈部neck组件JPU并配套了 12 个 FastFCN 训练配置。JPU 在 MMSegmentation 中的源码实现JPU 的实现位于 mmseg/models/necks/jpu.py通过MODELS.register_module()注册因此可以直接在配置中以typeJPU引用。构造参数从源码的__init__签名jpu.py 第 43-53 行可以看到 JPU 的全部可配置参数参数默认值说明in_channels(512, 1024, 2048)参与上采样前的各骨干层输入通道数必须是 tuplemid_channels512JPU 的输出通道数start_level0用于构建特征金字塔的起始骨干层索引end_level-1结束骨干层索引不含-1表示最后一层dilations(1, 2, 4, 8)每个 Depthwise Separable ConvModule 的膨胀率必须是 tuplealign_cornersFalseresize 操作的align_corners参数conv_cfg/norm_cfg/act_cfgNone/dict(typeBN)/dict(typeReLU)卷积、归一化、激活层的配置源码对输入做了严格校验assert isinstance(in_channels, tuple)与assert isinstance(dilations, tuple)jpu.py 第 55-56 行并且当end_level不是-1时要求end_level len(in_channels)。前向计算流程JPU 的forwardjpu.py 第 99-131 行分为三步逐层 1×3 卷积对齐通道对[start_level, backbone_end_level)范围内的每一层输入先经过一个ConvModule(kernel_size3, padding1)将通道数统一压缩到mid_channels双线性上采样并对齐尺寸以第一层特征图的高宽(h, w)为基准对其余各层用双线性插值resize到相同尺寸然后沿通道维torch.cat拼接多膨胀率深度可分离卷积对拼接后的特征并行执行len(dilations)个DepthwiseSeparableConvModule核 3×3膨胀率分别为dilations[i]再将所有膨胀分支的输出在通道维拼接得到 JPU 的最终输出特征。输出的组织方式很关键jpu.py 第 123-131 行outs中保留[start_level, backbone_end_level-1)的原始骨干特征供辅助头使用并在最后追加拼接后的concat_feat供主解码头使用。以默认配置为例JPU 输出三元组(x2, x3, jpu_feat)——前两个来自骨干第三个是高分辨率拼接特征。单元测试印证tests/test_models/test_necks/test_jpu.py 直接验证了上述行为标准前向输入(64, 128, 256)通道、空间尺寸分别为64×128 / 32×64 / 16×32的三层特征输出长度仍为 3且第三层被上采样回第一层尺寸64×128通道数变为4×64256约束校验构造in_channels与层数不匹配的非法配置会触发AssertionError非默认start_level1输出变为二元组验证了start_level对金字塔构建范围的控制。FastFCN 配置文件全解析FastFCN 系列共 12 个配置文件位于 configs/fastfcn/均由一个基础骨架配置派生而来。骨架配置JPU PSPNetconfigs/base/models/fastfcn_r50-d32_jpu_psp.py 定义了完整模型骨干ResNetV1cdepth50关键在dilations(1, 1, 2, 4)、strides(1, 2, 2, 2)、contract_dilationTrue即不在骨干末端使用膨胀卷积保持常规下采样节奏out_indices(1, 2, 3)输出第 2/3/4 阶段特征颈部typeJPUin_channels(512, 1024, 2048)mid_channels512dilations(1, 2, 4, 8)解码头PSPHeadin_channels2048、in_index2、pool_scales(1, 2, 3, 6)辅助头FCNHeadin_channels1024、in_index1损失权重 0.4数据预处理器SegDataPreProcessor使用 ImageNet 均值和标准差、bgr_to_rgbTrue。注意这里decode_head的in_index2指向 JPU 输出元组中的第 3 个元素即拼接后的高分辨率特征——这正是 JPU 替代膨胀卷积后供给解码头的准高分辨率特征。三种解码头变体ASPP 变体fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py用_delete_True删除继承的PSPHead替换为ASPPHeaddilations(1, 12, 24, 36)PSP 变体fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py骨架配置直出Enc 变体fastfcn_r50-d32_jpu_enc_4xb2-80k_cityscapes-512x1024.py解码头替换为EncHeadin_channels[512, 1024, 2048]、in_index(0, 1, 2)、num_codes32并启用use_se_lossTrue与loss_se_decode损失权重 0.2——此时解码头直接消费 JPU 的全部三层输出。EncHead的实现位于 mmseg/models/decode_heads/enc_head.py。训练调度与批量配置Cityscapes 配置继承 configs/base/schedules/schedule_80k.pySGDlr0.01, momentum0.9, weight_decay0.0005、PolyLRpower0.9, eta_min1e-4、IterBasedTrainLoop80k 迭代、每 8k 迭代保存 checkpoint 并验证。ADE20K 的 160k 配置则继承schedule_160k其余保持不变。配置中的4xb2/4xb4前缀含义文档 Note 中明确说明4x4表示训练时 4 块 GPU、每块 4 个样本默认设置是 4 块 GPU、每块 2 个样本。ADE20K 配置文件还会额外覆盖num_classes150解码头与辅助头。训练与测试命令以 Cityscapes 上的 FastFCN DeepLabV3 为例使用仓库根目录的 tools/train.py 启动训练bash tools/dist_train.sh configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py 8训练完成后用 tools/test.py 评测bash tools/dist_test.sh configs/fastfcn/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024.py \ work_dirs/fastfcn_r50-d32_jpu_aspp_4xb2-80k_cityscapes-512x1024/iter_80000.pth 8其中iter_80000.pth即按调度配置中CheckpointHook保存的最新权重。注意以上命令假设已完成 MMSegmentation 的环境安装依赖见 requirements/runtime.txt且数据集按 configs/base/datasets/cityscapes.py 中的目录约定data/cityscapes摆放。复现结果Cityscapes19 类MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)FastFCN DeepLabV3R-50-D32512x1024800005.672.64V10079.1280.58FastFCN DeepLabV3R-50-D32 (4x4)512x1024800009.79-V10079.5280.91FastFCN PSPNetR-50-D32512x1024800005.674.40V10079.2680.86FastFCN PSPNetR-50-D32 (4x4)512x1024800009.94-V10078.7680.03FastFCN EncNetR-50-D32512x1024800008.154.77V10077.9779.92FastFCN EncNetR-50-D32 (4x4)512x10248000015.45-V10078.6080.25对应配置CityscapesASPP、PSP、Enc含 4x4 版预训练权重与训练日志由模型库随各版本发布渠道提供。ADE20K150 类MethodBackboneCrop SizeLr schdMem (GB)Inf time (fps)DevicemIoUmIoU(msflip)FastFCN DeepLabV3R-50-D32512x512800008.4612.06V10041.8842.91FastFCN DeepLabV3R-50-D32512x512160000--V10043.5844.92FastFCN PSPNetR-50-D32512x512800008.0219.21V10041.4042.12FastFCN PSPNetR-50-D32512x512160000--V10042.6343.71FastFCN EncNetR-50-D32512x512800009.6717.23V10040.8842.36FastFCN EncNetR-50-D32512x512160000--V10042.5044.21对应配置ADE20KASPP-80k、ASPP-160k、PSP-80k、PSP-160k、Enc-80k、Enc-160k。结果解读精度持平甚至反超Cityscapes 上 FastFCN DeepLabV34x4达到 mIoU 79.52文档注明的对照基线为 DeepLabV3 mIoU 79.32、PSPNet 78.55、EncNet 77.94详见各原方法配置目录 deeplabv3、pspnet、encnet 的 README。可以看到 JPU 在去掉骨干膨胀卷积后并未带来精度损失速度收益Inf time 指标显示 PSP 变体在 Cityscapes 上达到 4.40 fps、在 ADE20K 上达到 19.21 fps配合更低的显存占用PSP 变体 Cityscapes 仅 5.67 GB验证了三倍提速的论文结论在工程实现上的落地注意结果表以 V100 单卡推理为准实测速度会随框架版本、CUDA 版本与输入尺寸变化。快速上手指南阅读配置从 fastfcn_r50-d32_jpu_psp_4xb2-80k_cityscapes-512x1024.py 入手跟踪_base_继承链到 configs/base/models/fastfcn_r50-d32_jpu_psp.py切换解码头ASPP / Enc 变体展示了_delete_True覆写decode_head的标准写法可直接套用到其他模型复用 JPU 颈部在任何EncoderDecoder配置中声明neckdict(typeJPU, ...)即可参数语义见上文源码解析与 tests/test_models/test_necks/test_jpu.py 的用法示例。引用若在研究中使用了 FastFCN请引用原始论文BibTeX 源自 configs/fastfcn/README.mdarticle{wu2019fastfcn, title{Fastfcn: Rethinking dilated convolution in the backbone for semantic segmentation}, author{Wu, Huikai and Zhang, Junge and Huang, Kaiqi and Liang, Kongming and Yu, Yizhou}, journal{arXiv preprint arXiv:1903.11816}, year{2019} }【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。