翻译自【http://blog.qure.ai/notes/semantic-segmentation-deep-learning-review】 写了一半发现已经有现成的翻译了:【http://www.myzaker.com/article/5968490c1bc8e00302000033/】 大多数对于语义分割的研究,都是基于自然的或者真实世界的图像数据集。尽管这些结果并不能直接应用于医学图像,但是我仍然对这些文献进行了学习,因为这些研究远比医学图像领域内的要成熟。

本报告组织如下: 首先,我解释了什么叫做语义分割;然后,对于现有的方法进行了一个综述;最后简单总结了几篇有意思的文献。

什么是语义分割?

语义分割是给定一幅图像,我们希望能够从像素级别来实现图像理解。也就是说,对于一幅图像,对于其中的每一个像素,我们都能给它分配一个类别标签。举个例子,如下图像:

语义分割PR图 语义分割一张图多少钱_全连接

source:PASCAL VOC2011

除了识别出图像中的摩托车和驾驶员,我们也需要描绘出每一个目标的轮廓。因此,和分类不同的是,我们需要一个模型,对于给定图像,能够实现稠密的,像素级别的预测。

VOC2012和MSCOCO都是语义分割领域内最重要的数据集。

有哪些不同的方法? 在深度学习全面进入计算机视觉领域之前,语义分割通常是通过TextonForest和Random Forest based classifiers来实现的。正如图像分类一样,卷积神经网络(CNN)已经在分割问题上实现了巨大的成就。

其中一个早期比较流行的深度学习方法是patch classification,对于每一个像素,根据其在图像中的patch,而将其分为某个类。使用patch的主要原因是,分类网络通常都有全连接层,因此需要固定大小的图像。【对于CNN来说,直到第一个全连接层之前,它的输入图片大小是可以不固定的,但是有了全连接层之后,就要求输入大小保持一致,第二种方法是先把任意大小的图片进行输入CNN直到第一个全连接层,然后再在它的基础上进行固定大小的滑动窗口输入到全连接层中,由于第一个全连接层之前进行了大量的下采样操作,所以这时候的滑动窗口的数目就大大的减少了,而且前面的卷积操作就要计算一次,没有重复计算的问题。CNN里面有一个trick就是把训练好了的用于分类的网络,把它的全连接层参数转化为卷积层参数。这样改造后的CNN就成了全卷积CNN,它的输入是可以任意的,而它的输出是patch 的类别得分。本段source】

2014年,Berkeley的Long等人提出了**全卷积网络**Fully Convolutional Networks(FCN)是一个不需要通过全连接层的,用于稠密预测的卷积网络。该方法使得对于任意大小的图像,都能实现有效分割,并且和按patch分类的方法比,要快得多。后续几乎所有的比较先进的方法都是采用了该范例。

除了全连接层,使用卷积神经网络来实现分割的另一个主要问题是池化层(pooling layers)。池化层扩大了视场(filed of view),聚合上下文信息,但是同时丢弃“where”信息(位置信息)。然而,语义分割要求的是对于分类结果的绝对匹配,所以,又需要良好保留“where”信息。因此,为了解决这个问题,有两类网络架构不断发展进化。

第一类就是编码器-解码器架构。编码器能够逐步降低池化层的空间维度,解码器则一步步恢复目标细节和空间维度。通常从编码器到解码器之间,会存在一些快捷的连接(shortcut connections),是的解码器能够更好地恢复目标细节。在这类架构中,U-Net就是非常流行的一个。

语义分割PR图 语义分割一张图多少钱_池化_02

source:U-Net

第二类架构,我们称为空洞/带孔卷积(dilated/atrous convolutions) ,去除了池化层。