摘要
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]=k∑x[i+r⋅k]w[k]
其中
y
y
y是输出,
w
w
w是过滤器,
x
x
x是输入,
r
r
r是空洞率。空洞卷积的实现主要是通过在每个通道上的两个连续过滤器值之间插入
r
−
1
r-1
r−1个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的语义分割效果好,但是仍然面临着目前所有语义分割模型共有的缺陷:计算复杂度高、小物体分割不够精细。