DeepLabv3

摘要

  DeepLabV3是在DeepLabV1、V2基础改进的语义分割模型。DeepLabV3的核心贡献主要是空洞卷积的使用,空洞卷积通过在卷积核中插入空洞来扩大感受野,从而捕获更广泛的上下文信息和缓解连续池化卷积带来的问题——特征图急剧减小。空洞卷积主要用在主干网络的最后两个模块中,以保持特征图的形状不再变化;除了用于主干网络之外,DeepLabV3还提出了空间金字塔池化的变体——空洞空间金字塔池化,用空洞卷积来改进空间金字塔池化,以增强对不同尺度物体的捕获能力。此外,DeepLabV3在每个卷积层后都接着BatchNormalization,以加速训练过程并提高模型的泛化性能。尽管DeepLabV3的分割效果好,但是它仍然面临两个问题:计算复杂度高、分割小物体的效果不佳。

Abstract

  DeepLabV3 is an improved semantic segmentation model based on DeepLabV1 and V2. Its core contribution lies in the use of dilated convolutions, which expand the receptive field by inserting gaps within the convolutional kernels. This allows the model to capture a broader range of contextual information while mitigating the issue of drastic feature map reduction caused by consecutive pooling and convolution operations. Dilated convolutions are primarily applied in the last two modules of the backbone network to maintain the spatial resolution of feature maps.
  In addition to its use in the backbone network, DeepLabV3 introduces a variant of spatial pyramid pooling—Atrous Spatial Pyramid Pooling (ASPP). By incorporating dilated convolutions into spatial pyramid pooling, ASPP enhances the model’s ability to capture objects at different scales. Furthermore, DeepLabV3 applies Batch Normalization after each convolutional layer to accelerate training and improve generalization.
  Although DeepLabV3 achieves strong segmentation performance, it still faces two main challenges: high computational complexity and suboptimal performance in segmenting small objects.

1. 引言

  语义分割任务面临着两大挑战。一个是由连续池化或大卷积步长引起的特征图分辨率减小问题;另一个是由不同尺度物体引起的分割问题。
  尽管连续池化、卷积有助于深度卷积神经网络学习越来越抽象的特征表示,但是这种对局部图像变化的不变性会阻碍如语义分割的密集预测任务。解决第一个挑战的方法是使用空洞卷积,空洞卷积可以在不学习额外参数的情况下控制特征图的分辨率减小的幅度。对于第二个挑战,许多方法已经被提出来解决这个问题,下面介绍目前主流的四种方法:1. 使用图像金字塔来提取不同尺度输入的特征图,如此不同尺度的物体在不同尺度的特征图上更加突出。2. 编码器部分利用多尺度特征,而解码器恢复特征图的分辨率。3. 将额外的模型级联在原始网络的顶部,以捕获长距离信息。4. 使用空间金字塔池化来捕获不同尺度的物体。

2. 框架

  DeepLabV3的主干网络是残差神经网络(ResNet50、ResNet101)。残差神经网络中只需要对第三个和第四个残差块所有 3 × 3 3\times3 3×3卷积使用空洞率分别为2和4的空洞卷积,并保证经过第三个块和第四块后的特征图形状是原图的8分之一即可。DeepLabV3的运行流程:首先经过修改后的残差神经网络进行特征提取,然后再经过空洞空间金字塔池化模块,最后特征图再经过全局平均池化、 1 × 1 1\times1 1×1卷积、BatchNormalization后上采样回原图大小。
在这里插入图片描述

2.1 空洞卷积

  空洞卷积的目的是解决连续卷积、池化导致特征图分辨率急剧下降的问题。下图中output_stride指的是原图分辨率与当前输出特征图分辨率的比值,标注了rate值的特征图说明前一块中使用了空洞卷积,从下图中可以看出在没有使用空洞卷积的情况下,最终输出特征图分辨率是原图分辨率的256分之一,而使用空洞卷积的情况下,最终输出特征图分辨率是原图分辨率的16分之一,保留相对精细的空间信息。
在这里插入图片描述
  空洞卷积的计算公式:
y [ i ] = ∑ k x [ i + r ⋅ k ] w [ k ] \large y[i]=\sum_kx[i+r·k]w[k] y[i]=kx[i+rk]w[k]
其中 y y y是输出, w w w是过滤器, x x x是输入, r r r是空洞率。空洞卷积的实现主要是通过在每个通道上的两个连续过滤器值之间插入 r − 1 r-1 r1个0来实现的。 r = 1 r=1 r=1是正常卷积,只有当 r > 1 r\gt1 r>1时才是空洞卷积,如下图所示。
在这里插入图片描述
  论文效果最好的模型output_stride为8,Block3中 3 × 3 3\times3 3×3卷积的空洞率为2,Block4中 3 × 3 3\times3 3×3卷积的空洞率为4。

2.2 空洞空间金字塔池化模块

  空洞空间金字塔池化是空间金字塔池化的变体,其中所有 3 × 3 3\times3 3×3卷积层都是空洞率不同的空洞卷积,每个卷积层后都跟着BatchNormalization,而 1 × 1 1\times1 1×1卷积层产生的结果需要上采样,使得上采样后的特征图形状与下面三个特征图形状一致。空洞空间金字塔池化模块并没有使用上采样后再进行拼接,而是把输入特征图进行卷积、BatchNormalization、激活后使其与其他四个特征图形状一致后再进行拼接,拼接后的特征图再进行 1 × 1 1\times1 1×1的卷积,得到最终的特征图。
在这里插入图片描述

3. 创新点和不足

3.1 创新点

  DeepLabv3 引入了空洞卷积,通过在卷积核中插入空洞(即跳过一些像素点)来扩大感受野,从而捕获更广泛的上下文信息。空洞卷积可以在不改变特征图尺寸的情况下,扩大感受野,这对于语义分割任务非常有用;DeepLabv3 在每个卷积层之后添加了批量归一化(BN)层,以稳定和优化学习过程。批量归一化有助于加速训练过程并提高模型的泛化性能;DeepLabv3 引入了空洞空间金字塔池化模块,该模块通过组合来自不同尺度的感受野输出,增强了对多尺度物体的理解能力。

3.2 不足

  DeepLabv3 的计算量较大,因为它需要对整个图像进行推断,这可能会导致较长的推断时间。特别是在处理高分辨率图像时,计算复杂度会显著增加;DeepLabv3 在处理小目标时,分割效果可能不够理想。这是因为模型在捕获小目标的细节特征时存在困难,导致分割结果不够精确。

参考

Liang-Chieh Chen, George Papandreou, Florian Schroff, and et al. Rethinking Atrous Convolution for Semantic Image Segmentation.
代码来源:https://github.com/Tramac/awesome-semantic-segmentation-pytorch

总结

  DeepLabV3的主干网络是残差神经网络(ResNet50、ResNet101)。残差神经网络中只需要对第三个和第四个残差块所有 3 × 3 3\times3 3×3卷积使用空洞率分别为2和4的空洞卷积,并保证经过第三个块和第四块后的特征图形状是原图的8分之一即可。DeepLabV3的运行流程:首先经过修改后的残差神经网络进行特征提取,然后再经过空洞空间金字塔池化模块,最后特征图再经过全局平均池化、 1 × 1 1\times1 1×1卷积、BatchNormalization后上采样回原图大小。尽管DeepLabV3的语义分割效果好,但是仍然面临着目前所有语义分割模型共有的缺陷:计算复杂度高、小物体分割不够精细。

### DeepLabv3 模型概述 DeepLabV3 是一种先进的语义分割模型,其核心设计在于通过空洞卷积(Atrous Convolution)和空洞空间金字塔池化(ASPP, Atrous Spatial Pyramid Pooling)技术捕捉多尺度上下文信息[^3]。该模型继承了前代版本的核心理念并进行了多项改进,使其成为当前主流的语义分割解决方案之一。 #### 模型结构特点 DeepLabV3 的主要创新点集中在以下几个方面: 1. **空洞卷积**:相比传统卷积操作,空洞卷积通过在滤波器之间插入零值扩大感受野而不增加参数量或计算成本。这使得模型可以有效捕获更大范围的空间信息。 2. **ASPP 结构**:为了应对不同尺寸的目标对象,DeepLabV3 提出了增强版的 ASPP 架构,利用多个具有不同采样率的平行空洞卷积分支提取多尺度特征。 3. **全局平均池化层集成**:在 ASPP 中加入了一个全局平均池化层,从而增强了对图像整体背景的理解能力。 #### 实现方式 ##### PyTorch 实现 PyTorch 官方提供了预训练好的 DeepLabV3 模型,可以直接从 `torchvision.models` 加载使用。以下是加载 ResNet-101 骨干网络的 DeepLabV3 示例代码: ```python import torch from torchvision import models # 加载带有ResNet-101骨干网的DeepLabV3模型 deeplabv3 = models.segmentation.deeplabv3_resnet101(pretrained=True) # 设置模型为评估模式 deeplabv3.eval() # 输入张量形状 (batch_size=1, channels=3, height=513, width=513) input_tensor = torch.rand(1, 3, 513, 513) # 进行推理 output = deeplabv3(input_tensor)['out'] print(output.shape) # 输出维度应为(batch_size, num_classes, height, width) ``` 上述代码展示了如何快速部署一个基于 ResNet-101 的 DeepLabV3 模型,并完成简单的输入输出测试[^1]。 ##### TensorFlow 实现 对于 TensorFlow 用户而言,官方同样支持 DeepLabV3 的实现方案。可以通过 Keras API 轻松构建模型实例。以下是一个基本的例子: ```python import tensorflow as tf # 创建DeepLabV3模型实例 model = tf.keras.applications.DeepLabV3(weights='pascal_voc', input_shape=(512, 512, 3)) # 准备随机输入数据 dummy_input = tf.random.uniform((1, 512, 512, 3), minval=-1., maxval=1.) # 执行预测 predictions = model.predict(dummy_input) print(predictions.shape) # 应返回(batch_size, height, width, num_classes) ``` 此脚本说明了如何借助 Pascal VOC 数据集上的预训练权重初始化一个完整的 DeepLabV3 系统[^4]。 #### 使用方法 无论是采用 PyTorch 或者 TensorFlow 平台,实际运用 DeepLabV3 主要涉及三个阶段——准备、执行以及后处理。具体流程如下所示: - **数据预处理**:调整原始图片大小至固定规格(通常推荐 513×513),标准化像素分布等; - **推断过程**:将经过处理后的样本送入神经网络获取分类概率图谱; - **结果解析**:依据每像素对应的最高置信度标签生成最终掩膜图像。 值得注意的是,在某些应用场景下可能还需要额外考虑性能优化措施比如混合精度训练或是分布式GPU加速等等[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值