即便是更复杂的DeepLab v3+依然也是这个基本套路。php
网络 | 父辈 | 生辰 | 增长的结构 | 丢弃的结构 | 优点 | 劣势 | ||||
---|---|---|---|---|---|---|---|---|---|---|
VGG16 | FCN的灵感来源 | |||||||||
FCN | VGG16 | 2014 | 一个Deconv层(从无到有) | 全部fc层 | 简单 | 粗糙 | ||||
DeconvNet | FCN | 2015 | Unpooling层(从无到有)、多个Deconv层(层数增长)、fc层(从无到有) | |||||||
SegNet | DeconvNet | 2016 | 每一个max_pooling的max索引 | 全部fc层 | ||||||
DeepLab | FCN | |||||||||
PSPNet | ||||||||||
Mask-RCNN | 2017 | 真正作到像素级 |
DeepLabhtml
DeconvNet前端
PSPNetgit
Mask-RCNNgithub
将不一样分属不一样物体的像素区域分开。
如前景与后景分割开,狗的区域与猫的区域与背景分割开。算法
在普通分割的基础上,分类出每一块区域的语义(即这块区域是什么物体)。
如把画面中的全部物体都指出它们各自的类别。spring
在语义分割的基础上,给每一个物体编号。
如这个是该画面中的狗A,那个是画面中的狗B。apache
图像的语义分割(Semantic Segmentation)是计算机视觉中很是重要的任务。它的目标是为图像中的每一个像素分类。若是可以快速准去地作图像分割,不少问题将会迎刃而解。所以,它的应用领域就包括但不限于:自动驾驶、图像美化、三维重建等等。后端
语义分割是一个很是困难的问题,尤为是在深度学习以前。深度学习使得图像分割的准确率提升了不少,下面咱们就总结一下近年来最具备表明性的方法和论文。api
咱们介绍的第一篇论文是Fully Convolutional Networks for Semantic Segmentation,简称FCN。这篇论文是第一篇成功使用深度学习作图像语义分割的论文。论文的主要贡献有两点:
这是神经网络作语义分割的开山之做,需完全理解。
DeepLab有v1 v2 v3,第一篇名字叫作DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs。这一系列论文引入了如下几点比较重要的方法:
第一个是带洞卷积,英文名叫作Dilated Convolution,或者Atrous Convolution。带洞卷积实际上就是普通的卷积核中间插入了几个洞,以下图。
它的运算量跟普通卷积保持同样,好处是它的“视野更大了”,好比普通3x3卷积的结果的视野是3x3,插入一个洞以后的视野是5x5。视野变大的做用是,在特征图缩小到一样倍数的状况下能够掌握更多图像的全局信息,这在语义分割中很重要。
Pyramid Scene Parsing Network的核心贡献是Global Pyramid Pooling,翻译成中文叫作全局金字塔池化。它将特征图缩放到几个不一样的尺寸,使得特征具备更好地全局和多尺度信息,这一点在准确率提高上上很是有用。
其实不光是语义分割,金字塔多尺度特征对于各种视觉问题都是挺有用的。
Mask R-CNN是大神何凯明的力做,将Object Detection与Semantic Segmentation合在了一块儿作。它的贡献主要是如下几点。
第一,神经网络有了多个分支输出。Mask R-CNN使用相似Faster R-CNN的框架,Faster R-CNN的输出是物体的bounding box和类别,而Mask R-CNN则多了一个分支,用来预测物体的语义分割图。也就是说神经网络同时学习两项任务,能够互相促进。
第二,在语义分割中使用Binary Mask。原来的语义分割预测类别须要使用0 1 2 3 4等数字表明各个类别。在Mask R-CNN中,检测分支会预测类别。这时候分割只须要用0 1预测这个物体的形状面具就好了。
第三,Mask R-CNN提出了RoiAlign用来替换Faster R-CNN中的RoiPooling。RoiPooling的思想是将输入图像中任意一块区域对应到神经网络特征图中的对应区域。RoiPooling使用了化整的近似来寻找对应区域,致使对应关系与实际状况有偏移。这个偏移在分类任务中能够容忍,但对于精细度更高的分割则影响较大。
为了解决这个问题,RoiAlign再也不使用化整操做,而是使用线性插值来寻找更精准的对应区域。效果就是能够获得更好地对应。实验也证实了效果不错。下面展现了与以前方法的对比,下面的图是Mask R-CNN,能够看出精细了不少。
U-Net是原做者参加ISBI Challenge提出的一种分割网络,可以适应很小的训练集(大约30张图)。U-Net与FCN都是很小的分割网络,既没有使用空洞卷积,也没有后接CRF,结构简单。
图9 U-Net网络结构图
整个U-Net网络结构如图9,相似于一个大大的U字母:首先进行Conv+Pooling下采样;而后Deconv反卷积进行上采样,crop以前的低层feature map,进行融合;而后再次上采样。重复这个过程,直到得到输出388x388x2的feature map,最后通过softmax得到output segment map。整体来讲与FCN思路很是相似。
为什么要提起U-Net?是由于U-Net采用了与FCN彻底不一样的特征融合方式:拼接!
图10 U-Net concat特征融合方式
与FCN逐点相加不一样,U-Net采用将特征在channel维度拼接在一块儿,造成更“厚”的特征。因此:
语义分割网络在特征融合时也有2种办法:
图像语义分割,简单而言就是给定一张图片,对图片上的每个像素点分类
从图像上来看,就是咱们须要将实际的场景图分割成下面的分割图:
不一样颜色表明不一样类别。通过阅读“大量”论文和查看PASCAL VOC Challenge performance evaluation server,发现图像语义分割从深度学习引入这个任务(FCN)到如今而言,一个通用的框架已经大概肯定了。即:
前端使用FCN进行特征粗提取,后端使用CRF/MRF优化前端的输出,最后获得分割图。
咱们分类使用的网络一般会在最后链接几层全链接层,它会将原来二维的矩阵(图片)压扁成一维的,从而丢失了空间信息,最后训练输出一个标量,这就是咱们的分类标签。
而图像语义分割的输出须要是个分割图,且不论尺寸大小,可是至少是二维的。因此,咱们须要丢弃全链接层,换上全卷积层,而这就是全卷积网络了。具体定义请参看论文:Fully Convolutional Networks for Semantic Segmentation
此处的FCN特指Fully Convolutional Networks for Semantic Segmentation论文中提出的结构,而非广义的全卷积网络。
做者的FCN主要使用了三种技术:
卷积化
卷积化便是将普通的分类网络,好比VGG16,ResNet50/101等网络丢弃全链接层,换上对应的卷积层便可。
上采样
此处的上采样便是反卷积(Deconvolution)。固然关于这个名字不一样框架不一样,Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose。CS231n这门课中说,叫conv_transpose更为合适。
众所诸知,普通的池化(为何这儿是普通的池化请看后文)会缩小图片的尺寸,好比VGG16 五次池化后图片被缩小了32倍。为了获得和原图等大的分割图,咱们须要上采样/反卷积。
反卷积和卷积相似,都是相乘相加的运算。只不事后者是多对一,前者是一对多。而反卷积的前向和后向传播,只用颠倒卷积的先后向传播便可。因此不管优化仍是后向传播算法都是没有问题。图解以下:
可是,虽然文中说是可学习的反卷积,可是做者实际代码并无让它学习,可能正是由于这个一对多的逻辑关系。代码以下:
layer { name: "upscore" type: "Deconvolution" bottom: "score_fr" top: "upscore" param { lr_mult: 0 } convolution_param { num_output: 21 bias_term: false kernel_size: 64 stride: 32 } }
能够看到lr_mult被设置为了0.
跳跃结构
(这个奇怪的名字是我翻译的,好像通常叫忽略链接结构)这个结构的做用就在于优化结果,由于若是将全卷积以后的结果直接上采样获得的结果是很粗糙的,因此做者将不一样池化层的结果进行上采样以后来优化输出。具体结构以下:
而不一样上采样结构获得的结果对好比下:
固然,你也能够将pool1, pool2的输出再上采样输出。不过,做者说了这样获得的结果提高并不大。
这是第一种结构,也是深度学习应用于图像语义分割的开山之做,因此得了CVPR2015的最佳论文。可是,仍是有一些处理比较粗糙的地方,具体和后面对比就知道了。
这样的结构总结在这儿,只是我以为结构上比较优雅,它获得的结果不必定比上一种好。
SegNet
DeconvNet
这样的对称结构有种自编码器的感受在里面,先编码再解码。这样的结构主要使用了反卷积和上池化。即:
反卷积如上。而上池化的实现主要在于池化时记住输出值的位置,在上池化时再将这个值填回原来的位置,其余位置填0即OK。
接下来介绍一个很成熟优雅的结构,以致于如今的不少改进是基于这个网络结构的进行的。
首先这里咱们将指出一个第一个结构FCN的粗糙之处:为了保证以后输出的尺寸不至于过小,FCN的做者在第一层直接对原图加了100的padding,可想而知,这会引入噪声。
而怎样才能保证输出的尺寸不会过小而又不会产生加100 padding这样的作法呢?可能有人会说减小池化层不就好了,这样理论上是能够的,可是这样直接就改变了原先可用的结构了,并且最重要的一点是就不能用之前的结构参数进行fine-tune了。因此,Deeplab这里使用了一个很是优雅的作法:将pooling的stride改成1,再加上 1 padding。这样池化后的图片尺寸并未减少,而且依然保留了池化整合特征的特性。
可是,事情还没完。由于池化层变了,后面的卷积的感觉野也对应的改变了,这样也不能进行fine-tune了。因此,Deeplab提出了一种新的卷积,带孔的卷积:Atrous Convolution.即:
而具体的感觉野变化以下:
a为普通的池化的结果,b为“优雅”池化的结果。咱们设想在a上进行卷积核尺寸为3的普通卷积,则对应的感觉野大小为7.而在b上进行一样的操做,对应的感觉野变为了5.感觉野减少了。可是若是使用hole为1的Atrous Convolution则感觉野依然为7.
因此,Atrous Convolution可以保证这样的池化后的感觉野不变,从而能够fine tune,同时也能保证输出的结果更加精细。即:
总结
这里介绍了三种结构:FCN, SegNet/DeconvNet,DeepLab。固然还有一些其余的结构方法,好比有用RNN来作的,还有更有实际意义的weakly-supervised方法等等。
终于到后端了,后端这里会讲几个场,涉及到一些数学的东西。个人理解也不是特别深入,因此欢迎吐槽。
全链接条件随机场(DenseCRF)
对于每一个像素具备类别标签还有对应的观测值,这样每一个像素点做为节点,像素与像素间的关系做为边,即构成了一个条件随机场。并且咱们经过观测变量来推测像素对应的类别标签。条件随机场以下:
条件随机场符合吉布斯分布:(此处的即上面说的观测值)
其中的是能量函数,为了简便,如下省略全局观测:
其中的一元势函数即来自于前端FCN的输出。而二元势函数以下:
二元势函数就是描述像素点与像素点之间的关系,鼓励类似像素分配相同的标签,而相差较大的像素分配不一样标签,而这个“距离”的定义与颜色值和实际相对距离有关。因此这样CRF可以使图片尽可能在边界处分割。
而全链接条件随机场的不一样就在于,二元势函数描述的是每个像素与其余全部像素的关系,因此叫“全链接”。
关于这一堆公式你们随意理解一下吧... ...而直接计算这些公式是比较麻烦的(我想也麻烦),因此通常会使用平均场近似方法进行计算。而平均场近似又是一堆公式,这里我就不给出了(我想你们也不太愿意看),愿意了解的同窗直接看论文吧。
CRFasRNN
最开始使用DenseCRF是直接加在FCN的输出后面,可想这样是比较粗糙的。并且在深度学习中,咱们都追求end-to-end的系统,因此CRFasRNN这篇文章将DenseCRF真正结合进了FCN中。
这篇文章也使用了平均场近似的方法,由于分解的每一步都是一些相乘相加的计算,和普通的加减(具体公式仍是看论文吧),因此能够方便的把每一步描述成一层相似卷积的计算。这样便可结合进神经网络中,而且先后向传播也不存在问题。
固然,这里做者还将它进行了迭代,不一样次数的迭代获得的结果优化程度也不一样(通常取10之内的迭代次数),因此文章才说是as RNN。优化结果以下:
马尔科夫随机场(MRF)
在Deep Parsing Network中使用的是MRF,它的公式具体的定义和CRF相似,只不过做者对二元势函数进行了修改:
其中,做者加入的为label context,由于只是定义了两个像素同时出现的频率,而能够对一些状况进行惩罚,好比,人可能在桌子旁边,可是在桌子下面的可能性就更小一些。因此这个量能够学习不一样状况出现的几率。而原来的距离只定义了两个像素间的关系,做者在这儿加入了个triple penalty,即还引入了附近的,这样描述三方关系便于获得更充足的局部上下文。具体结构以下:
这个结构的优势在于:
高斯条件随机场(G-CRF)
这个结构使用CNN分别来学习一元势函数和二元势函数。这样的结构是咱们更喜欢的:
而此中的能量函数又不一样于以前:
而当是对称正定时,求的最小值等于求解:
而G-CRF的优势在于:
完结撒花
[1]Fully Convolutional Networks for Semantic Segmentation
[2]Learning Deconvolution Network for Semantic Segmentation
[3]Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials
[4]Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
[5]Conditional Random Fields as Recurrent Neural Networks
[7]Semantic Image Segmentation via Deep Parsing Network
[8]Fast, Exact and Multi-Scale Inference for Semantic Image Segmentation with Deep Gaussian CRFs
[9]SegNet
Semantic segmentation
Instance aware segmentation
Satellite images segmentation
Video segmentation
Autonomous driving
Annotation Tools: