语义分割相关网络简述

时间顺序:

FCN 、SegNet U-Net、Dilated Convolutions 、DeepLab (v1 & v2) 、RefineNet PSPNet 、Large Kernel Matters 、DeepLab v3 。

1、Fully Convolution Networks (FCNs) 全卷积网络

相应连接:Arxiv

我们将当前分类网络(AlexNet, VGG net 和 GoogLeNet)修改为全卷积网络,通过对分割任务进行微调,将它们学习的表征转移到网络中。然后,我们定义了一种新的架构,它将深的、粗糙的网络层的语义信息和浅的、精细的网络层的表层信息结合起来,来生成精确和详细的分割。我们的全卷积网络在 PASCAL VOC(在2012年相对以前有20%的提升,达到了62.2%的平均IU),NYUDv2 和 SIFT Flow 上实现了最优的分割结果,对于一个典型的图像,推断只需要三分之一秒的时间。

      

                                    FCN端到端的密集预测流

关键点:

1、端到端预测,做pixel-wise级别的预测

2、对AlexNet、VGG等延展(全连接层转换成全卷积层)

3、fine-tune相关的网络

4、任意输入,输出分类热力图map(因为输出类没有确定,所以可以任意输入)

5、特征是由编码器中的不同阶段合并而成的,它们在语义信息的粗糙程度上有所不同

6、低分辨率语义特征图的上采样使用经双线性插值滤波器初始化的反卷积操作完成

7、损失函数是在最后一层的 spatial map上的 pixel 的 loss 和,在每一个 pixel 使用 softmax loss 

8、

                 

                         第2点: 将全连接层转换成卷积层,使得分类网络可以输出一个类的热图

      

                                                     第5点:FCN-8s 网络架构

                              FCN-8

如上图所示,对原图像进行卷积conv1、pool1后原图像缩小为1/2;之后对图像进行第二次conv2、pool2后图像缩小为1/4;接着继续对图像进行第三次卷积操作conv3、pool3缩小为原图像的1/8,此时保留pool3的featureMap;接着继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;最后对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32,然后把原来CNN操作中的全连接变成卷积操作conv6、conv7,图像的featureMap数量改变但是图像大小依然为原图的1/32,此时进行32倍的上采样可以得到原图大小,这个时候得到的结果就是叫做FCN-32s.

这个时候可以看出,FCN-32s结果明显非常平滑,不精细. 针对这个问题,作者采用了combining what and where的方法,具体来说,就是在FCN-32s的基础上进行fine tuning,把pool4层和conv7的2倍上采样结果相加之后进行一个16倍的上采样,得到的结果是FCN-16s.

之后在FCN-16s的基础上进行fine tuning,把pool3层和2倍上采样的pool4层和4倍上采样的conv7层加起来,进行一个8倍的上采样,得到的结果就是FCN-8s.

可以看出结果明显是FCN-8s好于16s,好于32s的.

缺点:

1、首先是训练比较麻烦,需要训练三次才能够得到FCN-8s

2、是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感

3、是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

2、SegNet(A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation)

相应连接:Arxiv

SegNet 的新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。具体地说,解码器使用了在相应编码器的最大池化步骤中计算的池化索引来执行非线性上采样。这种方法消除了学习上采样的需要。经上采样后的特征图是稀疏的,因此随后使用可训练的卷积核进行卷积操作,生成密集的特征图。我们将我们所提出的架构与广泛采用的 FCN 以及众所周知的 DeepLab-LargeFOV,DeconvNet 架构进行比较。比较的结果揭示了在实现良好的分割性能时所涉及的内存与精度之间的权衡。

      

                                                                                                     SegNet 架构

 关键点:

1、在解码器中使用反池化对特征图进行上采样,并在分割中保持高频细节的完整性

2、编码器不使用全连接层(和 FCN 一样进行卷积),因此是拥有较少参数的轻量级网络

                        

                                                                                             反池化

 如上图所示,编码器中的每一个最大池化层的索引都被存储起来,用于之后在解码器中使用那些存储的索引来对相应的特征图进行反池化操作。虽然这有助于保持高频信息的完整性,但当对低分辨率的特征图进行反池化时,它也会忽略邻近的信息

3、U-Net(Convolutional Networks for Biomedical Image Segmentation)

相应连接:Arxiv

U-Net 架构包括一个捕获上下文信息的收缩路径(下采样)一个支持精确本地化的对称扩展路径(上采样)。我们证明了这样一个网络可以使用非常少的图像进行端到端的训练,并且在ISBI神经元结构分割挑战赛中取得了比以前最好的方法(一个滑动窗口的卷积网络)更加优异的性能。我们使用相同的网络,在透射光显微镜图像(相位对比度和 DIC)上进行训练,以很大的优势获得了2015年 ISBI 细胞追踪挑战赛。此外,网络推断速度很快。一个512x512的图像的分割在最新的 GPU 上花费了不到一秒。

                      

                                                                                                      U-Net 架构

关键点:

1、U-Net 简单地将编码器的特征图拼接至每个阶段解码器的上采样特征图,从而形成一个梯形结构。该网络非常类似于 Ladder Network 类型的架构。

2、通过跳跃 拼接 连接的架构,在每个阶段都允许解码器学习在编码器池化中丢失的相关特征。

3、上采样采用转置卷积

4、Unet只需要一次训练,FCN需要三次训练.

5、数据增强:形变

6、overlap-tile策略

相关介绍:
(1)左边的网络contracting path:使用卷积和maxpooling。
(2)右边的网络expansive path:使用上采样与左侧contracting path ,pooling层的featuremap相结合,然后逐层上采样到392X392的大小heatmap。(pooling层会丢失图像信息和降低图像分辨率且是不可逆的操作,对图像分割任务有一些影响,对图像分类任务的影响不大,为什么要做上采样?:因为上采样可以补足一些图片的信息,但是信息补充的肯 定不完全,所以还需要与左边的分辨率比较高的图片相连接起来(直接复制过来再裁剪到与上采样图片一样大小),这就相当于在高分辨率和更抽象特征当中做一个折衷,因为随着卷积次数增多,提取的特征也更加有效,更加抽象,上采样的图片是经历多次卷积后的图片,肯定是比较高效和抽象的图片,然后把它与左边不怎么抽象但更高分辨率的特征图片进行连接)
(3)最后再经过两次卷积,达到最后的heatmap,再用一个1X1的卷积做分类,这里是分成两类,得到最后的两张heatmap,例如第一张表示的是第一类的得分(即每个像素点对应第一类都有一个得分),第二张表示第二类的得分heatmap,然后作为softmax函数的输入,算出概率比较大的softmax类,选择它作为输入给交叉熵进行反向传播训练

(4)训练

采用随机梯度下降法训练。为了最大限度的使用GPU显存,比起输入一个大的batch size,更倾向于大量输入tiles。使用了很高的momentum(0.99)。
最后一层使用交叉熵函数与softmax。(交叉熵函数如下所示)
                          
 为了使某些像素点更加重要,引入了w(x)。我们对每一张标注图像预计算了一个权重图,来补偿训练集中每类像素的不同频率,使网络更注重学习相互接触的细胞之间的小的分割边界。使用形态学操作计算分割边界。权重图计算公式如下:
       
 wc是用于平衡类别频率的权重图,d1代表到最近细胞的边界的距离,d2代表到第二近的细胞的边界的距离。基于经验我们设定w0=10,σ≈5像素。
网络中权重的初始化:我们的网络的权重由高斯分布初始化,分布的标准差为(N/2)^0.5,N为每个神经元的输入节点数量。例如,对于一个上一层是64通道的3*3卷积核来说,N=9*64。
 
(5)overlap-tile策略
为了预测框中图像,缺失区域通过镜像输入图像扩张。这种tiling方法对于应用网络到大图像很重要,因为否则结果会被gpu内存限制。为了预测黄色区域的分割,需要蓝色区域作为输入。
 
(6)数据增加
在只有少量样本的情况况下,要想尽可能的让网络获得不变性和鲁棒性,数据增加是必不可少的。因为本论文需要处理显微镜图片,我们需要平移与旋转不变性,并且对形变和灰度变化鲁棒。将训练样本进行随机弹性形变是训练分割网络的关键。我们使用随机位移矢量在粗糙的3*3网格上(random displacement vectors on a coarse 3 by 3 grid)产生平滑形变(smooth deformations)。 位移是从10像素标准偏差的高斯分布中采样的。然后使用双三次插值计算每个像素的位移。在contracting path的末尾采用drop-out 层更进一步增加数据。

                  

                                                        数据增强

U-net典型应用:

(1)Kaggle-Airbus Ship Detection Challenge
在卫星图像中找到船,在公开的kernal中最受欢迎的是Unet,达到了84.7的精度。

(2)Kaggle-卫星图像分割与识别:
需要在卫星图像中分割出:房屋、道路、铁路、树木、农作物、河流、积水区、大型车辆、小轿车。在Unet基础上微调,针对不同的分割对象,微调的地方不同,会产生不同的分割模型,最后融合。推荐一篇不错的博文:
Kaggle优胜者详解:如何用深度学习实现卫星图像分割与识别

(3)Supervise.ly公司:
在用Faster-RCNN(基于resnet)定位+Unet-like架构的分割,来做他们数据众包图像分割方向的主动学习,当时没有使用mask-rcnn,因为靠近物体边缘的分割质量很低(终于!Supervise.ly发布人像分割数据集啦(免费开源)

(4)广东政务数据创新大赛—智能算法赛 :
国土监察业务中须监管地上建筑物的建、拆、改、扩,高分辨率图像和智能算法以自动化完成工作。并且:八通道U-Net:直接输出房屋变化,可应对高层建筑倾斜问题;数据增强:增加模型泛化性,简单有效;加权损失函数:增强对新增建筑的检测能力;模型融合:取长补短,结果更全。其中季军公布了源码

(5)Kaggle车辆边界识别——TernausNet 由VGG初始化权重 + U-Net网络,Kaggle Carvana Image
Masking Challenge
第一名,使用的预训练权重改进U-Net,提升图像分割的效果。开源的代码在TernausNet
(6)Kaggle新上比赛:地震图像的盐体分割

U-Net 在 EM 数据集上取得了最优异的结果,该数据集只有30个密集标注的医学图像和其他医学图像数据集,U-Net 后来扩展到3D版的 3D-U-Net。虽然 U-Net 最初的发表在于其在生物医学领域的分割、网络的实用性以及从非常少的数据中学习的能力,但现在已经成功应用其他几个领域,例如 卫星图像分割,同时也成为许多 kaggle竞赛 中关于医学图像分割的获胜的解决方案的一部分。

4、Dilated Convolutions 

通过膨胀卷积操作聚合多尺度的信息

                                                                      

                        转置卷积                                                                     转置卷积                                                                    空洞卷积(微步卷积,膨胀卷积)

 第一个推导公式: o=s(i1)+k2p。比如10*10变成19*19,可知k=3,p=1,s=2。

  Deep CNN 对于其他任务还有一些致命性的缺陷。如 up-sampling 和 pooling layer 的设计。

  1. Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (a.k.a. not learnable)。
  2. 内部数据结构丢失;空间层级化信息丢失。
  3. 小物体信息无法重建 (假设有四个pooling layer 则 任何小于 2^4 = 16 pixel 的物体信息将理论上无法重建。)
  4. 池化降低了分辨率。

在这样问题的存在下,语义分割问题一直处在瓶颈期无法再明显提高精度, 而 dilated convolution 的设计就很好的避免了这些问题。

但空洞卷积本身也存在问题

  1、The gridding effect:网格效应,丢失信息的连续性

                                     

                                                                                                                                                                       

layer i-2中与layer i中红色、蓝色、绿色、黄色对应的units,完全没有交集(准确的说是除了kernel中间的unit之外)。这就是产生gridding artifacts的原因。

针对1,引出两种方法。

法一:相同颜色抽出来变成像卷积那样处理

最后面改成如下,每个灰度兼顾四种颜色。

法2:

Separable and Shared Convolutions

具体连接

    2、Long-ranged information might be not relevant.  : 远程信息(小物体)效果差

针对2,引入 通向标准化设计:Hybrid Dilated Convolution (HDC),这个HDC的特点是符合多尺度检测

第一个特性是,叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。

第二个特性是,我们将 dilation rate 设计成 锯齿状结构,例如 [1, 2, 5, 1, 2, 5] 循环结构。

第三个特性是,我们需要满足一下这个式子: M_i=max[M_{i+1}-2r_i,M_{i+1}-2(M_{i+1}-r_i),r_i]

  

形象理解深度学习中八大类型卷积

 https://baijiahao.baidu.com/s?id=1625326459426256979&wfr=spider&for=pc

4、DeepLab v1(Semantic Image Segmentation with deep convolutional nets and fully connected CRFs)

DCNN + CRFs

相关连接:Arxiv

 近来,深度卷积网络在高级视觉任务(图像分类和目标检测)中展示了优异的性能。本文结合 DCNN 和概率图模型来解决像素级分类任务(即语义分割)。我们展示了 DCNN 最后一层的响应不足以精确定位目标边界,这是 DCNN 的不变性导致的。我们通过在最后一层网络后结合全连接条件随机场来解决糟糕的定位问题。我们的方法在 PASCAL VOC 2012 上达到了 71.6% 的 mIoU。

关键点:

1、提出 空洞卷积(atrous convolution)(又称扩张卷积(dilated convolution))。

2、在最后两个最大池化操作中不降低特征图的分辨率,并在倒数第二个最大池化之后的卷积中使用空洞卷积。

3、使用 CRF(条件随机场) 作为后处理,恢复边界细节,达到准确定位效果。

4、附加输入图像和前四个最大池化层的每个输出到一个两层卷积,然后拼接到主网络的最后一层,达到 多尺度预测 效果。

               

                      空洞卷积,蓝色输入,绿色输出

5、DeepLab v2(DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs)

DCNN(ASPP)+CRFs

相应连接:Arxiv

首先,我们强调上采样过滤器的卷积,或“空洞卷积”,在密集预测任务中是一个强大的工具。空洞卷积允许我们显式地控制在深度卷积神经网络中计算的特征响应的分辨率。它还允许我们有效地扩大过滤器的视野,在不增加参数数量或计算量的情况下引入更大的上下文。其次,提出了一种空洞空间金字塔池化(ASPP)的多尺度鲁棒分割方法。ASPP 使用多个采样率的过滤器和有效的视野探测传入的卷积特征层,从而在多个尺度上捕获目标和图像上下文。第三,结合 DCNNs 方法和概率图形模型,改进了目标边界的定位。DCNNs 中常用的最大池化和下采样的组合实现了不变性,但对定位精度有一定的影响。我们通过将 DCNN 最后一层的响应与一个全连接条件随机场(CRF)相结合来克服这个问题。DeepLab v2 在 PASCAL VOC 2012 上得到了 79.7% 的 mIoU。

 关键点:

1、提出了空洞空间金字塔池化(Atrous Spatial Pyramid Pooling),在不同的分支采用不同的空洞率以获得多尺度图像表征。

             

                                                                                                ASPP结构                                                        

                              

                                                                   

6、DeepLab v3(Rethinking Atrous Convolution for Semantic Image Segmentation)

DCNN(ASPP+BN)

 相应连接:Arxiv

在本工作中,我们再次讨论空洞卷积,一个显式调整过滤器视野,同时控制特征相应分辨率的强大工具。为了解决多尺度目标的分割问题,我们串行/并行设计了能够捕捉多尺度上下文的模块,模块中采用不同的空洞率。此外,我们增强了先前提出的空洞空间金字塔池化模块,增加了图像级特征来编码全局上下文,使得模块可以在多尺度下探测卷积特征。提出的 “DeepLab v3” 系统在没有 CRF 作为后处理的情况下显著提升了性能。

                                                                         改进的ASPP 

关键点:

1、在残差块中使用多网格方法(MultiGrid),从而引入不同的空洞率。

 2、在空洞空间金字塔池化模块中加入图像级(Image-level)特征,并且使用 BatchNormalization 技巧。

7、Mask R-CNN

相关连接:Arxiv

该方法被称为 Mask R-CNN,以Faster R-CNN 为基础,在现有的边界框识别分支基础上添加一个并行的预测目标掩码的分支。Mask R-CNN 很容易训练,仅仅在 Faster R-CNN 上增加了一点小开销,运行速度为 5fps。此外,Mask R-CNN 很容易泛化至其他任务,例如,可以使用相同的框架进行姿态估计。我们在 COCO 所有的挑战赛中都获得了最优结果,包括实例分割,边界框目标检测,和人关键点检测。在没有使用任何技巧的情况下,Mask R-CNN 在每项任务上都优于所有现有的单模型网络,包括 COCO 2016 挑战赛的获胜者。

                  

                              (左)Mask R-CNN 分割流程                                                                                                           (右)原始 Faster-RCNN 架构和辅助分割分支

 关键点:

1、在Faster R-CNN 上添加辅助分支以执行语义分割

2、对每个实例进行的 RoIPool 操作已经被修改为 RoIAlign ,它避免了特征提取的空间量化,因为在最高分辨率中保持空间特征不变对于语义分割很重要。

因为RoI Pooling并不是按照像素一一对齐的(pixel-to-pixel alignment),也许这对bbox的影响不是很大,但对于mask的精度却有很大影响。

3、Mask R-CNN 与 Feature Pyramid Networks(类似于PSPNet,它对特征使用了金字塔池化)相结合,在 MS COCO 数据集上取得了最优结果。

4、相比于FCIS,FCIS使用全卷机网络,同时预测物体classes、boxes、masks,速度更快,但是对于重叠物体的分割效果不好。

5、这与通常将FCN应用于像素级Softmax多重交叉熵损失的语义分段的做法不同。在这种情况下,掩码将在不同类别之间竞争。而mask rcnn,使用了其它方法没有的像素级的Sigmod二进制损失。我们通过实验发现,这种方法是改善目标分割效果的关键。 

6、使用ResNet-FPN进行特征提取的Mask R-CNN可以在精度和速度方面获得极大的提升。

注意点:

1、RoIAlign:RoIPool的目的是为了从RPN网络确定的ROI中导出较小的特征图(a small feature map,eg 7x7),ROI的大小各不相同,但是RoIPool后都变成了7x7大小。RPN网络会提出若干RoI的坐标以[x,y,w,h]表示,然后输入RoI Pooling,输出7x7大小的特征图供分类和定位使用。问题就出在RoI Pooling的输出大小是7x7上,如果RON网络输出的RoI大小是8*8的,那么无法保证输入像素和输出像素是一一对应,首先他们包含的信息量不同(有的是1对1,有的是1对2),其次他们的坐标无法和输入对应起来(1对2的那个RoI输出像素该对应哪个输入像素的坐标?)。这对分类没什么影响,但是对分割却影响很大。RoIAlign的输出坐标使用插值算法得到,不再量化;每个grid中的值也不再使用max,同样使用差值算法。

RoIWarp与RoIPool效果差不多,比RoIAlign差得多。这突出表明正确的对齐是关键。

2、FPN图像金字塔网络

FPN能很好的处理小目标:1、FPN关注上下文信息     2、增加小目标特征映射分辨率(在大feature map上有更多的小目标的特征)

     

(a)每层都是图像金字塔:缺点是计算量大,需要大量的内存;优点是可以获得较好的检测精度。

(b)每层都是特征金字塔:高层关注语义信息,底层关注细节信息,这里这关注高层容易造成细节丢失。

(c)它的优点是在不同的层上面输出对应的目标,不需要经过所有的层才输出对应的目标(即对于有些目标来说,不需要进行多余的前向操作),这样可以在一定程度上对网络进行加速操作,同时可以提高算法的检测性能。它的缺点是获得的特征不鲁棒,都是一些弱特征(因为很多的特征都是从较浅的层获得的)。

(d)首先我们在输入的图像上进行深度卷积,然后对Layer2上面的特征进行降维操作(即添加一层1x1的卷积层),对Layer4上面的特征就行上采样操作,使得它们具有相应的尺寸,然后对处理后的Layer2和处理后的Layer4执行加法操作(对应元素相加),将获得的结果输入到Layer5中去。其背后的思路是为了获得一个强语义信息,这样可以提高检测性能。

3、The Spatial Pyramid Pooling Layer 空间金字塔池化

        

8、RefineNet

RefineNet可以分为三个主要部分:

1. 不同尺度(也可能只有一个输入尺度)的特征输入首先经过两个Residual模块的处理;

2. 之后是不同尺寸的特征进行融合。当然如果只有一个输入尺度,该模块则可以省去。所有特征上采样至最大的输入尺寸,然后进行加和。上采样之前的卷积模块是为了调整不同特征的数值尺度;

3. 最后是一个链式的pooling模块。其设计本意是使用侧支上一系列的pooling来获取背景信息(通常尺寸较大)。直连通路上的ReLU可以在不显著影响梯度流通的情况下提高后续pooling的性能,同时不让网络的训练对学习率很敏感。最后再经过一个Residual模块即得RefineNet的输出。

9、PSPNet(PSPNet: Pyramid Scene Parsing Network)

相关连接:Arxiv

在本文中,我们利用基于不同区域的上下文信息集合,通过我们的金字塔池化模块,使用提出的金字塔场景解析网络(PSPNet)来发挥全局上下文信息的能力。我们的全局先验表征在场景解析任务中产生了良好的质量结果,而 PSPNet 为像素级的预测提供了一个更好的框架,该方法在不同的数据集上达到了最优性能。它首次在2016 ImageNet 场景解析挑战赛,PASCAL VOC 2012 基准和 Cityscapes 基准中出现。

                                                                                                                                       PSPNet 架构

关键点:

1、PSPNet 通过引入空洞卷积来修改基础的 ResNet 架构,特征经过最初的池化,在整个编码器网络中以相同的分辨率进行处理(原始图像输入的1/4),直到它到达空间池化模块。

2、在 ResNet 的中间层中引入辅助损失,以优化整体学习。

3、在修改后的 ResNet 编码器顶部的空间金字塔池化聚合全局上下文。

原文地址:https://www.cnblogs.com/hotsnow/p/10801703.html