DeepLab系列 Rethinking Atrous Convolution for Semantic Image Segmentation 语义分割
DeepLab 系列模型改进总结
DeepLab V1
动机:解决深度卷积网络(DCNNs)在语义分割任务中因多次下采样导致的空间分辨率降低问题。
创新点:
- 空洞卷积(Atrous Convolution):在标准卷积核中插入零值以扩大感受野,同时保持参数量和计算量不变。
- 全连接条件随机场(CRF):作为后处理步骤用于捕获像素间的长距离依赖关系。
DeepLab V2
动机:进一步探索多尺度信息的重要性。
创新点:- 空洞空间金字塔池化(ASPP):通过不同采样率的空洞卷积并行捕获多尺度信息。
- 避免依赖先验分类器的方法。
DeepLab V3
动机:进一步改进模型以更好地处理多尺度问题,并简化结构。
创新点:- 改进后的 ASPP 模块包含 1×1 卷积、三个不同采样率的空洞卷积以及一个图像级特征融合机制。
- 移除 CRF 模块,直接从 ASPP 中获取分数以减少额外计算。
- 引入多重网格策略(Multi-Grid),通过不同空洞率捕捉多尺度信息。
DeepLab V3+
动机:针对 DeepLab V3 中因多次下采样导致的特征分辨率降低和边界丢失问题。
创新点:- 引入编码器-解码器结构:使用 DeepLab V3 编码器捕获高级语义信息,解码器恢复细节信息。
- 使用浅层特征进行精细定位细节,并与全局上下文融合以提升分割精度。
总结
从 DeepLab V1 到 DeepLab V3+ 的发展过程体现了逐步优化和创新的特点:
初始版本引入了基础技术如空洞卷积和 CRF 来解决空间分辨率问题;
后续版本通过 ASPP 和多重网格策略显著提升了分割性能;
最新版本则进一步简化架构并引入更高效的编码器-解码器结构,在保持高性能的同时降低了计算复杂度。
这些改进使 DeepLab 系列模型成为语义分割任务中的重要选择,并且在多个基准测试中取得了显著效果。
DeepLabV3深入解读
DeepLabV3模型及其一般形式的深度卷积神经网络(DCNNs)在处理图像级别的分类任务时展现出卓越的效果。由于其复杂的架构设计——包括多层卷积、池化和全连接层——其模型架构得以形成,并成功地塑造了能够提取高度抽象特征的能力。这些特征表现出对图像平移与尺度变换的鲁棒性
尽管在涉及像素级别分类任务(如姿态估计、语义分割等)时,在处理这类场景时可能会遇到平移不变性带来的挑战。然而由于这些任务要求模型能够细致地区分图像中的像素或区域类别 通常依赖于对图像空间细节信息的精确捕捉和处理 这种特性可能会导致性能瓶颈
其发展系列及其衍生物 旨在解决这一挑战,开发了一系列先进技术和工具:
空洞卷积(Atrous Convolution):也可称为扩展卷积或带空洞的卷积,在维持特征图的空间分辨率不变的前提下,在每一层的局部区域中增加了可学习的空间感受野范围。这种设计使得模型能够捕捉到更丰富的上下文细节,并且在整体性能上保持较高水平的空间分辨率。
空洞金字塔级联池化(Atrous Spatial Pyramid Pooling, ASPP)是一种多尺度特征提取机制:该模块分别采用了不同采样率的空洞卷积层来进行多尺度特征提取,并对提取到的不同尺度的空间特征进行融合以增强模型对目标细节的捕捉能力。通过这种机制能够有效地帮助模型处理不同大小的目标区域。
条件随机场(Conditional Random Field, CRF):尽管 DeepLabV3 并未直接采用 CRF,在其先前版本中却曾通过在分割结果上应用 CRF 进行优化以实现更精细的划分。作为一种概率图模型,CRF 具备捕捉像素间相互关系的能力,并能有效提升整体的分割精度以及边界平滑效果。
encoder-decoder架构:尽管deep lab v3 primarily focuses on dilated convolutions and aspp, but subsequent versions, such as deep lab v3 plus, adopted the encoder-decoder architecture.其中encoder serves as the backbone network based on deep lab v3, while decoder is responsible for restoring spatial details.这种架构不仅能够有效保留高级语义信息而且还能促进空间细节的重建。
基于这些先进技术及其后续版本,在语义分割等像素级别分类任务方面展现了卓越的性能水平提升。
1、DeepLab系列简介
1.1.DeepLabV1
该研究者提出了一种基于Deep Convolutional Neural Networks (DCNNs) 的方法,在图像级别的分类任务中表现出色。然而,在处理像素级别的分类问题方面存在较大挑战。具体而言,在姿态估计和语义分割等任务中表现欠佳的原因在于对精确位置信息的需求。
1.1.1创新点:
通过深度神经网络DCNN与全连接CRF的融合来提升图像分割的分割精度。
提出了空洞卷积的概念。
在应用层面进行了多尺度和多层次的信息融合工作探索。
1.1.2. 动机:
DCNN应用在语义分割任务上存在两个缺陷:
重复堆叠的池化操作和下采样过程会导致图像分辨率显著降低的同时伴随位置信息丢失难以得到有效恢复。
通过分类器能够得到基于对象的决策结果时需要具备空间转换上的稳定性要求;然而由于忽略了细节部位的有效控制这一关键因素的存在;这在本质上限制了深度卷积神经网络模型的空间定位精度。
该分类任务具备空间不变性特性,在图像经过仿射变换后对分类结果不会产生影响;然而,在借助仿射变换进行数据增强操作后能够有效提升模型精度;但对于分割与检测这类问题而言,则不具备上述特性
说明
1.1.3. 应对策略:
- 空洞卷积
- Fully-connected Conditional Random Field (CRF)
1.2.DeepLabV2
1.2.1.创新点:
- 空洞卷积,作为密集预测任务的强大工具 。空洞卷积能够明确地控制DCNN内计算特征响应的分辨率。它还允许我们有效地扩大滤波器的视野以并入较大的上下文,而不增加参数的数量或计算量。
- 提出了空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP)),以多尺度的信息得到更精确的分割结果 。ASPP并行的采用多个采样率的空洞卷积层来探测,以多个比例捕捉对象以及图像上下文。
- 通过组合DCNN和概率图模型(CRF),改进分割边界结果 。在DCNN中最大池化和下采样组合实现可平移不变性,但这对精度是有影响的。通过将最终的DCNN层响应与全连接的CRF结合来克服这个问题。
1.2.2.动机
DCNNs中语义分割存在三个挑战:
连续进行下采样和池化操作会引发最后特征图分辨率较低的问题。
图像中的物体通常包含多个尺度层级(这为本研究带来了新的挑战)。
由于空间不变性的特性,在特征提取过程中细节信息容易被丢失。
1.2.3. 应对策略:
去除部分池化操作,并采用空洞卷积进行替代。
通过融合不同膨胀因子的空洞卷积实现多尺度特征提取,并在atrous spatial pyramid pooling(ASPP)架构中引入该技术以提升模型性能(该创新点具有重要意义)。
全连接CRF网络用于像素级分类任务。
1.3.DeepLabV3
1.3.1创新点:
- 增加了基于多尺度的物体分割模块
- 通过前后级联结构设计了串行和并行的空洞卷积模块,并通过不同采样率的设计提取多层次的空间特征
1.3.2. 动机:
DCNN中语义分割存在三个挑战:
考虑在卷积神经网络中连续应用卷积操作以及重复池化操作后,其输出的特征图的空间分辨率显著下降。然而,在图像处理任务中发现该模型难以有效识别图像中的多个不同尺度的物体实例。
1.3.3. 应对策略:
采用基于空洞卷积的技术,以有效抑制分辨率降低的问题.通过在ASPP模块中堆叠或结合不同扩张因子的空洞卷积层(如v2版本),能够进一步深化对目标区域的理解.
1.3.4. 主要贡献:
- 深入探讨了空洞卷积的应用场景,在基于深层级联结构和多尺度特征提取网络的基础上显著提升了模型对长距离目标检测的能力
- 优化了ASPP模块的性能,在采用不同采样率的空洞卷积单元与BN层相结合的基础上,并探索其在级联或并行布局下的性能提升潜力
- 探讨了一个关键挑战:当采用较大采样率(如3×3)的空间空洞卷积时,在图像边缘区域难以有效捕捉远距离特征。基于此问题分析,在ASPP模块中引入图像级别的特征表示方法
- 详细描述了实验过程及经验心得,并展示了所提出的DeepLabv3方法较现有技术表现出色
1.4.DeepLabV3+
1.4.1.创新点:
更为复杂的Xception架构在本研究中进行了优化升级。与原有设计相比,在中间层级模块的设计上进行了重点改进,并未对entry flow网络的基本框架进行调整以确保基础计算流程不受影响。通过引入stride=2的一组深度可分离卷积操作取代所有max pooling层以提升计算效率的同时合理利用内存资源。每个3×3的空间卷积核均紧跟批量归一化层并附带ReLU激活函数这一改进方案有助于增强模型对特征提取能力的刻画能力。采用优化升级后的Xception模块作为编码器主体网络并将该结构整合到原有DeepLabv3的整体架构中替代原有的ResNet-101组件以期达到更好的模型性能提升效果。
1.4.2. 动机:
语义分割主要面临两个问题:
- 该方法针对物体的多尺度特性进行了优化。
- 深度卷积神经网络在经历多次下采样后会导致特征图的空间分辨率显著下降;这会直接影响预测结果的质量;边缘细节信息随之消失(基于改进型DeepLabV3+的方法得以有效缓解)。
1.4.3. 应对策略:
优化Xception网络结构,并提升其深度。
将所有最大值池化层替换为具有跳跃式采样特性的深度 separable convolutions。
2、DeepLabV3详解
2.1.提出问题
首先,语义分割问题存在两大挑战:
- 第一个挑战:连续的池化操作或卷积中的stride对特征分辨率的影响。这不仅让DCNN能够实现更为抽象的特征表示,同时也可能导致在密集预测任务中遇到障碍,因为这种不变性同样带来了空间信息的具体细节难以确定的问题。为了有效应对这一问题,建议采用空洞卷积技术。
- 第二个挑战:多尺度物体的存在问题。目前已有多种解决方案被提出,而本文主要关注其中四种具有代表性的研究类型(如图1所示)。

