从特斯拉到计算机视觉之「图像语义分割」

作者:魏秀参
链接:https://zhuanlan.zhihu.com/p/21824299
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

说起特斯拉,大家可能立马会想到今年5月份发生在特斯拉Model S自动驾驶上的一宗夺命车祸。初步的调查表明,在强烈的日照条件下,驾驶员和自动驾驶系统都未能注意到牵引式挂车的白色车身,因此未能及时启动刹车系统。而由于牵引式挂车正在横穿公路,且车身较高,这一特殊情况导致Model S从挂车底部通过时,其前挡风玻璃与挂车底部发生撞击,导致驾驶员不幸遇难。

无独有偶,8月8日美国密苏里州的一名男子、特斯拉Model X车主约书亚·尼利(Joshua Neally)在上班途中突发肺栓塞。在Model X的Autopilot自动驾驶功能的帮助下,他安全抵达了医院。这“一抑一扬”着实让人回味无穷,略有些“败也萧何,成也萧何”之意。

好奇的读者一定会有疑问:这“一成一败”背后的原理到底是什么?是自动驾驶系统中的哪个部分发生了失误而造成车祸?又是哪部分技术支撑了自动驾驶过程呢?

今天,我们就来谈谈自动驾驶系统中的一项重要核心技术——图像语义分割(Semantic image segmentation)。图像语义分割作为计算机视觉(Computer vision)中图像理解(Image understanding)的重要一环,不仅在工业界的需求日益凸显,同时语义分割也是当下学术界的研究热点之一。

什么是图像语义分割?

图像语义分割可以说是图像理解的基石性技术,在自动驾驶系统(具体为街景识别与理解)、无人机应用(着陆点判断)以及穿戴式设备应用中举足轻重。

我们都知道,图像是由许多像素(Pixel)组成,而「语义分割」顾名思义就是将像素按照图像中表达语义含义的不同进行分组(Grouping)/分割(Segmentation)。下图取自图像分割领域的标准数据集之一PASCAL VOC。其中,左图为原始图像,右图为分割任务的真实标记(Ground truth):红色区域表示语义为“person”的图像像素区域,蓝绿色代表“motorbike”语义区域,黑色表示“background”,白色(边)则表示未标记区域。显然,在图像语义分割任务中,其输入为一张的三通道彩色图像,输出则是对应的一个矩阵,矩阵的每一个元素表明了原图中对应位置像素所表示的语义类别(Semantic label)。因此,图像语义分割也称为“图像语义标注”(Image semantic labeling)、“像素语义标注”(Semantic pixel labeling)或“像素语义分组”(Semantic pixel grouping)。

从上图和题图中,大家可以明显看出图像语义分割任务的难点便在于这“语义”二字。在真实图像中,表达某一语义的同一物体常由不同部件组成(如,building,motorbike,person等),同时这些部分往往有着不同的颜色、纹理甚至亮度(如building),这给图像语义的精确分割带来了困难和挑战。

前DL时代的语义分割

从最简单的像素级别“阈值法”(Thresholding methods)、基于像素聚类的分割方法(Clustering-based segmentation methods)到“图划分”的分割方法(Graph partitioning segmentation methods),在深度学习(Deep learning, DL)“一统江湖”之前,图像语义分割方面的工作可谓“百花齐放”。在此,我们仅以“Normalized cut” [1]和“Grab cut” [2]这两个基于图划分的经典分割方法为例,介绍一下前DL时代语义分割方面的研究。

  • Normalized cut (N-cut)方法是基于图划分(Graph partitioning)的语义分割方法中最著名的方法之一,于2000年Jianbo Shi和Jitendra Malik发表于相关领域顶级期刊TPAMI。通常,传统基于图划分的语义分割方法都是将图像抽象为图(Graph)的形式为图节点,为图的边),然后借助图理论(Graph theory)中的理论和算法进行图像的语义分割。常用的方法为经典的最小割算法(Min-cut algorithm)。不过,在边的权重计算时,经典min-cut算法只考虑了局部信息。如下图所示,以二分图为例(将分为不相交的,两部分),若只考虑局部信息,那么分离出一个点显然是一个min-cut,因此图划分的结果便是类似这样离群点,而从全局来看,实际想分成的组却是左右两大部分。

