前言:前面介绍的FCN、SegNet、U-Net在语义分割的效果上还没有完全达到预想的那种程度,他们的核心设计理念其实都是一样的,都可以说是一个Ecoder-Decoder的架构,并且使用全卷积网络,这样做有着一些比较大的缺点依然没有解决,google在此基础之上提出了Deep Lab系列网络,现在已经有了 v1 、v2 、v3 、v3+这几个版本,本文来看一看v1版本。
一、视觉任务概述
二、Deep Lab v1概述
三、Deep Lab v1核心技术解析
3.1 空洞卷积原理
3.2 Deep Lab V1里面采用的空洞卷积
3.3 总结
四、条件随机场CRF
4.1 条件随机场的理论来源
4.2 多尺度预测
一、视觉任务概述
视觉任务常常分为高级和低级两个层次:
高级视觉任务 High-Level vision task:图像分类、目标识别
低级视觉任务 High-Level vision task:语义分割(像素级分类)、姿态估计等
对于传统的CNN网络模型,非常适合高级视觉任务,主要是由于经典的CNN具有两个好的特性,
(1)特征的层层抽象。因为分类任务只需要高层的抽象特征,对于低层的纹理、细节等局部信息不是那么看重,所以适合分类;
(2)卷积的空间不变性。所谓空间不变性指的是对图像的变换不敏感,比如一只猫,它经过平移,旋转之后依然是一只猫,对于分类问题来说这很好理解(经典CNN具有平移不变性,几乎不具有旋转,缩放不变性,但是可以制造这样的样本来弥补)。
但是语义分割是像素级别的分类,经典CNN的这两个特点反而对于语义分割很不友好了,为什么,因为对于图像分割来说,在对一张图片进行空间变换之后,分割的结果是不一样的,所以经典CNN对于分割任务不是很友好(当然不是不能做)
所以针对CNN的这两个问题,google团队提出了针对性的解决问题。,诞生了Deep Lab系列网络。
二、Deep Lab v1概述
针对上面说到的两个问题,Deep Lab v1提出了针对性的解决方案,即
(1)信号下采样导致的分辨率降低问题——主要由于标准DCNNs的每一层网络上最大池化与下采样操作造成分辨率下降;DeepLab采用atrous(空洞)卷积算法扩展感受野来获取更多上下文信息。
(2)空间不敏感(不变性)——经典CNNs随着网络层数的加深,到最后的几层丢失了位置信息,不能够精确定位,因此不能用于准确的物体分割,而在高级图像任务中由于其强不变属性使得DCNNs表现良好,但是在低层的分割任务中表现却不好。
Deep Lab提出的解决方案是将DCNN最后一层的输出与一个全连接的条件随机场(CRF)结合来解决深度网络中定位不准的缺点,使用全连接的CRF来提高模型捕获精细细节的能力。那什么是条件随机场呢?后面会介绍它的原理。
CRF广泛应用于语义分割领域,它将多路分类器计算的类别分数与局部的像素边缘相互作用得到的低维信息相结合。虽然已经提出更复杂的工作来给层次依赖和/或段的高阶依赖建模,我们使用全连接的成对CRF,因为它计算高效,可以捕捉精细的边缘细节,同时适应长距离依赖性。该模型在2011年提出大大提高了基于boosting的像素分类器的性能,在我们的工作中我们将证明将它与一个基于DCNN的像素级分类器结合时可以得到目前最好的效果。正是结合了条件随机场,“DeepLab”系统定位边界的精度超过以往所有方法,在PASCAL VOC-2012语义分割任务中效果最好,测试集上达到71.6%的IOU准确度。并且在GPU上达到8fps的速度。
三、Deep Lab v1核心技术解析
3.1 空洞卷积原理
前面我已经专门写过文章介绍了空洞卷积,有兴趣的可以参考,空洞卷积,也称之为扩张卷积,英文名称为convolution with holes、dilated convolution或者是atrous convolution.它是一种可以在保持参数量不增加的情况下,增加感受野的方法。
空洞卷积的含义其实就是卷积核上每个像素之间有一定的间隙,主要作用就是扩大感受野(接受域)。
(1)从一幅简单的图来说起
(a)图对应3x3的1-dilated conv,和普通的卷积操作一样。实际上它是 1-dilated conv,后面会解释;
(b)图对应3x3的2-dilated conv,实际的卷积kernel size还是3x3,但是空洞为1,需要注意的是空洞的位置全填进去0,填入0之后再卷积即可。【此变化见下图】
(c)图是4-dilated conv操作。
疑问:这里引入了一个新的概念,即 称为 “扩张率(dilation rate)”的新参数,它其实是一个定值,超参数,该参数定义了卷积核处理数据时各值的间距。换句话说,相比原来的标准卷积,扩张卷积(dilated convolution) 多了一个hyper-parameter(超参数)称之为dilation rate(扩张率),指的是kernel各点之前的间隔数量,【正常的convolution 的 dilatation rate为 1】。一般卷积核中两个像素中间的 像素数+1,就是扩张率。这就很好地解释了上面的(a)、(b)、(c)这三幅图的含义。
在上图中扩张卷积的感受野可以由以下公式计算得到,设卷积核像素之间的间隔像素数为 i,则 扩张率为 i+1,则有感受野的计算如下公式:
其中i+1表示dilated rate。比如上图中(a),dilated=1,F(dilated) = 3×3;图(b)中,dilated=2,F(dilated)=7×7;图(c)中,dilated=4, F(dilated)=15×15。
(2)空洞卷积的动态感受
空洞卷积(dilated convolution)是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。利用添加空洞扩大感受野,让原本3x3的卷积核,在相同参数量和计算量下拥有5x5(dilated rate =2)或者更大的感受野,从而无需下采样。
在二维图像上直观地感受一下扩张卷积的过程:
上图是一个扩张率为2的3×3卷积核,感受野与5×5的卷积核相同,而且仅需要9个参数。你可以把它想象成一个5×5的卷积核,每隔一行或一列删除一行或一列。在相同的计算条件下,空洞卷积提供了更大的感受野。空洞卷积经常用在实时图像分割中。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑空洞卷积。
(3)空洞卷积感受野指数级的增长
这里可以参考我的另一篇文章:
https://mp.weixin.qq.com/s/5jOm6_hbh6Da0g3bsRF7eQ
(4)一维卷积的空洞卷积
卷积使用最多的情况就是二维图像,同样的原理,当然在一维卷积和三维卷积中也是可以使用的,这里有一个一维空洞卷积的图像,如下:
3.2 Deep Lab V1里面采用的空洞卷积
从上面的原理可以看出,空洞卷积其实没有新的东西,我们完全可以看成是一个大一点的卷积核,只不过这个卷积核里面有很多像素是0,所以依然有步幅stride,padding这些概念,只是多了一个 空洞率,dilated rate。那在 Deep Lab v1里面,是怎么设计的呢?
Deep Lab其实也是建立在VGG16的基础之上的,将VGG-16的全连接层改成卷积层,图像以原始分辨率输入,但是这样产生的空间检测分数仍然很稀疏(步幅=32,步幅=输入尺寸/输出特征尺寸)。为了精确步幅到8,所以我们需要更大的特征输出,我们在网络的最后2个池化层后跳过了下采样,而是采用2或者4采样率的空洞卷积对特征图做采样扩大感受野从而缩小步幅。然后在ImageNet上预训练的VGG16权重上做fine-tune(迁移学习),
其实总结起来就两点:
第一:将VGG的全连接层改为卷积层;
第二:将最后的两个池化层改为空洞卷积,提高分辨率。
当然这只是Deep Lab v1网络的前面的特征提取部分的网络结构,后面还会跟上条件随机场,后面再介绍。
3.3 总结
对于输出信号分辨率变小这一问题,FCN采用的是上采样(转置卷积)的方法进行恢复,而DeepLab采用空洞卷积的方法。空洞卷积的使用,借鉴于有效计算非抽样离散小波变换的”孔洞算法 ”(这是理论来源),在VGG16中使用不同采样率的空洞卷积,可以让模型再密集的计算时,明确控制网络的感受野。保证CNN的预测图能够可靠的预测图像中物体的位置。
四、条件随机场CRF
CNN特征图可以可靠地预测图像中对象的存在和粗略位置,但不太适合用于指向其精确轮廓。 卷积网络在分类精度和定位精度之间有自然的权衡:具有多个最大池化层的卷积神经网络在分类任务中已被证明是最成功的应用,然而,他们增加的不变性和大的感受野使得在其最后的输出层推断位置上有很大的难度。
使用空洞卷积可以得到更丰富的位置信息,然后通过使用成对的完全连接的条件随机场(CRF)可以提高模型捕获细节的能力,通过结合多路分类器与由像素和边缘或超像素局部交互捕获的低级信息来计算得出的分数。DeepLab是结合了CNN的识别能力和全连接的CRF的细粒度定位精度,寻求一个结合的方法,结果证明能够产生准确的语义分割结果。
4.1 条件随机场的理论来源
条件随机场所涉及到的理论知识较多,要彻底弄懂是需要花费较多时间的,涉及到譬如无向图模型、马尔科夫随机场等等一系列的理论知识,我也还没学会,所以这里不再详细说明,也没有复杂的数学推导,后面有时间了我再抽空专门写一个关于条件随机场的文章。
这里大致说一下条件随机场的工作过程:
对于每个像素位置 i i 具有隐变量xi(这里隐变量就是像素的真实类别标签,如果预测结果有21类,则(i∈1,2,..,21),还有对应的观测值yi(即像素点对应的颜色值)。以像素为节点,像素与像素间的关系作为边,构成了一个条件随机场(CRF)。通过观测变量yi来推测像素位置i对应的类别标签xi。条件随机场示意图如下:
完全连接的CRF模型采用能量函数
由一元势函数和二元势函数两部分组成。其中 x 是像素的标签分配。
一元势函数是定义在观测序列位置ii的状态特征函数,用于刻画观测序列对标记变量的影响。
其中P(xi) 是由DCNN计算的像素 i 处的标签分配概率。
二元势函数定义在不同观测位置上的转移特征函数,用于刻画变量之间的相关关系以及观测序列对其影响。
简单来说,二元势函数是描述像素和像素之间的关系,如果比较相似,那可能是一类,否则就裂开,这可以细化边缘。一般的二元势函数只取像素点与周围像素之间的边,这里使用的是全连接,即像素点与其他所有像素之间的关系。
看到这里一定很懵逼,其实我自己也似乎是一知半解的,没太理解深入,希望有大佬可以一起好好交流。
注意事项:
CRF是后处理,不参与训练,测试时对特征提取后得到的feature map进行双线性插值,恢复到原图尺寸,然后再进行CRF处理。DeepLab由DCNN和CRF组成,训练策略是分段训练,即DCNN的输出是CRF的一元势函数,在训练CRF时是固定的。在对DCNN做了fine-tune后,对CRF做交叉验证。具体参数请参考论文。
4.2 多尺度预测
论文还探讨了使用多尺度预测提高边界定位效果。具体的,在输入图像和前四个最大池化层的输出上附加了两层的MLP(第一层是128个3×33×3卷积,第二层是128个1×11×1卷积),最终输出的特征映射送到模型的最后一层辅助预测,合起来模型最后的softmax层输入特征多了5×128=6405×128=640个通道,实验表示多尺度有助于提升预测结果,但是效果不如CRF明显。
总结:DeepLab系统的三个主要优点是
(1)速度:凭借“atrous”算法,密集DCNN以8fps运行,而全连接CRF的平均场推断需要0.5秒;
(2)准确度:获得了PASCAL语义分割赛的最好成绩,超过第二名7.2%;
(3)简单性:系统由两个完善的模块组成,DCNNs和CRFs。