FCN
论文链接:Fully Convolutional Networks for Semantic Segmentation
全卷机神经网络(FCN,Fully Convolutional Network)是第一次将端到端的卷积网络推广到了语义分割任务当中。
CNN做图像分类甚至做目标检测的效果已经被证明并广泛应用,图像语义分割本质上也可以认为是稠密的目标识别(需要预测每个像素点的类别)。
对于一般的分类CNN网络,如VGG和Resnet,都会在网络的最后加入一些全连接层,经过softmax后就可以获得类别概率信息。但是这个概率信息是1维的,即只能标识整个图片的类别,不能标识每个像素点的类别,所以这种全连接方法不适用于图像分割。
网络结构
FCN32s
FCN16s
FCN8s
特点
分类使用的网络通常会在最后连接几层全连接层,它会将原来二维的矩阵(图片)压扁成一维的,从而丢失了空间信息,最后训练输出一个标量,这就是我们的分类标签。
而图像语义分割的输出需要是个分割图,且不论尺寸大小,但是至少是二维的。所以,我们需要丢弃全连接层,换上全卷积层,而这就是全卷积网络了。
FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类(最后逐个像素计算softmax分类的损失, 相当于每一个像素对应一个训练样本)。
缺点:
- 分割的结果不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
- 因为模型是基于CNN改进而来的,即便使用卷积替换全连接,但是依旧是独立像素进行分类,没有充分的考虑像素与像素之间的关系,忽略了在通常的基于图像分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。
全卷积神经网络主要使用了3种技术:
1、卷积化:将普通的分类网络,比如VGG16,ResNet50/101等网络丢弃全连接层,换上对应的卷积层即可。因此这种全卷积形式的网络可以适应任意尺寸的输入(没有全连接层,全连接的结构是固定的)。
2、反卷积:反卷积(Deconvolution)也叫转置卷积(Transposed Convolution)。FCN作者在论文中讨论了三种上采样(upsample)方法,最后选用的是反卷积的方法(FCN作者称其为后卷积)使得图像实现end to end。
3、跳跃结构:这是特征融合的一种方式,未加入 跳跃结构 的模型是特别粗糙的,因为特征图直接扩大了 32 倍,所以论文中有一个改进,就是利用跳跃结构将网络中间的输入联合起来,即逐点相加,再进行反卷积,这样能够依赖更多的信息,将深层的信息与浅层的信息相结合,这样可以提高模型分割的准确性。
U-Net
论文链接:U-Net: Convolutional Networks for Biomedical Image Segmentation
深度网络训练之中需要大量的有标样本,Unet作者提供了一种新的训练方法,可以更有效的运用相应的有标样本,是模型在少量的训练图片中也可以进行精确的分割。这在生物医学领域具有很大的作用。
网络结构
![](https://i-blog.csdnimg.cn/blog_migrate/23741206c97754eb6306f78e9808eda6.png)
Unet网络结构整体呈现U字形,是一种编码器-解码器的结构。
编码阶段仍然是利用传统卷积神经网络的卷积池化组件,其中经过一次下采样之后,channels变为原来的2倍。
解码阶段由2 * 2的反卷积,反卷机的输出通道为原来通道数的一半,再与原来的feature map(裁剪之后)串联,得到和原来一样多的通道数的feature map,再经过2个尺寸为3 * 3的卷积和ReLU的作用。裁剪特征图是必要的,因为在卷积的过程中会有边界像素的丢失。在最后一层通过卷积核大小为1 * 1的卷积作用得到想要的目标种类。
在Unet中一共有23个卷积层。但是这个网络需要谨慎的选择输入图片的尺寸,以保证所有的Max Pooling操作作用于长宽为偶数的feature map。
特点
1、编码器-解码器结构。
2、有效的提升了使用少量数据集进行训练检测的效果。
3、Overlap-tile strategy:由于网络没有全连接层,并且只使用每个卷积的有效部分,所以只有分割图像完全包含在输入图像中可以获得完整的上下文像素。而这个策略允许通过重叠区块无缝分割任意大的图像,为了预测图像边界区域中的像素,通过镜像的输入图像来外推丢失的上下文。这种平铺策略对于将网络应用于大图像很重要,否则分辨率将受到GPU内存的限制。
4、数据增强:虽然数据增强在论文中提及较少,但是数据增强对于网络来讲非常重要,并且文中提到了非常实用的数据增强的方法。
DeepLab
DeepLabV1:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
DeepLabV2:
DeepLabV3:
Rethinking Atrous Convolution for Semantic Image Segmentation
DeepLabV3+: