卷积神经网络在图像分割中的进化史:从R-CNN到Mask R-CNN

王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI

卷积神经网络(CNN)不仅能用来对图像进行分类,还在图像分割任务重有着广泛的应用。

Dhruv Parthasarathy就职于Athelas,一家专注于深度学习技术的医疗健康公司。他在Medium上发布了一篇博客文章,介绍了在具体的图像分割任务中如何应用卷积神经网络,来得到更好的效果。

以下内容编译自Parthasarathy文章:

自从深度学习鼻祖Geoff Hinton与他的研究生Alex Krizhevsky和Ilya Sutskever在2012年ImageNet大规模视觉识别挑战赛中获得冠军,卷积神经网络(CNN)已经成为了图像分类的黄金标准。从那时起,卷积神经网络一直在改进,现在已经在辨别ImageNet数据集的1000类日常对象上超过人类了。

图1:CNN在ImageNet挑战中超过人类,图中y轴是ImageNet辨识的错误率。

虽然网络分类结果令人感到欣喜,但在人类真实生活中的视觉理解要远比图像分类复杂多样。

图2:ImageNet分类挑战中所使用的图像实例:图像边缘完好,且只有一个对象。

在分类任务中,一张图像通常只具有单个焦点对象,任务是说出这个对象的类别。但是在实际的世界中,我们会看到往往不止一个物体对象,这是一项更复杂的任务。

图3:现实生活中的情景通常由许多不同且重叠的对象、背景和动作组成。

在一个复杂的情景中,通常有多个互相重叠的对象和不同的背景,我们不仅要对这些不同的对象分类,而且也要识别对象间的边界、差异和彼此的关系。

图4:在图像分割中,其任务目标是对图像中的不同对象进行分类,并确定对象边界。

卷积神经网络可以帮助我们处理这个复杂的任务吗?对于更复杂的图像,我们可以使用卷积神经网络来区分图像中的不同对象及其边界吗?Ross Girshick和他的同事们用最近几年的研究工作,给出了一个肯定的答案。

本文目标

这篇文章将会介绍一些用于对象检测和图像分割的主流技术,并了解其网络状态的演化过程。

具体来说,我们将介绍首先解决了这个问题的R-CNN网络,以及后来发展出来的Fast R-CNN和Faster R-CNN。另外,我们还将介绍Mask R-CNN网络,这是Facebook Research组最近发布的一篇文章,其扩展了这种对象检测技术,且提供了像素级分割的技术。以下是这篇文章所引用的论文:

1. R-CNN:https://arxiv.org/abs/1311.2524

2. Fast R-CNN:https://arxiv.org/abs/1504.08083

3. Faster R-CNN:https://arxiv.org/abs/1506.01497

4. Mask R-CNN:https://arxiv.org/abs/1703.06870

2014年:R-CNN - 将CNN用于对象检测的起源

图5:R-CNN网络的对象检测算法可以分析图像并识别图像中主要对象的位置和类别。

受到多伦多大学Hinton实验室研究工作的启发,加州大学伯克利分校Jitendra Malik教授领导的团队,提出了一个在如今看来好像是不可避免的问题:

能否将Krizhevsky等人提出的网络模型泛化应用到对象检测上?

对象检测技术是一项通过标出图像中不同对象并对其进行分类的任务。在对象检测挑战赛PASCAL VOC上,由Ross Girshick,Jeff Donahue和Trevor Darrel组成的这个团队,发现这个问题可以通过Krizhevsky的研究成果来进行解决。

他们写道:

这篇论文首先说明一个事实,与基于更简单的用方向梯度直方图(HOG)类特征构建的系统相比,卷积神经网络可以显着提高PASCAL VOC上的对象检测性能。

接下来,我们将会深入了解他们的Regions With CNNs (R-CNN)架构是如何运作的。

理解R-CNN

R-CNN的目标是分析图像,并正确识别图像中主要对象,通过边界框标出对象的具体位置。

输入:图像

输出:图像中每个对象的边界框和标签

但是我们如何确定这些边界框的大小和位置呢?R-CNN网络通过以下操作完成了一个我们直观上可以完成的任务:在图像中提出了多个边框,并判断这其中的任何一个是否对应着一个具体对象。

图6:通过多种尺寸的边框进行选择性搜索,查找具有相同的纹理、颜色或强度的相邻像素。

R-CNN网络使用了选择性搜索的方法,来创建这些边界框或区域建议(region proposal)。在图6中,选择性搜索通过不同大小的边框分析图像,并且对于每个图像块,尝试通过纹理、颜色或强度将相邻像素组合在一起,以识别对象。

想深入了解选择性搜索,请阅读: http://www.cs.cornell.edu/courses/cs7670/2014sp/slides/VisionSeminar14.pdf

图7:在创建一组区域建议后,R-CNN网络会将每个图像块传递给一种改进版的AlexNet网络,确定这些图像块是否为有效区域。

创建了区域建议后,R-CNN网络将该区域块变形标准的方形,并将其输入到改进版的AlexNet网络,具体步骤如图7所示。AlexNet是在ImageNet 2012比赛中的最优网络,R-CNN灵感就来源于它。

在CNN的输出层,R-CNN网络还应用了支持向量机(SVM)的方法,它能够判断该图像是否为对象,以及是什么对象。

改善边界框

现在,我们已经能在边界框中找到对象,但是还能缩小边界框来适应对象的真实尺寸吗?可以的,这就是构建R-CNN网络的最后一个步骤。R-CNN网络对区域建议进行简单的线性回归操作,来获得更贴近的边界框坐标,获得了R-CNN网络的最终输出结果。回归模型的输入和输出分别为:

输入:与对象相对应的图像子区域。

输出:子区域中对象的新边界框坐标。

所以,R-CNN网络总结为以下几个步骤:

1. 为边界框生成一组区域建议;

2. 通过预先训练好的AlexNet网络来判断边框中的图像是否为有效区域,最后通过支持向量机算法来确定边框中的图像类别;

3. 在确定边框图像的类别后,应用线性回归模型,来输出更紧密的边框坐标。

2015年:Fast R-CNN - 加速并简化R-CNN

图8:Ross Girshick发明了R-CNN和Fast R-CNN,并继续推动着Facebook Research计算机视觉技术的发展。

R-CNN网络的性能很好,但是实际上训练起来很慢,有以下几个原因:

1. 单个图像的每个区域建议都需要利用AlexNet网络进行判断,每次判断大约需要2000次前向传播。

2. 此网络必须单独训练三种不同的模型:提取图像特征的CNN网络,判断类别的分类器和缩小边框的回归模型。这样子很难训练这些网络。

2015年,R-CNN网络的第一作者Ross Girshick解决了这两个问题,发明了新的网络Fast R-CNN。现在我们来了解Fast R-CNN网络的主要创新点。

创新点1:引入感兴趣区域池化(ROI Pooling)

在CNN的前向传递过程中,Girshick意识到,每个图像的多个区域总是互相重叠,导致我们多次运行相同的CNN计算,多达2000次。他的创新很简单:可不可以对每个图像只运行一次CNN运算,然后在2000次前向传播过程中找到一种共享这个计算结果的方法?

图9:在RoIPool层中,创建每个图像完整的前向传播过程,并从获得的前向传播过程中提取每个感兴趣区域的转换特征。

这正是Fast R-CNN网络用感兴趣区域池化(RoIPool,Region of Interest Pooling)技术所做的创新。其创新点在于,RoIPool层共享了CNN网络在图像子区域中的前向传播过程。在图9中,是从CNN的特征图谱中选择相应的区域来获取每个区域的CNN抽象特征。然后,通常使用最大池化操作来合并每个区域中的初级抽象特征。所以我们只进行了原始图像的一次前向传播操作,而不是2000次。

创新点2:将所有模型整合到一个网络中

图10:Fast R-CNN将卷积神经网络、分类器和缩小边框的回归模型整合成一个单输入双输出的网络。

