语义分割——DeepLab系列总结(v1, v2, v3, v3+)

语义分割——DeepLab系列总结(v1, v2, v3, v3+)

I. DeepLab v1

1. 问题背景

1.1 信号下采样

最大池化层和带有步长的下采样不断重复组合造成的,在下采样的过程中会造成信号的丢失。

1.2 平移不变性

CNN如此成功的重要原因之一是其局部图像平移不变性,即物体在图像中的位置不影响最后的抽象特征,这种特性使得CNN可以学习更加抽象的数据表示,但对物体的位置信息变得不再敏感。深度卷积网络会抽取更加抽象的信息(hight-level),而丢失了精确的位置细节信息(low-level),这对需要精确位置细节信息的语义分割等低阶视觉任务来说是个很大的缺陷。

在这里注意到,此处的hight-level task是指需要高级抽象特征的任务,如图像分类等;而low-level task是指需要细节特征的任务,如语义分割、姿态估计等。

2. 解决方法、创新点

  • 使用空洞卷积抽取稠密的特征,解决信号下采样丢失问题

  • 使用全连接条件随机场(Fully Connected / Dense CRF)恢复边界位置细节

2.1 空洞卷积(Atrous Convolution)

关于信号下采样丢失的问题,DeepLab v1提出使用空洞卷积(Dilated/Atrous Convolution)来抽取稠密的特征信息,而不是像CNN那样抽取稀疏的信息加强特征的抽象能力。

另一方面,感受野也是影响稠密特征抽取的另一个关键因素,较大的感受野会保留着更多的空间位置信息。

空洞卷积在一维信号中的结构如下图所示:

在这里插入图片描述

其中滤波器的大小为3x3,滤波器中的参数以步长为2的大小(也可以看做成间隔)来对输入的特征图进行卷积运算,这种步长称之为扩张率,普通卷积是扩张率为1的特殊情况。

空洞卷积就是在滤波器中填充0,填充的多少受扩张率控制(在DeepLab v2中会详细探讨空洞卷积的细节,引出两种实现空洞卷积的方法,在此不再详细介绍)。**空洞卷积可以在不引入任何多余的参数和计算量的情况下来扩大滤波器的感受野,实现稠密特征的抽取,随后使用双线性插值上采样到原图大小。另一方面,当扩张率设为不同的值时,空洞卷积就拥有着不同的感受野,也就可以抽取多尺度的特征了。**FCN为了恢复输出特征到原有的空间分辨率,使用参数可学习的转置卷积对特征图上采样,这样无疑增加了模型的复杂度和计算的负担,而且生成的输出较为粗糙。

在此总结空洞卷积的两个作用:

  • 扩大感受野同时不增加参数和计算量。
  • 通过设置不同的扩张率,可以捕捉多尺度信息。
2.2 全连接条件随机场(Fully Connected / Dense CRF)

使用全连接条件随机场(Fully Connected / Dense CRF)恢复边界位置细节

卷积网络中,抽象的分类精度和精确的位置细节精度不可兼得,随着卷积神经网络的不断加深,抽取出的特征更加抽象,对位置细节信息更加不敏感,从而不利于语义分割这种像素级别的分类任务。

最近的一些研究有两种方法来解决这个问题,一种是使用跳层连接来融合多层抽取来的特征信息,如FCN; 第二种是使用超像素表示法,可是这样就把精确的语义分割转换成了一种低层次的分割方法。

