转载
U-Net
U-Net原做者官网前端
U-Net是原做者参加ISBI Challenge提出的一种分割网络,可以适应很小的训练集(大约30张图)。U-Net与FCN都是很小的分割网络,既没有使用空洞卷积,也没有后接CRF,结构简单。git
图9 U-Net网络结构图github
整个U-Net网络结构如图9,相似于一个大大的U字母:首先进行Conv+Pooling下采样;而后Deconv反卷积进行上采样,crop以前的低层feature map,进行融合;而后再次上采样。重复这个过程,直到得到输出388x388x2的feature map,最后通过softmax得到output segment map。整体来讲与FCN思路很是相似。算法
为什么要提起U-Net?是由于U-Net采用了与FCN彻底不一样的特征融合方式:拼接!spring
图10 U-Net concat特征融合方式apache
与FCN逐点相加不一样,U-Net采用将特征在channel维度拼接在一块儿,造成更“厚”的特征。因此:后端
语义分割网络在特征融合时也有2种办法:api
- FCN式的逐点相加,对应caffe的EltwiseLayer层,对应tensorflow的tf.add()
- U-Net式的channel维度拼接融合,对应caffe的ConcatLayer层,对应tensorflow的tf.concat()
综述介绍
图像语义分割,简单而言就是给定一张图片,对图片上的每个像素点分类
从图像上来看,就是咱们须要将实际的场景图分割成下面的分割图:
不一样颜色表明不一样类别。通过阅读“大量”论文和查看PASCAL VOC Challenge performance evaluation server,发现图像语义分割从深度学习引入这个任务(FCN)到如今而言,一个通用的框架已经大概肯定了。即:
- FCN-全卷积网络
- CRF-条件随机场
- MRF-马尔科夫随机场
前端使用FCN进行特征粗提取,后端使用CRF/MRF优化前端的输出,最后获得分割图。
前端
为何须要FCN?
咱们分类使用的网络一般会在最后链接几层全链接层,它会将原来二维的矩阵(图片)压扁成一维的,,最后训练输出一个标量,这就是咱们的分类标签。
而图像语义分割的输出须要是个分割图,且不论尺寸大小,可是至少是二维的。因此,咱们须要丢弃全链接层,换上全卷积层,而这就是全卷积网络了。具体定义请参看论文:Fully Convolutional Networks for Semantic Segmentation
前端结构
FCN
此处的FCN特指Fully Convolutional Networks for Semantic Segmentation论文中提出的结构,而非广义的全卷积网络。
做者的FCN主要使用了三种技术:
- 卷积化(Convolutional)
- 上采样(Upsample)
- 跳跃结构(Skip Layer)
卷积化
卷积化便是将普通的分类网络,好比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
这样的结构总结在这儿,只是我以为结构上比较优雅,它获得的结果不必定比上一种好。
SegNet
DeconvNet
这样的对称结构有种自编码器的感受在里面,先编码再解码。这样的结构主要使用了反卷积和上池化。即:
反卷积如上。而上池化的实现主要在于池化时记住输出值的位置,在上池化时再将这个值填回原来的位置,其余位置填0即OK。
DeepLab
接下来介绍一个很成熟优雅的结构,以致于如今的不少改进是基于这个网络结构的进行的。
首先这里咱们将指出一个第一个结构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,即还引入了附近的,这样描述三方关系便于获得更充足的局部上下文。具体结构以下:
这个结构的优势在于:
- 将平均场构形成了CNN
- 联合训练而且能够one-pass inference,而不用迭代
高斯条件随机场(G-CRF)
这个结构使用CNN分别来学习一元势函数和二元势函数。这样的结构是咱们更喜欢的:
而此中的能量函数又不一样于以前:
而当是对称正定时,求的最小值等于求解:
而G-CRF的优势在于:
感悟
- FCN更像一种技巧。随着基本网络(如VGG, ResNet)性能的提高而不断进步。
- 深度学习+几率图模型(PGM)是一种趋势。其实DL说白了就是进行特征提取,而PGM可以从数学理论很好的解释事物本质间的联系。
- 几率图模型的网络化。由于PGM一般不太方便加入DL的模型中,将PGM网络化后可以是PGM参数自学习,同时构成end-to-end的系统。
完结撒花
引用
[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
[6]DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
[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
图像分割 (Image Segmentation) 重大资源:
入门学习
- A 2017 Guide to Semantic Segmentation with Deep Learning 概述——用深度学习作语义分割
- 从全卷积网络到大型卷积核:深度学习的语义分割全指南
- Fully Convolutional Networks
- 语义分割中的深度学习方法全解:从FCN、SegNet到各代DeepLab
- 图像语义分割之FCN和CRF
- 从特斯拉到计算机视觉之「图像语义分割」
- 计算机视觉之语义分割
- Segmentation Results: VOC2012 PASCAL语义分割比赛排名
进阶论文
- U-Net [https://arxiv.org/pdf/1505.04597.pdf]
- SegNet [https://arxiv.org/pdf/1511.00561.pdf]
- DeepLab [https://arxiv.org/pdf/1606.00915.pdf]
- FCN [https://arxiv.org/pdf/1605.06211.pdf]
- ENet [https://arxiv.org/pdf/1606.02147.pdf]
- LinkNet [https://arxiv.org/pdf/1707.03718.pdf]
- DenseNet [https://arxiv.org/pdf/1608.06993.pdf]
- Tiramisu [https://arxiv.org/pdf/1611.09326.pdf]
- DilatedNet [https://arxiv.org/pdf/1511.07122.pdf]
- PixelNet [https://arxiv.org/pdf/1609.06694.pdf]
- ICNet [https://arxiv.org/pdf/1704.08545.pdf]
- ERFNet [http://www.robesafe.uah.es/personal/eduardo.romera/pdfs/Romera17iv.pdf]
- RefineNet [https://arxiv.org/pdf/1611.06612.pdf]
- PSPNet [https://arxiv.org/pdf/1612.01105.pdf]
- CRFasRNN [http://www.robots.ox.ac.uk/%7Eszheng/papers/CRFasRNN.pdf]
- Dilated convolution [https://arxiv.org/pdf/1511.07122.pdf]
- DeconvNet [https://arxiv.org/pdf/1505.04366.pdf]
- FRRN [https://arxiv.org/pdf/1611.08323.pdf]
- GCN [https://arxiv.org/pdf/1703.02719.pdf]
- DUC, HDC [https://arxiv.org/pdf/1702.08502.pdf]
- Segaware [https://arxiv.org/pdf/1708.04607.pdf]
- Semantic Segmentation using Adversarial Networks [https://arxiv.org/pdf/1611.08408.pdf]
综述
- A Review on Deep Learning Techniques Applied to Semantic Segmentation Alberto Garcia-Garcia, Sergio Orts-Escolano, Sergiu Oprea, Victor Villena-Martinez, Jose Garcia-Rodriguez 2017
- Computer Vision for Autonomous Vehicles: Problems, Datasets and State-of-the-Art
- 基于内容的图像分割方法综述 姜 枫 顾 庆 郝慧珍 李 娜 郭延文 陈道蓄 2017
Tutorial
- Semantic Image Segmentation with Deep Learning
- A 2017 Guide to Semantic Segmentation with Deep Learning
- Image Segmentation with Tensorflow using CNNs and Conditional Random Fields
视频教程
- CS231n: Convolutional Neural Networks for Visual Recognition Lecture 11 Detection and Segmentation
- Machine Learning for Semantic Segmentation - Basics of Modern Image Analysis
代码
Semantic segmentation
- U-Net (https://arxiv.org/pdf/1505.04597.pdf)
- SegNet (https://arxiv.org/pdf/1511.00561.pdf)
- DeepLab (https://arxiv.org/pdf/1606.00915.pdf)
- FCN (https://arxiv.org/pdf/1605.06211.pdf)
- ENet (https://arxiv.org/pdf/1606.02147.pdf)
- LinkNet (https://arxiv.org/pdf/1707.03718.pdf)
- DenseNet (https://arxiv.org/pdf/1608.06993.pdf)
- Tiramisu (https://arxiv.org/pdf/1611.09326.pdf)
- DilatedNet (https://arxiv.org/pdf/1511.07122.pdf)
- PixelNet (https://arxiv.org/pdf/1609.06694.pdf)
- ICNet (https://arxiv.org/pdf/1704.08545.pdf)
- ERFNet (http://www.robesafe.uah.es/personal/eduardo.romera/pdfs/Romera17iv.pdf)
- RefineNet (https://arxiv.org/pdf/1611.06612.pdf)
- PSPNet (https://arxiv.org/pdf/1612.01105.pdf)
- CRFasRNN (http://www.robots.ox.ac.uk/%7Eszheng/papers/CRFasRNN.pdf)
- Dilated convolution (https://arxiv.org/pdf/1511.07122.pdf)
- DeconvNet (https://arxiv.org/pdf/1505.04366.pdf)
- FRRN (https://arxiv.org/pdf/1611.08323.pdf)
- GCN (https://arxiv.org/pdf/1703.02719.pdf)
- DUC, HDC (https://arxiv.org/pdf/1702.08502.pdf)
- Segaware (https://arxiv.org/pdf/1708.04607.pdf)
- Semantic Segmentation using Adversarial Networks (https://arxiv.org/pdf/1611.08408.pdf)
Instance aware segmentation
- FCIS [https://arxiv.org/pdf/1611.07709.pdf]
- MNC [https://arxiv.org/pdf/1512.04412.pdf]
- DeepMask [https://arxiv.org/pdf/1506.06204.pdf]
- SharpMask [https://arxiv.org/pdf/1603.08695.pdf]
- Mask-RCNN [https://arxiv.org/pdf/1703.06870.pdf]
- RIS [https://arxiv.org/pdf/1511.08250.pdf]
- FastMask [https://arxiv.org/pdf/1612.08843.pdf]
Satellite images segmentation
Video segmentation
Autonomous driving
Annotation Tools:
Datasets
- Stanford Background Dataset[http://dags.stanford.edu/projects/scenedataset.html]
- Sift Flow Dataset[http://people.csail.mit.edu/celiu/SIFTflow/]
- Barcelona Dataset[http://www.cs.unc.edu/~jtighe/Papers/ECCV10/]
- Microsoft COCO dataset[http://mscoco.org/]
- MSRC Dataset[http://research.microsoft.com/en-us/projects/objectclassrecognition/]
- LITS Liver Tumor Segmentation Dataset[https://competitions.codalab.org/competitions/15595]
- KITTI[http://www.cvlibs.net/datasets/kitti/eval_road.php]
- Stanford background dataset[http://dags.stanford.edu/projects/scenedataset.html]
- Data from Games dataset[https://download.visinf.tu-darmstadt.de/data/from_games/]
- Human parsing dataset[https://github.com/lemondan/HumanParsing-Dataset]
- Silenko person database[https://github.com/Maxfashko/CamVid]
- Mapillary Vistas Dataset[https://www.mapillary.com/dataset/vistas]
- Microsoft AirSim[https://github.com/Microsoft/AirSim]
- MIT Scene Parsing Benchmark[http://sceneparsing.csail.mit.edu/]
- COCO 2017 Stuff Segmentation Challenge[http://cocodataset.org/#stuff-challenge2017]
- ADE20K Dataset[http://groups.csail.mit.edu/vision/datasets/ADE20K/]
- INRIA Annotations for Graz-02[http://lear.inrialpes.fr/people/marszalek/data/ig02/]
比赛
- MSRC-21 [http://rodrigob.github.io/are_we_there_yet/build/semantic_labeling_datasets_results.html]
- Cityscapes [https://www.cityscapes-dataset.com/benchmarks/]
- VOC2012 [http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?challengeid=11&compid=6]
领域专家
- Jonathan Long
- Liang-Chieh Chen
- Hyeonwoo Noh
- Bharath Hariharan
- Fisher Yu
- Vijay Badrinarayanan
- Guosheng Lin