Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

Bharath Raj作者Geek AI、张倩编译

那些一键抠图的软件是怎么做到的?这些语义分割方法了解一下

分类问题是为整个图像分配一个标签,而语义分割则是将从属于同一类的对象看成一个整体,为图像中的每一个像素点分配一个标签。本文对一些经典语义分割方法和基于深度学习语义分割方法进行了讨论,此外还讨论了常见的选择和应用损失函数的方法。


语义分割

经典方法

深度学习时代到来之前,大量的图像处理技术被用来将图像分割成一些感兴趣的区域(ROI)。下面列出了一些常用的方法。

灰度分割

这是最简单的语义分割形式,它包括将一个区硬编码的规则或某个区域必须满足的特定的标签属性赋予这个区域。可以根据像素的属性(如灰度值)来构建这样的规则。「分裂-合并」算法就是一种用到了灰度分割技术的方法。该算法递归地将图像划分成若干子区域,直到可以为划分出的子区域分配一个标签,然后通过合并将相邻的带有相同标签的子区域融合起来。

该方法存在的问题是,规则必须是硬编码的。此外,仅使用灰度信息来表示复杂的类(比如人)是极其困难的。因此,需要特征提取和优化技术来恰当地学习这些复杂类所需的表征形式。

条件随机场

不妨考虑通过训练模型为每个像素分配一个类来分割图像。如果我们的模型不完美,我们可能会得到自然界中可能不存在的带有噪声的分割结果(如图中所示,狗像素与猫像素混合在一起)。
带有狗标签的像素和带有猫标签的像素混合的结果(图 c)。图 d 显示了一个更加符合真实情况的分割结果。

可以通过考虑像素之间的先验关系来避免这些问题,如果目标是连续的,那么相邻的邻像素往往具有相同的标签。使用条件随机场(CRF)对这样的关系进行建模。

CRF 是一种用于结构化预测的统计建模方法。与离散分类器不同,CRF 在进行预测之前可以考虑相邻的上下文环境,比如像素之间的关系。这使得它成为语义分割的理想候选建模方案。本节将探讨把 CRF 用于语义分割的方法。

图像中的每一个像素都与一组有限的可能状态相关联。在我们的例子中,目标标签是一组可能的状态。将一个状态(或标签 u)分配给单个像素(x)的成本被称为一元成本。为了对像素之间的关系建模,我们还考虑了将一对标签(u,v)分配给一对像素(x,y)的代价,这被称为成对代价。我们可以考虑相邻的像素对(网格 CRF)或者考虑图像中的所有像素对(密集 CRF)。
密集 CRF vs 网格 CRF

所有像素的一元成本和成对成本之和被称为 CRF 的能量(或成本/损失)。通过最小化能量,可以得到一个好的分割输出结果。

深度学习方法


深度学习极大地简化了进行语义分割的工作流程,并且得到了非常好的分割结果。在本节中,我们将讨论用于训练这些深度学习方法的流行的模型架构和损失函数

1. 模型架构

全卷积网络(FCN)是最简单、最流行的用于语义分割的架构之一。在论文「FCN for Semantic Segmentation」中,作者使用 FCN 首先通过一系列卷积操作将输入图片下采样至一个较小的尺寸(同时得到更多的通道)。这组卷积操作通常被称为编码器(encoder)。然后通过双线性插值或者一系列转置卷积对编码后的输出进行上采样。这组转置卷积通常被称为解码器(decoder)。
FCN 中的下采样和上采样过程。

尽管这个基础的架构很有效,但是它也有一些缺点。其中一个缺点就是由于转置卷积(或称反卷积)操作的输出不均匀重叠而导致棋盘状伪影的存在。
棋盘状伪影的形成过程。

另一个缺点是,由于编码过程中损失了一部分信息,导致边界的分辨率很低。

研究人员提出了一些解决方案来提高基础 FCN 模型的性能。下面是一些被证明行之有效的流行的解决方案:

U-Net

U-Net 是对简单的 FCN 模型架构的一种升级方案。它具有从卷积块的输出到相应的同一级的转置卷积块的输入之间的跳跃连接。
U-Net

这种跳跃连接让梯度可以更好地流动,并提供了来自多个尺度的图像大小的信息。来自更大尺度(较上层)的信息可以帮助模型更好地分类。来自更小尺度(较底层)的信息可以帮助模型更好地进行分割。

Tiramisu 模型

Tiramisu 模型类似于 U-Net,而不同的是,它使用 Dense 块进行卷积和转置卷积(正如 DenseNet 的论文中所做的那样)。一个 Dense 块由若干层卷积组成,其中所有较早的层的特征图会被用作所有后续层的输入。生成的网络具有极高的参数效率,可以更好地利用较早的层的特征。

Tiramisu 网络

这种方法的缺点是,由于几个机器学习框架中的连接操作的性质,它的内存效率不是很高(需要大型 GPU 才能运行)。

多尺度方法

一些深度学习模型显式地引入了整合来自多个尺度的信息的方法。例如,金字塔场景解析网络(PSPNet)使用四种不同尺寸的卷积核和步长来执行池化操作(最大池化或平均池化),从而输出卷积神经网络(如 ResNet)的特征图。然后,它使用双线性插值对所有池化输出和卷积神经网络的输出特征图的尺寸进行上采样,并在相应的通道上将它们连接起来。最后对这个连接的输出进行卷积操作从而生成预测结果。
PSPNet

Atrous 卷积(膨胀卷积)是一种可以在不增加大量参数的情况下,结合多尺度的特征的高效的方法。通过调节膨胀率(dilated rate),同一个卷积核的权值可以在空间中拓展地更远。这使其能够学习更多的全局上下文。
级联的 Atrous 卷积。

DeepLabv3 网络的论文使用了不同膨胀率的Atrous 卷积捕获来自多个尺度的信息,从而避免了显著的图像尺寸损失。他们通过级联的方式(如上图所示)和以并行的 Atrous 空间金字塔池化的方式(如下图所示)对 Atrous 卷积进行了实验。
并行的 Atrous 卷积。

CNN-CRF 的混合方法

一些方法使用卷积神经网络作为特征提取器,然后将特征作为一元成本(势)输入给密集 CRF(Dense CRF)。由于CRF具有对像素间关系建模的能力,这种 CNN-CRF 的混合方法得到了很好的分割结果。
使用 CNN  和 CRF 相结合的方法。

某些方法将 CRF 包含在了神经网络中,正如「CRF-as-RNN」(https://www.robots.ox.ac.uk/~szheng/papers/CRFasRNN.pdf)一文中所描述的,其中密集 CRF被建模为一个循环神经网络。这种端到端的训练如上图所示。

2. 损失函数

和一般的分类器不同,语义分割必须选择不同的损失函数。下面是一些常用的语义分割损失函数

通过交叉熵实现的像素级 softmax用于语义分割的标签尺寸与原始图像相同。标签可以用one-hot编码的形式表示,如下图所示:
语义分割独热编码形式

由于标签以方便的one-hot编码的形式存在,它可以直接被用作计算交叉熵的参考标准(目标)。然而,在应用交叉熵之前,必须对预测的输出在像素级上应用 softmax,因为每个像素可能属于我们的任何一种目标类。

焦点损失(Focal Loss)

《Focal Loss for Dense Object Detection》一文中介绍的焦点损失是对标准的交叉熵损失的一种改进,用于类别极度不平衡的情况。

让我们看看如下图所示的标准交叉熵损失方程(蓝色)。即使在我们的模型对像素的类的置信度很高的情况下(比如 80%),它也存在一定的损失值(这里大约是 0.3)。另一方面,当模型对一个类的置信度很高时,焦点损失(紫色,gamma=2)不会对模型造成如此大的影响(即置信度为 80% 的情况下损失接近于 0)。

标准的交叉熵损失(蓝色曲线)vs 带有 gamma 变量的焦点损失

让我们用一个直观的例子来探究一下为什么这很重要。假设我们有一个 10000 像素的图像,像素只有两个类:背景类(one-hot编码形式下表示为 0)和目标类(one-hot编码形式下表示为 1)。假设图像的 97% 是背景,3% 是目标。现在,假设我们的模型以 80% 的置信度确定某像素是背景,但只有 30% 的置信度确定某像素是目标类。

使用交叉熵时,背景像素损失等于 (10000 的 97%)*0.3 = 2850,目标像素损失等于(10000 的3%)* 1.2 = 360 。显然,由于置信度更高的类造成的损失占主导地位,模型学习目标类的动机非常低。相比之下,对于焦点损失,由于背景像素的损失等于(10000 的 97%)* 0,即0。这让模型可以更好地学习目标类。

Dice 损失

Dice 损失是另一种流行的损失函数,用于类极度不平衡的语义分割问题。Dice 损失在《V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation 》一文中被提出,它被用于计算预测出的类和真实类之间的重叠。Dice 系数(D)如下所示:

Dice 系数

我们的目标是最大化预测类和真实参考标准之间的重叠部分(即最大化 Dice 系数)。因此,我们通常将(1-D)最小化来实现相同的目标(由于大多数机器学习程序库只提供最小化损失函数的操作)。

Dice 系数的求导过程

虽然 Dice 损失对类不平衡的样本很有效,但计算其导数的公式(如上所示)在分母中有平方项。当这些值很小时,我们就可以得到很大的梯度,导致训练不稳定。

应用场景

语义分割技术被用于了各种各样的真实生活场景下的应用。下面是语义分割的一些重要的用例。

自动驾驶

语义分割用于识别车道、车辆、人和其他感兴趣的物体。其结果可用于智能决策,以正确引导车辆。
用于自动驾驶汽车的语义分割

自动驾驶汽车的限制之一是:语义分割模型必须是实时运行的。解决上述问题的一个方法是将 GPU 与车辆进行本地集成。为了提高上述解决方案的性能,可以使用更轻量级(参数更少)的神经网络,或实现适用于边缘计算的技术。

医学影像分割

语义分割技术也被用于在医学扫描影像中识别显著性元素。该方法对识别图像中的异常(如肿瘤)十分有效。提升算法准确率并解决低召回率的问题对于这种应用十分重要。
医学扫描影像的分割

我们还可以将一些不那么关键的操作自动化处理,比如根据语义分割后的 3D 扫描影像估计器官的体积。

场景理解

语义分割通常是更复杂任务的基础,如场景理解和可视化问答(VQA)。场景理解算法的输出通常是一个场景图或一段字幕。
场景理解的工作示意图。

时尚产业

语义分割在时尚产业中被用来从图像中提取出服装对象,为零售商店提供类似的建议。更先进的算法可以在图像中「重新设计」特定的衣服。
语义分割被用来作为根据输入文本重新为某人设计衣服的一个中间步骤。

卫星(或航拍)图像处理

语义分割还被用于从卫星图像中识别土地类型。典型的用例包括对水体进行分割以提供准确的地图信息。其他高级用例包括绘制道路图、确定作物类型、确定免费停车位等等。
卫星/航拍图像的语义分割结果。

结语


深度学习技术极大地提升并简化了语义分割算法,为语义分割在现实生活中更广泛的应用铺平了道路。由于研究社区不断努力地提高这些算法的准确性和实时性能,本文中列举出的概念可能并不详尽。话虽如此,本文介绍了这些算法的一些流行的变体和他们在现实生活中的一些应用。


原文链接:https://medium.com/beyondminds/a-simple-guide-to-semantic-segmentation-effcf83e7e54?sk=3d1a5a32a19d611fbd81028cfd4f23fd

理论语义分割计算机视觉
5
相关数据
深度学习技术

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

自动驾驶技术技术

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

图像分割技术

图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像索赋予相同的编号。

全卷积网络技术

全卷积网络最开始在论文 Fully Convolutional Networks for Semantic Segmentation(2015)中提出,它将传统卷积神经网络最后几个全连接层替换为卷积层。引入全卷积的意义在于它能实现密集型的预测,即在二维卷积下对图像实现像素级的分类,在一维卷积下对序列实现元素级的预测。

池化技术

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

交叉熵技术

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

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

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

自动驾驶汽车技术

自动驾驶汽车,又称为无人驾驶汽车、电脑驾驶汽车或轮式移动机器人,是自动化载具的一种,具有传统汽车的运输能力。作为自动化载具,自动驾驶汽车不需要人为操作即能感测其环境及导航。

边缘计算技术

边缘运算(英语:Edge computing),又译为边缘计算,是一种分散式运算的架构,将应用程序、数据资料与服务的运算,由网络中心节点,移往网络逻辑上的边缘节点来处理。边缘运算将原本完全由中心节点处理大型服务加以分解,切割成更小与更容易管理的部分,分散到边缘节点去处理。边缘节点更接近于用户终端装置,可以加快资料的处理与传送速度,减少延迟。在这种架构下,资料的分析与知识的产生,更接近于数据资料的来源,因此更适合处理大数据。

提升算法技术

Boosting是一种主要用于减少偏差的机器学习集成元算法,也是监督学习的一个变化,是一种将弱学习器转换为强学习器的机器学习算法家族。 Boosting是基于Kearns和Valiant(1988,1989)提出的问题:一组弱学习器能创造一个强大的学习器吗?一个弱的学习器被定义为一个分类器,它与真实的分类只有轻微的相关性(它可以比随机猜测更好地标注示例)。相反,强大的学习器是一个与真实分类任意相关的分类器。

损失函数技术

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

导数技术

导数(Derivative)是微积分中的重要基础概念。当函数y=f(x)的自变量x在一点x_0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x_0) 或 df(x_0)/dx。