图1 用于捕获多尺度上下文的代替体系结构
- 第一种:Image Pyramid技术通过将输入图片按不同比例进行调整并应用到深度卷积神经网络(DCNN)中,在各尺度特征的基础上融合预测结果以获得最终输出
- 第二种:Encoder-Decoder架构通过提取多尺度特征并在解码器部分恢复图像的空间分辨率
- 第三种:在原始模型架构顶部增加额外辅助模块以捕捉像素间的长程依赖关系例如采用Dense CRF机制或者附加其他类型的卷积层来进一步提升模型性能
- 第四种:采用空间金字塔池化(Spatial Pyramid Pooling)方法通过不同采样率和多层次卷积核有效地提取并整合多尺度对象信息
DeepLabV3方法被提出旨在解决多尺度场景下的目标分割问题。参考图2可知,在图像中各目标呈现不同的尺寸范围,并由此促使模型考虑到各尺度下的分割精度。

图2 多尺度目标分割示例
2.2.提出解决方案
2.2.1.用级联的方式设计了空洞卷积模块
具体来说,在网络架构方面,DeepLabV3采用了从ResNet的最后一层卷积块开始的方法,并通过将这些特征图连接起来完成特征提取过程(如图3所示)。

图3 带Atrous和不带Atrous卷积的级联模块
在这些模块中存在三个连续应用的3×3卷积操作。值得注意的是,在最后一个模块中不遵循这一模式:仅在最后一个模块中采用步长为2的设计。其余各模块中的最后一个卷积层采用了步长为2的设计,并其架构设计与经典的ResNet网络相似。通过引入stride操作,在更深层的网络结构中能够更好地捕捉到远处的空间信息。观察图3(a)可知,在经过多层压缩后,原始图像的主要特征得以浓缩到一个较小的空间分辨率特征图中。
但是我们发现连续应用 stride 会对语义分割带来负面影响,并且会导致重要的细节信息丢失
表1 使用ResNet-50和block7 和不同的输出步长的更深层空洞卷积
通过查看表格数据可知,在设置out_stride为8的情况下内存使用量显著增加;然而在性能方面表现出了显著提升。具体地,在图3(b)中当out_stride设为16时这种设计不仅避免了额外的参数消耗和计算开销的同时还实现了较大幅度的减少步长的目的。
2.2.2. 使用了Multi-Grid 策略
源自采用不同规模网格层级结构的多重网格方法研究的启发下,在block4和block7模块分别设置了不同的孔隙率参数。
特别地,在block4至block7范围内设置了三个卷积层,并将其unit rate定义为 Multi\_Grid = (r_1, r_2, r_3) 。每个卷积层的空洞率等于其对应的unit rate与对应rate相乘的结果。举例来说,在 output\_stride = 16 的情况下,默认情况下若将 Multi\_Grid 设置为(1, 2, 4),则在block4处会有三个这样的卷积层进行操作。经过计算可得:rates = 2 \cdot (1,2,4) = (2,4,8)$
2.2.3.将 batch normalization 加入到 ASPP模块.
Atrous Spatial Pyramid Pooling(ASPP):

图6 Deeplab系列ASPP结构
上图为DeeplabV2中的ASPP模块,在其特征映射图上采用了四种不同的空洞卷积核。研究表明,在采用不同尺度采样时能够有效提取特征,并且通过引入BN层(Batch Normalization),DeeplabV3进一步提升了模型性能。通过使用不同采样率的空洞卷积模块能够有效地捕捉多尺度信息。然而,随着采样率的提升,其滤波器的有效权重逐渐减小。
当设置output_stride为8时,提高了采样频率。所有特征经过1×1的连接整合在一起,从而形成了最终的分数。
ASPPModule代码:
class ASPPModule(nn.Layer):
"""
Atrous Spatial Pyramid Pooling.
Args:
aspp_ratios (tuple): The dilation rate using in ASSP module.
in_channels (int): The number of input channels.
out_channels (int): The number of output channels.
align_corners (bool): An argument of F.interpolate. It should be set to False when the output size of feature
is even, e.g. 1024x512, otherwise it is True, e.g. 769x769.
use_sep_conv (bool, optional): If using separable conv in ASPP module. Default: False.
image_pooling (bool, optional): If augmented with image-level features. Default: False
"""
def __init__(self,
aspp_ratios,
in_channels,
out_channels,
align_corners,
use_sep_conv=False,
image_pooling=False,
data_format='NCHW'):
super().__init__()
self.align_corners = align_corners
self.data_format = data_format
self.aspp_blocks = nn.LayerList()
for ratio in aspp_ratios:
if use_sep_conv and ratio > 1:
conv_func = layers.SeparableConvBNReLU
else:
conv_func = layers.ConvBNReLU
block = conv_func(
in_channels=in_channels,
out_channels=out_channels,
kernel_size=1 if ratio == 1 else 3,
dilation=ratio,
padding=0 if ratio == 1 else ratio,
data_format=data_format)
self.aspp_blocks.append(block)
out_size = len(self.aspp_blocks)
if image_pooling:
self.global_avg_pool = nn.Sequential(
nn.AdaptiveAvgPool2D(
output_size=(1, 1), data_format=data_format),
layers.ConvBNReLU(
in_channels,
out_channels,
kernel_size=1,
bias_attr=False,
data_format=data_format))
out_size += 1
self.image_pooling = image_pooling
self.conv_bn_relu = layers.ConvBNReLU(
in_channels=out_channels * out_size,
out_channels=out_channels,
kernel_size=1,
data_format=data_format)
self.dropout = nn.Dropout(p=0.1) # drop rate
def forward(self, x):
outputs = []
if self.data_format == 'NCHW':
interpolate_shape = paddle.shape(x)[2:]
axis = 1
else:
interpolate_shape = paddle.shape(x)[1:3]
axis = -1
for block in self.aspp_blocks:
y = block(x)
y = F.interpolate(
y,
interpolate_shape,
mode='bilinear',
align_corners=self.align_corners,
data_format=self.data_format)
outputs.append(y)
if self.image_pooling:
img_avg = self.global_avg_pool(x)
img_avg = F.interpolate(
img_avg,
interpolate_shape,
mode='bilinear',
align_corners=self.align_corners,
data_format=self.data_format)
outputs.append(img_avg)
x = paddle.concat(outputs, axis=axis)
x = self.conv_bn_relu(x)
x = self.dropout(x)
return x
2.2.4.将全局上下文信息纳入模型
基于不同 atrous rates 的 ASPP 能够有效地捕获多尺度信息。然而,在论文中发现:随着 sampling rate 的提升(即采样率的增加),有效滤波器的空间权重数量会显著减少(其中 '填充区域的权重'被重新定义为非填充区域)。特别地,在特定条件下(即当 atrous 卷积的操作率与 feature map 的尺寸相等时),3\times3 卷积将退化为 1\times1 卷积:
图4 在65x65尺寸特征图上使用3x3卷积时标准化计数随空洞率的变化
为了解决该问题,并将全局上下文信息纳入模型,我们引入了图像级特征。其中,在模型的最后一个特征图上应用了global average pooling技术,并将其传递给带256个滤波器(配合BN层)的1×1卷积操作。随后通过双线性插值将这些特征放大至所需的空间维度。
最后改进后的ASPP包括:
- (a)一个 1~\times 1 的卷积与三个 3~\times 3 的 rates = (6,12,18) 的空洞卷积,滤波器数量都为256,包含BN层。针对output_stride=16的情况
- (b)图像级特征,如图5所示。当output_stride=8时,加倍了采样率。然后将所有分支的特征图通过一个 1~\times 1 卷积(有256个滤波器和BN)concatenate起来,送入最后的1×1卷积以产生最终分数.

图5 ASPP,增加了多级特征图
2.2.5.取消DenseCRF
CRF
CRF的全称是Conditional Random Field.它的形式如下所示:
{\rm{P}}(Y|X) = \frac{1}{{Z(X)}}\tilde P(Y,X)
\tilde P(Y,X) = \exp (\sum\limits_i {{w_i} * {f_i}(Y,X)} )
Z(X) = \sum\limits_Y {\exp (\sum\limits_i {{w_i} * {f_i}(Y,X)} )}
可以看出,在建模过程中(不仅仅是)条件随机场也需要计算联合概率这一重要环节。具体来说,在这个过程中有两个部分需要特别关注:X和Y这两个随机变量。其中我们称X为观察变量(即已知量),而将Y称为目标变量或隐含变量(这是我们希望了解的重要信息)。
在图像分割问题中, X通常表示图像的像素矩阵,Y则代表每个像素所属的类别标签.然而,在二维空间中这一概念仍然具有一定的复杂性.为了更好地理解这一概念,我们可以考虑一个一维的情况:例如,在自然语言处理领域中,词性标注任务可以通过类似的模型进行建模.其数学表达式如下所示:
\tilde P(Y,X) = \exp (\sum\limits_i {{f_1}({X_i},{Y_i}) + {f_2}({Y_i},{Y_{i + 1}})} )
Dense CRF
我们进行了对它的模型形式考察。
接下来转而详细分析其能量的表达形式。
E(x) = \sum\limits_i {{\varphi _u}({x_i}) + } \sum\limits_{i < j} {{\varphi _p}({x_i},{x_j})}
可以观察到每个像素都对应着一个unary函数的具体定义,在该特征函数中变量w具体表示了当前像素所在的类别标签。需要注意的是,在这一定义中所有剩余的相关参数均位于图像的空间位置坐标上,并且我们仅关注当前像素所属的类别标签而不涉及其他像素所属类别的信息。
在后面的pairwise函数中,在每个节点处类别的计算涉及与其他所有节点的能量特征。由此形成了如上所述的能量方程的形式。需要注意的是这里的能量函数并非单个节点的能量总和而是多个节点联合起来的整体能量因此在后续的所有pairwise项中我们有n(n-1)/2组这样的特征总体而言这些特征的数量与图像中节点的数量平方成正比在一个具有1,000,000个节点的画面中就会建立495,057,425组pairwise关系这是因为这种复杂的结构所以Dense CRF模型因其密集连接的特点而闻名
对于unary函数的相关内容,我们有充分的发挥空间。在denseCRF框架中,并未对这一部分进行详细限定。鉴于此,在此阶段我们暂不对这一部分展开讨论。后续文章中将重点回溯并深入探讨该函数的潜在价值。接下来我们将重点攻克pairwise关系模型的难点。
下面我们讲piarwise部分展开,其中
{\varphi _p}({x_i},{x_j}) = \mu ({x_i},{x_j})\sum\limits_{m = 1}^K {{w^{(m)}}{k^{(m)}}({f_i},{f_j})}
可以看出,pairwise函数中还是比较复杂的,我们从左往右以此介绍。
首先涉及的是数学表达式 \mu ({x_i},{x_j}) 这一关键指标被称为label compatibility项。这实际上规定了"力"传播的条件:仅在相同标签条件下时才允许能量相互传递。具体而言,在"一个像素可能属于飞机类"的情况下其能量与在"另一个像素可能属于飞机类"时的能量之间实现了传递。这种传递会相应地提升或降低该标签的可能性概率。值得注意的是,在这种情况下一个像素属于某一类别不会影响另一个像素属于不同类别的可能性。
文中也提及了这一做法,在Pascal-VOC数据集的20个类别加背景分类中存在明显的类别间相似度差异现象。其中某些类别间的相似度较高而另一些类别则完全不同因此关于学习问题的相关讨论此处我们暂且不做进一步展开
加和项里面就是经典的权重*feature的套路了,其中
该计算式由以下公式给出:k(m)({f_i},{f_j}) = {w^{(1)}}\exp ( - \frac{{{{\left| {{p_i} - {p_j}} \right|}^2}}}{{2{\theta _{\alpha }}^2}} - \frac{{{{\left| {{p_i} - {p_j}} \right|}^2}}}{{2{\theta _{\beta }}^2}}) + {w^{(2)}}\exp ( - \frac{{{{\left| {{p_i} - {p_j}} \right|}^2}}}{{2{\theta _{\gamma }}^2}})其中各项均采用指数衰减的形式进行计算,并通过加权求和得到最终结果
此部分通过特征展示了不同像素间的亲密度。在之前的内容指出, features与tabular形式中的factors存在区别;由于缺乏具体的表格数据, 在分析中只能依赖公式来推导结果。在上文中所述的公式中可以看到, 在第一部分定义的是appearance kernel, 在第二部分则是smooth kernel. 在这一系列复杂的计算过程中包含了多个变量因素;为了全面理解系统的工作原理, 在这里我们需要逐一解析每个参数的作用.
此部分通过特征展示了不同像素间的亲密度。在之前的内容指出, features与tabular形式中的factors存在区别;由于缺乏具体的表格数据, 在分析中只能依赖公式来推导结果。在上文中所述的公式中可以看到, 在第一部分定义的是appearance kernel, 在第二部分则是smooth kernel. 在这一系列复杂的计算过程中包含了多个变量因素;为了全面理解系统的工作原理, 在这里我们需要逐一解析每个参数的作用.
appearance kernel中的变量p代表的是像素的位置信息——position。因为我们在处理的是二维图像(2D),所以该位置信息具有二维特征。同样地,在图像中每个pixel的空间位置及其灰度值被用来表示为I( intensity)。而由于彩色图像包含红、绿、蓝三个通道的信息,则每个pixel的空间位置和颜色通道共同构成了三维的空间特征向量。需要注意的是,在计算分母项时有两个重要的参数需要考虑:一个是与高斯函数匹配的空间位置关系项;另一个是与高斯函数匹配的颜色空间关系项。这两个分母项不仅在空间位置上与高斯函数匹配,在形式上也具有相同的方差特性。因此它们在计算过程中所起的作用也是相似的
由此可见,在两个像素之间的距离较近且色调相近的情况下(即当两者在空间域和颜色域均接近时),其对应的特征也会表现出较强的强度;反之则强度较低。值得注意的是,在这种计算中引入了一个调节因子——分母的作用在于调节这种强度差异:随着分母值增大(即权重系数增大),该特征的表现会更加显著;这与图像处理中的双边滤波器具有相似的机制:我们实际上是在一个五维的空间中寻找那些彼此相似的像素配对,并通过增强这些配对的关系来实现最终的效果提升。
DeepLabV3 取消DenseCRF的原因
语义分割与分类技术存在显著差异。具体而言,在分类任务中主要集中在对象识别上;而语义分割不仅要完成物体识别,并且还需要定位物体的具体位置信息。随着深度递进的DCNN卷积神经网络架构发展下去,在保持高精度判别能力的同时,其位置信息随之逐渐丢失得更为严重。因此,在DeepLab v1和v2模型中采用了全局CRF机制来辅助恢复丢失的位置信息。
在DeeplabV3架构中采用了具有大采样率的3×3空洞卷积层,在这种情况下,图像边界响应无法有效捕获远处的信息内容,并最终退化为1×1尺寸的卷积操作。因此,在ASPP模块中融合了图像级别的特征描述。这样就整合了目标的位置信息。因此无需额外应用CRF层。
2.3.训练策略
2.3.1.Learning rate policy:
该算法通过Poly策略对学习率进行调整,在每一步迭代中将当前的学习率按比例衰减至初始学习率的(1 - \frac{iter}{\max iter})^{power}倍值处(其中衰减因子取值为0.9)。
2.3.2.Crop size:
为了实现大采样率空洞卷积的有效性,在实际应用中需要保证输入图像具有较大的尺寸;如果使用较大的图像尺寸,则大采样率空洞卷积权值将主要集中在padding区域。
在进行Pascal VOC 2012数据集的训练与测试实验时,我们选择了513像素作为裁剪尺寸。
2.3.3.Batch normalization:
基于ResNet添加的模块均包含批归一化(BN)层。
当输出步长设为16时,在batch size为16的情况下(即批量大小设为16),同时将BN层的权重衰减系数设定为0.9997。
在经过增强数据集训练后,在初始学习率为0.007的情况下进行3万次迭代训练之后(即持续进行3万次迭代),固定BN层参数;随后切换到输出步长设为8的情况,并在此基础上继续在PASCAL官方数据集上使用初始学习率(即学习率为初始值)进行3万次迭代。
相比使用输出步长设为8的情况而言,在空间维度上输出通道数量减少了四分之一情况下(即中间特征图尺寸仅为原始输入的四分之一),输出stride为16的模型训练速度更快。
2.3.4.Upsampling logits:
- 在之前的实验中, 我们对比分析了output_stride设置为8时的输出结果与对应的Ground Truth数据.
- 基于当前研究结果, 我们更加重视对最终输出进行upsampling处理, 并将其与完整的Ground Truth数据进行对比分析.
2.3.5.Data augmentation:
在训练阶段,随机缩放输入图像(从0.5到2.0)和随机左-右翻转
2.4.主要代码
DeepLab V3
class DeepLabV3(nn.Layer):
"""
The DeepLabV3 implementation based on PaddlePaddle.
The original article refers to
Liang-Chieh Chen, et, al. "Rethinking Atrous Convolution for Semantic Image Segmentation"
(https://arxiv.org/pdf/1706.05587.pdf).
Args:
Please Refer to DeepLabV3P above.
"""
def __init__(self,
num_classes, #分割类别数
backbone, # 主干网络
backbone_indices=(3, ),
aspp_ratios=(1, 6, 12, 18), # aspp 空洞卷积率
aspp_out_channels=256, # aspp输出通道数
align_corners=False, # 是否对齐
pretrained=None): # 是否预处理
super().__init__()
self.backbone = backbone #主干网络
backbone_channels = [
backbone.feat_channels[i] for i in backbone_indices
]
#定义头模块
self.head = DeepLabV3Head(num_classes, backbone_indices,
backbone_channels, aspp_ratios,
aspp_out_channels, align_corners)
self.align_corners = align_corners
self.pretrained = pretrained
self.init_weight() # 初始化权重
def forward(self, x):
feat_list = self.backbone(x)
logit_list = self.head(feat_list)
return [
# 执行上采样,填充方式使用‘bilinear’
F.interpolate(
logit,
paddle.shape(x)[2:],
mode='bilinear',
align_corners=self.align_corners) for logit in logit_list
]
def init_weight(self):
if self.pretrained is not None:
utils.load_entire_model(self, self.pretrained) # 载入预处理模型
DeepLabV3Head
class DeepLabV3Head(nn.Layer):
"""
The DeepLabV3Head implementation based on PaddlePaddle.
Args:
Please Refer to DeepLabV3PHead above.
"""
def __init__(self, num_classes, backbone_indices, backbone_channels,
aspp_ratios, aspp_out_channels, align_corners):
super().__init__()
#定义ASPP模块
self.aspp = layers.ASPPModule(
aspp_ratios,
backbone_channels[0],
aspp_out_channels,
align_corners,
use_sep_conv=False,
image_pooling=True)
#定义分类头
self.cls = nn.Conv2D(
in_channels=aspp_out_channels,
out_channels=num_classes,
kernel_size=1)
self.backbone_indices = backbone_indices
def forward(self, feat_list):
logit_list = []
x = feat_list[self.backbone_indices[0]]
x = self.aspp(x)
logit = self.cls(x)
logit_list.append(logit)
return logit_list
3.实验结果
我们首先实验级联更多的空洞卷积模块。
ResNet50:
使用ResNet-50时,我们探究output_stride的影响。如表1所示。
当output_stride设为256时,在特征提取方面明显受限,在性能上较其它设置大幅下降。
ResNet-50 vs. ResNet-101:
用更深的模型,并改变级联模块的数量。
表2 使用不同叠块数的ResNet-50和ResNet-101时,使用输出步长Output_stride= 16
- 随着block数量的增加, 性能随之上升.
- 随着加入更多block的数量, 提升幅度减小.
- 不值得特别强调的是, ResNet-50在使用第7个块时会导致性能略微下降, 而ResNet-101则依然能够提高性能.
Multi-grid:
基于Multi-grid策略,在ResNet-101架构中应用了一种新型变体残差模块。其中Block 4及其后续引入的其他Block中,在其主支路中的三个连续卷积层全部采用了空洞卷设计,并将其采样率整合同一Multi-grid策略框架内。
表3 使用ResNet-101对不同叠块数采用多重网格法,Output_stride = 16。
实验观察到的:
采用Multi-grid策略相较于单一倍率设置({\ r_{\ ₁}, {\ r_{\ ₂}, {\ r_{\ ₃}}}})=(\! ₁,\! ₁,\! ₁)能够带来更好的性能表现;而非优化的放大系数设置如({\ r_{\ ₁}, {\ r_{\ ₂}, {\ r_{\ ₃}}}})=(\! ₂,\! ₂,\! ₂)无法达到预期的性能提升效果;通过优化网络深度并结合Multi-grid架构能够显著提高模型性能;其中最优配置为block7层时({\ r_{\ ₁}, {\ r_{\ ₂}, {\ r_{\ ₃}}}})=(\! ¹,\! ²,\!¹)
Inference strategy on val set:
在模型训练阶段和推理阶段均设置output_stride参数为16;通过调整该参数值为8以提高特征图的空间分辨率。
表4 推理策略. MG:多重网络. OS: 输出步长. MS: 多尺度输入. Flip: 输入左右翻转.
在评估过程中,设置output_stride为8相较于使用16的策略提升了约1.39%的性能表现;通过多尺度输入(包括0.5、0.75、1.0、1.25、1.5和1.75倍的缩放)以及左右翻转的数据增强手段,在此基础上进一步提升了性能;最后阶段,在对每个缩放比例及其翻转后的图像计算平均概率的基础上确定最终结果。
Atrous Spatial Pyramid Pooling:
DeepLab V3的ASPP模块相较于DeepLab V2的主要区别在于引入了BN层以进一步提升网络性能,并提升了图像级别的特征表达能力。实验结果表明,在使用multi-grid策略结合图像级特征后,相关指标表现出了显著提升。
表5 在Output_stide = 16下,使用多重网格方法和图像级特征的ASPP
Inference strategy on val set:
推断期间使用output_stride = 8,采用多尺度输入和左-右翻转数据增强。
表6展示了推理策略中的多重网格方法(MG)。该方法通过层次化网格结构实现高效的特征提取;ASPP是一种构建空洞空间金字塔的技术;输出步长(OS)是指在卷积层中调整输出特征图的空间分辨率的过程;多尺度输入(MS)技术允许模型同时处理不同尺度的特征信息;翻转输入(Flip)操作有助于消除图像在水平方向上的偏置;COCO数据集在MS-COCO上进行了预训练处理
4.总结
综上所述
本节将对DeepLab系列模型及其在图像分割任务中的应用进行系统的归纳与分析。其中重点分析了DeepLabV3和DeepLabV3+的设计理念、技术特点以及优化策略。
- DeepLabV1
目的:旨在解决深度卷神经网络(DCNNs)在语义分割任务中因空间分辨率下降而导致性能影响的问题。
创新点:
空洞卷积(Atrous Convolution):通过向标准卷积核中加入零元素,在不增加参数数量和计算量的前提下扩大了感受野。全连接条件随机场(CRF):常被用作后续处理环节,在建模像素间的长程依赖关系上发挥了重要作用,并进而提高了分割精度。
- DeepLabV2
动机:在DeepLabV1的基础上进一步探索多尺度信息的重要性。
创新点:
该研究引入了一种称为"空洞空间金字塔池化"(ASPP)的技术:通过多级空洞卷积模块并行地捕捉图像中的多尺度特征。
- DeepLabV3
目的:基于DeepLabV2框架,在原有基础上进行优化设计以提升对多尺度特征的捕捉能力,并同时简化模型结构。
创新点:
基于改进的ASPP架构设计,在网络中集成了一种创新的空间金字塔特征提取机制。该机制由1×1卷积模块、三个不同尺度的空间金字塔模块以及全局平均池化操作(随后经过上采样过程并与主分支特征图进行深度连接)构成
通过改进型ASPP设计,在模型内部增强了对长距离依赖关系的理解能力,并实现了更加丰富的语义表示效果;这使得模型能够自动捕捉到图像中的语义信息而不必要依赖外部语义分割网络作为后续处理环节
在本网络设计中采用批归一化技术,在每一个卷积层之后均集成批归一化模块;该设计不仅显著提升了模型训练速度与收敛性;而且有效避免了梯度消失与梯度爆炸问题;从而进一步优化了网络性能
DeepLabV3+
目的:基于DeepLabV3网络架构,在其多次下采样的局限性基础上,提出了一种改进方案以解决特征图分辨率下降及边界信息丢失的问题。
创新点:
基于编码器-解码器架构的设计方案中, 采用DeepLabV3作为编码器模块, 用于提取并存储丰富的语义特征; 而解码模块则通过反卷积操作简单高效地重建图像的空间细节. 在编码器模块中应用空洞空间金字塔池化机制(ASPP), 这种设计能够有效提取并融合图像中的多尺度特征. 优化后的解码模块采用自适应上采样技术结合低级特征图, 并将其与高阶特征图进行深度融合. 实验结果:
该系统通过结合多项先进技术,在多项标准测试中均展现了卓越的效果,在应对多层次目标以及恢复边界细节方面表现出色。
这些改进进一步巩固了该系统在该领域的领先地位。
参考文献
Re-examining the principles of atrous convolution in the context of semantic image segmentation, this study offers a fresh perspective on traditional convolutional techniques.