Fast R-CNN的第二个创新点是在一个模型中联合训练卷积神经网络、分类器和边界框回归模型。在R-CNN中,我们使用了卷积神经网络来提取图像特征,用支持向量机来分类对象和用了回归模型来缩小边界框,但是Fast R-CNN使用单个网络模型来实现以上三个功能。

图10是Fast R-CNN网络的过程示意图。Fast R-CNN在CNN输出层用softmax函数代替了SVM分类器,来输出对象类别。同时在CNN输出层,还加入了用来输出边界框坐标的线性回归层。这样单个网络就可以输出所需信息。

整个模型的输入和输出分别为:

输入:带多个区域建议的图像。

输出:具有更紧密边界框的每个区域的对象类别。

2016年:Faster R-CNN - 加快区域建议

即使Fast R-CNN的性能有了很大的改善,但是仍然存在一个短板——区域建议生成方式(region proposer)。在上面已经提到,为了检测图像中对象位置,第一步是要产生一系列随机多尺度的边界框或是待测试的感兴趣区域。在Fast R-CNN中,通过选择性搜索方法创建这些区域,这是一个相当缓慢的过程,被认为是整个流程的短板。

图11:微软研究院首席研究员孙剑是Faster R-CNN网络团队的领导者。

在2015年中期,由任少卿,何恺明,Ross Girshick和孙剑组成的一个微软研究院团队发现了一种叫做“Faster R-CNN”的网络结构,几乎把边框生成过程的运算量降为0。

Faster R-CNN的创新点在于,区域建议取决于通过CNN里的第一个卷积层前进传播过程中的图像特征。那为什么不对单独运行选择性搜索算法的方式进行改变,重复利用多个区域建议中相同的CNN结果呢?

图12:在Faster R-CNN中,单个CNN网络用来实现区域建议和对象分类。

这正是Faster R-CNN团队所取得的成果。图12中解释了该如何使用单个CNN网络来实现区域建议和对象分类。这样,只需要训练一个CNN网络,我们几乎不花费计算量获得了所需的区域建议。作者在文章中写道:

我们观察到,Fast R- CNN网络里区域检测器所使用的卷积特征图谱,也可用于生成区域建议,从而把区域建议的运算量几乎降为0。

该模型的输入和输出分别为:

输入:图像(不需要带有区域建议)。

输出:图像中对象的类别和边界框坐标。

如何生成区域

接下来我们来看下Faster R-CNN如何从CNN特征中生成这些区域建议。Faster R-CNN在CNN特征的顶部添加了一个完全卷积网络(FCN),创建了所谓的区域建议网络(Region Proposal Network)。

图13:区域建议网络在CNN特征图谱上依次滑动一个窗口。在每个窗口位置上,网络在每个锚点上输出一个分值和一个边界框。因此,一共有4k个边界框坐标,其中k是锚点的数量。

区域建议网络通过在CNN特征图谱上依次滑动窗口,并在每个窗口中输出k个可能的边界框和分值,来评估这些边界框包含对象的可能性。这k个边框代表了什么?

图14:一般来说,带有人物形象的边框往往是竖长的矩形。我们可以使用这种常理,通过创建这样维度的位置,来指导生成区域建议网络。

直观上,我们知道图像中的对象应该符合某些常见的纵横比和大小。例如,我们想要创建一些适合人类形状的矩形框。这样当遇到非常窄的边界框时可以排除是人类对象的可能性。以这种方式,我们创建大小为k的通用长宽比,称为锚点盒(anchor box)。对于每个这样的锚点盒,我们对应输出一个边界框坐标和每个位置的分值。

考虑到这些锚点盒,这个区域建议网络的输入和输出分别为:

输入:CNN特征图谱。

输出:每个锚点的边界框。该边界框中的图像作为对象的可能性用输出分值表示。

然后,我们只将每个可能是目标对象的边界框传递到Fast R-CNN中,以实现对象分类和缩紧边界框。

