赞
踩
Convolutional Neural Networks(CNNs) 不仅仅被用来分类,而且被用于很多其它方面。在这篇文章中,我们将看到 CNN 如何被用于提升图像实例分割任务中的结果。
自从 Alex Krizhevsky, Geoff Hinton, and Ilya Sutskever 在2012年赢得了 ImageNet,Convolutional Neural Networks(CNNs) 已经成为图像分类的黄金准则。事实上,从那时起,CNNs 已经提高到现在它们在 ImageNet 挑战上超越人类的地步!
图1:CNNs现在已经在ImageNet挑战方面胜过人类。上图中的y轴是ImageNet上的错误率。
虽然这些结果令人印象深刻,但是比起真实的人类视觉理解的复杂性和多样性,图像分类要简单得多。
图2:在分类挑战中使用的一个图像样本。注意图像是否是构成良好的并且只有一个目标。
在分类中,一个图像通常只有单一目标作为焦点,这个任务是简单地说出那个图像是什么(见上文)。但是,当我们看看我们周围的世界,我们执行比这更为复杂的任务。
我们看到的复杂的场景通常带有多个重叠的目标和不同的背景,我们不仅分类这些不同的目标,而且识别它们的边界,差异和彼此之间的关系!
图4:在图像分割中,我们的目标是对图像中的不同对象进行分类,并确定其边界。Source: Mask R-CNN paper.
CNNs可以帮助我们实现这样复杂的任务吗?也就是说,给出更复杂的图像,我们可以使用CNNs来识别图像中的不同目标及其边界吗?事实上,正如Ross Girshick和他的同事在过去几年所展示的那样,答案是肯定的。
通过这篇文章,我们将介绍一些用于目标检测和分割的主要技术背后的直觉思想,并了解它们是如何从一个实现演变到下一个实现的。具体来说,我们将介绍R-CNN(区域CNN),CNNs 的这个问题的最原始应用,以及其衍生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图5: 诸如R-CNN的目标检测算法应用在图像上,可以识别图像中主要目标的位置和类别。
受University of Toronto 的Hinton’s lab 的研究启发,UC Berkeley里由 Jitendra Malik 教授领导的一个小团队,问自己一个即使是今天似乎也不可避免的问题:
在多大程度上[Krizhevsky et. al’s results]概括对象检测?
目标检测是找到图像中的不同目标并进行分类的任务(如上图所示)。由Ross Girshick(我们再次看到的名字),Jeff Donahue和Trevor Darrel组成的团队发现,通过测试PASCAL VOC Challenge(一种类似于ImageNet的受欢迎的目标检测挑战),这个问题确实可以通过 Krizhevsky 的结果解决。他们写到:
This paper is the first to show that a CNN can lead to dramatically higher object detection performance on PASCAL VOC as compared to systems based on simpler HOG-like features.
(这篇论文首次显示,与基于更简单的HOG类特征的系统相比,CNN可以显著提高 PASCAL VOC 上的目标检测性能。)
现在让我们花点时间来理解他们的架构,Regions With CNNs (R-CNN) 如何运作。
R-CNN的目标是摄取图像,并正确识别图像中主要目标(通过边框)的位置。
但是我们如何找出这些边框在哪里?R-CNN可以像我们直观上做的那样好--在图像上提出一堆边框,看看它们中的任何一个实际上是否对应一个目标。
图6:通过多个尺度的窗口查找进行选择性的搜索,并查找共享纹理,颜色或强度的相邻像素。Image source: https://www.koen.me/research/pub/uijlings-ijcv2013-draft.pdf
R-CNN使用称为选择性搜索的过程(可以在此处阅读here),来创建这些边界框或区域提案。在更高级别,选择性搜索(如上图所示)通过不同大小的窗口查看图像,并且对于每个大小,尝试通过纹理,颜色或强度将相邻像素分组在一起,以识别目标。
图7:在创建一组区域提案后,R-CNN只需将图像传递给 AlexNet 的修改版本,以确定它是否为有效区域。
一旦创建了这些提案,R-CNN就会简单地将该区域扭曲到一个标准的平方尺寸,并将其传递给一个修改版本的AlexNet(ImageNet 2012 获胜者提交,启发了R-CNN)如图7所示。
在CNN的最后一层,R-CNN添加了一个支持向量机(SVM),它简单地分类这是否是一个对象,并且是什么目标对象。这是上图中的第4步。现在,在边界框里找到了对象,我们能够收紧盒子以适应对象的真实尺寸吗?的确,我们可以这样做,这也是R-CNN的最后一步。R-CNN对区域提案进行简单的线性回归,以生成更紧密的边界框坐标并获得最终结果。这是回归模型的输入和输出:
因此,总结一下,R-CNN只是包含以下简单的步骤:
1. 生成一组边界框的提案。
2. 通过预先训练的AlexNet运行边框中的图像,最后通过SVM来查看框中图像包含的对象。
3. 一旦对象被分类,通过线性回归模型输出输入框中更紧密的坐标。
图8:Ross Girshick 研究R-CNN 和Fast R-CNN。他继续推动Facebook Research的计算机视觉界限。
R-CNN的工作效果非常好,但由于以下几个简单的原因,实际上相当慢:
1. 它需要CNN(AlexNet)针对每个单个图像的每个区域提案前向传递(每个图像大约2000次前向传递)。
2. 它必须分别训练三种不同的模型--CNN生成图像特征,预测类别的分类器和收紧边界框的回归模型。这使得管线非常难以训练。
在2015年,R-CNN的第一作者 Ross Girshick,解决了这两个问题,导致了我们短期历史上的第二个算法 -- Fast R-CNN。现在我们来看看它的主要见解。
对于CNN的前向传递,Girshick 意识到,对于每个图像,图像的许多提出的区域总是重叠,使得我们一次又一次地运行相同的CNN计算(2000次!)他的见解很简单 -- 为什么不每个图像只运行一次CNN,然后在 2000个提案中找到一种分享这种计算的方法?
图9:在RoIPool中,创建图像的完整前向传递,并从所得到的前向传递中提取每个感兴趣区域的卷积特征。Source: Stanford’s CS231N slides by Fei Fei Li, Andrei Karpathy, andJustin Johnson.
这正是Fast R-CNN使用被称为 RoIPool(Region of Interest Pooling)的技术。其核心在于,RoIPool 分享了CNN在图像所有子区域的向前传递。在上图中,注意如何通过从CNN的特征图选择相应的区域来获取每个区域的CNN特征。然后,每个区域的特征简单的池化(通常使用最大池)。所以它只花费我们对图像的一遍遍历,而不是相对的 2000次!
Fast R-CNN的第二个见解是在单一模型中联合训练CNN,分类器和边界盒回归器。早些时候,我们有不同的模型提取图像特征(CNN),分类(SVM)和收紧边界框(回归),Fast R-CNN使用单个网络来代替计算所有三个。
你可以在上面的图像中看到它是如何实现的。Fast R-CNN使用CNN顶部的简单softmax层代替了SVM分类器,以输出分类。它还添加了与softmax层平行的线性回归层以输出边界框坐标。这样,所有需要的输出来自一个单一的网络!这是整个模型的输入和输出:
图11:Jian Sun, Microsoft Research的首席研究员,领导了Faster R-CNN的团队。Source: https://blogs.microsoft.com/next/2015/12/10/microsoft-researchers-win-imagenet-computer-vision-challenge/#sm.00017fqnl1bz6fqf11amuo0d9ttdp
在2015年中期,Microsoft Research中一个由Shaoqing Ren, KaimingHe, Ross Girshick, 和 Jian Sun组成的团队,找到了一种方法,通过一个他们命名为“Faster R-CNN”(创造性)的架构,使得区域的提案步骤花费几乎为0。
Faster R-CNN 的见解是,区域提案取决于已经通过CNN的前向计算的图像的特征(第一步分类)。那么为什么不为区域提案重用那些相同的CNN结果,而不是运行单独的选择性搜索算法?
图12:在Faster R-CNN 中,单个CNN用于区域提案和分类。
的确,这正是 Faster R-CNN 团队所取得的成就。在上图中,您可以看到如何使用单个CNN来执行区域提案和分类。这样,只有一个CNN需要接受训练,我们几乎免费获得区域提案!作者写道:
Ourobservation is that the convolutional feature maps used by region-baseddetectors, like Fast R- CNN, can also be used for generating region proposals[thus enabling nearly cost-free region proposals].
(我们的观察结果是,基于区域的检测器(如Fast R-CNN)使用的卷积特征图也可用于生成区域提案[从而实现几乎无成本区域提案]。)
以下是其模型的输入和输出:
让我们花点时间看看Faster R-CNN如何从CNN特征中生成这些区域提案。Faster R-CNN 在CNN的特征之上添加了一个简单的完全卷积网络(Fully Convolutional Network),构建了所谓的区域提案网络。
图13:区域提案网络在CNN的特征上滑动一个窗口。在每个窗口位置,网络输出一个得分和一个边界框的每个锚点(因此,4k个边框坐标,其中k是锚的数量)
直观地,我们知道图像中的对象应该符合某些常见的纵横比和大小。例如,我们知道我们想要一些类似于人类形状的矩形框。同样,我们知道我们不会看到很多盒子非常薄。以这种方式,我们创建k这样的通用长宽比,我们称之为锚盒。对于每个这样的锚盒,我们在图像中输出一个边界框和每个位置的得分。
考虑到这些锚盒,我们来看看这个区域提案网络的输入和输出:
图15:图像实例分割的目的是在像素级别识别场景中不同的对象。
到目前为止,我们已经看到我们如何能够以许多有趣的方式使用CNN特征,有效地使用边框来定位图像中的不同对象。
我们是否可以将这些技术进一步扩展,并定位每个对象的精确像素,而不是仅限于边框?这个称为图像分割的问题是Kaiming He 和一组研究人员,包括 Girshick, 在Facebook AI上使用被称为Mask R-CNN的架构进行了探索。图16:Kaiming He,一名 Facebook AI的研究员,是Mask R-CNN的首席作者,也是Faster R-CNN的合着者。
就像Fast R-CNN 和Faster R-CNN,Mask R-CNN的底层见解非常简单。鉴于Faster R-CNN对于物体检测的效果非常好,我们是否可以简单地将其扩展到能够进行像素级分割?
图17:在Mask R-CNN 里,在Faster R-CNN的CNN特征之上添加了一个简单的完全卷积网络(FCN),以生成掩码(分段输出)。请注意,这与Faster R-CNN的分类和边界框回归网络是如何并行的。
Mask R-CNN通过简单地向Faster R-CNN添加一个分支来输出一个二进制掩码,来说明给定像素是否是对象的一部分。如上所述,分支(在上图中为白色)仅仅是基于CNN的特征图上的简单的完全卷积网络。 以下是其输入和输出:
但是 Mask R-CNN不得不进行一个小的调整,使这个管线按预期工作。
当运行原始的未经修改的Faster R-CNN架构时,Mask R-CNN作者意识 RoIPool 选择的特征图的区域与原始图像的区域略有不对齐。由于图像分割需要像素级特异性,与边框不同,这自然导致不准确。
作者通过使用 RoIAlign 方法简单地调整 RoIPool 来更精确地对齐,从而解决了这个问题。
图19:我们如何准确地将原始图像的兴趣区域映射到特征图上?
想象一下,我们有一个大小为 128x128 的图像和大小为 25x25 的特征图。让我们想象一下,我们想要的是与原始图像中左上角 15x15 像素对应的区域特征(见上文)。 我们如何从特征图中选择这些像素?
我们知道原始图像中的每个像素对应于原始图像中的〜25/128像素。 要从原始图像中选择15像素,我们只选择15 * 25/128〜= 2.93像素。
在 RoIPool 中,我们会将其舍入,并选择2个像素,导致轻微的错位。然而,在 RoIAlign 中,我们避免了这种四舍五入。相反,我们使用双线性插值(bilinearinterpolation)来精确地构想像素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 提出的每个想法并不一定是跨越式发展,但是它们的总和结果却带来了非常显著的效果,使我们更接近于人类的理解视觉水平。特别令我兴奋的是,R-CNN 和 Mask R-CNN 之间的时间只有三年!随着资金,关注和支持的增多,计算机视觉在未来三年会有怎样进一步的进展?
[4]有关论文:
https://github.com/BasicCoder/BriefHistoryOfCNNsInImageSegmentation/blob/master/1311.2524.pdf
https://github.com/BasicCoder/BriefHistoryOfCNNsInImageSegmentation/blob/master/1504.08083.pdf
https://github.com/BasicCoder/BriefHistoryOfCNNsInImageSegmentation/blob/master/1506.01497.pdf
https://github.com/BasicCoder/BriefHistoryOfCNNsInImageSegmentation/blob/master/1703.06870.pdfCopyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。