论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

时间:2023-02-04 18:01:29

论文地址:https://arxiv.org/pdf/1606.00915.pdf

概述

DeepLabv2 是在DeeplabV1 的基础上又做了改进的。Deeplabv1 主要是在FCN 的基础上对vgg 网络进行fine tuning,并加上一个全连接的CRF,这样可以保证对FCN 得到的结果在局部细节上进行优化,从而实现在PASCALVOC 数据集上达到71.6%的准确率,成为当时的state-of-the-art。

Deeplabv2 在之前的基础上又给出了三个方面的贡献:
一是使用Atrous Convolution 代替原来上采样的方法,比之前得到更高像素的score map,并且增加了感受野的大小;
二是使用ASPP 代替原来对图像做预处理resize 的方法,使得输入图片可以具有任意尺度,而不影响神经网络中全连接层的输入大小;
三是使用全连接的CRF,利用低层的细节信息对分类的局部特征进行优化。

Pipeline

论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

亮点

论文采用全连接的CRF 的原因是对于深度神经网络,在分类的准确率上比较好,意味着其在高层的语义上是有明显优势的,但是对于像素级的分类,是属于低层的语义信息,因此在局部细节上显得非常模糊,由此作者希望通过CRF 来提升优化细节信息。

  • FCN 改进

之前的FCN 是用500*500 的图像,在第一层卷积层上conv1_1 进行大小为100 的padding,最终在fc7 层勉强得到一个16*16 的score map。这样的处理稍显粗糙,但是FCN 是第一次将CNN 应用到图像分割领域,并且是end-to-end,而且在当时也是state-of-the-art。

Deeplab 是将VGG 网络的pool4 和pool5 层的步长由2 改为1,这样的改动使得vgg 网络总的步长由原来的32 变为了8,进而使得输入图像变为514*514,正常padding 的时候,fc7 能得到67*67 的score map,比FCN得到的要多很多。这种调整同时又导致了想要继续使用vgg model 进行fine tuning,会导致感受野发生变化,作者使用Atrous Convolution(Hog 算法)解决这个问题。

  • Atrous Convolution

在以往的卷积或者pooling 中,一个filter 中相邻的权重作用在feature map上的位置都是物理上连续的。Kernel size 表示卷积核的大小,即下一层中的每一个结点对应上一层中Kernel size 个结点(感受野)。Stride 步长表示每经过stride 个神经元再次做一次卷积。如图(a)(b)所示。

现在,为了保证感受野不发生变化,某一层的stride 由2 变为1 以后,后面的层需要采用hole 算法,具体来讲就是将连续的连接关系是根据hole size大小变成skip 连接的。即kernel size 的大小虽然还是3,但是这三个是经过hole size 的跳跃性的构成的。pool4 的stride 由2 变为1,则紧接着的conv5_1,conv5_2 和conv5_3 中hole size 为2。接着pool5 由2 变为1, 则后面的fc6中hole size 为4。
论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

这个问题实际上就是解决了DCNN 特征的分辨率比较小的问题,这里的hole size 也可以叫rate。之前的方法使用卷积和下采样得到score map,再利用上采样得到和原来一样大小的图片,但是这样得到的图片比较模糊。使用Atrous Convolution 代替这两个过程,使得参数量减少,计算量也减少了,增加了感受野的大小。

论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

  • ASPP(Atrous spatial pyramid pooling)

传统方法是把图像强行resize 成相同尺寸,但是这样会导致某些特征扭曲或者消失,这里联想到在SIFT 特征提取的时候用到过图像金字塔,将图像scale到不同的尺度,再提取的SIFT 特征点具有旋转,放缩不变性。因此这里也是借鉴这种方式使用空间金字塔池化的方法,来实现对图像大小和不同长宽比的处理。这样产生的新的网络,叫做SPP-Net,可以不论图像的大小产生相同大小长度的表示特征。ASPP 实际上就是通过不同的atrous convolution 来对图像进行不同程度的缩放,得到不同大小的input feature map,因为deeplab-ASPP拥有不同rate 的滤波器,再把子窗口的特征进行池化就生成了固定长度的表示。

之前DCNN 需要固定输入图像的大小是因为卷积部分不需要固定图像的大小(它的输出大小是跟输入图像的大小相关的),真正有固定输入图像大小需求的是全连接部分,全连接部分的参数的个数是需要固定的。将SPP 层接到最后一个卷积层后面,SPP 层池化特征并且产生固定大小的输出,它的输出然后再送到第一个全连接层。这样就可以避免在网络的输入口处就要求它们大小相同。
论文阅读:《DeepLab-v2: Semantic Image Segmentation 》
论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

  • CRF

以分类为中心的DCNN 学习了位置不变的特征,但是在做分割的时候,必须要位置相关。越深的层,它的位置信息可能越少,要恢复出位置,必须去前面层找。在FCN 使用的是skip layer。论文中使用的是dense CRF,具体确定了该使用多少低层的信息。

当把像素的label 作为形成,马尔科夫场随机变量且能够获得全局观测时,CRF 便可以对这些label 进行建模。这种全局观测通常就是输入图像。令随机变量Xi 是像素i 的标签。
论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

令变量X 是由X1,X2,…,XN 组成的随机向量,N 就是图像的像素个数。假设图G=(V,E),其中V={X1,X2,…,XN},全局观测为I 。使用Gibbs 分布,(I,X)可以被模型为CRF,
论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

在全连接的CRF 模型中,标签x 的能量可以表示为:
论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

其中φu(xi)是一元能量项,代表着将像素i 分成label xi 的能量。φp(xi,xj)是对像素点i、j 同时分割成xi、xj 的能量,是一个二元能量项。最小化上面的能量就可以找到最有可能的分割。

实验结果

  • 通过以下表格数据对比,可以看到CRF 对准确率有较大提升。
    论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

  • 通过以下表格数据对比,可以看到较小的batch_size 能够更好的拟合模型,虽然训练次数会增加,因为小的batch_size 学习的过程比较缓慢,迭代次数多一些。
    论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

  • 通过以下表格数据对比,可以看到ASPP 对于准确率提升是有贡献的。其中ASSP-L 的效果最好。论文阅读:《DeepLab-v2: Semantic Image Segmentation 》

  • 通过以下表格数据对比,可以看到在ResNet-101 网络上的效果比在vgg16上的效果要更好一些,可见VGG16 网络也不是万能的。
    论文阅读:《DeepLab-v2: Semantic Image Segmentation 》