2017年:Mask R-CNN - 扩展Faster R-CNN用于像素级分割

图15:具体的图像分割目标是在像素级场景中识别不同对象的类别。

到目前为止,我们已经了解到如何能够以许多有趣的方式使用CNN特征,来有效地用边界框定位图像中的不同对象。

我们可以进一步扩展这些技术,定位到每个对象的精确像素,而不是仅限于边框吗?这个问题就是经典的图像分割问题。何恺明和Girshick等研究人员,在Facebook人工智能研究部门里使用了一种被称为Mask R-CNN的网络结构来探索这个问题。

图16:Facebook 人工智能研究部门的研究员何恺明是Mask R-CNN网络的主要作者,也是Fast R-CNN的共同作者。

和Fast R-CNN、Faster R-CNN很相似,Mask R-CNN的基本思想是简单直观的:Faster R-CNN在物体检测上效果很好,那么我们能否将其扩展并应用到像素级分割?

图17:在Mask R-CNN中,Faster R-CNN的CNN特征顶部添加了一个完全卷积网络(Fully Convolutional Network),用来生成掩码(分割输出)。特别注意网络的掩码输出是怎么与Faster R-CNN网络的对象分类器和边界框回归网络实现并行的。

Mask R-CNN通过向Faster R-CNN网络添加一个分支来输出一个二进制掩码,来说明给定像素是否为对象的一部分。在图17中的白色分支仅仅是CNN特征图谱上的完全卷积网络。

该模型的输入和输出分别为:

输入:CNN特征图。

输出:在像素属于对象的所有位置上都具有1s的矩阵,其他位置为0s,这种规则被称为二进制掩码。

但Mask R-CNN网络的作者不得不进行一次小小的调整,使这个训练按预期往前推进。

RoiAlign:重新对齐RoIPool,使结果更准确

图18:图像舍弃RoIPool技术,通过RoIAlign技术传递,使得由RoIPool选择的特征图谱区域更精准地对应原始图像的区域。这是很有必要的,因为与用边界框确定坐标相比,像素级分割需要更精细的像素对齐。

Mask R-CNN作者发现,在最初的Faster R-CNN网络结构中, RoIPool所选择的特征图谱区域与原始图像的区域略微不对齐。由于图像分割需要像素级特异性,与边框确定过程不同,这自然就导致了不准确。

作者通过调整RoIPool方法,实现更准确的对齐,巧妙地解决了这个问题,这个调整后的方法叫做RoIAlign方法。

图19:我们该如何准确地将原始图像的感兴趣区域映射到特征图谱上?

假设我们有一个尺寸大小为128x128的图像和大小为25x25的特征图谱。如果我们想要在特征图谱中表示原始图像中左上角15x15像素的区域,该如何从特征图中选择这些像素?

我们知道原始图像中的每个像素对应于特征图谱中的25/128个像素。要从原始图像中选择15像素,我们就在特征图谱中选择15*(25/128)=2.93个像素。

在RoIPool中,我们会舍弃小数点后的部分,只选择2个像素,导致轻微的错位。然而,在RoIAlign中,我们避免了这样的舍弃。相反,我们使用双线性插值来精确地得到这2.93像素中的信息。这样子在很大程度上避免了RoIPool方法造成的像素错位。

Mask R-CNN在生成这些掩码后,将它们与Faster R-CNN输出层的对象类别和边界框组合起来,产生了奇妙的精确分割。

图20:Mask R-CNN能够对图像中的对象进行分割和分类。

未来展望

在过去短短的3年时间里,我们看到了对图像分割问题的研究,是如何从Krizhevsky等人的R-CNN,经过不断发展,最后得到Mask R-CNN的奇妙分割效果。

单独来看,Mask R-CNN所呈现的结果似乎是无法达到的巨大飞跃。然而,我希望大家通过这篇文章可以认识到,这些成果,实际上由多年来辛勤工作和团队合作带来的直观、渐进式提升累积而来。R-CNN、Fast R-CNN、Faster R-CNN和最终的Mask R-CNN,每个想法并不一定都是跨越式的进步,但是叠加这些进步后,最终的Mask R-CNN却带来了非常显著的奇妙效果,使目前的计算机视觉技术向人类的视觉能力更靠近了一些。

