Simplestory's Blog

图像分割基础网络

Word count: 1kReading time: 3 min
2021/04/30

图像分割是对图像进行像素级的分类,主要有语义分割(Semantic Segmentation)和实例分割(Instance Segmentation)。语义分割只要求做到像素层面的分割,而实例分割要求在语义分割的基础上实现对不同个体的分割。这篇文章主要简单介绍几种基础的语义分割网络。

FCN

FCN(Full Convolution Network)全卷积网络,是一个经典的图像分割网络,主要组成结构为Encoder-Decoder,其中Encoder负责提取图像特征信息,Decoder负责解析获取的特征信息。FCN将网络中的全连接层更换为卷积层,这样可以得到2D的特征图,在通过转置卷积(Deconvolution)进行上采样,最后通过softmax层得到各类别mask,同时也能适应不同尺寸的输入图片。大致结构如下图所示。

上面结构图包含有3个FCN模型,分别是FCN-8s、FCN-16s和FCN-32s。

FCN-32s是输入图片经过32倍下采样后直接32倍上采样进行分割。FCN-16s则是进行2倍上采样后与上一层16倍的下采样特征图逐元素相加(Eltwise),再进行16倍上采样进行分割。FCN-8s是之前Eltwise操作后再进行2倍上采样,与8倍下采样特征图进行Eltwise操作,再进行8倍上采样进行分割。

论文经过对比,FCN-8s的效果要优于其它两个模型,即多层特征图融合有利于提高分割准确性。

SegNet

由上面的FCN结构可以看出在Decoder阶段模型只用了一层转置卷积进行上采样,操作十分粗糙。SegNet的结构也是Encoder-Decoder,但两个结构为对称的,其中Encoder沿用了Vgg-16网络模型进行特征提取,而Decoder采用Uppooling对特征图进行上采样,然后对上采样图像进行卷积操作,目的是完善物体的几何形状,弥补Encoder中池化层将物体缩小造成的细节损失。在上采样过程中还用到了pooling indices,即Encoder池化操作中保存的权值索引,这样在上采样时直接将数据放在索引位置,再接卷积层进行训练学习。结构如下。

DeconvNet

这个网络与SegNet相似,也是采用的Encoder-Decoder对称结构,在上采样时也使用了pooling indices,但与SegNet不同的是模型在Encoder与Decoder之间采用了全连接层。为了得到实例级分割结果,可以将训练好的模型,应用到图片的proposals中,最终将这些结合组成最终的分割结果,这样同时也解决了原始FCN网络中的尺寸问题,物体的细节信息也更详尽。模型大致结构如下。

UNet

UNet的结构也是一个对称的Encoder-Decoder。先上结构图:

从结构图中可以看出每次进行上采样(该模型采用反卷积进行上采样)时都会和Encoder对应部分进行通道拼接,拼接前还需要对Encoder对应部分的特征图进行裁剪,这里的裁剪主要是保留图像中间部分,裁去边缘部分使得图像大小与Decoder对应部分一致。最后得到一个通道数为2的特征图,为了进一步得到概率图,还需要对特征图进行softmax。

总结

对于深度学习的语义分割,一个通用的框架大致如下:

  • 前端:使用全卷积网络进行特征提取
    • 下采样+上采样:Convlution + Deconvlution/Resize
    • 多尺度特征融合:特征逐点相加、特征拼接
    • 获得像素级的segement map:对每个像素点进行类别判定
  • 后端:使用CRF(条件随机场)/MRF(马尔可夫随机场)优化前端的输出得到优化后的分割图

致谢

Fully Convolutional Networks for Semantic Segmentation

SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

Learning Deconvolution Network for Semantic Segmentation

U-Net: Convolutional Networks for Biomedical Image Segmentation