而DeepLab v1又做了创新,将CRF作为后端来处理深层卷积网络抽取的结果,这样就可以将深层卷积网络可抽取抽象特征信息和CRF恢复空间位置细节的优点结合在一起。在这里DeepLab v1提出了一种新型的CRF。之前被应用很多次的CRF只适用于短范围的信息抽取,且使用的目的是平滑图像细节,而DeepLab v1的CRF是一种稠密的全连接,将图像中的每个像素都看成一个节点,并且该像素的位置和颜色都影响这CRF的能量函数,这样就可以使得CRF感知长范围的关联信息。下面简要给出能量函数 E ( x ) E(x) E(x) 的定义,不过在DeepLab v2以后就不使用CRF了。
E ( x ) = ∑ i θ i ( x i ) + ∑ i j θ i j ( x i , x j ) (1) E(x) = \sum_i{\theta_i(x_i)} + \sum_{ij}{\theta_{ij}(x_i, x_j)} \tag{1} E(x)=iθi(xi)+ijθij(xi,xj)(1)
其中 x x x 为分配(预测)到的像素标签。作者使用一元势函数 θ i ( x i ) = − l o g P ( x i ) \theta_i(x_i) = -logP(x_i) θi(xi)=logP(xi) , 其中 P ( x i ) P(x_i) P(xi) 表示像素 i i i 由DCNN计算出的预测概率。二元势函数为 θ i j ( x i , x j ) = μ ( x i , x j )   ∑ m = 1 K w m   ⋅   k m ( f i , f j ) \theta_{ij}(x_i, x_j) = \mu(x_i, x_j) \ \sum_{m=1}^K{w_m \ \cdot \ k^m( f_i, f_j)} θij(xi,xj)=μ(xi,xj) m=1Kwm  km(fi,fj),其中当 x i ≠ x j x_i \neq x_j xi=xj 时, μ ( x i , x j )   =   1 \mu(x_i, x_j)\ = \ 1 μ(xi,xj) = 1, 否则为 0 0 0 (应该是在计算自己本身像素的二元能量时就为0没有意义)。图像中每个成对的像素 i i i 和像素 j j j 都有二元能量项,无论他们间隔多远,因此模型的因子图是全连接的(也许这就解释了为什么是全连接的)。每个 k m k^m km 代表着从像素 i i i 和像素 j j j 中抽取的特征(记为 f f f )的高斯核,其权重设为 w m w_m wm 。作者加入了双边位置和颜色项,因此将高斯核定义为:
w 1   e x p ( − ∣ ∣ p i − p j ∣ ∣ 2 2 σ α 2 − ∣ ∣ I i − I j ∣ ∣ 2 2 σ β 2 )   +   w 2   e x p ( − ∣ ∣ p i − p j ∣ ∣ 2 2 σ γ 2 ) (2) w_1 \ exp( -{{|| p_i - p_j ||^2} \over {2\sigma_{\alpha}^2}} -{{|| I_i - I_j ||^2} \over {2\sigma_{\beta}^2}}) \ + \ w_2 \ exp( -{{|| p_i - p_j ||^2} \over {2\sigma_{\gamma}^2}}) \tag{2} w1 exp(2σα2pipj22σβ2IiIj2) + w2 exp(2σγ2pipj2)(2)
其中第一个高斯核与像素位置(记为 p p p )和像素颜色强度(记为 I I I )有关,第二个高斯核只与像素位置有关。超参数 σ α , σ β , σ γ \sigma_\alpha, \sigma_\beta, \sigma_\gamma σα,σβ,σγ 控制着高斯核的缩放。

3. 模型细节

  • backbone: DeepLab v1的主干网络为VGG-16,开始使用原生VGG-16的block1-block4。

  • block5: 将block5的卷积层改为空洞卷积,扩张率都为2,卷积核大小为3x3,最后接入最大池化层和平均池化层。

  • FC6: 这里应该是沿用VGG-16习惯的叫法,加入扩张率为12的空洞卷积和Dropout层。

  • FC7: 引入核大小为1x1的卷积层和Dropout层。

  • FC8: 引入核大小为1x1的卷积层,且不接ReLU层。

  • 进行双线性插值,恢复成原有的分辨率。

  • 使用softmax作为loss,使用SGD进行训练(学习率机制为“poly”)。

  • 接入全连接CRF进行后端处理。

网络结构如下图所示:

在这里插入图片描述

DeepLab v1和v2的结构文件和训练权重可以在下面的网址找到

http://liangchiehchen.com/projects/DeepLab_Models.html

II. DeepLab v2

1. 问题背景

  • 物体是以多尺度存在的
  • 下采样操作导致特征分辨率的下降
  • 卷积神经网络的平移不变性降低了定位的准确率

其实后两个缺点在DeepLab v1中已经提出,这篇论文主要对多尺度的检测进行了创新。

2. 解决方法、创新点

  • ASPP解决多尺度问题。
2.1 延续DeepLab v1的改进

特征分辨率的下降和平移不变性限制了位置的细节信息这两个解决方案延续了DeepLab v1的做法,即前者的解决方案是使用空洞卷积扩大滤波器的感受野,同时没有引入新的参数和计算量,在最后使用双线性插值恢复到原图的大小;后者的解决方案仍是在深度卷积神经网络后面接如全连接CRF作为后端处理。

2.2 空洞空间池化金字塔(ASPP)

关于多尺度这点,DeepLab v2提出了本文最大的创新点: 空洞空间池化金字塔(Atrous spatial pyramid pooling, ASPP)

这种灵感是从R-CNN中的空间池化金字塔(SSP)启发而来的,而之前处理多尺度的做法是对原图进行不同尺度的缩放,然后传入到模型中,但这样会消耗大量的计算量。

**ASPP是使用多个不同扩张率的并行空洞卷积层组成的模块,在各自的分支中以不同扩张率抽取到不同感受野的特征,随后融合生成最后的结果。因此ASPP可以从多个尺度抽取图像中的上下文信息。**如下图所示:

在这里插入图片描述

3. 模型细节

3.1 初探空洞卷积细节

如下图所示,作者将过去常用的上采样恢复原有分辨率和作者提出的空洞卷积进行了对比:

在这里插入图片描述

在图3的上部分的操作中,作者首先使用下采样因子为2的下采样操作来减少图像的分辨率,然后对其进行卷积,如果将得到的结果转移到原图的坐标中(进行上采样操作),作者发现只有1/4的图像数据得到相应。

相反的,在图3下部分的操作中,作者可以使用空洞卷积(扩张率为2,在滤波器中用零填充)对原图进行操作,从而可以计算整个图像的所有位置信息。虽然滤波器核的尺寸增加了,可是作者只需要关注滤波器中非零的值,因此滤波器参数的个数和每个位置所要操作的数量都保持不变。这可以使得作者简捷的控制特征图中的空间分辨率。

作者可以使用一连串的空洞卷积层来操作DCNN中的上下文信息。举个例子,如果作者想要把VGG-16或ResNet-101网络中所计算出的特征响应放大两倍,增加其空间稠密度,作者会发现最后一层的池化层和卷积层(“pool5”或“conv5_1”)都会减少分辨率,作者将其步长设为1,避免信号的减少,并使用一连串扩张率为2的空洞卷积来替换。这种方法可以使得作者以原图的分辨率来计算特征相应,但是这样最终会带来很大的消耗。本文种混合的方式,即在效率和精度上做了较好的权衡。作者使用空洞卷积将计算出的特征图的密度提升到4倍,随后接入快速双线性插值将特征图恢复到原有图像的尺寸。因为类别得分图足够光滑,所以这里可以引入双线性插值来进行上采样,与转置卷积不同,双线性插值并不需要学习额外的参数,使得训练的时间更加快速。

扩张率为 r r r 的空洞卷积在滤波器中加入了 r − 1 r-1 r1 个0,有效地将大小为 k ∗ k k * k kk的滤波器扩大到 k e = k + ( k − 1 ) ( r − 1 ) k_e = k + (k-1)(r-1) ke=k+(k1)(r1) ,同时没有增加参数个数和计算消耗。因此这种机制是精确定位(小感受野)和上下文信息(大感受野)之间最好的权衡。

3.2 空洞卷积的实现方式
(i) 卷积核间隔补零

通过在滤波器中补零进行隐式地上采样,在作者早期的模型中就是这样实现的。如下图所示:

在这里插入图片描述

(ii) 对输入图像间隔采样

方法由*“The discrete wavelet transform: wedding the atrous and mallat algorithms”提出,是以扩张率 r r r 的大小对输入的特征图进行隔行下采样,这样就产生了 r 2 r^2 r2 大小的缩小的分辨率映射,产生了 $rr $ 可能出现的偏移。这就可以使用普通的卷积对间隔采样后的特征图进行卷积运算,并重新恢复间隔拼凑到原有的分辨率。此类方法就可以不用特意实现空洞卷积,而仅仅是使用普通卷积,从图像间隔采样入手,很容易在TensorFlow上实现。

3.3 ASPP的详细介绍

值得注意的是,DeepLab v2中的ASPP最后数据融合的方式是sum,而DeepLab v3使用的是cat(拼接)。

(i) 基于VGG-16的ASPP实现

在这里插入图片描述

上图是DeepLab v1(a) 和DeepLab v2(b) 的部分对比,(b)为ASPP的具体实现,在开始使用四个扩张率不同的空洞卷积,核大小为1x1,然后后接两层卷积核大小为1x1的卷积层,最后使用sum(求和)运算将四个特征图融合一起。

论文中给出了两种模型:

  • ASPP-S设有四个分支和较小的扩张率( r = { 2 ,   4 ,   8 ,   12 } r = \{ 2,\ 4,\ 8,\ 12\} r={2, 4, 8, 12})

  • ASPP-L设有四个分支和较大的扩张率( r = { 6 ,   12 ,   18 ,   24 } r = \{ 6,\ 12,\ 18,\ 24\} r={6, 12, 18, 24})

(ii) 基于ResNet的ASPP实现
3.4 整体细节

III. DeepLab v3

1. 问题背景

  • 物体是以多尺度存在的

  • 卷积神经网络的平移不变性降低了定位的准确率

  • 图像边界效应

  • 扩张值越大,有效权重会越少

1. 多尺度的四种解决方案

在这里插入图片描述

  • 第一种方法是DCNNs使用图像金字塔来抽取每个尺度的特征,不同尺寸的物体会在不同的特征图中变得突出。小尺度输入的特征相应包含着长范围的上下文信息,而大尺度的输入提供了小物体的细节。
  • 第二种方法是编码器-解码器结构,从编码器结构中抽取多尺度信息,并在解码器结构中复原空间分辨率。因此可以在更深的编码器输出中抽取更长范围的信息。
  • 第三种方法是在原有的网络结构的顶部接入额外的结构,用于捕捉长范围信息。一般会使用稠密CRF进行信息抽取。
  • 第四种方法是空间池化金字塔,使用以多个不同大小和感受野的卷积核或池化层扫描输入图像,捕捉其中的多尺度信息。

2. 解决方法、创新点

  • 去掉了Dense CRF
  • 改进了空洞卷积,加入了多重网格法(multi-grid method), 即在后面加入不同扩张率的卷积,让模型变得更深
  • 改进了ASPP(解决扩张值越大,有效权重会越少的问题):
    • **引入1x1的卷积层分支 **
    • 加入BN层 ,BN层可以更好的编码多尺度上下文信息。
    • 加入图像级特征(image-level features)(使用的是1x1的平均池化层)
2.1 使用多重网格法加深带有空洞卷积的神经网络

多重网格法,是基于*“Multi-level adaptive solutions to boundary-value problems”*等使用了多个尺度的网格层次结构而来的灵感。在这篇论文的模型中,在block4到block7之间使用了不同尺度的空洞卷积,将这些block中的三层卷积层的单位扩张率标记为 M u l t i _ G r i d = ( r 1 , r 2 , r 3 ) Multi\_Grid = (r_1, r_2, r_3) Multi_Grid=(r1,r2,r3), 卷积层的扩张率等于单位扩张率和相对扩张率的乘积。例如,我们设 o u t p u t _ s t r i d e = 16 ,   M u l t i _ G r i d = ( 1 , 2 , 4 ) output\_stride = 16, \, Multi\_Grid = (1, 2, 4) output_stride=16,Multi_Grid=(1,2,4),则block4中的三个卷积各自的扩张率为 r a t e = 2 ⋅ ( 1 , 2 , 4 ) = ( 2 , 4 , 8 ) rate = 2 \cdot (1,2,4) = (2,4,8) rate=2(1,2,4)=(2,4,8)

实验发现:

  • 使用多重网格法的结果优于不使用的结果(也可以看成是 M u l t i _ G r i d = ( r 1 , r 2 , r 3 ) = ( 1 , 1 , 1 ) Multi\_Grid = (r_1, r_2, r_3) = (1,1,1) Multi_Grid=(r1,r2,r3)=(1,1,1) 的情况)。
  • 简单的成倍扩大 $Multi_Grid $ 也没有效果,例如表中的 ( r 1 , r 2 , r 3 ) = ( 2 , 2 , 2 ) (r_1, r_2, r_3) = (2,2,2) (r1,r2,r3)=(2,2,2)
  • 多重网格在更深的模型中提升效果更明显。

最好的模型的多重网格参数为 ( r 1 , r 2 , r 3 ) = ( 1 , 2 , 1 ) (r_1, r_2, r_3) = (1,2,1) (r1,r2,r3)=(1,2,1)

2.2 改进ASPP

作者发现当采样率变大时,滤波器中的有效权重就会变小(有效权重是指实际对特征图操作的权重,而不是对补零进行操作的权重)。在扩张值接近特征图大小的极端情况下,3x3滤波器不是捕获整个图像上下文,而是退化为简单的1x1滤波器,因为只有中间的滤波器权重是有效的。这种现象可以描述为下图所示:

在这里插入图片描述

为了解决这个问题,并将全局上下文信息融入到模型中,如下图所示DeepLab v3对ASPP做了以下改进:

  • 使用了类如ParseNet中的图像级特征——在模型的最后一层特征图上接入了全局平均池化
  • 将得到的图像级特征传给大小为1x1的卷积层(后接BN层)
  • 随后对其进行双线性插值上采样,恢复到想要的空间分辨率

在这里插入图片描述

然后,所有分支的输出结果都会拼接一起,并传递给另一个大小为1x1且拥有BN层和256个滤波器的卷积层,最后由1x1的卷积层生成最终的输出。

IV. DeepLab v3 plus

1. 问题背景

  • 之前的模型速度可能不太理想,并且计算消耗较大。
  • 大量的细节信息会丢失。

2. 解决方法、创新点

空间池化金字塔模型和编码器-解码器结构广泛应用于语义分割中。

  • 空间池化金字塔模型利用多个扩张率和不同有效感受野的滤波器或池化层来抽取丰富的多尺度上下文信息
  • 编码器-解码器结构通过复原空间分辨率信息来捕捉物体的边界信息。

深度可分离卷积(depthwise separable convolution)也叫组卷积(group convolution),可以在保持原有性能(也会变得更好)的情况下减少大量的计算量,如我们使用的Xception就是一个很成功的深度可分离模型,这会帮助提升我们的网络速度和精度。

DeepLab v3 plus将这两种算法结合一起,吸收了二者的优势。相比于DeepLab v3,进行了以下的创新:

  • 提出了一个新型的编码器-解码器模型: 使用DeepLab v3作为高效的编码器,接入一个简单但有效的解码器模块,以精修分割结果,特别是物体的边界信息。
  • 主干网络改为Xception模型,加速模型的计算,减少其计算消耗。
  • 在ASPP和解码器模型中引入深度可分离卷积,构建更快更高效的编码器-解码器模型。

3. 网络细节

3.1 深度可分离卷积

深度可分离卷积由depthwise convolution和pointwise convolution组成(详情见:https://zhuanlan.zhihu.com/p/80041030),**depthwise convolution对输入图像的每个通道独立地进行卷积运算,而pointwise convolution对depthwise convolution的结果进行逐点卷积并将其组合一起。**如下图所示,Deeplab v3 plus提出了空洞可分离卷积(atrous separable convolution),并发现也可以减少模型的计算复杂度,并保持了原有的精确度。
在这里插入图片描述

3.2 使用DeepLab v3作为编码器

DeepLab v3对ASPP进行了改进,使用了多个不同扩张率的空洞卷积,加入了BN层和1x1卷积分支,并引入了图像级特征(1x1 pooling layer)。作者使用DeepLab v3在logits之前输出的特征图作为编码器的输出,提出了新型的编码器-解码器模型。 编码器输出的特征图包含256个通道和丰富的语义信息。

3.3 对解码器的设计

**如果编码器输出的 o u t p u t _ s t r i d e output\_stride output_stride 为16,在DeepLab v3中使用双线性插值对输出特征图上采样16倍,这里我们可以把双线性插值看做一个天然的解码器。但这种天然的解码器获取不能有效地恢复物体的细节信息,**因此作者提出了一个简单有效的解码器模型,如下图所示:

在这里插入图片描述

在此解码器中,首先使用双线性插值对特征图进行4倍的上采样,随后和有着相同分辨率的来自主干网络的低阶特征进行拼接。在这里作者使用大小为1x1的卷积核来减少低阶特征的通道,因为过多的通道会让训练变得更加困难。在拼接过后,使用3x3大小的卷积核对特征图进行精修,并随后使用双线性插值再4倍上采样特征图。经过对速度和准确度的权衡,论文将 o u t p u t _ s t r i d e output\_stride output_stride 设为16。

3.4 改进 Aligned Xception

Xception在图像分类任务中大放异彩,最近MSRA团队又改进了Xception,提出了适用于目标检测的Aligned Xception。受到以上的启发,我们以相同的目标优化了Xception,以适用于语义分割。我们对Aligned Xception做了以下的改进:

  • 为了加速计算和减少内存消耗,加深了Xception而不改变其入口流(entry flow)。
  • 所有的最大池化层由空洞深度可卷积网络代替。
  • 在深度卷积后增加ReLU层和BN层。

细节如下图所示:

在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值