2.3 图像分割算法
图像分割主要指图像语义分割(Semantic Segmentation)。图像语义分割需要将图像中的像素点分类,确定其是背景还是目标,从而对目标进行划分。
图像分割较图像分类、目标检测难度更大,因为图像分割需要精确到像素点,而深度学习中的CNN卷积之后这种像素级别的信息已经丢失,无法做到精确地分割,所以出现了FCN算法等专门用于图像分割的算法。
2.3.1 FCN算法
FCN(Fully Convolutional Networks,全卷积网络)被发表在论文 Fully Convolutional Networks for Semantic Segmentation中。FCN实现的是端到端的训练,不涉及前处理和后处理工作。FCN 是图像语义分割的基本框架,后面的很多算法都是在这个基础上演化而来的。FCN 的网络结构如图2.19所示。
图2.19
如图2.19所示,FCN 在分类网络的基础上做了一些修改,将分类网络中最后的全连接层改为卷积层,这样可以得到一个二维特征图,然后使用softmax得到像素级的分类,从而进行图像语义分割。
FCN结构的示意图如图2.20所示。
图2.20
如图2.20所示,论文作者使用了不同尺度的特征图,image经过5个pooling操作之后的输出即pool5,尺寸变为image的1/32,所以这里进行32×上采样得到与原图大小相同的特征图,即FCN-32s。pool5的输出进行2×上采样得到的特征图与pool4的输出相加,然后进行16×上采样也会得到与原图大小相同的特征图,即FCN-16s,同理pool3的输出需要进行8×上采样,即FCN-8s。
这种使用不同层次的特征融合对分割的效果如图2.21所示。
图2.21
图2.21中最右边的图片是真实分割标记(Ground Truth),FCN-32s没有做特征融合,FCN-8s融合了3个尺度的特征,其效果明显优于没有做特征融合的层。
2.3.2 U-Net算法
U-Net来源于ISBI Challenge 2015,该分割网络结构简单,可以在较小的训练集上使用。U-Net的网络结构如图2.22所示。
图2.22
如图2.22所示,网络的左边部分是卷积和max-pooling的下采样,右边部分是卷积和up-conv的上采样,得到388×388×2的特征图,最后使用softmax得到output segmentation map。整个网络结构类似于U型,使用不同尺度的特征进行融合,融合时将特征图按照通道进行拼接。
U-Net算法的细节可以参考论文U-Net: Convolutional Networks for Biomedical Image Segmentation。
2.3.3 DeepLab系列算法
DeepLab-v1结合DCNN(深度神经网络)和CRF(条件随机场)做图像分割。因为DCNN不能处理像素级的分类,所以论文作者结合了CRF,另外还使用了空洞卷积扩大感受野。
DeepLab-v1的网络结构示意图如图2.23所示。
图2.23
DeepLab-v1 的细节可以参考论文 Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected Crfs。
DeepLab-v2和DeepLab-v1的结构差异不大,但是引入了ASPP(Atrous Spatial Pyramid Pooling,空洞空间金字塔池),从而使用多尺度的特征图,将基础网络由VGG-16变为ResNet,另外还使用了一些不同的学习策略。
ASPP的结构如图2.24所示。
图2.24
如图2.24所示,为了对输入特征图的中心像素进行分类,ASPP 采用多个不同 rate 的并行kernel来获取多尺度特征。
DeepLab-v2的改进使得算法的速度和准确率都有了较大的提升。DeepLab-v2的细节可以参考论文DeepLab: Semantic Image Segmentation with Deep Convolutional Nets,Atrous Convolution,and Fully Connected CRFs。
DeepLab-v3探索了更深结构下的空洞卷积,并且优化了ASPP结构。
图2.25展示了模块中是否带空洞卷积,图(a)不带空洞卷积,图(b)带空洞卷积,可以发现使用空洞卷积可以解决卷积和池化引起的特征图分辨率过小的问题。
图2.25
优化后的ASPP的结构如图2.26所示,ASPP的结构由串行结构改为了并行结构。
图2.26
DeepLab-v3 的细节可以参考论文 Rethinking Atrous Convolution for Semantic Image Segmentation。
在DeepLab-v3的基础上论文作者做了一些修改得到了新的算法DeepLab-v3+。
DeepLab-v3使用的Encoder-Decoder结构如图2.27所示。
图2.27
DeepLab-v3+使用了新的Encoder-Decoder结构,其将DeepLab-v3作为Encoder,另外增加了一个简单有效的Decoder。DeepLab-v3+还是将Xception结构用于分割任务中,并将深度可分离卷积用在ASPP和Decoder模块中,有效地提升了网络的性能。
DeepLab-v3+的网络结构如图2.28所示。
图2.28
如图2.28所示,编码器模块通过在多尺度特征图上使用空洞卷积编码多尺度上下文信息,而解码器模块则沿着分割对象边界细化分割结果。
DeepLab-v3+的细节可以参考论文Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation。
2.3.4 Mask R-CNN算法
Mask R-CNN对Faster R-CNN做了一个扩展,在Faster R-CNN的输出中增加一个分支用于预测目标掩模(Object Mask),另外两个分支用于预测目标类别和包围框。Mask R-CNN 对Faster R-CNN的改动较小,对运行速度的影响很小,而且该算法易于扩展到其他的任务(如人体姿态估计)中。
Mask R-CNN的网络框架如图2.29所示。
图2.29
Mask R-CNN在COCO测试集上的测试结果如图2.30所示。
图2.30
图2.30中同时展示了分割掩模、类别和包围框,该网络使用的主干网络是 ResNet-101,Mask AP达到了35.7%,运行速度为5fps。Mask R-CNN与其他算法在COCO测试集上的对比效果如图2.31所示。
图2.31
其中,MNC和FCIS分别是COCO 2015和COCO 2016数据集上的案例分割比赛冠军,Mask R-CNN比它们的效果更好。
对Mask R-CNN算法的深入研究可以参考论文MaskR-CNN。