摘要: 语义分割是一项计算机视觉任务,视觉输入的不同部分可以分成不同的语义解释类。那么,语义分割在边界框标记上有什么优势呢?
我们应该如何描述一个场景?我们可以说窗户下面有一张桌子,或者沙发右边有一盏灯。理解图像的关键就是:将场景分解成一个个单独的实体,这也有助于我们理解对象的行为。
对象检测有助于绘制某些实体周围的边界框。但人类想要对场景有真正的理解,还需要能够以像素级精度对每个实体的边界进行检测和标记。随着我们开始构建无人驾驶汽车和智能机器人,而这些就需要细致了解周围环境,因此,绘制边界框也变得越来越重要。
什么是语义分割?
语义分割是一项计算机视觉任务,我们将视觉输入的不同部分分成不同的语义解释类。“语义解释”,也就是说,这些类具有某些真实世界的含义。例如,我们可能想要获取属于汽车类别的图像的所有像素,并将其着色为蓝色。

虽然聚类等无监督算法可用于分割,但并不适用于语义分割。这些方法不会对他们接受过训练的类别上进行分割,而是更广义上找到区域的边界,参见Thoma et al.2016。
相对于图像分类和对象检测,语义分割更有助于我们更详细地了解图像。这种详细的理解在很多领域都非常重要,包括无人驾驶、机器人和图像搜索引擎等。 本文将使用深度学习进行监督语义分割。
数据集和度量标准
常用于训练语义分割模型的数据集包括:
1.Pascal VOC 2012数据集:包含20个对象类别,包括Person,Vehicle和其他类别。目标是分割对象类或背景。
2.Cityscapes数据集:包含50个城市的语义城市场景的理解。
3.Pascal Context数据集:包含400多个类别的室内和室外场景。
4.Stanford Background数据集:包含至少有一个前景对象的室外场景集。

评估语义分割算法性能的一个度量标准是平均交并比IOU(Intersection Over Union),其中,IOU定义如下:

这个度量标准确保了我们能够捕捉到每个对象(使预测标签与真是对象重叠),并且,也能够做到精确(使之尽可能的接近重叠)。
管道(Pipeline)
用于语义分割模型的管道通常如下:

下面,我们将进一步讨论管道的分类器(Classifier )和后处理(Post-Processing )阶段。
模型架构和方法
用卷积神经网络进行分类
现在,语义分割架构通常使用卷积神经网络(CNN)为每个像素分配一个初始类别标签。卷积层可以有效地捕捉图像中的局部特征,并以分层的方式嵌套许多这样的层,试图提取更广泛的结构特征。通过使用能够捕捉图像中越来越复杂特征的连续卷积层,CNN可以将图像编码为其内容的紧凑表示。
为了将各个像素映射为类别标签,我们需要将标准CNN编码器扩展为编码-解码器。在这里,编码器使用卷积层和池化层将图像的宽度和高度缩小为较低维表示(representation);解码器收到该表示,通过上采样(通过转置卷积)“恢复”空间维度,从而在每步解码中扩展表示的大小。在某些情况下,编码器的中间步骤有助于帮助解码。最终,解码器会生成一个表示原始图像标签的数组。

在许多语义分割架构中,CNN希望最小化的损失函数是交叉熵损失。该目标函数测量每个像素的预测概率分布(在类别上)与实际概率分布之间的距离。
然而,语义分割的交叉熵损失并不理想。由于图像的最终损失仅仅是每个像素的损失之和,所以交叉熵损失并不会使附近的像素保持一致。因为交叉熵损失不能在像素之间施加更高级别的架构,所以使交叉熵损失最小化的标签通常不完整或模糊,并且后续也需要进行处理。
用条件随机场优化
CNN产生的原始标签通常是“斑点”图像,其中有些小区域可能有与其周围像素标签不匹配的错误标签。为了解决这一不连续性,可以采用一种平滑方法。我们希望这样能够确保对象占据图像中的连通区域,并且给定的像素可能与其大多数邻居具有相同的标签。
为了解决这一问题,一些模型架构使用条件随机场(CRF),它使用原始图像中的像素相似性对CNN的标签进行细化。

条件随机场是一个随机变量的图形。在这种情况下,每个顶点代表
1.某个像素的CNN标签(绿色顶点Xi)
2.某个像素的实际对象标签(黄色顶点Yi)
边缘编码两种类型的信息:
1.蓝色框:两个像素的实际对象标签之间的依赖性物理上彼此接近。
2.红色框:CNN的原始预测与给定像素的实际对象标签之间的依赖性。
每个依赖性都与一个势函数相关联,势函数是一个有两个相关随机变量值的函数。例如,当相邻像素的实际对象标签相同时,第一种依赖性可能就有较高的可能性。直观上来说,对象标签用作隐藏变量,能够根据某种概率分布产生可观察的CNN像素标签。
为了使用CRF来改进标签,首先使用交叉验证对带有训练数据的图形模型的参数进行学习。然后,我们修改参数将概率P(Y1,Y2,... Yn | X1,X2,... Xn)最大化。CRF推断的输出是原始图像像素的最终对象标签。
实际上,CRF图形是完全连接的,这就意味着,物理上距离较远像素的节点之间仍然可以共享边缘。这样的图形具有数十亿个边缘,使得精确的推断在计算上难对其进行处理。CRF架构倾向于使用高效的近似技术进行推理。
分类器的架构
CNN分类和CRF细化仅仅是语义分割过程的一个例子。一些研究论文已经对这方面进行了论述:
1.U-Net(2015)通过生成原始训练数据的失真版本,对其训练数据进行增强。这使CNN编码-解码器能够抵抗这种变形,并从更少的训练图像中进行学习。在少于40张的生物医学数据集图像上进行训练时,其IOU值仍高至92%。
2.DeepLab(2016)将CNN编码-解码器与CRF细化相结合,来生成对象标签(作者重点介绍了解码中的上采样)。空洞卷积(Dilated Convolutions)在每个层使用不同大小的滤波器,使得每个层都可以捕捉各种不同比例的特征。在Pascal VOC 2012测试装置上,此架构的平均IOU为70.3%。
3.Dilation10(2016)是空洞卷积的替代方法。完整的管道将空洞卷积“前端模块”连接到上下文模块和CRF-RNN,以便做进一步处理。Dilation10在Pascal VOC 2012测试装置上的平均IOU为75.3%。
其他的训练体系
本小节介绍现在主要的的偏离分类器和CRF模型的训练方案。这些方法并不是由单独的组件和优化组成,而是一些端到端的方法。
完全可微的条件随机场
Zheng等人的CRF-RNN模型介绍了一种方法:将分类和后处理合并为单一端到端模型,可以共同优化两个图形。因此,模型可自动学习类似于CRF高斯内核权重的参数——将推理逼近算法中的步骤用卷积表示来实现,并且通过使用递归神经网络(RNN)来对推理算法的完全迭代进行建模。

对抗训练
对抗训练有助于提高高阶一致性。受生成对抗网络(GAN)的启发,Luc等人训练了一个标准CNN(用于语义分割)和对抗网络(尝试学习区分标记过的真实数据分割和分割网络的预测)。分割网络旨在产生分割,而这种分割是对抗网络无法从真实分割中区分开来的。
在这里,我们希望分割看起来能够尽可能贴近真实。如果其他网络很容易将预测与实际情况分开,那么我们的预测就不够好。

时间上的分割
我们如何对未来的对象进行预测?为了实现这一点,可以通过对场景中的连续分割进行建模。这比较适用于机器人或无人驾驶场景,其中对物体的运动进行建模对计划有用。
Luc等人的文章表明,直接预测未来语义分割,比先预测未来帧再进行分割的性能要好。他们使用自回归模型,使用过去的分割来预测下一个分割St + 1。然后使用Si和St + 1预测下一个分割St + 2。

他们对模型在不同时间尺度上的表现进行了对比:在Cityscapes数据集上,预测模型在下一帧、未来0.5秒和未来10秒上的性能。结果显示,模型在10s的时间尺度上表现不佳,但在下一帧和未来0.5s的时间尺度上表现较好。总体来说,该方法在性能上要比由基于光流的经典技术组成的基线方法好的多。
总结
这些方法(如U-Net)基本上都遵循一个基本结构:采用深度学习(卷积网络)进行预处理,再用经典概率技术对其输出做后处理。尽管卷积网络的原始输出可能不完美,但后处理能够更好的使用与人类直觉相匹配的分割,输出“好的”标签。
其余的方法(如对抗学习),可以作为语义分割的端到端解决方案。与前面介绍的CRF步骤不同,端到端技术不需要手动对各个组件进行建模,来完善原始预测。由于端到端解决方案的性能更加优于多级管道方法,未来的研究可能会越来越多地关注端到端算法。
以上为译文。
本文由阿里云云栖社区组织翻译。
文章原标题《Going beyond the bounding box with semantic segmentation》,译者:Mags,审校:袁虎。
本文为云栖社区原创内容,未经允许不得转载。
网友评论