李诗萌 思源参与

一文了解什么是语义分割及常用的语义分割方法有哪些

语义分割是计算机视觉中的基础任务,我们通常会使用基于 CNN 加 CRF 的方法或直接使用对抗性的训练实现端到端的分割。本文简要介绍了这两种方法及它们的特点。

人类是如何描述场景的?我们可能会说「窗户下有一张桌子」,或者「沙发右边有一盏灯」。图像理解的关键在于将一个整体场景分解成几个单独的实体,这也有助于我们推理目标的不同行为。

当然,目标检测方法可以帮助我们绘制某些确定实体的边框,但人类对场景的理解能以像素级的精细程度对每一个实体进行检测并标记精确的边界。我们已经开始发展自动驾驶汽车和智能机器人,这些都需要深入理解周围环境,因此精确分割实体变得越来越重要。

什么是语义分割?

语义分割是计算机视觉中的基本任务,在语义分割中我们需要将视觉输入分为不同的语义可解释类别,「语义的可解释性」即分类类别在真实世界中是有意义的。例如,我们可能需要区分图像中属于汽车的所有像素,并把这些像素涂成蓝色。

来源:Zhao 等人的 ICNet(2017):语义分割的演示视频。

虽然像聚类这样的无监督方法可以用于分割,但其结果不一定是有语义的。这些方法无法对它们训练的类进行细分,但是在搜索区域界限方面更加擅长。

与图像分类或目标检测相比,语义分割使我们对图像有更加细致的了解。这种了解在诸如自动驾驶机器人以及图像搜索引擎等许多领域都是非常重要的。因此,本文讨论的主题是使用深度学习方法进行有监督的语义分割。

数据集和指标

目前有一些常用于训练语义分割模型的数据集:

  • Pascal VOC 2012:有 20 类目标,这些目标包括人类、机动车类以及其他类,可用于目标类别或背景的分割

  • Cityscapes:50 个城市的城市场景语义理解数据集

  • Pascal Context:有 400 多类的室内和室外场景

  • Stanford Background Dataset:至少有一个前景物体的一组户外场景。

来自 Stanford Background Dataset 的示例图像,该数据集的图像大致为 320 *240 像素,还包括指向每块像素所属类别的整数矩阵。

用于评估语义分割算法性能的标准指标是平均 IOU(Intersection Over Union,交并比),IoU 定义如下:

这样的评价指标可以判断目标的捕获程度(使预测标签与标注尽可能重合),也可以判断模型的精确程度(使并集尽可能重合)。

流程

一般而言,在高层次上,应用于语义分割模型的流程是:

我们将在下文中继续讨论流程中的分类器和后处理阶段。

架构和方法

卷积神经网络分类

最近的语义分割架构一般都用卷积神经网络(CNN)为每个像素分配一个初始类别标签。卷积层可以有效地捕捉图像中的局部特征,并以层级的方式将许多这样的模块嵌套在一起,这样 CNN 就可以试着提取更大的结构了。通过一系列卷积捕捉图像的复杂特征,CNN 可以将一张图的内容编码为紧凑表征。

但为了将单独的像素映射给标签,我们需要将标准 CNN 编码器扩展为编码器-解码器架构。在这个架构中,编码器使用卷积层和池化层将特征图尺寸缩小,使其成为更低维的表征。解码器接收到这一表征,用通过转置卷积执行上采样而「恢复」空间维度,这样每一个转置卷积都能扩展特征图尺寸。在某些情况下,编码器的中间步骤可用于调优解码器。最终,解码器生成一个表示原始图像标签的数组。

Yasrab 等人文章(2016)中 SCNet 的编码器-解码器架构。

在许多语义分割架构中,CNN 旨在最小化的损失函数交叉熵损失。该目标函数度量的是预测像素概率分布(在所有类上)和实际的概率分布的差异。

然而,对语义分割来说,交叉熵损失并不理想。因为对一张图来说,交叉熵损失是每一个像素损失的和,它并不鼓励邻近像素保持一致。因为交叉熵损失无法在像素间采用更高级的结构,所以交叉熵最小化的标签预测一般都是不完整或者是模糊的,它们都需要进行后续处理。

条件随机场优化

来自 CNN 的原始标签一般都是「缺失(patchy)」图像,在图像中有一些小区域的标签可能不正确,因此无法匹配其周围的像素标签。为了解决这种不连续性,我们可以用一种平滑的形式。我们需要确保目标占据图片中的连续区域,这样给定的像素和其周围像素的标签就是一样的。

为了解决这个问题,有一些架构使用了条件随机场(CRF),使用原始图像中像素的相似性重新精炼 CNN 的标签。

条件随机场案例。

条件随机场是由随机变量组成的图,在这种情况下,每个顶点表示:

  • 确定像素的 CNN 标签(绿色顶点 X_i)

  • 确定像素的实际类别标签(黄色顶点 Y_i)

边会编码两类信息:

  • (1)蓝色:两个像素的实际类别,即它们之间的依赖关系

  • (2)红色:对于给定像素的 CNN 原始预测和实际标签之间的依赖关系

每个依赖性关系都具有势能,这是一个关于两个相关随机变量值的函数。例如,当相邻像素的实际目标标签相同时,第一类依存关系的势能较高。直观地讲,当目标标签是隐藏变量时,会根据概率分布产生可观察的 CNN 像素标签。

为了用 CRF 精炼标签,我们首先通过交叉验证用训练数据学习图模型的参数。然后,为了使概率 P(Y_1, Y_2, … Y_n | X_1, X_2,…X_n)最大化,对参数进行调整。CRF 的输出是原始图像像素的最终的目标标签。

实际上,CRF 图是完全连接的,也就意味着即使是从物理角度上讲相距很远的像素节点也可以共享边。这样的图有数十亿的边,从计算上讲难以进行精确处理。CRF 架构倾向于使用高效的近似技术进行处理。

分类器架构

CNN 分类后跟着 CRF 精炼只是一个可能的语义分割解决方法。也有论文叙述了其它的一些优秀方法:

  • U-Net(2015,https://arxiv.org/pdf/1505.04597.pdf)通过产生原始训练数据的扭曲版而增加训练数据。这一步使 CNN 编码器-解码器变得更加鲁棒以抵抗这些形变,并能从更少的训练图像中进行学习。当它在少于 40 张图的生物医学数据集上训练时,IOU 值仍能达到 92%。

  • DeepLab(2016,https://arxiv.org/pdf/1606.00915.pdf)将 CNN 编码器-解码器和 CRF 精炼过程相结合以产生目标标签(如前文所述,作者强调了解码器的上采样)。空洞卷积(也称扩张卷积)在每一层都使用大小不同的卷积核,使每一层都能捕获各种比例的特征。在 Pascal VOC 2012 测试集中,这个架构的平均 IOU 达到了 70.3%。

  • Dilation10(2016,https://arxiv.org/pdf/1511.07122.pdf)是一种扩张卷积的替代方法。完整流程是将扩张卷积的「前端模块」连接到内容模块上,再用 CRF-RNN 进行下一步处理。通过这样的构造,Dilation10 在 Pascal VOC 2012 测试集上的平均 IOU 值达到了 75.3%。

其他训练方案

我们最近的训练方案偏离了分类器和 CRF 模型。这些方法不是独立地优化不同模块,而是采用端到端的方法。

完全可微分的条件随机场

Zheng 等人建立的 CRF-RNN 模型引入了一种可以将分类和后处理合并为单一端到端的模型,该模型可以同时优化这两个阶段。因此可以自动学习诸如 CRF 高斯核权重这样的参数。他们将推理逼近算法的步骤重整为卷积,并使用循环神经网络(RNN)对具有完全迭代性质的推理算法进行建模。

来自 FCN-8s、DeepLab 和 CRF-RNN 的两个示例图及其分割结果。注意 CRF-RNN,它在端到端的模型中优化了 CRF,因而产生了更少的斑点,图像也更准确。

对抗训练

近期的另一个工作重点是使用对抗性训练获得更高阶的一致性。受生成对抗网络(GAN)的启发,Luc 等人训练了用于语义分割的标准 CNN 以及试着学习区分真实图分割和预测图分割的对抗网络。分割网络旨在产生对抗网络无法从真实分割中区别出来的预测分割。

这个方法的直观想法是希望我们的分割看起来尽可能真是。如果其它网络可以从真实分割中简单地将我们的预测结果区别出来,那么就说明我们的预测结果不够好。

来源:Luc 等人的论文,使用对抗性网络进行语义分割

随时间的分割

我们要如何预测未来目标会在哪呢?我们可以建模场景中的分割过程而解决这一问题。这适用于机器人自动驾驶,在这两个问题中对物体的运动建模有助于计划。

我们首先在 Luc 等人(2017)的文章中发现了这一点。这篇文章说到,与预测未来的帧然后再进行分割相比,直接预测未来的语义分割则要求更高的性能。

他们使用了自回归模型,在自回归模型中他们用过去的分割预测下一次分割 S_t+1。为了预测之后的分割 S_t+2,他们将过去的 S_i 与预测出的 S_t+1 相结合再推断,依此类推得出所有的序列。

该训练策略用于从之前的分割预测未来的分割。L_t 是一个可以捕获预测分割和真实分割之间差异的损失函数。来源:Luc 等人的论文,Predicting Deeper into the Future of Semantic Segmentation。

他们比较了模型在不同时间尺度的表现:在 Cityscapes 数据集上评估下一帧(短时间)、下一个 0.5 秒(中等时间)和下一个 10 秒(长时间)的表现。他们发现,在时间较长时模型的表现不佳,但是在短期和中期时间范围中,模型性能都很好。

结语

许多诸如 U-Net 这样的方法,遵循最基本的结构:我们应用深度学习(卷积网络),其次是用经典概率技术进行后处理。虽然卷积网络的原始输出并不完美,但是后处理能利用人类先验知识更好地进行分割,以得到「好的」标签。

其余诸如对抗学习这样的方法,作为分割的端到端解决方案有非常强大的性能。与之前讨论的 CRF 不同,端到端的技术不需要人们对单独的组件建模以完善原始预测值。由于这些方法的表现优于多级流程,未来研究可能会越来越重视端到端的算法。

原文链接:https://thegradient.pub/semantic-segmentation/

入门计算机视觉语义分割
9
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

自动驾驶技术技术

从 20 世纪 80 年代首次成功演示以来(Dickmanns & Mysliwetz (1992); Dickmanns & Graefe (1988); Thorpe et al. (1988)),自动驾驶汽车领域已经取得了巨大进展。尽管有了这些进展,但在任意复杂环境中实现完全自动驾驶导航仍被认为还需要数十年的发展。原因有两个:首先,在复杂的动态环境中运行的自动驾驶系统需要人工智能归纳不可预测的情境,从而进行实时推论。第二,信息性决策需要准确的感知,目前大部分已有的计算机视觉系统有一定的错误率,这是自动驾驶导航所无法接受的。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

交叉熵技术

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

机器人技术技术

机器人学(Robotics)研究的是「机器人的设计、制造、运作和应用,以及控制它们的计算机系统、传感反馈和信息处理」 [25] 。 机器人可以分成两大类:固定机器人和移动机器人。固定机器人通常被用于工业生产(比如用于装配线)。常见的移动机器人应用有货运机器人、空中机器人和自动载具。机器人需要不同部件和系统的协作才能实现最优的作业。其中在硬件上包含传感器、反应器和控制器;另外还有能够实现感知能力的软件,比如定位、地图测绘和目标识别。之前章节中提及的技术都可以在机器人上得到应用和集成,这也是人工智能领域最早的终极目标之一。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

先验知识技术

先验(apriori ;也译作 先天)在拉丁文中指“来自先前的东西”,或稍稍引申指“在经验之前”。近代西方传统中,认为先验指无需经验或先于经验获得的知识。先验知识不依赖于经验,比如,数学式子2+2=4;恒真命题“所有的单身汉一定没有结婚”;以及来自纯粹理性的推断“本体论证明”

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

条件随机场技术

条件随机场(conditional random field,简称 CRF),是一种鉴别式机率模型,是随机场的一种,常用于标注或分析序列资料,如自然语言文字或是生物序列。 如同马尔可夫随机场,条件随机场为无向性之图模型,图中的顶点代表随机变量,顶点间的连线代表随机变量间的相依关系,在条件随机场当中,随机变量 Y 的分布为条件机率,给定的观察值则为随机变量 X。原则上,条件随机场的图模型布局是可以任意给定的,一般常用的布局是链接式的架构,链接式架构不论在训练(training)、推论(inference)、或是解码(decoding)上,都存在有效率的算法可供演算。 条件随机场跟隐马尔可夫模型常被一起提及,条件随机场对于输入和输出的机率分布,没有如隐马尔可夫模型那般强烈的假设存在。 线性链条件随机场应用于标注问题是由Lafferty等人与2001年提出的。

生成对抗网络技术

生成对抗网络是一种无监督学习方法,是一种通过用对抗网络来训练生成模型的架构。它由两个网络组成:用来拟合数据分布的生成网络G,和用来判断输入是否“真实”的判别网络D。在训练过程中,生成网络-G通过接受一个随机的噪声来尽量模仿训练集中的真实图片去“欺骗”D,而D则尽可能的分辨真实数据和生成网络的输出,从而形成两个网络的博弈过程。理想的情况下,博弈的结果会得到一个可以“以假乱真”的生成模型。

交叉验证技术

交叉验证,有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证的目标是定义一个数据集到“测试”的模型在训练阶段,以便减少像过拟合的问题,得到该模型将如何衍生到一个独立的数据集的提示。

推荐文章
暂无评论
暂无评论~