语义分割:
简单地说,分割就是抠图。语义分割,是像素级别地给物体分类。现在ps已经集成了很多自动分割的功能。
摄像头采集到车前景象,通过模型分析,我们可以自动筛选出地面、交通线、人行道、行人、建筑、树、以及其他基础设施。
在上图,我们可以看到地面和交通标识线有清晰的分割,路面和人行道也同样如此,甚至路灯和建筑都可以清楚地分离出来。
这项技术在医学上的作用也同样巨大,我们可以识别病灶并将其与正常组织分割,大脑神经系统内我们可以分离出同一组功能的神经系统,这些假如依赖人工去完成,所需时间至少为数小时,而交给机器,那么数秒钟就可以完成。
语义分割模型的特征:
- 分割出来的不同语义区域对某种性质,如灰度、纹理而言具有相似性,区域内部比较平整,相邻语义区域对分割所依据的性质有明显的差异。
- 不同语义区域边界上是明确和规整的。
图像分割的历史:
- 2000年以前,数字图像处理时,我们采用的方法基于几类:阈值分割、区域分割、边缘分割、纹理特征、聚类等。
- 2000年到2010年期间,主要方法有四类:基于图论、聚类、分类以及聚类和分类结合的
- 2010年至今,神经网络模型的崛起和深度学习的发展,主要涉及到几种模型:
截至到2017年底,我们已经分化出了数以百计的模型结构。当然,经过从技术和原理上考究,我们发现了一个特点,那就是当前最成功的图像分割深度学习技术都是基于一个共同的先驱:FCN(Fully Convolutional Network,全卷积神经网络)。
2010年前,CNN 是非常高效的视觉处理工具,因为它能够学习到层次化的特征。研究人员将全连接层替换为卷积层来输出一种空间域映射(反卷积)而非简单输出类别的概率,从而将图像分割问题转换为端对端的图像处理问题。
那什么是端对端?
通俗地讲就是,不考虑中间过程,输入数据,然后得到模型的输出结果。
接下来详细地看一下模型发展过程来深入了解端到端的含义:
其中浅色部分为人为操作部分,深色为机器自动处理部分。
端到端的好处:
通过缩减人工预处理和后续处理,尽可能给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。
端到端的坏处:
通过大量模型的组合,增加了模型的复杂度,降低了模型的可解释性。
发展历程:
- 2014年FCN模型,主要贡献为在语义分割问题中推广使用端到端卷积神经网络,使用反卷积进行上采样。
- 2015年U-net模型,构建一套完整的编码解释器。
- 2015年SegNet模型,将最大池化转化为解码器来提高分辨率。
- 2015年的Dilated Convolution(空洞卷积),更广范围内提高了内容的聚合且不会降低分辨率。
- 2016年DeepLab v1&v2
- 2016年RefineNet使用了残差连接,降低了内存使用量,提高了模块间的特征融合
- 2016年PSPNet模型
- 2017年Large Kernel Matters
- 2017年DeepLab v3
以上几种模型可以按照语义分割模型的独有方法进行分类,如专门池化(PSPNet、DeepLab),编码器-解码器架构(SegNet、E-Net),多尺度处理(DeepLab)、条件随机场(CRFRNN)、空洞卷积(DiatedNet、DeepLab)和跳跃连接(FCN)。
什么是FCN模型?
FCN(Fully Convolutional Network,全卷积神经网络)。FCN的网络结构主要包括:连续的卷积层、反卷积层以及跳跃结构。连续的卷积结构用于提取图像特征,主要采用VGGNet或者ResNet等网络结构。因为卷积处理过后的池化层会缩小图像的尺寸,为了得到和原图像等大的分割图,我们需要上采样或者反卷积结构。反卷积的前向和后向传播,只用颠倒卷积的前后向传播即可,所以无论优化还是后向传播算法都是没有问题的。跳跃结构的作用在于优化结果,因为如果将全卷积之后的结果直接上采样得到的结果是很粗糙的,即所得的分割图像会失去很多细节,所以将不同池化层的结果进行上采样之后加和来优化输出,这样得出的分割图像效果会更好。
简单地说:全卷积网络没有全连接层,全部由卷积层构成。
主要思想:
目前流行的深度网络,比如VGG,Resnet等,由于pooling和卷积步长的存在,feature map会越来越小,导致损失一些细粒度的信息(低层feature map有较丰富的细粒度信息,高层feature map则拥有更抽象,粗粒度的信息)。对于分类问题而言,只需要深层的强语义信息就能表现较好,但是对于稠密预测问题,比如逐像素的图像分割问题,除了需要强语义信息之外,还需要高空间分辨率。
针对这些问题,很多方法都提出了解决方案:
-
针对pooling下采样过程中的分辨率损失,采用deconvolution恢复。但是却很难恢复位置信息。
-
使用空洞卷积保持分辨率,增大感受野,但是这么做有两个缺点:A.明显增加了计算代价。B.空洞卷积是一种coarse sub-sampling,因此容易损失重要信息。
-
通过skip connection来产生高分辨率的预测。
主要过程:
首先将一幅 RGB 图像输入到卷积神经网络后,经过多次卷积及池化过程得到一系列的特征图,然后利用反卷积层对最后一个卷积层得到的特征图进行上采样,使得上采样后特征图与原图像的大小一样,从而实现对特征图上的每个像素值进行预测的同时保留其在原图像中的空间位置信息,最后对上采样特征图进行逐像素分类,逐个像素计算 softmax 分类损失。
主要特点:
- **不含全连接层(fc)**的全卷积(fully conv)网络。从而可适应任意尺寸输入。
- 引入增大数据尺寸的反卷积(deconv)层,能够输出精细的结果。
- 结合不同深度层结果的跳级(skip)结构。同时确保鲁棒性和精确性。
传统的CNN有如下缺点:
- 存储开销大,滑动窗口较大,每个窗口都需要存储空间来保存特征和判别类别,而且使用全连接结构,最后几层将近指数级存储递增。
- 计算效率低,大量重复计算。
- 滑动窗口大小是相对独立的,末端使用全连接只能约束局部特征。
为了解决上面的部分问题,FCN将传统的CNN中的全连接层转化为卷积层,对应CNN网络,FCN把最后三层全连接层转化为三层卷积层(4096,4096,1000)。
虽然通过上面两个图观察,卷积核全连接数值没有变,但是卷积核全连接概念不一样,所以表达的含义就截然不同。
那么全连接层换成卷积层有什么好处?
我们输入的图片大小和卷积核大小一致时,其实等价于建立全连接。但全连接不会学习过滤,会给每个连接分权重且不会修改连接关系。卷积则是会学习有用的关系,没用得到关系它会弱化或者直接 dropout。这样卷积块可以共用一套权重,减少重复计算,还可以降低模型复杂度。
反卷积
a 是输入图像,b 是经过卷积得到的特征图,分辨率明显下降。经过上采样(反卷积)提升分辨率得到同时,还保证了特征所在区域的权重,最后将图片的分辨率提升原图一致后,权重高的区域则为目标所在区域。
FCN 模型处理过程也是这样,通过卷积和反卷积我们基本能定位到目标区域,但是,我们会发现模型前期是通过卷积、池化、非线性激活函数等作用输出了特征权重图像,我们经过反卷积等操作输出的图像实际是很粗糙的,毕竟丢了很多细节。因此我们需要找到一种方式填补丢失的细节数据,所以就有了跳跃结构。
跳跃结构
正向过程的卷积、池化等操作都会输出每个层的特征,我们使用反卷积然后和历史中的池化和卷积数据结合,利用它们的数据填补我们缺失的数据。
三个技术都已经构建如模型之中,通过一定标记数据的训练后,模型已经学会了如何识别类别,并且能反卷积得到对应类别所在的像素区域。输出如下效果。
FCN的缺点:
- 分割的结果不够精细。图像过于模糊或平滑,没有分割出目标图像的细节。
- 因为模型是基于CNN改进而来,即便是用卷积替换了全连接,但是依然是独立像素进行分类,没有充分考虑像素与像素之间的关系。
参考文献:
[1] 十分钟看懂全卷积神经网络
[2] A 2017 Guide to semantic Segmentation with Deep Learning
[3]【语义分割】一篇看完就懂的最新深度语义分割模型综述