DeepLabV3论文解读(空洞卷积/膨胀卷积 理解)

DeepLabV3论文解读(空洞卷积/膨胀卷积 理解)

最近在做基础网络研究,设计的网络结构除了在分类数据集上测试,还需要在分割和检测网络上测试效果,故选择了DeepLabV3作为对比平台。本想直接替换backbone查看结果,但不如借此机会把DeepLabV3好好研究清楚,顺带把分割领域的经典论文研究一遍,于是有了这篇博客~

(FCN、SegNet、U-Net、CRF)

DeepLabV3结构解读

相关的四种获取上下文信息的分割方法:

  1. Image pyramid
    图像金字塔的用法是将一个共享权重的相同模型应用于多尺度的输入,其中大尺度的输入提供了小目标的细节,小尺度的输入图像被编码成整体的上下文信息。这种方法的主要缺点是因为GPU的内存限制(相当于针对每个尺度的输入都有同一个模型在并行训练),无法在较大/较深的网络上应用,因此通常在推理(Inference)阶段使用。
  2. Encoder-decoder
    编码器-解码器结构包含两个部分:编码器部分讲特征图的空间尺寸逐渐减小,从而在更深的特征图中捕获更长范围的信息,而解码器部分则负责恢复特征图的空间尺寸和对象的细节。比如SegNet和U-Net结构。
  3. Context module
    包含级联布局的其他模块来对大范围的上下文进行编码,比如将DenseCRF合并到CNN中。也有文献建议同时训练CNN和CRF,或者在CNN的belief map上使用额外卷积来获取上下文信息。
  4. Spatial pyramid pooling
    空间金字塔池化(SPP)最开始由何凯明提出,是一种在池化层融合多尺度信息的方法,DeepLabV2提出了空洞空间金字塔池化ASPP。最近PSP Net在几个网格尺度上执行空间池化,还有其他基于LSTM的方法。

在DeepLabV3的主要工作是探索空洞卷积在Context module和Spatial pyramid pooling的应用,复制了ResNet的最后一个block并且以级联的方式排布。

空洞卷积获取密集特征

完全卷积的方式被证明用在语义分割上有效,但是频繁的max-pooling和striding导致得到特征图的空间分辨率严重降低,反卷积(FCNS)已被用来恢复空间分辨率,但是空洞卷积更应该被提倡,原因是空洞卷积的感受野更大。当参数量一定的时候,普通卷积只能提取小块的特征,而空洞卷积可以通过提高空洞率,让每次采样时在输入特征图上的重合采样区域更多,从而获得更密集的特征响应。举个例子:比如一个普通的卷积神经网络输入与输出尺寸之间差了32倍(down sampling 5次),当我们希望功能响应的空间密度加倍时,可以把最后一层的卷积或者池化层步幅stride设置为1,然后后续卷积替换为空洞率为2的空洞卷积,这样就能获得更密集的空间响应而不需要学习更多的参数。这里的密集,指的是特征图的分辨率,普通卷积的下采样操作会让特征图尺寸越来越小,最后得到的结果对应回原图的位置上,把每个特征图的像素点看作提取到的特征的话,整张图的特征响应就会变得稀疏。因此如果将最后一个缩小分辨率的卷积层替换成空洞卷积,可以 在保持运算量的同时不减小特征图分辨率,使输入与输出尺寸之间差16倍,这样就获得了更密集的特征响应。

关于稀疏与密集特征响应

关于空洞卷积获取密集特征在DeepLab-Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs即DeepLabV2中就已经提到,空洞卷积最早来源于小波变换中提高计算效率的方法,在这里借用这篇论文中的图来解释:
DeepLabV3论文解读(空洞卷积/膨胀卷积 理解)_第1张图片
这个图是一维的示意图,a是普通标准卷积的稀疏特征提取,b是空洞率为2的空洞卷积的密集特征提取,乍一看似乎没看明白这个稀疏和密集的关系,没关系,重点放在它们作用的特征图上,看看它们作用的特征图的差别:
DeepLabV3论文解读(空洞卷积/膨胀卷积 理解)_第2张图片

咱们重点看看这个图,给定一个输入图片,假设我们需要对它做下采样操作(比如卷积stride为2),将分辨率降低了两倍,然后与这个kernel size为7的卷积核做卷积运算,将得到的特征图再重新上采样两倍,植入到原始图像中,会发现我们只获得了图像1/4的响应(右上角的图),这就是标准卷积所谓的稀疏特征响应。相反,如果最开始不下采样,而是对原图使用kernel size=7,空洞率为2的空洞卷积运算,实际运算量以及参数量都没有变化(因为空洞卷积中间是空的0值,不需要运算)。这样就可以在不需要下采样的情况下对全分辨率的图像做卷积,并且能获得更大的感受野。

所以之前提到的密集与稀疏特征响应,指的是提取到的特征图的分辨率。普通卷积的下采样操作会让特征图尺寸越来越小,最后得到的结果对应回原图的位置上,把每个特征图的像素点看作提取到的特征的话,整张图的特征响应就会变得稀疏。而空洞卷积可以在运算量不变的情况下不降低特征图的分辨率,这样得到的特征图对应回原图上就更加密集。

在DCNN中,可以在一系列层中使用空洞卷积从而可以以任意的高分辨率计算网络的特征响应。将这种方法贯穿整个网络可以一直以原始分辨率计算特征图,但是计算成本过高,因此可以在效率和准确率之间做一个折中,将图像分类网络转化为一个密集特征提取器。

让我们重回DeepLabV3的讨论

DeepLabV3首先探索了将空洞卷积级联布局的结构,具体将ResNet的后几个块更改成空洞卷积,从而根据设定的值维持分辨率,如图所示DeepLabV3论文解读(空洞卷积/膨胀卷积 理解)_第3张图片
上面是原本的ResNet模块,通过不断的下采样操作使得特征图尺寸越来越小,同时深度越来越深,在分类任务时这样是有好处的,在较深的模块更容易获得全局信息,但是对于分割网络这样就损失了太多细节,特征响应变得稀疏。但是通过将后几个block改成空洞卷积之后,运算量没有增大,但是却能够维持分辨率不降低,这样获取了更密集的特征响应,使得还原到原图时细节更好。

空洞空间金字塔池化(Atrous Spatial Pyramid Pooling,ASPP)

拥有不同空洞率的ASPP有效的获取了多尺度信息,但是发现随着采样率增大,尤其是滤波器的等效尺寸接近特征图尺寸时,整个3×3滤波器就会退化为1×1滤波器,只用中间的一个权重值有用,为了克服这个问题,文章使用全剧平均池化在最后一个特征图上,并且通过1×1卷积得到256个特征上采样到所需空间尺寸,所以最终的ASPP包含四个并行操作,一个1×1卷积和三个3×3卷积,都有256个卷积核,如图所示:
DeepLabV3论文解读(空洞卷积/膨胀卷积 理解)_第4张图片
所有分支得到的特征图将会拼接在一起通过另外一个1×1卷积。

你可能感兴趣的:(语义分割,deeplab,空洞卷积,膨胀卷积,atrous,convoluti)