2017年深度学习语义分割导读
总体概述
大多数的语义分割研究都是基于自然,或者说是实际世界的图片。虽然这些结果不能直接应用到医学图像中,但是这些研究更加的成熟,也有很多的借鉴意义。
本篇博客首先解释了什么是语义分割问题,给出了方法的概述,最后总结了一些有趣的论文。
在后续的博客中,我会解释为什么医学图片和自然图片不同,并且研究这些方法如何应用在代表医学图像的数据集上。
什么是语义分割
语义分割是在像素层面上理解图片,比如我们想要把图片中的每个像素都分到一个目标类中。如下图所示:
除了识别摩托车和车上的人以外,我们也需要描述每个类别之间的边界。因此,不像分类问题,我们的模型要有基于像素预测的能力。
这些方法有什么区别
在深度学习统治计算机视觉领域之前,人们一般用TextonForest和Random Forest based classifiers来做语义分割。在图片分类问题上,CNN卷积神经网络在分割问题上有了很多成功的例子。
patch classification是深度学习方法中一个流行的方法,主要思想是对于每一个像素点,都用包含它的图片进行分类,然后用这个结果来预测像素点的分类。使用这个方法的原因是深度学习分类网络的输入需要是固定大小的图片。
在2014年,FCN全卷积网络在预测像素的CNN中流行起来。全卷积网络没有任何全连接层,从而图片的输入可以是任何大小的,比上面的patch classification方法快。几乎所有后来的语义分割最新研究都是采用了这个方法。
除了全连接层以外,另一个使用CNN的问题是池化层。池化层增加了感受野,能够汇聚信息,但同时也舍弃了位置信息。然而语义分割需要准确的类图索引,需要保留这些位置信息。有两个不同的结构来处理这个问题。
其中一个是编码-解码(encoder-decoder)结构。编码用池化层来逐渐减少空间维度,解码来恢复目标细节和空间维度。通常编码和解码之间有直接的连接来更好的恢复目标的细节。U-Net就是这类一个流行的结构。
第二种结构使用所谓的空洞卷积dilated/atrous convolutions,代替了池化层来减少空间维度增加感受野,同时也保留了位置信息。
条件随机场Conditional Random Field (CRF) postprocessing通常用来提升分割的效果。条件随机场是基于潜在图像强度来平滑分割的图像模型。通过观察相似强度的像素,认为同一类的像素强度相似。该方法能提升大概1-2%的分数。
总结一些有趣的论文
这个章节总结了自FCN以来一些有代表性的文章。这些结构都以VOC2012 evaluation server为基准。
FCN
Fully Convolutional Networks for Semantic Segmentation
提交时间:2014年11月14日
主要贡献
- 在语义分割问题中推广使用端到端(end to end)卷积神经网络
- 使用imagenet预训练模型到语义分割中
- 使用反卷积层进行上采样
- 用跳过连接来提高上采样的粗糙度
介绍
可以看到全连接层可以看作是和输入尺寸一样的卷积核进行卷积操作。这相当于最开始的分类网络,即输入一批重叠图片进行评估,但是这种方法效率更高,因为重叠的部分只计算了一次。虽然这个发现不只是在这篇论文中提出(overfeat, this post),但是显著提高了VOC2012的水平。
在卷积化imagenet预训练网络VGG的全连接层后,特征图仍然需要上采样,因为CNN中的池化操作减小了尺寸。不使用简单的双线性插值进行上采样,因为反卷积层能够学习到插值。这一层也叫做upconvolution, full convolution, transposed convolution或者fractionally-strided convolution。
然而,上采样(即使是反卷积层)生成的分割图很粗糙,因为池化过程中损失了太多的信息。因此需要shortcut/skip connections,捷径连接,类似于U-Net结构图中中间灰色的连接线,从更高分辨率的特征地图引入快捷/跳过连接。
Benchmarks(VOC2012)
Score | Comment | Source |
---|---|---|
62.2 | - | leaderboard |
67.2 | More momentum. Not described in paper | leaderboard |
评价
- 做出了很大的贡献,但是和现在的水平来比差距有点大
SegNet
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
提交时间:2015年11月2日
主要贡献
- 把最大池化转化为解码器来提高分割分辨率
介绍
FCN中卷积层和一些捷径连接连接产生粗糙的分割图。因此引入了更多的捷径连接。与复制FCN中的编码器功能不同,SegNet可以复制maxpooling中的索引。这使得SegNet比FCN更节省内存。
Benchmarks(VOC2012)
Score | Comment | Source |
---|---|---|
59.9 | - | leaderboard |
评价
- FCN和SegNet是最开始的编码解码结构
- SegNet的Benchmarks不好
Dilated Convolutions(空洞卷积)
Multi-Scale Context Aggregation by Dilated Convolutions
提交时间:2015年11月23日
主要贡献
- 使用空洞卷积,一个用来dense prediction(标注出图像中每个像素点的对象类别,要求不但给出具体目标的位置,还要描绘物体的边界,如图像分割、语义分割、边缘检测等等)的卷积层
- 提出多尺度内容聚合(multi scale aggregation)来提高dense prediction效果
介绍
池化可以增加感受野,来帮助分类网络。但是这对分割问题来说不是最好的,因为同时也减小了分辨率。因此作者提出了空洞卷积层,如下图所示:
空洞卷积层(在DeepLab中也称为atrous convolution带孔卷积)来增加感受野但是不减少空间尺寸。
移除预训练模型(在这里是VGG)的最后两个池化层,随后的卷积层用空洞卷积来代替。尤其是在pool-3和pool-4之间的卷积层是dilation为2的空洞卷积,在pool-4之后是dilation为4的空洞卷积。通过这个模块(论文中称之为frontend module),在没有增加参数数量的基础上实现了dense prediction。
另外还有一个模块(在论文中被称为context module)把frontend module的输出作为输入,单独用来训练。这个模块是不同dilation的空洞卷积层串联在一起,因此多尺度聚合,提高frontend的预测效果。
Benchmarks(VOC2012)
Score | Comment | Source |
---|---|---|
71.3 | frontend | reported in the paper |
73.5 | frontend + context | reported in the paper |
74.7 | frontend + context + CRF | reported in the paper |
75.3 | frontend + context + CRF-RNN | reported in the paper |
评价
- 注意到预测的分割图大小都是原图的八分之一。几乎所有的方法都是这样。然后通过内插的方式来得到最后的分割图。
DeepLab(v1 & v2)
v1 : Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
提交时间:2014年12月22日
提交时间:2016年6月2日
主要贡献
- 使用空洞卷积
- 提出带孔空间金字塔池化atrous spatial pyramid pooling (ASPP)
- 使用全连接条件随机场Fully connected CRF
介绍
空洞卷积能够增加感受野,而不增加参数数量。网络的修改如上面的空洞卷积论文。
通过将原始图像的多个重新缩放版本传递到并行CNN分支(图像金字塔)和/或通过使用具有不同采样率(ASPP)的多个平行的无规卷积层来实现多尺度处理。
结构化预测由完全连接的CRF完成。CRF作为后处理步骤被分别训练/调整。
Benchmarks(VOC2012)
Score | Comment | Source |
---|---|---|
79.7 | ResNet-101 + atrous Convolutions + ASPP + CRF | leaderboard |
RefineNet
RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation
提交时间:2016年11月20日
主要贡献
- 编码解码结构,附带很好的解码块
- 所有组件都用残差连接设计
介绍
使用空洞卷积的方法并非没有缺点。空洞卷积运算代价高昂,需要大量的内存,因为它们必须应用于大量高分辨率的特征映射。这阻碍了对高分辨率预测的计算。例如,DeepLab的预测是原始输入的1 / 8。
因此,本文提出使用编码解码器架构。编码器部分是resnet-101块。译码器有精细化RefineNet 的块,它连接/融合高分辨率的特征,从以前的精化块的编码器和低分辨率特征。
每个精细化块都有一个组件,它通过对低分辨率特征进行上采样和一个基于重复的5 x 5步长1的池化层来获得环境,来融合多分辨率特征。每个组件都使用了身份映射模式之后的残差连接设计。
Benchmarks(VOC2012)
Score | Comment | Source |
---|---|---|
84.2 | Uses CRF, Multiscale inputs, COCO pretraining | leaderboard |
PSPNet
提交时间:2016年12月4日
主要贡献
- 提出了金字塔池化模块来汇聚信息
- 使用辅助损失
介绍
全局场景类别很重要,因为它提供了细分类分布的线索。金字塔池化模块通过应用大型的内核池化层来捕获这些信息。
在空洞卷积论文中用空洞卷积来修改Resnet,并增加了一个金字塔池化模块。该模块将不同大小(和输入一样大,输入的一半,小部分)卷积核来并行地卷积经过不同大小池化后的特征图,之后通过上采样成一样的尺寸,最后和ResNet输入的特征图一起合并起来。
一种辅助损失,附加于主分支上的损失,是在ResNet的第4级后应用的(i。e输入到金字塔池模块。这个想法也被称为其他地方的中间监督。
Benchmarks(VOC2012)
Score | Comment | Source |
---|---|---|
85.4 | MSCOCO pretraining, multi scale input, no CRF | leaderboard |
82.6 | no MSCOCO pretraining, multi scale input, no CRF | reported in the paper |
Large Kernel Matters
Large Kernel Matters – Improve Semantic Segmentation by Global Convolutional Network
提交时间:2017年3月8日
主要贡献
- 提出了一种使用大卷积核的编码解码结构
介绍
语义分割需要分割和对分割对象的分类。因为分割结构中不能使用全连接层,所以就用很大的卷积核来代替。
另一个采用大卷积核的理由是虽然很深的网络,像ResNet有很大的感受野,但是[实验}(https://arxiv.org/abs/1412.6856)显示网络倾向于从更小的区域收集信息(有效感受野valid receptive filed)。
更大的卷积核计算开销更大,需要很多的参数。Therefore, k x k convolution is approximated with sum of 1 x k + k x 1 and k x 1 and 1 x k convolutions. 论文中这个模块叫做全局卷积网络Global Convolutional Network (GCN)。
说到结构,ResNet(没有空洞卷积)构成了结构的编码部分,解码部分是GCN和反卷积。同时也使用了一个简单残差块(BR)。
Benchmarks(VOC2012)
Score | Comment | Source |
---|---|---|
82.2 | - | reported in the paper |
83.6 | Improved training, not described in the paper | leaderboard |
DeepLab v3
Rethinking Atrous Convolution for Semantic Image Segmentation
提交时间:2017年6月17日
主要贡献
- 改进的带孔空间金字塔池化(ASPP)
- 串联空洞卷积构成的模块
介绍
在DeepLab v2和空洞卷积中,对ResNet模型做了修改,从而可以使用空洞卷积。改进的ASPP涉及图像级特征的连接,1x1卷积和3个具有不同rate的3×3空洞卷积。在每个并行卷积层之后使用Batch normalization。
串联模块是一个resnet块,除了组件卷积层用不同rate的空洞卷积。这个模块类似于在空洞卷积一文中使用的内容汇聚模块,但是这直接应用于中间特征图而不是信念图(信念图是具有等于数量类的信道的最终CNN特征图)。
独立测评这两种模型并且都没有使用其他提高性能的方法。在没有使用CRF的情况下,它们的性能差不多,ASPP的性能较好。
这两种模型的性能都要比DeepLab v2好。作者指出batch normalization和更好的方式进行编码的多尺度汇聚是提升的主要原因。
Benchmarks(VOC2012)
Score | Comment | Source |
---|---|---|
85.7 | used ASPP (no cascaded modules) | leaderboard |
参考资料
http://blog.qure.ai/notes/semantic-segmentation-deep-learning-review