转自机器之心
顾名思义,图像分割就是指将图像分割成多个部分。在这个过程中,图像的每个像素点都和目标的种类相关联。图像分割方法主要可分为两种类型:语义分割和实例分割。语义分割会使用相同的类标签标注同一类目标(下图左),而在实例分割中,相似的目标也会使用不同标签进行标注(下图右)。
图源:Anurag Arnab, Shuai Zheng et. al 2018「Conditional Random Fields Meet Deep Neural Networks for Semantic Segmentation」
图像分割模型的基本架构包括编码器与解码器。编码器通过卷积核提取图像特征。解码器负责输出包含物体轮廓的分割蒙版。
图源:Vijay Badrinarayanan et. al 2017「SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation」
大多数图像分割架构都具有这样的结构或是其变体,比如以下几种:
U-Net 最初是一个用于分割生物医学图像的卷积神经网络。它的架构由两部分组成,左侧是提取路径,右侧是扩展路径。提取路径用来捕获上下文,扩展路径用来精准定位。提取路径由两个 33 的卷积组成。卷积后经过 ReLU 激活和用于降采样的 22 最大池化计算。
图源:Olaf Ronneberger et. al 2015「U-net architecture image segmentation」
在快速全连接网络(FastFCN)架构中,联合金字塔上采样(Joint Pyramid Upsampling, JPU)模型代替了消耗大量存储空间和时间的扩张卷积。该架构在核心部分使用了全连接网络,并应用 JPU 进行上采样。JPU 将低分辨率特征图上采样为高分辨率特征图。
图源:Huikai Wu et.al 2019「FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation」
Gated-SCNN 架构包括一个双流卷积神经网络结构。在该模型中,使用一个单独的分支来处理图像的形状信息。该形状流被用来处理边界信息。
图源:Towaki Takikawa et. al 2019「Gated-SCNN: Gated Shape CNNs for Semantic Segmentation」
在 DeepLab 架构中,带有上采样滤波器的卷积被用于密集预测型任务。多尺度的物体分割是通过空洞空间金字塔池化(atrous spatial pyramid pooling)完成的。最后,使用 DCNN 来提升物体边界的定位精准度。通过在上采样滤波器过程中插入 0 或对输入特征图稀疏采样,来实现空洞卷积。
图源:iang-Chieh Chen et. al 2016「DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs」
在 Mask R-CNN 架构中,使用边界框和将图片分割成一系列像素点的语义分割来对物体进行分类和定位。每个兴趣区域会得到一个分割蒙版。最终还会输出类标签和边界框。
图源:Kaiming He et. al 2017「Mask R-CNN」。
下图为在 COCO 测试集上实现的分割效果。
图源:Kaiming He et. al 2017「Mask R-CNN」
语义分割模型在训练过程中通常使用简单的跨类别熵损失函数。但是,如果你想获得图像的细节信息,则需要更高级的损失函数。
该损失是对标准的交叉熵评价函数的改进。通过对其变形实现,以使分配给分好类别样本的损失是低权重的。最终,这确保了没有分类失衡。在该损失函数中,随着正确类别置信度的增加,交叉熵损失随比例因子逐渐衰减为零。比例因子会在训练时自动降低简单样本的贡献,更注重复杂的样本。
Dice 损失通过计算平滑的 dice 系数函数得到。该损失是分割问题中最常用的损失函数之一。
IoU-平衡分类损失旨在增加高 IoU 样本的梯度同时减少低 IoU 样本的梯度。通过这种方法,提升机器学习模型的定位准确率。
边界损失的一种变体被用于高度不平衡的分割任务。这种损失的形式是一种空间轮廓而非区域的距离度量。此方式解决了高度不平衡任务中区域损失带来的问题。
在交叉熵的一种变体中,所有正向的样本都按一定的系数加权,用于类不平衡的情况下。
该损失基于凸 Lovasz 扩展的子模块损失,直接优化神经网络中的平均 IoU。
另外还有几种值得注意的损失:
图像分割可能用到的数据集有:
在图像分割领域,可用的框架有如下几种:
接下来,我们将会回顾一些构建语义分割模型的最先进的方法的研究论文,它们分别是:
1. Weakly- and Semi-Supervised Learning of a Deep Convolutional Network for Semantic Image Segmentation (ICCV, 2015)
这篇论文提出了一个解决方法,主要面对处理深度卷积网络中的弱标签数据,以及具有良好标签和未被合适标记得数据的结合时的挑战。在这篇论文结合了深度卷积网络和全连接条件随机场。
在 PASCAL VOC 的分割基准测试中,这个模型高于 70% 的交并比(IOU)
这篇论文的主要贡献如下:
2. Fully Convolutional Networks for Semantic Segmentation (PAMI, 2016)
这篇论文提出的模型在 PASCAL VOC 2012 数据集上实现了 67.2% 的平均 IoU。全连接网络以任意大小的图像为输入,然后生成与之对应的空间维度。在这个模型中,ILSVRC 中的分类器被丢在了全连接网络中,并且使用逐像素的损失和上采样模块做了针对稠密预测的增强。针对分割的训练是通过微调来实现的,这个过程通过在整个网络上的反向传播完成。
3. U-Net: Convolutional Networks for Biomedical Image Segmentation (MICCAI, 2015)
在生物医学图像处理中,得到图像中的每一个细胞的类别标签是非常关键的。生物医学中最大的挑战就是用于训练的图像是不容易获取的,数据量也不会很大。U-Net 是非常著名的解决方案,它在全连接卷积层上构建模型,对其做了修改使得它能够在少量的训练图像数据上运行,得到了更加精确的分割。
由于少量训练数据是可以获取的,所以这个模型通过在可获得的数据上应用灵活的变形来使用数据增强。正如上面的图 1 所描述的,模型的网络结构由左边的收缩路径和右边的扩张路径组成。
收缩路径由 2 个 3X3 的卷积组成,每个卷积后面跟的都是 ReLU 激活函数和一个进行下采样的 2X2 最大池化运算。扩张路径阶段包括一个特征通道的上采样。后面跟的是 2X2 的转置卷积,它能够将特征通道数目减半,同时加大特征图。最后一层是 1X1 的卷积,用这种卷积来组成的特征向量映射到需要的类别数量上。
在这个模型中,训练是通过输入的图像、它们的分割图以及随机梯度下降来完成的。数据增强被用来教网络学会在使用很少的训练数据时所必需的鲁棒性和不变性。这个模型在其中的一个实验中实现了 92% 的 mIoU。
4. The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation (2017)
DenseNets 背后的思想是让每一层以一种前馈的方式与所有层相连接,能够让网络更容易训练、更加准确。
模型架构是基于包含下采样和上采样路径的密集块构建的。下采样路径包含 2 个 Transitions Down (TD),而上采样包含 2 个 Transitions Up (TU)。圆圈和箭头代表网络中的连接模式。
这篇论文的主要贡献是:
这个模型在 CamVid 数据集中实现 88% 的全局准确率。
5. Multi-Scale Context Aggregation by Dilated Convolutions (ICLR, 2016)
这篇论文提出了一个卷积网络模块,能够在不损失分辨率的情况下混合多尺度的上下文信息。然后这个模块能够以任意的分辨率被嵌入到现有的结构中,它主要基于空洞卷积。
这个模块在 Pasca VOC 2012 数据集上做了测试。结果证明,向现存的语义分割结构中加入上下文模块能够提升准确率。
在实验中训练的前端模块在 VOC-2012 验证集上达到了 69.8% 的平均交并比(mIoU),在测试集上达到了 71.3% 的平均交并比。这个模块对不同对象的预测准确率如下所示:
6. DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs (TPAMI, 2017)
在这篇论文中,作者对语义分割任务中做出了下面的贡献:
论文地址:https://arxiv.org/abs/1606.00915
这篇论文提出的 DeepLab 系统在 PASCAL VOC-2012 图像语义分割上实现了 79.7% 的平均交并比(mIoU)。
这篇论文解决了语义分割的主要挑战,包括:
7. Rethinking Atrous Convolution for Semantic Image Segmentation (2017)
这篇论文解决了使用 DCNN 进行语义分割所面临的两个挑战(之前提到过):当使用连续的池化操作时会出现特征分辨率的降低,以及多尺度目标的存在。
为了解决第二个问题,本文提出了带洞卷积(atrous convolution),也被称作 dilated convolution。我们能使用带洞卷积增大感受野,因此能够包含多尺度上下文,这样就解决了第二个问题。
在没有密集条件随机场(DenseCRF)的情况下,论文的 DeepLabv3 版本在 PASCAL VOC 2012 测试集上实现了 85.7% 的性能。
8. Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation (ECCV, 2018)
这篇论文的方法「DeepLabv3+」在 PASCAL VOC 2012 数据集和 Cityscapes 数据集上分别实现了 89.0% 和 82.1% 的性能,而且没有做任何后处理。这个模型在 DeepLabv3 的基础上增加一个简单的解码模块,从而改善了分割结果。
这篇论文实现了为语义分割使用两种带空间金字塔池化的神经网络。一个通过以不同的分辨率池化特征捕捉上下文信息,另一个则希望获取明确的目标边界。
9. FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation (2019)
这篇论文提出了一种被称作联合金字塔上采样(Joint Pyramid Upsampling/JPU)的联合上采样模块来代替消耗大量时间和内存的带洞卷积。它通过把抽取高分辨率图的方法形式化,并构建成一个上采样问题来取得很好的效果。
此方法在 Pascal Context 数据集上实现了 53.13% 的 mIoU,并且具有三倍的运行速度。
该方法以全卷积网络(FCN)作为主体架构,同时应用 JPU 对低分辨率的最终特征图进行上采样,得到了高分辨率的特征图。使用 JPU 代替带洞卷积并不会造成任何性能损失。
联合采样使用低分辨率的目标图像和高分辨率的指导图像。然后通过迁移指导图像的结构和细节生成高分辨率的目标图像。
10. Improving Semantic Segmentation via Video Propagation and Label Relaxation (CVPR, 2019)
这篇论文提出了基于视频的方法来增强数据集,它通过合成新的训练样本来达到这一效果,并且该方法还能提升语义分割网络的准确率。本文探讨了视频预测模型预测未来帧的能力,进而继续预测未来的标签。
这篇论文证明了用合成数据训练语义分割网络能够带来预测准确率的提升。论文提出的方法在 Cityscape 上达到了 8.5% 的 mIoU,在 CamVid 上达到了 82.9% 的 mIoU。
11. Gated-SCNN: Gated Shape CNNs for Semantic Segmentation (2019)
这篇论文是语义分割领域最新的成果(2019.07),作者提出了一个双流 CNN 结构。在这个结构中,目标的形状信息通过一个独立的分支来处理,该形状流仅仅处理边界相关的信息。这是由模型的门卷控积层(GCL)和局部监督来强制实现的。
在用 Cityscapes 基准测试中,这个模型的 mIoU 比 DeepLab-v3 高出 1.5%,F-boundary 得分比 DeepLab-v3 高 4%。在更小的目标上,该模型能够实现 7% 的 IoU 提升。下表展示了 Gated-SCNN 与其他模型的性能对比。
本文总结了利用CNNs进行图像语义分割时,针对网络结构的创新,这些创新点主要包括新神经架构的设计(不同深度、宽度、连接和拓扑结构)和新组件或层的设计。前者是利用已有的组件组装复杂的大型网络,后者是更偏向于设计底层组件。首先介绍一些经典的语义分割网络及其创新点,然后介绍网络结构设计在医学图像分割领域内的一些应用。
单独将FCN网络列出来是因为FCN网络是第一个从全新的角度来解决语义分割问题的网络。此前的基于神经网络的图像语义分割网络是利用以待分类像素点为中心的图像块来预测中心像素的标签,一般用CNN+FC的策略构建网络,显然这种方式无法利用图像的全局上下文信息,而且逐像素推理速度很低;而FCN网络舍弃全连接层FC,全部用卷积层构建网络,通过转置卷积以及不同层特征融合的策略,使得网络输出直接是输入图像的预测mask,效率和精度得到大幅度提升。
FCN不同层特征融合示意图
创新点:全卷积网络(不含fc层);转置卷积deconv(反卷积);不同层特征图跳跃连接(相加)
SegNet和FCN网络的思路基本一致。编码器部分使用VGG16的前13层卷积,不同点在于Decoder部分Upsampling的方式。FCN通过将特征图deconv得到的结果与编码器对应大小的特征图相加得到上采样结果;而SegNet用Encoder部分maxpool的索引进行Decoder部分的上采样(原文描述:the decoder upsamples the lower resolution input feature maps. Specifically, the decoder uses pooling indices computed in the max-pooling step of the corresponding encoder to perform non-linear upsampling.)。
创新点:Encoder-Decoder结构;Pooling indices。
U-Net网络最初是针对生物医学图像设计的,但由于其初四的性能,现如今UNet及其变体已经广泛应用到CV各个子领域。UNet网络由U通道和短接通道(skip-connection)组成,U通道类似于SegNet的编解码结构,其中编码部分(contracting path)进行特征提取和捕获上下文信息,解码部分(expanding path)用解码特征图来预测像素标签。短接通道提高了模型精度并解决了梯度消失问题,特别要注意的是短接通道特征图与上采用特征图是拼接而不是相加(不同于FCN)。
创新点:U型结构;短接通道(skip-connection)
\1) DeepLabV1:融合卷积神经网络和概率图模型:CNN+CRF,提高了分割定位精度;
\2) DeepLabV2:ASPP(扩张空间金字塔池化);CNN+CRF
\3) DeepLabV3:改进ASPP,多了1*1卷积和全局平均池化(global avg pool);对比了级联和并联空洞卷积的效果。
级联空洞卷积
并联空洞卷积(ASPP)
\4) DeepLabV3+:加入编解码架构思想,添加一个解码器模块来扩展DeepLabv3;将深度可分离卷积应用于ASPP和解码器模块;将改进的Xception作为Backbone。
DeepLabV3+
总的来说,DeepLab系列的核心贡献: 空洞卷积;ASPP;CNN+CRF(仅V1和V2使用CRF,应该是V3和V3+通过深度网络解决了分割边界模糊的问题,效果要比加了CRF更好)
PSPNet(pyramid scene parsing network)通过对不同区域的上下文信息进行聚合,提升了网络利用全局上下文信息的能力。在SPPNet,金字塔池化生成的不同层次的特征图最终被flatten并concate起来,再送入全连接层以进行分类,消除了CNN要求图像分类输入大小固定的限制。而在PSPNet中,使用的策略是:poolling-conv-upsample,然后拼接得到特征图,然后进行标签预测。
RefineNet通过细化中间激活映射并分层地将其连接到结合多尺度激活,同时防止锐度损失。网络由独立的Refine模块组成,每个Refine模块由三个主要模块组成,即:剩余卷积单元(RCU),多分辨率融合(MRF)和链剩余池(CRP)。整体结构有点类似U-Net,但在跳跃连接处设计了新的组合方式(不是简单的concat)。个人认为,这种结构其实非常适合作为自己网络设计的思路,可以加入许多其他CV问题中使用的CNN module,而且以U-Net为整体框架,效果不会太差。
也有很多工作致力于降低语义分割网络的计算复杂度。一些简化深度网络结构的方法:张量分解;通道/网络剪枝;稀疏化连接。还有一些利用NAS(神经架构搜索)取代人工设计来搜索模块或整个网络的结构,当然AutoDL所需的GPU资源会劝退一大批人。因此,也有一些人使用随机搜索来搜索小的多的ASPP模块,然后基于小模块来搭建整个网络模型。
网络轻量化设计是业内共识,移动端部署不可能每台机器配一张2080ti,另外耗电量、存储等问题也会限制模型的推广应用。不过5G如果能普及的话,数据就可以全部在云端处理,会很有意思。当然,短期内(十年),5G全方位部署不知道是否可行。
注意力机制可以定义为:使用后续层/特征图信息来选择和定位输入特征图中最具判断力(或显著性)的部分。简单地可以认为是给特征图加权的一种方式(权值通过网络计算得到),按照权值的作用方式的不同,可以分为通道注意力机制(CA)和空间注意力机制(PA)。FPA(Feature Pyramid Attention,特征金字塔注意力)网络是一种基于注意力机制的语义分割网络,它将注意力机制和空间金字塔相结合,以提取用于像素级标记的精密特征,而没有采用膨胀卷积和人为设计的解码器网络。