尧图精选

UPerNet 语义分割详解:OpenMMLab MMSegmentation 中的 Unified Perceptual Parsing 实现与实战

🕒 发布时间:2026/9/15 20:24:27 📁 来源:尧图网络
UPerNet 语义分割详解OpenMMLab MMSegmentation 中的 Unified Perceptual Parsing 实现与实战【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentationUPerNetUnified Perceptual Parsing Network是一个面向统一场景理解的多任务分割框架能够同时建模场景类别、物体、材质与部件等不同粒度的视觉概念。本文以 MMSegmentation 仓库中 configs/upernet/README.md 为骨架结合 uper_head.py 源码与 configs/upernet 目录下全套训练配置深入讲解 UPerNet 的算法原理、配置体系与训练使用方法帮助你掌握在 Cityscapes、ADE20K、Pascal VOC 等数据集上复现与二次开发 UPerNet 的完整技能。UPerNet 背景与核心思想UPerNet 由论文Unified Perceptual Parsing for Scene UnderstandingXiao Tete、Liu Yingcheng、Zhou Bolei 等人ECCV 2018提出论文地址为 arXiv:1807.10221。该论文观察到人类理解视觉世界是多层次的——既能轻松地对场景进行分类、检测其中的物体也能识别物体的纹理、表面以及它们的组成部件。为此论文定义了一个新的任务Unified Perceptual Parsing统一感知解析要求机器视觉系统能够从一张图像中识别出尽可能多的视觉概念。围绕这一任务论文做出了两项核心贡献提出名为UPerNet的多任务框架用一个统一的骨干网络同时支撑多个解析分支设计了一套训练策略使模型能够从异构的图像标注数据不同数据集标注不同粒度的概念中联合学习。在 MMSegmentation 中UPerNet 被实现为EncoderDecoder体系下的一个解码头UPerHead注册于 mmseg/models/decode_heads/uper_head.py与仓库中的 PSPNet、DeepLabV3 等模型共用一套训练与评测管线。官方复现实验表明该框架能够有效分割图像中广泛的概念类别训练好的网络还可用于发现自然场景中的视觉知识官方原始仓库为 CSAILVision/unifiedparsing。算法架构PPM FPN 的双重特征聚合UPerHead 的架构精髓在于同时使用金字塔池化模块PPM和特征金字塔网络FPN分别解决全局上下文与多尺度细节两个问题。这一点可以直接从源码 uper_head.py 的__init__中读出MODELS.register_module() class UPerHead(BaseDecodeHead): def __init__(self, pool_scales(1, 2, 3, 6), **kwargs): super().__init__(input_transformmultiple_select, **kwargs) # PSP Module self.psp_modules PPM( pool_scales, self.in_channels[-1], self.channels, conv_cfgself.conv_cfg, norm_cfgself.norm_cfg, act_cfgself.act_cfg, align_cornersself.align_corners) self.bottleneck ConvModule( self.in_channels[-1] len(pool_scales) * self.channels, self.channels, 3, padding1, conv_cfgself.conv_cfg, norm_cfgself.norm_cfg, act_cfgself.act_cfg) # FPN Module self.lateral_convs nn.ModuleList() self.fpn_convs nn.ModuleList() for in_channels in self.in_channels[:-1]: # skip the top layer ... self.fpn_bottleneck ConvModule( len(self.in_channels) * self.channels, self.channels, 3, padding1, conv_cfgself.conv_cfg, norm_cfgself.norm_cfg, act_cfgself.act_cfg)几个关键设计点input_transformmultiple_selectBaseDecodeHead默认只取单层特征而 UPerHead 需要消费骨干网络全部四个阶段的输出如 ResNet 的 C2、C3、C4、C5因此必须开启多特征选择。PPM 金字塔池化作用于最深的最后一层特征pool_scales默认(1, 2, 3, 6)。PPM 的实现位于 psp_head.py每个尺度对应AdaptiveAvgPool2d(pool_scale)加 1x1 卷积输出再双线性上采样回原尺寸并拼接用于捕捉全局上下文。FPN 侧向连接对除最深层以外的每一层做 1x1 侧向卷积lateral_convs压缩通道再自顶向下逐层相加融合多尺度信息最后接 3x3 卷积fpn_convs消除上采样伪影。前向过程_forward_feature可以概括为三步先对各级特征做侧向卷积并拼接 PPM 输出再自顶向下做 top-down 路径融合最后把所有层级上采样到最高分辨率后拼接经fpn_bottleneck得到统一特征交由cls_seg逐像素分类。从源码结构看这种PPM 拿全局、FPN 拿多尺度的组合正是 UPerNet 能同时胜任场景级与物体/部件级解析的关键。配置文件体系从基础模型到数据集级联MMSegmentation 采用_base_配置继承机制。以 Cityscapes 为例upernet_r50_4xb2-40k_cityscapes-512x1024.py 全部内容如下_base_ [ ../_base_/models/upernet_r50.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)可见一个 UPerNet 实验由四部分拼接而成模型定义、数据集定义、运行时定义、训练调度。而模型本身定义在 configs/base/models/upernet_r50.py其中关键参数包括backboneResNetV1cdepth50out_indices(0, 1, 2, 3)输出四层特征dilations(1, 1, 1, 1)不使用空洞卷积与 DeepLab 系列d8/d16不同预训练权重为open-mmlab://resnet50_v1cdecode_headtypeUPerHeadin_channels[256, 512, 1024, 2048]、in_index[0, 1, 2, 3]pool_scales(1, 2, 3, 6)channels512dropout_ratio0.1num_classes19Cityscapes 类别数损失为CrossEntropyLossloss_weight1.0auxiliary_head辅助分支为FCNHead取in_index2C4 层1024 通道channels256loss_weight0.4用于训练期提供深监督test_cfgmodewhole整图推理而非滑窗。换数据集时只需覆盖与类别数、分辨率相关的字段。例如 ADE20K 的 upernet_r50_4xb4-160k_ade20k-512x512.py 将num_classes改为 150 并切换调度到schedule_160kPascal VOC 变体如 upernet_r101_4xb4-20k_voc12aug-512x512.py直接在 R50 配置上通过model dict(pretrainedopen-mmlab://resnet101_v1c, backbonedict(depth101))一键换骨干。R18 变体如 upernet_r18_4xb4-160k_ade20k-512x512.py则同时改写in_channels[64, 128, 256, 512]与auxiliary_head.in_channels256。data_preprocessor统一使用SegDataPreProcessor内置 ImageNet 均值/标准差归一化、bgr_to_rgbTrue通道转换及 paddingpad_val0、seg_pad_val255各数据集配置只需通过data_preprocessor dict(sizecrop_size)声明裁剪尺寸。实验结果与预训练模型configs/upernet/README.md中记录了三大数据集的复现成绩评估设备为 NVIDIA V100指标为 mIoUmIoU(msflip)表示多尺度 水平翻转测试对应模型权重与训练日志均可在 metafile.yaml 中找到训练资源为 4×V100 GPU。Cityscapes骨干Crop Size迭代数Mem (GB)推理 (fps)mIoUmIoU(msflip)配置文件R-50512x1024400006.44.2577.1078.37upernet_r50_4xb2-40k_cityscapes-512x1024.pyR-101512x1024400007.43.7978.6980.11upernet_r101_4xb2-40k_cityscapes-512x1024.pyR-50769x769400007.21.7677.9879.70upernet_r50_4xb2-40k_cityscapes-769x769.pyR-101769x769400008.41.5679.0380.77upernet_r101_4xb2-40k_cityscapes-769x769.pyR-50512x102480000--78.1979.19upernet_r50_4xb2-80k_cityscapes-512x1024.pyR-101512x102480000--79.4080.46upernet_r101_4xb2-80k_cityscapes-512x1024.pyR-50769x76980000--79.3980.92upernet_r50_4xb2-80k_cityscapes-769x769.pyR-101769x76980000--80.1081.49upernet_r101_4xb2-80k_cityscapes-769x769.pyADE20K骨干Crop Size迭代数Mem (GB)推理 (fps)mIoUmIoU(msflip)配置文件R-50512x512800008.123.4040.7041.81upernet_r50_4xb4-80k_ade20k-512x512.pyR-101512x512800009.120.3442.9143.96upernet_r101_4xb4-80k_ade20k-512x512.pyR-50512x512160000--42.0542.78upernet_r50_4xb4-160k_ade20k-512x512.pyR-101512x512160000--43.8244.85upernet_r101_4xb4-160k_ade20k-512x512.pyPascal VOC 2012 Aug骨干Crop Size迭代数Mem (GB)推理 (fps)mIoUmIoU(msflip)配置文件R-50512x512200006.423.1774.8276.35upernet_r50_4xb4-20k_voc12aug-512x512.pyR-101512x512200007.519.9877.1078.29upernet_r101_4xb4-20k_voc12aug-512x512.pyR-50512x51240000--75.9277.44upernet_r50_4xb4-40k_voc12aug-512x512.pyR-101512x51240000--77.4378.56upernet_r101_4xb4-40k_voc12aug-512x512.py从结果可以观察到一个典型规律迭代数翻倍40k→80k带来的收益普遍大于骨干从 R-50 升级到 R-101而在 Cityscapes 上 769x769 大裁剪尺寸通常比 512x1024 获得 0.71.1 个点的 mIoU 提升代价是显存与推理耗时显著增加。这些模型的配置、权重与日志条目均收录在 configs/upernet/metafile.yaml 中可通过 MMSegmentation 的模型索引机制直接引用。训练、测试与单图推理在准备好对应数据集Cityscapes / ADE20K / Pascal VOC 2012 Aug并按 MMSegmentation 的数据目录规范组织后即可使用仓库标准工具进行实验单卡训练python tools/train.py configs/upernet/upernet_r50_4xb2-40k_cityscapes-512x1024.py多卡训练使用 tools/dist_train.sh例如bash tools/dist_train.sh configs/upernet/upernet_r50_4xb2-40k_cityscapes-512x1024.py 8测试/评测python tools/test.py config checkpoint --eval mIoU单图推理python demo/image_demo.py img config checkpoint --out-file result.png推理时默认采用test_cfgdict(modewhole)整图前向如需报告表中所列mIoU(msflip)可在测试命令中启用多尺度与翻转增强的评测配置。引用方式若在研究中使用了 UPerNet 或本文涉及的实现建议按如下 BibTeX 引用原始论文亦收录于 configs/upernet/README.mdinproceedings{xiao2018unified, title{Unified perceptual parsing for scene understanding}, author{Xiao, Tete and Liu, Yingcheng and Zhou, Bolei and Jiang, Yuning and Sun, Jian}, booktitle{Proceedings of the European Conference on Computer Vision (ECCV)}, pages{418--434}, year{2018} }小结UPerNet 通过PPM 全局上下文 FPN 多尺度融合的巧妙组合用单一骨干支撑起多粒度统一场景理解。在 MMSegmentation 中它被封装为UPerHead解码头源码位置配合 configs/base/models/upernet_r50.py 的模块化配置体系可以轻松在 Cityscapes、ADE20K、Pascal VOC 等数据集上训练、复现与扩展。其辅助FCNHead深监督、pool_scales可调、骨干可一键替换R-18/R-50/R-101等特性使其既适合作为语义分割的基线模型也适合作为多任务场景理解框架的起点。【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →