【语义分割】- DeeplabV1&V2

论文:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFS.

下载地址:http://arxiv.org/pdf/1412.7062v3.pdf

Background:
        CNN的一个特性是invariance(不变性),这个特性使得它在high-level的计算机视觉任务比如classification中,取得很好的效果。但是在semantic segmentation任务中,这个特性反而是个障碍。毕竟语义分割是像素级别的分类,高度抽象的空间特征对如此low-level并不适用。所以,用CNN来做分割,就需要考虑feature map的尺寸,以及空间位置不变性问题。(有什么更妥的称呼?求指教)

Solution:

        对于第一个问题,Deeplab的对常规的卷积做了而改变,创造性的用了hole算法(下面会细说)。第二个问题,Deepla引入了fully connected CRF(后边会细说)。

一、DeeplabV1

1、DeeplabV1方法概述 :

        DeeplabV1方法分为两步走,第一步仍然采用了FCN得到 coarse score map并插值到原图像大小,然后第二步借用fully connected CRF对从FCN得到的分割结果进行细节上的refine。(有关FCN的内容介绍,可以参考我的前面的一篇博客: https://blog.csdn.net/zhuzemin45/article/details/79647862) 下面这张图很清楚地展示了整个结构如下: 

【语义分割】- DeeplabV1&V2_第1张图片


2、DeeplabV1相比FCN更加细腻的处理方式:

        在第一步中,deeplab仍然采用了FCN来得到score map,并且也是在VGG网络上进行fine-tuning。但是在得到score map的处理方式上,要比原FCN处理细腻很多。 
        CVPR 2015的FCN中输入是一张500x500的图像,在第一个卷积层上conv1_1来了一个100的大padding。最终在fc7层勉强得到一个16x16的score map。虽然处理上相对粗糙,但确是第一次将图像分割在CNN上完成end-to-end,并且在当时performance是state-of-the-art,也很理解。 
        DeeplabV1摒弃了这种做法,取而代之的是对VGG的网络结构上做了小改动:将VGG网络的pool4和pool5层的stride由原来的2改为了1。就是这样一个改动,使得vgg网络总的stride由原来的32变成8,进而使得在输入图像为514x514,正常的padding时,fc7能得到67x67的score map, 要比FCN确实要dense很多很多。但是这种改变网络结果的做法也带来了一个问题: stride改变以后,如果想继续利用vgg model进行fine tuning,会导致后面filter作用的区域发生改变,换句话说就是感受野发生变化。这个问题在下图(a) (b)中通过花括号体现出来了。


3、Hole算法:

        作者想出了一招,来解决两个看似有点矛盾的问题:  既想利用已经训练好的模型进行fine-tuning,又想改变网络结构得到更加dense的score map. 这个解决办法就是采用Hole算法。如下图(a) (b)所示,在以往的卷积或者pooling中,一个filter中相邻的权重作用在feature map上的位置都是物理上连续的。如下图(c)所示,为了保证感受野不发生变化,某一层的stride由2变为1以后,后面的层需要采用hole算法,具体来讲就是将连续的连接关系是根据hole size大小变成skip连接的(图(c)为了显示方便直接画在本层上了)。注意虽然(c)中的padding为2,但是padding的两个像素不会连在同一个filter上。 

pool4的stride由2变为1,则紧接着的conv5_1, conv5_2和conv5_3中hole size为2。接着pool5由2变为1, 则后面的fc6中hole size为4。 

【语义分割】- DeeplabV1&V2_第2张图片


4、fully connected CRF:

        图像输入CNN是一个被逐步抽象的过程,原来的位置信息会随着深度而减少甚至消失。Conditional Random Field (CRF,条件随机场)在传统图像处理上的应用有一个是做平滑。CRF简单来说,能做到的就是在决定一个位置的像素值时(在这个paper里是label),会考虑周围邻居的像素值(label),这样能抹除一些噪音。但是通过CNN得到的feature map在一定程度上已经足够平滑了,所以short range的CRF没什么意义。于是作者采用了fully connected CRF,这样考虑的就是全局的信息了。

        CRF是后处理,是不参与训练的,在测试时对特征提取后得到的feature map进行双线性插值,恢复到原图尺寸,然后再进行CRF处理,因为feature map是8s的,所以直接放大到原图是可以接受的。下图展示了CRF处理前后的效果对比,可以看出用了CRF以后,细节确实改善了很多: 

【语义分割】- DeeplabV1&V2_第3张图片


DeepLab V2:

         继DeepLabV1之后,Liang-Chieh Chen很快又推出了DeepLabV2版本。由于变动不是很大,就只说说改进的地方。Multi-scale对performance提升很大,而我们知道,receptive field,视野域(或者感受野),是指feature map上一个点能看到的原图的区域,那么如果有多个receptive field,是不是相当于一种Multi-scale?出于这个思路,V2版本在V1的基础上增加了一个多视野域。具体看图可以很直观的理解。

【语义分割】- DeeplabV1&V2_第4张图片

【语义分割】- DeeplabV1&V2_第5张图片


        rate也就是hole size,这个结构作者称之为ASPP(atrous spatial pyramid pooling),基于洞的空间金字塔此外,DeepLab V2有两个基础网络结构,一个是基于vgg16,另外一个是基于resnet101的。

你可能感兴趣的:(深度学习,语义分割)