【深度学习】基于深度学习的语义分割综述


由于笔者的研究方向涉及语义分割(Semantic Segmentation),近期在调研的时候发现一篇很不错的综述文章,原文为英文,借CSDN的平台将其翻译分享。如下为原文信息:

作者:Sasank Chilamkurthy
时间:2017年7月5日
题目A 2017 Guide to Semantic Segmentation with Deep Learning

注意:翻译中增加了笔者自己的一些注释和理解,并不完全等同于原文。若要详细了解原文内容,可直接阅读原文。

前言

Qure(作者所在机构)致力于解决语义分割和目标检测问题,所以我们对回顾相关的最新研究成果相当感兴趣。

在这篇文章中,我回顾了语义分割领域的主要文献。它们中的大部分都采用真实世界的图片作为研究对象。虽然它们无法直接应用到医学图像领域,但基于自然界中真实图片的研究比医学图像的研究要成熟很多,所以我仍然对这些文献的方法做了回顾1

本文的组织结构如下:我首先解释了语义分割的含义,对相关方法做了概述,然后总结了部分感兴趣的论文方法。

在之后的文章中,我将解释为什么语义分割在医学图像中的应用不同于自然界的图像,并进一步展示了从自然图像到医学图像的应用方法。

语义分割的含义

语义分割从像素级别上理解图像,即我们希望为图像中的每一个像素确定一个对象类别。例如下面的两张图像,上面的为原始图像,下面的为语义分割结果(图像来源)。
在这里插入图片描述
在这里插入图片描述
区分于仅仅识别图像中的摩托车和骑在摩托车上的人,我们还需要勾勒出每个类别的边界。因此,不同于分类任务,我们需要从模型中获取到像素级别的识别信息。

VOC2012MSCOCO是语义分割问题中最重要的两个数据集。

语义分割的方法

随机森林

在深度学习流行之前,人们主要采用诸如TextonForest基于随机森林的分类器方法来解决语义分割问题。和图像分类一样,卷积网络(Convolutional Neural Network)也在分割问题上取得了巨大的成功。

patch classification

一个比较原始的深度学习处理方式是基于像素块来分类的,也就是基于某个像素周围像素组成的像素块(patch)来判断某个像素的类别,称之为patch classification。这样做的一个主要原因是当时采用的分类网络通常都有全连接层,要求使用固定尺寸的图像。

全卷积网络

在2014年,Long等人提出全卷积网络(Fully Connected Network),在不采用任何全连接层处理像素级别的分类任务。FCN可以接受任意大小的图像输入,并且速度比patch classification快很多。后来的几乎所有语义分割研究成果都以此为基础。

除了全连接层的影响以外,使用卷积网络(Convolutional Neural Networks, CNNs)的一个主要问题在于池化层(pooling layers)。池化层可以在丢失一部分位置信息的情况下增大感受视野并能够获取更广泛的上下文信息。但是,语义分割是每个像素和类别的映射关系,所以需要保留位置信息的。下面介绍解决这个问题的两种不同的改进架构。

第一种是编码 - 解码结构(encoder-decoder architecture)。编码层通过池化逐步减少空间维度信息,解码层逐步恢复对象细节和空间维度信息。通常来说,在编码层和解码层之间有称之为捷径的连接(shortcut connections),它们用于帮助解码层更好地恢复对象的细节。U-net就是此类方法中的一个典型例子,如下图所示:
在这里插入图片描述

第二种架构采用扩张卷积/空洞卷积(dilated/atrous convolutions),并且没有池化层,不通过pooling也能有较大的感受野看到更多的信息。如下图所示,当 r a t e = 1 rate=1 rate=1时就是普通卷积(来源):
在这里插入图片描述
条件随机场后处理(Conditional Random Field, CRF)通常用于改善分割效果。CRFs是基于周边像素进行“平滑”分割的图模型,其基本思想在于相似强度的像素更可能被标记为同一个类别。CRFs可以提高1~2%算法表现。下图为一个CRF的图解,(b)将分割结果作为CRF的输入,©(d)(e)是不同CRF算法,其中(e)被广泛应用(来源)。
在这里插入图片描述

在下一节中,我将总结一些语义分割方面从FCN开始演化的代表性论文。所有的这些论文都利用VOC2012评估服务器作为评价标准的。

典型方法小结

按照相关方法的发表时间先后顺序进行整理:

  1. FCN
  2. SegNet
  3. Dilated Convolutions
  4. DeepLab(v1 & v2)
  5. RefineNet
  6. PSPNet
  7. Large Kernel Matters
  8. DeepLab v3

对上述每一种方法,我列出了它们的贡献并加以解释,同时我也给出了它们在VOC2012数据集上的得分(平均交并比, mean IOU)。

FCN

Fully Convolutional Networks for Semantic Segmentation
Submitted on 14 Nov 2014
Arxiv Link

关键贡献

  • 使得端到端(end to end)的卷积网络在语义分割问题上流行起来
  • 重用imagenet预训练网络,使其可以用于分割任务
  • 采用反卷积层来上采样
  • 介绍跳跃层来改进上采样的失真问题

理解
在分类网络中,全连接层可以看做是卷积核覆盖整个输入区域的卷积层。这就相当于通过交错的像素块来评估原始的分类网络,但是由于在像素块之间的计算是共享的,所以相比来说效率更高。这篇文章在提高了在VOC2012上的实验效果。
在这里插入图片描述
对预训练的imagenet神经网络(比如VGG)的全连接层进行卷积化以后,由于池化的原因,特征映射图仍然需要利用反卷积层来进行上采样(unsample)操作。反卷积层可以学习插值的参数,而不是采用简单的双线性插值。反卷积层又被称为上卷积层(upconvolution)、全卷积层(full convolution)、换位卷积层(transposed convolution) 或者分数跨度卷积层(fractionally-strided convolution) 。

然而,由于在池化过程中丢失了一部分信息,导致上采样(即使利用了反卷积层)会产生较为粗糙的分割映射。因此,论文中又提到了在较高分辨率的特征映射图中抽取的跳跃层进行优化。然而,由于在池化过程中丢失了一部分信息,导致上采样(即使利用了反卷积层)会产生较为粗糙的分割映射。因此,论文中又提到了在较高分辨率的特征映射图中抽取的跳跃层进行优化。

得分
在这里插入图片描述
我的评价
本文可以称得上是重要的贡献,但现目前最新的方法已经较之提升了很多了。

SegNet

SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
Submitted on 2 Nov 2015
Arxiv Link

关键贡献

  • 最大池化转移到解码器的索引以提高分割分辨率(Maxpooling indices transferred to decoder to improve the segmentation resolution)

理解
尽管FCN中存在上卷积层和捷径连接,其也可能产生粗糙的分割结果。因此,SegNet引入了更多的捷径连接。不同于FCN那样复制解码器的功能,SegNet复制最大池化索引(indices from maxpooling)。上述特点使得SegNet更具内存效率。SegNet架构如下:
在这里插入图片描述
最大池化索引的复制原理如下:
在这里插入图片描述
得分
在这里插入图片描述

我的评价

  • FCN和SegNet是首先使用“编码-解码”结构的方法之一
  • SegNet得分不够,建议不使用

Dilated Convolution

Multi-Scale Context Aggregation by Dilated Convolutions
Submitted on 23 Nov 2015
Arxiv Link

关键贡献

  • 使用扩张卷积(dilated convolution),一种用于密集数据预测的卷积层
  • 提出“上下文模块(context module)”,使用扩张卷积进行多尺度聚合

理解
在分类网络中,池化有助于增加感受野(receptive field),但同时池化也降低了分辨率,这对于语义分割来讲是不利的。因此,作者使用扩张卷积进行处理,其工作原理如下图(来源):
在这里插入图片描述
扩张卷积层(在DeepLab中称之为空洞卷积,atrous convolution)可以在不丢失空间维度信息(即分辨率)的条件下使得感受野指数级增加。

预训练的分类网络(这里指VGG)中的最后两个池化层被移除,随后的卷积层被扩张卷积层所替代。在pool3和pool4之间空洞卷积的扩张参数(dilation )为2,pool4之后的空洞卷积的扩张参数为4。这个模块在论文中称之为“前端模块(frontend module)”,可以在不增加参数的情况下进行密集数据预测。

另一个称之为“上下文模块(context module)”接收前段模块的输出作为输入,并且二者分开训练。此模块是不同扩张卷积层的级联,因此聚合了多尺度上下文信息,改善了来自前端模块的预测结果。
得分
在这里插入图片描述
我的评价

  • 预测的分割图大小是原图像的1/8,几乎所有的方法都是这种情况,对这些图像进行插值就可以获得最终的分割图。

DeepLab(v1 & v2)

v1: Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
Submitted on 22 Dec 2014
Arkiv Link
v2: DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
Submitted on 2 Jun 2016
Arkiv Link

关键贡献

  • 使用空洞卷积(atrous convolutions),或者称之为扩张卷积
  • 提出了ASPP池化方法(atrous spatial pyramid pooling)
  • 结合了全连接的条件随机场(Conditional Random Field, CRF)

理解
空洞卷积在不增加参数的情况下,增加了感受野的范围,其原理同上扩张卷积。多尺度处理通常有两种处理方式:1)通过将多个重新缩放的原始图像传递到并行的CNN分支处理,或者 2)通过使用具有不同采样率的多个并行的ASPP实现。

结构化预测由完全连接的CRF完成, 其作为后处理步骤单独训练和调整。
在这里插入图片描述
得分
在这里插入图片描述

RefineNet

RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation
Submitted on 20 Nov 2016
Arxiv Link

关键贡献

  • 编码-解码结构,并且解码模块是精心设计的
  • 所有组件基于残差(residual connections)连接设计

理解
使用扩张卷积或者说空洞卷积的方法并不是没有弱点。扩张卷积通常应用于大量的高分辨率图像,导致它们的计算代价十分昂贵,并且对于内存空间的要求极高。这其实在处理高分辨率图像时算是一个弱点。比如,在DeepLab中,输入图像仅是原始图像的1/8。

因此,本篇文章提出使用编码-解码结构。编码器就是ResNet-101,解码器具有RefineNet模块,可以连接编码器的高分辨率特征和先前RefineNet模块的低分辨率特征。
在这里插入图片描述
每个RefineNet模块都有两个组件,一个通过对低分辨率特征上采样来融合多分辨率特征,另一个基于重复5*5步长的1池化层( repeated 5 x 5 stride 1 pool layers)捕获上下文信息。每个组件都使用残差连接方式
在这里插入图片描述
得分
在这里插入图片描述

PSPNet

Pyramid Scene Parsing Network
Submitted on 4 Dec 2016
Arxiv Link

关键贡献

  • 提出了锥形池化模块(pyramid pooling module)聚合上下文信息
  • 使用了辅助的损失函数(auxiliary loss)

理解
一个场景的全局类别相当重要,因为它提供了分割后类别的分布信息。锥形池化(pyramid pooling)通过应用大型卷积核池化层(large kernel pooling layers)来捕获此信息。Resnet通过扩张卷积定义,并且增加了锥形池化模块。该模块将来自ResNet的特征映射与并行池化层的上采样输出连接,其中卷积核覆盖整个,一半和一小部分图像。

在ResNet的第四阶段之后(即输入锥形池化模块),除了主损失(loss on main branch)之外应用辅助损失(auxiliary loss)。这个想法也被其他地方成为中间监督(intermediate supervision)。
在这里插入图片描述
得分
在这里插入图片描述

Large Kernel Matters

Large Kernel Matters – Improve Semantic Segmentation by Global Convolutional Network
Submitted on 8 Mar 2017
Arxiv Link

关键贡献

  • 提出了带有大型卷积核卷积层(large kernels convolutions)的编码-解码结构
    理解
    语义分割包含对对象的分割和分类两个方面的内容。因为全连接层不适用于语义分割任务,所以通常采用大卷积核卷积层。虽然如ResNet的深度网络拥有非常大的感受野,但研究表明,网络倾向于聚集小范围的信息,这也是采用大卷积核的另外一个原因。

大的卷积核拥有更多的参数和更加昂贵的计算代价。因此 k ∗ k k*k kk卷积近似于 1 ∗ k + k ∗ 1 1*k+k*1 1k+k1 k ∗ 1 k*1 k1 1 ∗ k 1*k 1k卷积之和。在文章中将这个模块称之为全局卷积网络(Global Convolutional Network, GCN)。说到网络结构,ResNet(无任何扩张卷积)组成编码部分,GCNs和反卷积组成解码部分。同时,也使用了一个称之为边界细化(Boundary Refinement, BR)的残差块。GCN的结构如下:
在这里插入图片描述
得分
在这里插入图片描述

DeepLab v3

Rethinking Atrous Convolution for Semantic Image Segmentation
Submitted on 17 Jun 2017
Arxiv Link

关键贡献

  • 改进了ASPP
  • 在级联中使用空洞卷积模块

理解
正如DeepLab v2和扩张卷积中描述,ResNet模型使用扩张卷积/空洞卷积。改进的ASPP涉及图像级特征的连接,即一个 1 ∗ 1 1*1 11卷积和三个 3 ∗ 3 3*3 33卷积。在每个并行卷积层之后使用批量的归一化(batch normalization)。

级联模块是一个resnet模块,只不过它的组件卷积层以不同速率的空洞卷积构成。这个模块类似于上述扩张卷积文章(Dilated Convolution)中使用的上下文模块,但是它直接应用于中间特征映射而非置信映射(belief map)。置信映射是指具有等类别数和通道数的CNN特征映射(belief maps are final CNN feature maps with channels equal to number of classes)。

这里所提出的模型都是单独评估的,结合两者并未提升性能表现。两者对的性能表现接近,使用了ASPP的稍好。这里没有使用CRF。

这里的模型优于DeepLab v2中的最好模型。作者指出了这种改善来自于批量归一化和更好地编码多尺度上下文的方式。DeepLab v3中的ASPP结构如下:
在这里插入图片描述
得分
在这里插入图片描述

PS:翻译真心累,感觉好多专有名词翻译过来怪怪的,能理解那个意思,但是没有专门的中文与之对应。可能其他地方的翻译通本文又不一样,故而大家对于专有名词可以转到原文查看。当然,笔者翻译时对于此类专有名词也标注了其英文原文。


  1. Qure致力于为医疗健康提供深度学习解决方案 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值