让我感到特别兴奋的是,从R-CNN网络进化到Mask R-CNN网络,一共只用了三年时间。随着更多的资金、更多的关注和更多的支持,计算机视觉在三年后会有怎样的进展呢?让我们拭目以待。

如果想更深入了解CNN在图像分割中的进展,极其背后的原理,别忘了我们在文章开头提到的这四篇论文:

1. R-CNN:https://arxiv.org/abs/1311.2524

2. Fast R-CNN:https://arxiv.org/abs/1504.08083

3. Faster R-CNN:https://arxiv.org/abs/1506.01497

4. Mask R-CNN:https://arxiv.org/abs/1703.06870

以及文中提到的选择性搜索: http://www.cs.cornell.edu/courses/cs7670/2014sp/slides/VisionSeminar14.pdf

原文发布于微信公众号 - 量子位(QbitAI)

原文发表时间:2017-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SeanCheney的专栏

《Scikit-Learn与TensorFlow机器学习实用指南》 第5章 支持向量机

支持向量机(SVM)是个非常强大并且有多种功能的机器学习模型,能够做线性或者非线性的分类,回归,甚至异常值检测。机器学习领域中最为流行的模型之一,是任何学习机器...

31220
来自专栏机器学习算法与Python学习

特征学习

Contents 1 关键词 2 为什么需要进行特征学习 3 无监督学习解决的问题 4 功能强大的特征学习 1. 关键词 自我学习/自学习 self-t...

352100
来自专栏机器之心

学界 | 将未来信息作为正则项,Twin Networks加强RNN对长期依赖的建模能力

30880
来自专栏null的专栏

机器学习中的特征——特征选择的方法以及注意点

关于机器学习中的特征我有话要说     在这次校园招聘的过程中,我学到了很多的东西,也纠正了我之前的算法至上的思想,尤其是面试百度的过程中,让我渐渐意识到机器学...

30790
来自专栏人工智能LeadAI

TensorFlow从0到1 | 第十五章 重新思考神经网络初始化

上一篇14 交叉熵损失函数——克服学习缓慢从最优化算法层面入手,将二次的均方误差(MSE)更换为交叉熵作为损失函数,避免了当出现“严重错误”时导致的学习缓慢。 ...

34080
来自专栏AI研习社

从LeNet-5到DenseNet

卷积、池化等操作不再赘述,总结一下从LeNet到DenseNet的发展历程。 ? 图1. LeNet-5 网络结构 一、LeNet-5 卷积神经网络的开山之...

48070
来自专栏机器学习算法与Python学习

主流机器学习算法优缺点总结,先从基础玩起!

决策树分类方法,采用基于最小距离的基尼指数估计函数,用来决定由该子数据集生成的决策树的拓展形。决策树回归方法,采用切分点与切分变量来计算的损失来估计函数。如果目...

17120
来自专栏智能算法

GBDT(梯度提升决策树)算法(详细版)

一、前言 通过之前的文章GBDT算法(简明版)对GBDT的过程做了大概的讲解,我们可以了解到GBDT是一种迭代的决策树算法,由多棵决策树组成,所有树的结论累加起...

943110
来自专栏人工智能

神经网络基础

3.1. 神经网络基础 3.1.1 神经元(Neuron) 就像形成大脑基本元素的神经元一样,神经元是构成神经网络的基本结构。想象一下,当大脑得到新信息时如何处...

22480
来自专栏企鹅号快讯

DL笔记:Neural Networks 神经网络

回顾 -DL笔记:机器学习和深度学习的区别 :听说深度学习的思想受到神经网络的启发,那是什么玩意儿? :神经网络包括生物神经网络和人工神经网络。在生物神经网络中...

20360

扫码关注云+社区

领取腾讯云代金券