人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载DeepLabV3 是 DeepLab 系列集大成之作将空洞卷积Atrous Convolution、空洞空间金字塔池化ASPP与编码器-解码器Encoder-Decoder结构融为一体在 PASCAL VOC 2012 与 Cityscapes 等数据集上取得了当时最优的分割精度。本文以 docs/models/deeplabv3.md 为核心骨架结合 PaddleSeg 中 deeplab.py 的完整实现与 deeplabv3p 系列配置文件系统讲解分割网络的基础概念感受野、空洞卷积、跳跃连接、多尺度问题、DeepLabV3 的架构设计原理以及如何基于 PaddleSeg 配置、训练和部署该模型。读完本文你将掌握 DeepLabV3 从论文原理到工程落地的完整链路。一、分割网络的基本结构Encoder 与 Decoder在深入 DeepLabV3 之前先建立分割网络的基本认知。一个语义分割网络的输出是一张 $N \times H \times W$ 的概率图$N$ 是一个向量其维度等于类别数量向量中每个元素对应一个类别元素数值即该像素属于该类别的概率。由于需要为每一个像素给出类别输出特征图的 $H \times W$ 必须与原图分辨率保持一致。从结构上看分割网络可以视为一个没有全连接层的全卷积网络FCN常见的网络结构分为两个部分Encoder编码器特征图的长宽逐步缩小即不断下采样用于提取高层次的语义特征Decoder解码器特征图的长宽逐步增大即不断上采样用于恢复空间分辨率并输出逐像素的预测。一个优秀的分割网络需要解决三个核心问题如何在较少层数下获得足够大的感受野、如何在上下采样过程中避免信息丢失、如何处理图像中目标尺度差异巨大的多尺度问题。DeepLabV3 正是针对这三个问题逐一给出了工程化的答案。二、感受野与空洞卷积不加深网络也能扩大感受野感受野Receptive Field是分割网络特征表达能力的重要评价指标。输出特征图上每个点的数值是由输入图像上大小为 $k_h \times k_w$ 的区域元素与卷积核逐元素相乘累加得到的因此输入图像上该区域内任意元素的数值变化都会影响输出点的像素值——这个输入区域就是输出特征图上对应点的感受野。直观地说感受野就是特征图上每个点所受到的图像区域影响范围的大小我们希望感受野尽可能大以捕获更全局的上下文信息。扩大感受野最直接的方法是增加 Encoder 的网络层数但这会显著增加网络参数规模、拉长训练时间与轻量、实时的分割需求背道而驰。更好的方案是空洞卷积Atrous/Dilated Convolution通过在卷积核元素之间插入空洞在不增加参数量的前提下扩大卷积核可触达的区域从而放大感受野、扩大卷积所包含的信息范围。如上图所示未使用空洞卷积的网络中一个输出点只能覆盖 5 个输入像素使用空洞卷积后同样的网络层级下一个输出点可以覆盖 9 个输入像素感受野得到显著扩张。空洞卷积在 PaddleSeg 中通过卷积层的dilation参数实现典型应用正是 DeepLabv3 的骨干网络与 ASPP 模块见下文源码分析。三、跳跃连接弥补下采样过程中的信息丢失分割网络面临的第二个问题是下采样过程中特征图的长宽不断减小虽然获得了高阶语义特征但维度较小若直接作为上采样输入会丢失一部分空间细节信息。解决方案是跳跃连接Skip Connection通过跳跃连接上采样过程不仅使用高阶特征还同时使用同维度的低阶特征进行特征融合。在 PaddleSeg 中跳跃连接的典型代表是 U-Net参见 unet.md而 DeepLabv3 的 Decoder 模块同样贯彻了这一思想它取骨干网络第一个 stage 输出的低层特征low-level feature与经过 4 倍上采样的高层特征拼接融合从而精细化目标边缘的分割效果。四、多尺度问题与 ASPP 模块分割网络需要解决的第三个问题是多尺度问题同一张图像中目标有大有小如何保证不同尺度的目标都能被很好地处理答案是空洞空间金字塔池化Atrous Spatial Pyramid Pooling, ASPP。通俗地讲其实现思想是让不同尺度的目标交给不同感受野的卷积层来处理——大感受野处理大目标小感受野处理小目标最终把多路结果融合获得多尺度上下文信息。五、DeepLabv3 整体架构DeepLabv3 是 DeepLab 系列的最新版本前作包括 DeepLabv1、DeepLabv2 和 DeepLabv3。在最新工作中作者结合编码器-解码器Encoder-Decoder结构和空间金字塔池化Spatial Pyramid Pooling, SPP模块的优点提出新的语义分割网络 DeepLabv3在 PASCAL VOC 2012 和 Cityscapes 数据集上取得了新的 state-of-the-art 表现。具体原理细节参考论文Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation。其整体结构如上图所示核心设计可拆解为Encoder 主体带有空洞卷积Atrous Convolution的骨干网络。骨干网络可采用 ResNet 等常用分类网络原论文作者使用了改进的 Xception 模型PaddleSeg 中则默认支持ResNet50_vd、ResNet101_vd、Xception65等骨干。ASPP 模块紧随骨干网络之后通过多个不同空洞率的并行卷积支路引入多尺度信息。如上图所示ASPP 由 5 条并行支路构成1×1 卷积、空洞率 rate6/12/18 的三个 3×3 空洞卷积以及全局图像池化Image Pooling多尺度特征拼接后经 1×1 卷积融合通道。Decoder 模块相比前作 DeepLabv3DeepLabv3 新增了解码器将浅层特征与深层特征进一步融合优化分割效果尤其是目标边缘的效果。解码器对低层特征先做 1×1 卷积降维将编码器输出的高层特征 4 倍上采样后与之拼接再经 3×3 卷积优化最终 4 倍上采样恢复到原图分辨率。深度可分离卷积作者将深度可分离卷积Depthwise Separable Convolution应用到 ASPP 和 Decoder 模块中显著降低了计算量提高了语义分割的健壮性和运行速率。六、PaddleSeg 源码实现DeepLabV3P 与 DeepLabV3PaddleSeg 在 paddleseg/models/deeplab.py 中同时实现了 DeepLabv3 与 DeepLabv3 两个模型分别对应类DeepLabV3P和DeepLabV3并统一通过manager.MODELS.add_component注册到模型组件管理器中从而可以在配置文件中用model.type: DeepLabV3P直接实例化。6.1 模型参数说明DeepLabV3P的构造函数参数同时也是配置文件中的字段如下参数默认值说明num_classes必填目标类别总数backbone必填骨干网络支持 ResNet50_vd / ResNet101_vd / Xception65backbone_indices(0, 3)骨干输出索引的二元组第一个索引对应的特征图作为 Decoder 的低层特征第二个索引对应的特征图作为 ASPP 的输入。以四阶段下采样骨干为例(0, 3)表示取第一个 stage 的特征图作为低层特征、第四个 stage 的特征图作为 ASPP 输入aspp_ratios(1, 6, 12, 18)ASPP 模块使用的空洞率。当output_stride16时设为(1, 6, 12, 18)当output_stride8时设为(1, 12, 24, 36)aspp_out_channels256ASPP 模块的输出通道数align_cornersFalseF.interpolate的参数当特征尺寸为偶数如 1024×512时应设为False为奇数如 769×769时应设为TruepretrainedNone预训练模型的路径或 URLdata_formatNCHW输入数据布局可选NCHW或NHWC从源码可见DeepLabV3P的forward首先由骨干网络提取特征列表再由DeepLabV3PHead完成 ASPP 与 Decoder 计算最后将输出logit通过双线性插值恢复到原图尺寸F.interpolate(..., modebilinear, align_corners...)。init_weight则通过utils.load_entire_model加载预训练权重。6.2 Decoder 模块细节Decoder类deeplab.py的实现与论文一一对应对低层特征做 1×1 卷积降维至 48 通道conv_bn_relu1将 ASPP 输出的高层特征上采样至与低层特征相同的空间尺寸沿通道维拼接paddle.concat依次经过两个 3×3 深度可分离卷积SeparableConvBNReLU输入 304 通道 → 256 通道 → 256 通道最后由 1×1 卷积输出num_classes通道的分类 logit。这里的304 256ASPP 输出 48低层特征降维后与论文中concat 后 304 通道的设计完全吻合。6.3 DeepLabV3无 Decoder 版本DeepLabV3类对应前作 DeepLabv3论文Rethinking Atrous Convolution for Semantic Image Segmentation其DeepLabV3Head仅由 ASPP 1×1 分类卷积构成没有 Decoder 模块且 ASPP 使用普通卷积而非深度可分离卷积use_sep_convFalse。对比两者可以清晰看到 DeepLabv3 相比前作的核心增量正是 Decoder 与深度可分离卷积。6.4 ASPP 模块源码解析ASPP 的实现位于 paddleseg/models/layers/pyramid_pool.py 的ASPPModule类多分支空洞卷积遍历aspp_ratios对每个 ratio 构建卷积块——ratio1 时用 1×1 卷积ratio1 时用 3×3 且dilationratio、paddingratio的空洞卷积若启用use_sep_convratio1 的分支使用SeparableConvBNReLU深度可分离卷积全局图像池化当image_poolingTrue时附加AdaptiveAvgPool2D全局池化 1×1 卷积支路在 NPU 设备上会用等价的CustomAvgPool2D均值操作替代避免反向传播过慢并将池化结果上采样回原特征尺寸后参与拼接融合与正则所有分支输出沿通道拼接后经 1×1 卷积conv_bn_relu融合为aspp_out_channels通道最后接nn.Dropout(p0.1)防止过拟合。七、配置文件实战从零训练 DeepLabV3PPaddleSeg 的 DeepLabV3P 配置存放在 configs/deeplabv3p 目录下以下以 Cityscapes 数据集上的标准配置 deeplabv3p_resnet50_os8_cityscapes_1024x512_80k.yml 为例进行逐项说明_base_: ../_base_/cityscapes.yml batch_size: 2 iters: 80000 model: type: DeepLabV3P backbone: type: ResNet50_vd output_stride: 8 multi_grid: [1, 2, 4] pretrained: https://bj.bcebos.com/paddleseg/dygraph/resnet50_vd_ssld_v2.tar.gz num_classes: 19 backbone_indices: [0, 3] aspp_ratios: [1, 12, 24, 36] aspp_out_channels: 256 align_corners: False pretrained: null参数要点_base_继承 cityscapes.yml该基础配置包含数据集路径、训练与验证阶段的 transform、学习率与优化器等公共设置batch_size: 2与iters: 80000为本次训练的超参output_stride: 8表示骨干网络输出相对输入缩小 8 倍对应论文中输出步长为 8 的设定此时aspp_ratios应相应放大为(1, 12, 24, 36)源码注释明确指出output_stride16时用(1, 6, 12, 18)output_stride8时用(1, 12, 24, 36)multi_grid: [1, 2, 4]为骨干网络最后阶段的多网格空洞率配合output_stride控制下采样过程中的空洞卷积配置pretrained指向骨干网络的预训练权重 URL训练时自动下载加载模型级pretrained: null表示模型整体不做额外预训练。换用更深骨干或 VOC 数据集只需替换配置如 deeplabv3p_resnet101_os8_cityscapes_1024x512_80k.yml 通过_base_继承 50 版配置、仅将骨干换为ResNet101_vd而 deeplabv3p_resnet50_os8_voc12aug_512x512_40k.yml 则继承pascal_voc12aug基础配置并将num_classes对应调整为 VOC 类别数。同时DeepLabv3无 Decoder 版的配置位于 configs/deeplabv3 目录例如 deeplabv3_resnet101_os8_cityscapes_1024x512_80k.yml。训练入口为 tools/train.py执行python tools/train.py \ --config configs/deeplabv3p/deeplabv3p_resnet50_os8_cityscapes_1024x512_80k.yml \ --save_dir output/deeplabv3p \ --do_eval \ --use_vdl--do_eval会在训练过程中周期性执行验证--use_vdl开启 VisualDL 可视化。训练完成后可使用 tools/export.py 导出静态图推理模型再通过 tools/predict.py 进行单图或批量预测或参考 deploy 目录完成 C / FastDeploy / 移动端等部署方案。八、总结DeepLabV3 的精髓在于用三个针对性设计回答分割网络的三个核心问题空洞卷积在不加深网络的前提下扩大感受野ASPP用多空洞率并行支路解决多尺度问题Encoder-Decoder 深度可分离卷积在融合低层空间细节的同时保证运行效率。PaddleSeg 在 deeplab.py 中提供了与论文结构严格对应的DeepLabV3P/DeepLabV3实现并通过 deeplabv3p 系列配置覆盖了 ResNet50_vd / ResNet101_vd 骨干、Cityscapes / VOC 数据集、output_stride 8/16 等多种组合配合 train.py 即可快速复现论文效果并落地到实际分割任务中。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐DeepLabV3PDeepLabV3语义分割实战指南PaddleSeg 配置、训练与源码解析DeepLabV3PDeepLabV3语义分割实战指南PaddleSeg 配置、训练与源码解析 本文以 configs/deeplabv3p/READM人工智能计算机视觉预训练PaddleSeg 中的 DeepLabV3 实战指南空洞卷积语义分割的配置、训练与源码解析PaddleSeg 中的 DeepLabV3 实战指南空洞卷积语义分割的配置、训练与源码解析 导读 DeepLabV3 是语义分割领域里程碑式的经典模型其核人工智能计算机视觉预训练PaddleSeg 中的 SegmenterViT 语义分割模型配置、原理与实战指南PaddleSeg 中的 SegmenterViT 语义分割模型配置、原理与实战指南 本篇技术指南围绕 PaddleSeg 仓库中 SegmenterTra人工智能计算机视觉预训练上一篇Cursor-Free-VIP开源工具优化Cursor AI配置的全流程指南下一篇用 PocketFlow 为聊天机器人构建话题级 GuardrailTravel Advisor Chat 实战解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考