最大池化技术

最大池化(max-pooling)即取局部接受域中值最大的点。

神经网络技术

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

卷积神经网络技术

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

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

分类问题技术

分类问题是数据挖掘处理的一个重要组成部分,在机器学习领域,分类问题通常被认为属于监督式学习(supervised learning),也就是说,分类问题的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类。根据类别的数量还可以进一步将分类问题划分为二元分类(binary classification)和多元分类(multiclass classification)。

双线性插值技术

双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。 双线性插值作为数值分析中的一种插值算法,广泛应用在信号处理,数字图像和视频处理等方面。

条件随机场技术

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

图像处理技术

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

上采样技术

在数字信号处理中,上采样、扩展和内插是与多速率数字信号处理系统中的重采样过程相关的术语。 上采样可以与扩展同义,也可以描述整个扩展和过滤(插值)过程。

语义分割技术

语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类。图像语义分割是AI领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环。

独热编码技术

独热编码是将分类变量转换为可提供给机器学习算法更好地进行预测的形式的过程。 一种稀疏向量,其中:一个元素设为 1;所有其他元素均设为 0。 one-hot 编码常用于表示拥有有限个可能值的字符串或标识符。例如,假设某个指定的植物学数据集记录了 15000 个不同的物种,其中每个物种都用独一无二的字符串标识符来表示。在特征工程过程中,您可能需要将这些字符串标识符编码为 one-hot 向量,向量的大小为 15000。

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