针对这一情形,N-cut则提出了一种考虑全局信息的方法来进行图划分(Graph partitioning),即,将两个分割部分,与全图节点的连接权重()考虑进去:

.

如此一来,在离群点划分中,中的某一项会接近1,而这样的图划分显然不能使得是一个较小的值,故达到考虑全局信息而摒弃划分离群点的目的。这样的操作类似于机器学习中特征的规范化(Normalization)操作,故称为Normalized cut。N-cut不仅可以处理二类语义分割,而且将二分图扩展为路(-way)图划分即可完成多语义的图像语义分割,如下图例。

  • Grab cut是微软剑桥研究院于2004年提出的著名交互式图像语义分割方法。与N-cut一样,grab cut同样也是基于图划分,不过grab cut是其改进版本,可以看作迭代式的语义分割算法。Grab cut利用了图像中的纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作即可得到比较好的前后背景分割结果。

在Grab cut中,RGB图像的前景和背景分别用一个高斯混合模型(Gaussian mixture model, GMM)来建模。两个GMM分别用以刻画某像素属于前景或背景的概率,每个GMM高斯部件(Gaussian component)个数一般设为。接下来,利用吉布斯能量方程(Gibbs energy function)对整张图像进行全局刻画,而后迭代求取使得能量方程达到最优值的参数作为两个GMM的最优参数。GMM确定后,某像素属于前景或背景的概率就随之确定下来。

在与用户交互的过程中,Grab cut提供两种交互方式:一种以包围框(Bounding box)为辅助信息;另一种以涂写的线条(Scribbled line)作为辅助信息。以下图为例,用户在开始时提供一个包围框,grab cut默认的认为框中像素中包含主要物体/前景,此后经过迭代图划分求解,即可返回扣出的前景结果,可以发现即使是对于背景稍微复杂一些的图像,grab cut仍有不俗表现。

不过,在处理下图时,grab cut的分割效果则不能令人满意。此时,需要额外人为的提供更强的辅助信息:用红色线条/点标明背景区域,同时用白色线条标明前景区域。在此基础上,再次运行grab cut算法求取最优解即可得到较为满意的语义分割结果。Grab cut虽效果优良,但缺点也非常明显,一是仅能处理二类语义分割问题,二是需要人为干预而不能做到完全自动化。

DL时代的语义分割

其实大家不难看出,前DL时代的语义分割工作多是根据图像像素自身的低阶视觉信息(Low-level visual cues)来进行图像分割。由于这样的方法没有算法训练阶段,因此往往计算复杂度不高,但是在较困难的分割任务上(如果不提供人为的辅助信息),其分割效果并不能令人满意。

在计算机视觉步入深度学习时代之后,语义分割同样也进入了全新的发展阶段,以全卷积神经网络(Fully convolutional networks,FCN)为代表的一系列基于卷积神经网络“训练”的语义分割方法相继提出,屡屡刷新图像语义分割精度。下面就介绍三种在DL时代语义分割领域的代表性做法。

  • 全卷积神经网络 [3]

全卷积神经网络FCN可以说是深度学习在图像语义分割任务上的开创性工作,出自UC Berkeley的Trevor Darrell组,发表于计算机视觉领域顶级会议CVPR 2015,并荣获best paper honorable mention。

FCN的思想很直观,即直接进行像素级别端到端(end-to-end)的语义分割,它可以基于主流的深度卷积神经网络模型(CNN)来实现。正所谓“全卷积神经网络”,在FCN中,传统的全连接层fc6和fc7均是由卷积层实现,而最后的fc8层则被替代为一个21通道(channel)的1x1卷积层,作为网络的最终输出。之所以有21个通道是因为PASCAL VOC的数据中包含21个类别(20个object类别和一个“background”类别)。下图为FCN的网络结构,若原图为,在经过若干堆叠的卷积和池化层操作后可以得到原图对应的响应张量(Activation tensor),其中,为第层的通道数。可以发现,由于池化层的下采样作用,使得响应张量的长和宽远小于原图的长和宽,这便给像素级别的直接训练带来问题。

为了解决下采样带来的问题,FCN利用双线性插值将响应张亮的长宽上采样到原图大小,另外为了更好的预测图像中的细节部分,FCN还将网络中浅层的响应也考虑进来。具体来说,就是将Pool4和Pool3的响应也拿来,分别作为模型FCN-16s和FCN-8s的输出,与原来FCN-32s的输出结合在一起做最终的语义分割预测(如下图所示)。

下图是不同层作为输出的语义分割结果,可以明显看出,由于池化层的下采样倍数的不同导致不同的语义分割精细程度。如FCN-32s,由于是FCN的最后一层卷积和池化的输出,该模型的下采样倍数最高,其对应的语义分割结果最为粗略;而FCN-8s则因下采样倍数较小可以取得较为精细的分割结果。

  • Dilated Convolutions [4]

FCN的一个不足之处在于,由于池化层的存在,响应张量的大小(长和宽)越来越小,但是FCN的设计初衷则需要和输入大小一致的输出,因此FCN做了上采样。但是上采样并不能将丢失的信息全部无损地找回来。

对此,dilated convolution是一种很好的解决方案——既然池化的下采样操作会带来信息损失,那么就把池化层去掉。但是池化层去掉随之带来的是网络各层的感受野(Receptive field)变小,这样会降低整个模型的预测精度。Dilated convolution的主要贡献就是,如何在去掉池化下采样操作的同时,而不降低网络的感受野。

的卷积核为例,传统卷积核在做卷积操作时,是将卷积核与输入张量中“连续”的的patch逐点相乘再求和(如下图a,红色圆点为卷积核对应的输入“像素”,绿色为其在原输入中的感知野)。而dilated convolution中的卷积核则是将输入张量的patch隔一定的像素进行卷积运算。如下图b所示,在去掉一层池化层后,需要在去掉的池化层后将传统卷积层换做一个“dilation=2”的dilated convolution层,此时卷积核将输入张量每隔一个“像素”的位置作为输入patch进行卷积计算,可以发现这时对应到原输入的感知野已经扩大(dilate)为;同理,如果再去掉一个池化层,就要将其之后的卷积层换成“dilation=4”的dilated convolution层,如图c所示。这样一来,即使去掉池化层也能保证网络的感受野,从而确保图像语义分割的精度。

从下面的几个图像语义分割效果图可以看出,在使用了dilated convolution这一技术后可以大幅提高语义类别的辨识度以及分割细节的精细度。

  • 以条件随机场为代表的后处理操作

当下许多以深度学习为框架的图像语义分割工作都是用了条件随机场(Conditional random field,CRF)作为最后的后处理操作来对语义预测结果进行优化。

一般来讲,CRF将图像中每个像素点所属的类别都看作一个变量,然后考虑任意两个变量之间的关系,建立一个完全图(如下图所示)。

在全链接的CRF模型中,对应的能量函数为:

其中是一元项,表示像素对应的语义类别,其类别可以由FCN或者其他语义分割模型的预测结果得到;而第二项为二元项,二元项可将像素之间的语义联系/关系考虑进去。例如,“天空”和“鸟”这样的像素在物理空间是相邻的概率,应该要比“天空”和“鱼”这样像素的相邻概率大。最后通过对CRF能量函数的优化求解,得到对FCN的图像语义预测结果进行优化,得到最终的语义分割结果。值得一提的是,已经有工作[5]将原本与深度模型训练割裂开的CRF过程嵌入到神经网络内部,即,将FCN+CRF的过程整合到一个端到端的系统中,这样做的好处是CRF最后预测结果的能量函数可以直接用来指导FCN模型参数的训练,而取得更好的图像语义分割结果。

展望

俗话说,“没有免费的午餐”(“No free lunch”)。基于深度学习的图像语义分割技术虽然可以取得相比传统方法突飞猛进的分割效果,但是其对数据标注的要求过高:不仅需要海量图像数据,同时这些图像还需提供精确到像素级别的标记信息(Semantic labels)。因此,越来越多的研究者开始将注意力转移到弱监督(Weakly-supervised)条件下的图像语义分割问题上。在这类问题中,图像仅需提供图像级别标注(如,有“人”,有“车”,无“电视”)而不需要昂贵的像素级别信息即可取得与现有方法可比的语义分割精度。

另外,示例级别(Instance level)的图像语义分割问题也同样热门。该类问题不仅需要对不同语义物体进行图像分割,同时还要求对同一语义的不同个体进行分割(例如需要对图中出现的九把椅子的像素用不同颜色分别标示出来)。

最后,基于视频的前景/物体分割(Video segmentation)也是今后计算机视觉语义分割领域的新热点之一,这一设定其实更加贴合自动驾驶系统的真实应用环境。

(首发于机器之心公众号,链接请戳:专栏 | 从特斯拉到计算机视觉之「图像语义分割」

作者:魏秀参谢晨伟

References:

[1] Jianbo Shi and Jitendra Malik. Normalized Cuts and Image Segmentation, IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 22, No. 8, 2000.

[2] Carsten Rother, Vladimir Kolmogorov and Andrew Blake. "GrabCut"--Interactive Foreground Extraction using Iterated Graph Cuts, ACM Transactions on Graphics, 2004.

[3] Jonathan Long, Evan Shelhamer and Trevor Darrell. Fully Convolutional Networks for Semantic Segmentation. IEEE Conference on Computer Vision and Pattern Recognition, 2015.

[4] Fisher Yu and Vladlen Koltun. Multi-scale Context Aggregation by Dilated Convolutions. International Conference on Representation Learning, 2016.

[5] Shuai Zheng, Sadeep Jayasumana, Bernardino Romera-Paredes, Vibhav Vineet, Zhizhong Su, Dalong Du, Chang Huang and Philip H. S. Torr. Conditional Random Fields as Recurrent Neural Networks. International Conference on Computer Vision, 2015.

时间: 2024-10-18 04:13:50

从特斯拉到计算机视觉之「图像语义分割」的相关文章

深度卷积网络CNN与图像语义分割

转载请注明出处: http://xiahouzuoxin.github.io/notes/ 级别1:DL快速上手 级别2:从Caffe着手实践 级别3:读paper,网络Train起来 级别3:Demo跑起来 读一些源码玩玩 熟悉Caffe接口,写Demo这是硬功夫 分析各层Layer输出特征 级别4:何不自己搭个CNN玩玩 级别5:加速吧,GPU编程 关于语义分割的一些其它工作 说好的要笔耕不缀,这开始一边实习一边找工作,还摊上了自己的一点私事困扰,这几个月的东西都没来得及总结一下.这就来记录

图像语义分割的前世今生

  1998年以来,人工神经网络识别技术已经引起了广泛的关注,并且应用于图像分割.基于神经网络的分割方法的基本思想是通过训练多层感知机来得到线性决策函数,然后用决策函数对像素进行分类来达到分割的目的.这种方法需要大量的训练数据.神经网络存在巨量的连接,容易引入空间信息,能较好地解决图像中的噪声和不均匀问题.选择何种网络结构是这种方法要解决的主要问题. 图像分割是图像识别和计算机视觉至关重要的预处理.没有正确的分割就不可能有正确的识别. 这里先说一下图像语义分割和普通的图像分割的关系: 普通的图像

图像语义分割技术

引用自:https://www.leiphone.com/news/201705/YbRHBVIjhqVBP0X5.html 大多数人接触 "语义" 都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复.嗯,看到这里你应该已经猜到了,图像领域也是存在 "语义" 的. 今天是 AI 大热年,很多人都关注与机器人的语音交互,可是有没有想过,将来的机器人如果不能通过图像来识别主人,家里的物品.宠物,那该多没意思.说近一

基于深度学习的图像语义分割技术概述之背景与深度网络架构

图像语义分割正在逐渐成为计算机视觉及机器学习研究人员的研究热点.大量应用需要精确.高效的分割机制,如:自动驾驶.室内导航.及虚拟/增强现实系统.这种需求与机器视觉方面的深度学习领域的目标一致,包括语义分割或场景理解.本文对多种应用领域语义分割的深度学习方法进行概述.首先,我们给出本领域的术语及主要背景知识.其次,介绍主要的数据集及难点,以帮助研究人员找到合适的数据集和研究目标.之后,概述现有方法,及其贡献.最后,给出提及方法的量化标准及其基于的数据集,接着是对于结果的讨论.最终,对于基于深度学习

关于图像语义分割的总结和感悟

转自:http://www.2cto.com/kf/201609/545237.html 前言 (呕血制作啊!)前几天刚好做了个图像语义分割的汇报,把最近看的论文和一些想法讲了一下.所以今天就把它总结成文章啦,方便大家一起讨论讨论.本文只是展示了一些比较经典和自己觉得比较不错的结构,毕竟这方面还是有挺多的结构方法了. 介绍 图像语义分割,简单而言就是给定一张图片,对图片上的每一个像素点分类 从图像上来看,就是我们需要将实际的场景图分割成下面的分割图: 不同颜色代表不同类别. 经过我阅读“大量”论

图像语义分割之FCN和CRF

http://blog.csdn.net/u012759136/article/details/52434826 前言 (呕血制作啊!)前几天刚好做了个图像语义分割的汇报,把最近看的论文和一些想法讲了一下.所以今天就把它总结成文章啦,方便大家一起讨论讨论.本文只是展示了一些比较经典和自己觉得比较不错的结构,毕竟这方面还是有挺多的结构方法了. 介绍 图像语义分割,简单而言就是给定一张图片,对图片上的每一个像素点分类 从图像上来看,就是我们需要将实际的场景图分割成下面的分割图:  不同颜色代表不同类

DeepLabv3+图像语义分割实战:训练自己的数据集

DeepLabv3+是一种非常先进的基于深度学习的图像语义分割方法,可对物体进行像素级分割. 本课程将手把手地教大家使用labelme图像标注工具制造自己的数据集,并使用DeepLabv3+训练自己的数据集,从而能开展自己的图像分割应用. 课程链接:https://edu.51cto.com/course/18817.html 本课程有两个项目实践: (1) CamVid语义分割 :对CamVid数据集进行语义分割 (2) RoadScene语义分割:对汽车行驶场景中的路坑.车.车道线等进行物体

U-Net图像语义分割实战:训练自己的数据集

U-Net是一种基于深度学习的图像语义分割方法,尤其在医学图像分割中表现优异. 本课程将手把手地教大家使用labelme图像标注工具制作自己的数据集,生成Mask图像,并使用U-Net训练自己的数据集,从而能开展自己的图像分割应用. 课程链接:https://edu.51cto.com/course/18936.html 本课程有三个项目实践: (1) Kaggle盐体识别比赛 :利用U-Net进行Kaggle盐体识别 (2) Pothole语义分割:对汽车行驶场景中的路坑进行标注和语义分割 (

基于深度学习的图像语义分割方法综述

近年来,深度学习技术已经广泛应用到图像语义分割领域.主要对基于深度学习的图像语义分割的经典方法与研究现状进行分类.梳理和总结.根据分割特点和处理粒度的不同,将基于深度学习的图像语义分割方法分为基于区域分类的图像语义分割方法和基于像素分类的图像语义分割方法.把基于像素分类的图像语义分割方法进一步细分为全监督学习图像语义分割方法和弱监督学习图像语义分割方法.对每类方法的代表性算法进行了分析介绍,并详细总结了每类方法的基本思想和优缺点,系统地阐述了深度学习对图像语义分割领域的贡献.对图像语义分割相关实