首先明确一下一些概念:
语义分割:对已知的对象进行像素级识别。
实例分割:对场景中各个目标实例进行像素级识别,区分同类中不同目标。
全景分割:结合场景理解和实例分割的复合任务,对场景中所有物体进行像素级识别,对于特定目标区分同类中不同目标。
本文我们关注最基本的像素级语义分割任务。
0 引入
分割问题的本质是对基于某种规则,根据图像中的能量变化对像素进行标记。从传统分割算法开始,各种各样的规则被引入,用于像素级标记(超像素分割,显著性检测)。
到了深度学习时代,深度神经网络(DNNs)展现出的强大识别能力被引入到了分割领域。把DNNs用于像素级识别也带来了新的研究方向,语义分割。
语义分割的推理过程可以表示为一下两步:
把具有
通道的长宽为
,
的输入数据输入深度网络
,得到同样长宽的特征
,
为需要识别的类别数;再利用
激活函数得到每个像素识别到的各类别得分,取出最大得分类别即得到该像素的识别结果。
为了把识别规则引入像素级标记过程,需要提供大量人工标记数据
,引入交叉熵损失函数对
进行训练:
以上为语义分割的基本过程,但是在实际网络设计的时候会面临许多问题,比如特征判别能力不足,算法效率低,样本不均等问题。下面将从问题出发,介绍一些经典的和最近的方法。
1 搭建适合分类的主干网络
许多任务都会用到分类网络作为主干网络来提供强大特征以用于各种任务。在语义分割中同样如此,但是其中有一些差别:(1)分类网络关注的是图像整体属性,而语义分割任务需要区分空间中的每个样本,用于分割的特征需要保留更多细节信息;(2)分类网络的输入尺寸一般不超过
(ImageNet),而分割网络的输入最小也有
(CamVid) ,最大
(Cityscapes),目标的可判别信息隐含在更多尺度特征中。第一个问题可以通过减少分类网络中的降采样层和全连接层解决。
比如ResNet中,特征提取部分一般有5此降采样操作,使得特征空间尺寸为图片原尺寸的32分之一,再通过平均池化和全连接得到分类结果,去掉最后的平均池化和全连接层后以外,还常常去掉特征提取中后三个降采样层来保留空间细节,同时为了补偿去掉降采样层带来的感受野大小损失,常常用孔洞卷积来增大感受野。
而第二个问题,常见的作法是在主干网络后增加多尺度模块来增强特征能力。
DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
为了解决第二个问题DeepLab 提出孔洞卷积来替代标准卷积和在主干网络之后增加额外 Atrous Spatial Pyramid Pooling (ASPP) 模块,增大特征感受野提高特征判别能力。
此外,为了提高目标边缘识别能力,DeepLab 还引入后处理 Conditional Random Fields (CRFs),但是CRFs的方法计算量太大了,DeepLab的后续版本也没在使用。
类似通过增加独立模块(ASPP)来提高特征感受野的方法还有PSPNet、DensASPP。
2 获取具有高级语义和细节信息的特征图
标准的卷积神经网络特征一般形成一个高维特征金字塔,通过降采样操作可以提高特征的平移不变性,增加感受野和减少计算损耗,获得判别性更好的特征。但是对于像素级分割任务来说,降采样操作会丢失细节信息,使得网络在细小目标和目标边缘上性能下降。底层特征虽然具有丰富细节,但是判别能力太弱。大量工作开始研究如何保证特征判别能力同时,增加细节信息。
另外一种思路是通过多路网络分别提取空间细节和语义信息,来为语义分割提供更强特征。常用的于一分分网络结构如下:
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
为了解决细节丢失问题,SegNet 提出一种 Encoder-Decoder结构,在标准金字塔网络子后增加上采样结构,同时加入跳层连结,通过unpooling 把浅层信息和高层特征融合,一定程度缓解细节丢失问题。
论文中还和FCN对比了具体的上采样和融合策略:
SegNet采用的unpooling操作最早出现于论文 "Visualizing and Understanding Convolutional Networks" 中, 与其他方式的上采样相比(双线性插值、反卷积),unpooling 保留了特征响应的位置信息,并且过程中没有可学参数。
Encoder-Decoder 是语义分割网络中常用结构之一,相比于没有Decoder的分割网络对小目标和边缘细节有更好的分割效果。
DFANet: Deep Feature Aggregation for Real-Time Semantic Segmentation
DFANet在 Encoder-Decoder 基础上进一步加强了上下层融合力度,提出了深度特征聚合策略,使得浅层特征可以更有效的转移到高层特征中。
由于采用了这种多特征聚合结构,DFANet可以充分利用网络中各个隐层特征,在网络规模上也可以保持相对轻量。
BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation
为了弥补金字塔网络中高层特征的细节丢失问题,BiSeNet 提出双路网络 (Spatial Path, Context Path) 分别提取图片中的空间细节信息和语义信息。
3 残差预测网络,帮助提升细节和边缘
在提升小目标与细节检测能力的问题上,除了在特征层面补充细节外,还可以对目标细节进行针对性的预测。
Global-residual and Local-boundary Refinement Networks for Rectifying Scene Parsing Predictions
在本文中,作者构建Front Model, GRN 和 LRN 依次进行分割结果调优。其中,Front Model 先预测出粗糙结果,再把粗糙结果和输入一起作为GRN的输入,对结果进行迭代调优。其中 GRN 预测的目标是前一次迭代的结果与 GT 的残差,即Global Residual。最后通过 LRN 结合邻域关系对目标边界进行调优,得到最终结果。
Residual Pyramid Learning for Single-Shot Semantic Segmentation
上一篇工作为小目标和边缘分割提出了很好的思路,但是问题是该方法由多个网络组成,GRN网络有涉及多次迭代,导致网络的计算效率很低。
RPNet仔细地分析了金字塔网络的结构特点,提出了特征残差金字塔,与常规特征金字塔不同,残差金字塔的浅层特征相对稀疏,但与其他层特征成互补关系,减少了特征冗余度。
特征金字塔被用来构建完备特征图以预测完整场景,RPNet则把场景目标分成不同层次残差,用特征残差金字塔分别预测,最终合成完整场景。
如何构建特征残差金字塔?熟悉ResNet 的朋友们应该知道ResBlock结构利用跳层连接把特征分为残差部分和恒等部分。二者之和
传入下一层,
的部分相当于被丢弃,而这些被丢弃的部分往往蕴含着丰富的细节信息。此外由文献指出网络中的浅层特征更关注纹理细节,高层更关注语义属性。用特征残差金字塔预测不同尺度下的目标残差再合适不过了。
为了推广到一般网络中,RPNet也设计了更一般的残差金字塔网络: