从R-CNN到Fast R-CNN,Faster R-CNN,Mask R-CNN

R-CNN 到 Mask R-CNN : CNN在图像分离中的简史

简介

  我们经常使用卷机神经网络来进行图片分离(注意,不仅仅是图片分类哦),在本文中,我们将会了解如何使用卷机神经网络来做图片实例分离。

从2012年Alex Krizhevsky,Geoff Hinton,和Ilya Sutskever 赢得ImageNet大奖开始,卷机神经网络变成为图片分类的黄金标准。事实上,从那时开始,卷机神经网络的识别图像分类的能力已经超过了人类,表现出无限的魅力。

image_net

CNN在图片分类领域已经超越了人类(图一)

虽然这些结果非常令人敬佩,但是,图片分类与人类视觉的理解能力的复杂程度以及多样方面相比表现得太过简单了

image_net
图片分类中的样例图片,想想咱们能用一个框正好把这只小狗框住吗(图二)

在图片分类的任务中,将要进行分类的图片一般都是图片中的焦点,或者可以说是图片中非常突出的物体,而且图片上往往仅有一个物体,但是想想,我们生活的世界是一个到处都是充满各种物体的世界,要在这样的世界中实现物体分类就没那么简单了。
image_net

充满各种各样,丰富多彩物体的现实世界(图三)

我们所看到的现实世界中,有很多物体是重叠的,并且有不同的背景,我们的任务不仅要把这些物体进行分类,而且还要识别他们的边界,不同点以及物体之间的相关性。
image_net

我们的目标,分类不同的物体,标定物体的边界(图四)

卷机神经网络能帮我们实现这样的功能吗?也就是说,给出一张复杂的图片,对不同的物体进行分类,标定物体的边界,卷机神经网络能完成这样的功能吗,该结论已经被Ross Girshick和他的团队证实——绝对可以

本文目标

  通过这篇文章,我们将会加深使用在物体侦测和分离背后相关技术理论的理解,也会明白这些技术是如何从一种具体实现演进到下一个更先进的技术。总而言之,本文覆盖了R-CNN(Regional CNN),解决上述问题的一种很原始的技术,紧接着讲解他的后续先进的演变 Fast R-CNN和Faster R-CNN,最终给大家讲解Mask R-CNN—-一篇由Facebook研究团队最近提出的基于像素级别的对象侦测和物体分离技术,以下是本文涉及到的论文。
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 - An Early Application of CNNs to Object Detection

image_net
R-CNN 对象侦测算法,拍摄一张照片,然后识别其中的主要物体并且将其分离出来(图五)

受到多伦多大学Hinton’s(很牛的一个实验室) 实验室的启发,由Jitendra Malik教授领导的一个小团队提出一个不可避免的疑问:

通用的物体侦测技术能到什么程度([Krizhevsky 结论,后面还会提到)。

物体侦测是一个从一张图片中找到不同物体并且将其进行分类的技术,该团队(由Ross Girshick ,Jeff Donahue和Trevor Darrel组成)发现该问题可以使用PASCAL和VOC 挑战赛的数据集(和ImageNet 类似)来进行测试,他们提到:

本文首次提到一个CNN网络可以很明显的提高物体侦测的性能和准确性,在PASCAL VOC数据集上,以简化的HOG特征作为对比

我们来看看 R-CNN的基本架构以及其是如何工作的

Understanding R-CNN

R-CNN的目标是拍一张照片然后正确地将其中主要的物体识别出来(放置于图片的一个矩形框中)

  • 输入:图片
  • 输出:图片矩形框+主要物体的标签(Label)

我们如何弄清楚矩形框处在什么位置呢,R-CNN的做法,在图片上构建一系列矩形框,然后看矩形框之间的相似性和一致性,最后将其合并的一个物体中

image_net

选择性搜索(selective search)通览各种大小不一的矩形窗口,然后插在其临近的矩形,分析其纹理,颜色,强度等信息,最终将其合并成一个更大的矩形框。(图六)

R-CNN创建这些矩形框或者叫做(region proposal),使用一种叫做选择性搜索(selective search)的技术,上图已做说明。
image_net

  一旦这些矩形框(也叫region proposals)创建完成之后,R-CNN通过AlexNet(一种普通图片物体识别的网络) 神经网络传输一张图片来判断其是否是一个有效的矩形区域,该网络分类正确的话就证明该矩形框选对了。
  在最后一层CNN网络,R-CNN使用SVM支持向量机简化该输出结果是不是一个物体对象的,如果是则是什么物体。

改善矩形框(proposals)

现在既然找到了物体矩形框,我们能还能时矩形框更加紧致使其刚好到达框住物体的大小吗?答案当然是能了,这就是R-CNN的最后一个步骤,R-CNN执行一个基于矩形框的很简单的线性回归来生成更加紧致的矩形框坐标,最终达到我们的目标,下面是回归模型的输入和输错:
* 输入: 能匹配出物体对象的子区域
* 输出: 新的物体在子区域中的矩形坐标

所以R-CNN的概括如下:
1. 生成一系列矩形候选框
2. 通过将数据输入预先训练好的AlexNet神经网络,并最终通过SVM来判断一个物体是否在矩形框中
3. R-CNN执行一个基于矩形框的很简单的线性回归来生成更加紧致的矩形框坐标

2015: Fast R-CNN - Speeding up and Simplifying R-CNN

R-CNN 效果很好,但是相当的慢
1. 对于每一张图片的每一个矩形框(proposals)都需要一个前向CNN网络作为支撑,也就是说每张图片大约需要2000次前向传输
2. R-CNN训练三种模式是单独分开执行的,CNN 生成图片特征,分类器预测类别,回归模型使矩形框更加紧致。这使得整条线特别难执行。

在2015年,Ross Girshick R-CNN 的第一作者,解决了这些问题,从R-CNN到Fast R-CNN的过度只需要很短的时间。

Fast R-CNN 观点一:RoI(Region of Interest)Pooling

对于前向传递的CNN网络,Girshick 认识到,对于每一张图片,图片上的大量矩形框总是重叠在一,致使我们在执行相同的一遍又一遍的CNN计算(~2000次),他的观点非常简单,为什么不一张图片只执行一次CNN,然后找到一种方式来共享计算过程。
image_net

该图就是Fast R-CNN使用的叫做RoIPool的技术(Region of Interest Pooling)。该技术的核心:对于一张图片在其子区域中RoIPool共享一个前向传递的CNN,在上面的图片中,注意如何从CNN的特征映射中选择相应的区域来获取每个区域的CNN特征。然后,每个对每个区域的特征进行池化(通常使用max pooling),所以该过程对于一张原始图片来说只需传递一次数据就能达到以上方法中两千次的效果。

Fast R-CNN 观点二:在一个网络中结合所有模型

image_net

Fast R-CNN 结合CNN,分类器,和矩形框(bounding box)回归合为一个,单一网络。(图七)

Fast R-CNN的第二个观点是将CNN,分类器,和矩形框(bounding box)回归合为一个单一的神经网络。在前一个R-CNN中我们用不同的模型来提取图片特征(CNN),分类(SVM),紧致Bounding Box(可以称作回归器),故 Fast R-CNN 仅仅使用单一网络就能实现这三个功能。

从上面图片可以看出,Fast R-CNN 在CNN的顶层使用softmax回归来替换SVM分类器。还添加和softmax并行的线性回归来计算Bounding Box的坐标,通过这种方式所有的输出就都来自于单一网络,以下是该模型的综述:

  • 输入:带矩形框(proposals)的图片
  • 输出:每个区域的图片分类以及紧致的矩形框(Bounding Box)

2016: Faster R-CNN - Speeding Up Region Proposal

  就算图片识别和分离取得如此成就,但Fast R-CNN仍然存在瓶颈—-矩形框生成器。正如我们所看到的,侦测对象位置最快速的一步是生成一些潜在的矩形候选框(Bounding Box 或者叫做RoI)。在Fast R-CNN网络中,这些Box依然是使用Selective Search(选择性搜索的方式生成),这是一个相当慢的过程。

image_net

孙建大神 MR Leader(图八)

2015年中旬,由孙建,何凯明,Ross Girshick,任少卿组成的微软研究团队发现一种生成proposal的方法,对于Fast R-CNN而言几乎不耗费任何计算成本。他们命名为Faster R-CNN

Faster R-CNN的观点是 Box(proposals)取决于图片的特征,该特征已经在前向CNN计算的过程中(用于分类)进行完成,所以产生一种疑问,为什么不重复使用CNN的结果来生成Box( proposals) 而不是执行一个单独的Selective Search(选择性搜索)的算法。

image_net

在 Faster R-CNN 中,一个单一的CNN用于做region proposals(Box),分类(图九)

确实,这就是该团的实现的最后理论,在上述图片中,你能看到单一CNN用来实现region proposals(Box)和分类,通过这种方式,仅仅只需要一个CNN就能开始进行模型的训练,从而不需要耗费任何别的代价就能得到proposals(Selective Search得到的结果)。他们提到:

我们观察的是特征映射的卷积过程,用于做基于region的侦测,就像Fast R-CNN,也能用来生成proposals。

以下是他们模型的基本输入输出:
* 输入:图片
* 输出:物体对象分类和物体的矩形框

区域(Regions)如何生成呢:
让我们来看看Faster R-CNN如何从CNN特征中生成候选Box(Regions),Faster R-CNN在CNN特征的顶层添加了一个全连接的卷机网络,称作:Region Proposal Network
image_net

Region Proposal Network 通过在CNN的特征层滑动一个窗口,在每一个窗口层面,每一个锚点输出一个分数(权重)和候选矩形框(4k 的矩形大小,k就是锚点的)。(图十)

Region Proposal Network通过在CNN特征映射层上传输一个滑动窗口,输出k个潜在的box矩形框以及每一个矩形框所占的权重。k个box代表又什么呢?

image_net
我们都知道能框住这个人的一定是矩形,我们能使用这种理论通过创建这种维度矩形的锚点来引导生成我们的Region Proposal Network。(图十一)

直觉上我们都知道,图片上的物体都或多或少的能通过调整矩形的宽高比以将其刚好框住。例如,我们知道我们不会看到很多很薄很细的盒子,通过这种方式,我们创建k个这种常见的矩形(我称之为锚点矩形)。对于每一个锚点矩形,我们输出一个矩形框和权重(在每一张图片的每个位置)。

考虑到这种锚点矩形,我们来看看该网络的输入和输出吧:

  • CNN 特征映射
  • 每个锚点一个边界框,以及矩形中的内容是一个物体的权重

2017: Mask R-CNN - Extending Faster R-CNN for Pixel Level Segmentation

image_net

图片实例分离的目标是在一个场景中在像素级别上鉴别不同的物体(图十二)

至今为止,我们已经能使用CNN特征以许多有趣的方式来有效地在一张图片中定位不同的对象(以Box的方式)

我们还能继续往下走吗?精确的在像素级别上定位物体而不是仅仅以矩形框的方式(bounding box),该问题就是何凯明和他的团队研究的问题,叫做 Mask R-CNN
与Fast R-CNN和Faster R-CNN相似,Mask R-CNN‘s 重视的理论是前向传播,考虑到Faster R-CNN在物体鉴别的效果特别好,我们还能继续实现基于像素级别的物体分离吗?

image_net

Mask R-CNN 一个全连接的卷机神经网络(FCN),添加在Faster R-CNN的CNN特征网络的顶层,用以生成物体的Mask(分离层的输出)。注意这和分类以及bounding box回归网络的生成是并行的。(图十三)

Mask R-CNN 通过在Faster R-CNN网络上添加个分支,该分支产生一个二分Mask,用来确定给出的像素是否是一个物体的一部分。该分支(在上诉图片中用白色来体现),和之前一样,就是一个基于CNN 特征映射网络顶层的全连接的卷机神经网络。下面是他的输入和输出:

  • 输入:CNN特征映射
  • 输出:一个矩阵 1 代表该像素属于该物体,0 表示该像素不属于该物体

但是Mask R-CNN的作者对之前的网络做了一些微小的调整
RoiAlign - Realigning RoIPool to be More Accurate

image_net

当执行基于原始的没有任何修正的Faster R-CNN架构时,Mask R-CNN的作者意识到通过由RoIPool选择的特征映射的区域和原始图片区域相比有一点点的没有对齐。由于图像分离需要像素级别的的准确性,和bounding box不一样(本身就带有不准确性)

这些作者们通过明智的调整RoIPool的精度来解决该问题。
image_net

我们如何精确的从原始图片的特征映射中精确的映射一个区域(图十四)

想想一下,我们有一个128x128以及一个正特映射25x25的图片,让我们假定左上角的15x15的像素和原始图片的特征是一致的,我们有多大的可能性从特征映射中选择这些这些像素。
我们知道每一个像素在原始图片中和25/128像素是一致的,要从原始图片中选择15个像素,我们仅仅15*25/128 ~= 2.93个像素。

在RoI中,我们可能将该值降低了,选择两个像素造成了不对齐。然后,在RoIAlign,我们避免了四舍五入,使用了双限行插值的方式获得更高的精度2.93,在该精度下我们避免了由RoI造成的不对齐。

一旦这些Mask 生成,Mask R-CNN结合来源于Faster R-CNN的分类,边界框,将能产生更加精确的物体分离。

下图是使用Mask R-CNN 技术生成的图片生成实例
image_net

原文地址

TensorFlow技术实现Mask R-CNN: https://github.com/CharlesShang/FastMaskRCNN

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值