Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks

 

摘要:前沿的目标检测网络通过区域提取(regionproposal)算法来预测目标的位置。SPPnet与Fast R-CNN算法已经一部分改进了时间的问题,当前的瓶颈在于区域提取上。本文中,我们提出了一种与检测网络共享全卷积特征的区域提取网络(RPN),使区域提取几乎不再耗时。RPN是一种同时预测目标位置与每个目标概率的全卷积网络。RPN通过端到端的训练得到提取的区域,再利用Fast R-CNN来进行检测。我们进一步通过共享他们的卷积特征将RPN与Fast R-CNN合成一个网络,利用“attention”机制,RPN组建告诉网络哪些是可能的区域。在GPU模式下如果用VGG-16模型,我们的检测系统可以达到5fp的帧率。我们只用了300个可能区域就在PASCAL VOC 2007,2012与MS COCO数据集上得到了很好的效果。在ILSVRC与COCO2015比赛中,Faster R-CNN与 RPN获得及几乎所有的冠军。目前代码已经公布。

关键词: 目标检测  区域提取  卷积神经网络

 

1、概述

当前目标检测快速发展得益于区域提取技术与基于区域的卷积神经网络(R-CNN)技术的成功。原版的R-CNN计算成本很高,但是通过共享提取区域的卷积,目前计算量已经显著的下降。最新的衍生算法Fast R-CNN中以及可以使用较深的网络取得几乎实时的效果,如果不计算区域提取的时间的话。如今区域提取是测试时计算的瓶颈。

传统的去提取算法使用简单的特征与低时耗的方案。Selective Search是其中最流行的一种方法,它通过人工特征贪婪的合并超像素。然而当对比有效的检测网络,Selective Search慢了一个数量级,在CPU下每张图要几乎2秒钟。EdgeBoxes是当前在准确率与时间上最均衡的一种方法,0.2秒可以处理一张图片。尽管如此,区域提取还是消耗了目标检测太多的时间。

有人可能注意到,FastR-CNN使用了GPU,然而区域提取方法是实现在CPU下,是的这样的时间对比不平等。一个显而易见的加速方法就是讲区域提取算法在GPU下重新实现。这个可能是一个很好的工程化解决方案。但是这样可能会没考虑到对检测网络的影响,而且失去了共享计算的重要机会。

本文中,我们展示了一种算法层面的改进:简洁有效的使用深层卷积神经网络来计算区域,是区域提取在目标检测网络中基本不消耗时间。在这里,我们提出了一种全新的Region Proposal Networks(RPNs),这种方法与最好的目标检测网络共享卷积层。通过卷积层的共享,在测试时,计算区域的时间变得很少(10ms每张图)。

通过观察可以知道,用于FastRCNN中用于检测的卷积特征同样可以用来生成目标区域。在这些卷积特征的顶部,我们构建了RPN,通过添加一些额外的卷积层在一些规则网格上来同时进行区域回归与每个目标的概率的计算。RPN一定程度上算是一种全连接卷积神经网络,可以为完成检测区域进行端到端的训练。

RPNs设计用来有效的预测不同尺寸与比例的目标区域。与当前流行的算法利用图像金字塔或者滤波器金字塔的方法不同,我们引入了一种全新的锚点(anchor)框的概念,用来解决不同尺寸与比例的问题。我们的结构相当于回归参考区域的金字塔,这样就可以不用美剧出图像或滤波器的不同尺度与不同比例。这样的模型在使用单尺度样本的训练与测试时都有不错的效果,而且也减少了时间。

为了是RPNS与Fast R-CNN目标检测网络合并,我们提出了一种训练流程:轮流微调RPN网络与目标检测网络,并保持可能区域的数目不变。这种结构可以很快就收敛,并且产生一个两个网络共享的卷积特征。

我们在PASCAL VOC上对我们的算法进行了综合的评价,基于RPN的Fast R-CNNs检测准确率远高于基于Selective Search的方法。同时,我们的算法在测试时没有Selective Search这种大计算量的工作,实际的区域提取时间只需要10ms。使用超深的网络测试时,我们的算法在GPU下是5fp的帧率。因此,这是一个有效的兼顾准确率与速度的目标检测的方法。我们还在MS COCO数据机上提交了结果,探索使用COCO data来提示PASCAL VOC准确率的方法。代码已经公开:MATLAB(https://github.com/shaoqingren/faster_rcnn)与PYTHON(https://github.com/rbgirshick/py-faster-rcnn)。

  之前有一个出初版发布过,RPN与Faster R-CNN框架被接受与改进到其它方法中,例如3D目标检测,基于部件的检测,部件分割,图片字幕等等。我们快速有效的目标检测系统也被利用在例如Pinterests这样的商业系统中,并取得了用户的满意。

  在ILSVRC与COCO 2015比赛中,Faster-CNN与RPN取得了ImageNet检测,imageNet定位,COCO检测与COCO分割等一系列冠军。RPN完全通过数据来学到要提取的区域,因此更深与更有效的特征都可以提示它的效果(例如101层的残差网络)。这些比赛成绩较好的其它小组也是用了Faster R-CNN与RPN的框架。实时说明,我们的方法不仅是一种高效的实用方法,而且可以有效的提升目标检测的准确率。

2、相关工作

目标提取。在目标提取领域有很多论文。综合观察与对比这些目标提取方法可以发现【19】【20】【21】。目标提取方法例如,超像素聚类(Selective Search,CPMC,MCG)与基于滑动窗的方法(objectness in windows,EdgeBoxes),都有广泛的使用。目标提取方法作为独立于检测器作为一个单独的扩展模块(Selective Search,R-CNN,Fast R-CNN)。

用于目标检测的深度神经网络。R-CNN进行端到端的训练,将目标区域分类到目标种类与背景。R-CNN的角色更像是一个分类器,它并不预测目标的边界(除了利用边界回归进行优化)。它的效果实际上决定于目标提取模块的效果(见【20】中的对比)。有些文字已经提出了使用深度神经网络来预测目标区域的方法,例如【25】【9】【26】【27】。在overFeat【9】中假设只有一个待检测目标,并训练了一个全连接层来预测目标的坐标。之后全连接层转到一个卷积层用来检测不同类别的目标。MutiBox通过一个最后一个全连接层同事预测多个类别位置的区域的网络,类似OverFeat中singlebox的方法。这些类别未知的区域作为RCNN的目标区域输入。MutiBox区域提取网络应用在单个图片剪裁出来的区域或者多个较大的图片剪裁区域,与我们的全卷积结构相反。MutiBox的方法在区域提取与检测网络中部共享特征。在之后的文章中我们会详细的结合我们的算法进行讨论。DeepMask方法与我们的算法相似,用来学习目标分割。

共享卷积计算的方法【9】【1】【29】【7】【2】因为它的有效准确可视的特性引起了越来越多的重视。OverFeat从图像金字塔中计算卷积特征用于图像分类,定位与检测。自适应池化(SPP)【1】使用共享卷积特征图来提示RCNN的效率并进行语义分割。Fast R-CNN使用共享卷积特征进行端到端的检测器训练,展示了优秀的准确率与速度。

3、Faster-RCNN

  我们的目标检测系统叫做Faster-RCNN,有两个主要的模块组成。第一个模块是用于区域提取的深度全连接卷积网络,第二个模块是使用这些目标区域的Fast RCNN检测器。整个系统是一个统一的用于目标检测的网络。用当前流行的神经网络术语来说是使用了“attention”机制,RPN模块告诉Fast R-CNN模块去哪里找目标。在3.1接中我们介绍区域提取网络的设计与特性。3.2中介绍权重共享的两个模块的训练算法。

3.1 区域提取网络

  区域提取网络(RPN)使用一张任意大小的图片作为输入,输出一系列框出来的区域和与之对应的得分。我们通过一个全卷积网络【7】来进行建模,在本节中将进行介绍。由于我们最终的目标是与Fast R-CNN目标检测网络共享计算,我们假设两个网络都共享一组相同的卷积层结构。在我们的试验中,我们使用有5个可共享卷积层的Zeiler与Fergus模型(ZF)【32】与右13个可共享卷积层的simonyan与Zisserman模型(VGG-16)【3】。

  为了提取区域,我们在最后一个共享卷积层最后加了一个小型网络。这个小网络将输入的卷积特征图中nxn的区域作为输入。每个滑动窗由ZF的256d或者VGG的512d底层特征特征映射而来。这个特征输入到一对全连接层,一个是区域回归层(reg)一个是区域分类层(cls)。我们在文中使用n=3作为参数,注意在原图上有效的接收野是很大的(ZF与VGG分别为171喝228)。注意由于这个迷你网络是以滑动窗的方式进行操作,所以所有的区域都共享同一个全连接层。这种结构通常通过nxn卷积层跟着一对1x1的卷积层一个用来做reg,一个用来做cls,来实现。

3.1.1 锚点

在每个划窗位置,我们都同时预测多个可能区域,这里每个位置最有可能的区域表示为k。所以reg层有4k个输出用于表示k个区域的坐标。cls层输出了2k个得分,分别表示每个可能区域是否为目标的概率。k个可能区域与k的参考区域在参数上是相关的,我们把它叫做锚点。一个锚点是指中点滑动窗中心,并有相关的尺度与比例。我们默认用3个尺度与3个比例,产生k=9个锚点在每个滑动位置。对于WxH大小的卷积特征图(通常为2400)来说,总共有WHk个锚点。

平移不变的锚点

  我们方法的一个很重要属性是它的平移不标性,不管是在锚点还是计算与锚点相关的函数。如果过一个目标在图片中的位置变化了,提取的区域也会相应的变化,并且函数还可以鱼仔预测变化前与变化后的位置。我们的方法保证了这种平移不变的特征。作为对比,MutiBox的方法使用k均值聚类的方式产生800个锚点,但却不是平移不变的。所以说如果目标的位置改变了,MutiBox不能保证提出相同的区域。

  这种平移不变的特征还可以减小模型的尺寸。MutiBox的全连接层输出为(4+1)x 800维,当k=9时我们的卷积输出层为(4+2)x9维。所以,我们的输出层参数为2.8*个(VGG-16 512*(4+2)*9),MutiBox使用GoogleNet时输出层有6.1*个(1536*(4+1)*800)个参数,比我们的方法多了两个数量级。如果考虑特征投影层,我们的区域提取层还是有比MutiBox少了一个数量级。我们希望我们的方法在PASCAL VAC这样的小数据集上过拟合的风险更小。

多尺度锚点作为回归参考

  我们设计的锚点提出了一种全新的结构来解决多尺度与多比率问题。如图1所示,有两种流行的多尺度预测的方法。第一种是基于图像或者特征金字塔,例如DPM【8】与基于CNN的方法。图片尺寸变化到不同的尺度在利用HOG或者卷积特征来计算每个尺度。这种方法使用最为广泛,但十分耗时。第二种方式是利用不同尺度的滑动窗在特征图上滑动。例如DPM中,使用不同大小的滤波器分别训练了不同比率的模型。如果这种方法用于处理多尺度问题,可以认为是一种类似滤波器金字塔的方法。第二种方法通常与第一种方法联合使用。

  作为对比,我们的基于锚点的方法是基于锚点金字塔,更有效率。我们的方法依据不同尺寸与比例的锚点区域来分类与回归目标区域。他只依赖一个尺寸的图片、特征图与滤波器。我们通过实验证明了这个结构在处理多尺度与大小问题的有效性(TABLE8)。

  由于这种多支持福设计基于锚点,我们可以用Fast R-CNN中计算出的一个尺度的图片计算出的特征图。这种多尺度锚点的设计在不增加时耗的情况下解决的多尺度问题,而且还是共享特征的关键步骤。

3.1.1 损失函数

 

为了训练RPNs,锚点的标签分为两类是目标或者不是。正样本有两种,1、与真实区域有最多重叠区域(IoU)的锚点。2、一个锚点与真实区域IoU重叠高于0.7。注意,一个真实区域可能被赋予了对应多个锚点的正标签。通常来说,第二种条件就可以提供足够的正样本,但是对于一些特殊场景,条件二可能找不到正样本,所以我们还是加了条件1。我们将所有与真实区域IoU比例低于0.3的锚点都设置为负样本。那些既不属于正样本也不属于负样本的锚点区域不影响训练的有效性。

根据以上的定义,我们最小化类似Fast R-CNN中的多任务损失目标函数。一张样本的损失函数定义为:

 

这里i是一个mimi-bach中锚点的索引,是锚点i是目标的预测概率。如果锚点属于正样本的话真实的标签为1,如果是负样本的话则为0。是一个用于表示预测区域的4个坐标的向量。正样本锚点的真实区域坐标向量表示为。分类损失是目标或者非目标两类对数损失函数。计算回归的损失函数时,我们使用。这里R是鲁棒的损失函数(L1范数)。表示仅在锚点为正样本时计算回归损失。分类与回归层的输出分别由与组成。

这两个序列由与进行正则化,由进行加权。我们目前的实现中,等式1中分类序列是在minibatch中正则化,回归序列由锚点位置来正则化。我们默认设置,这样分类与回归序列基本上可以得到等价的权重。实验表明,在一个很大的范围里变化,结果的变化都比较迟钝。我们同时注意到,以上的正则化并不是必须的,可以被简化掉。

在区域回归的时候,我们将坐标参数做如下转化:

 

这里x,y,w与h表分别表示区域的中心坐标,与它的宽高。变量与对应预测的区域,锚点区域与真实区域。这样可以想象成从一个锚点预期回归到一个相近的真实预期。

然而,我们的方案通过一种不同于之前基于RoI(感兴趣区域)方法【1】【2】来实现区域的回归。在【1】【2】中,区域回归是通过任意大小RoI的特征池化来实现,所有区域大小的权重回归权重是共享的。在我们的方法中,用于回归的特征在特征图上空间大小也是(3x3)。为了能处理不同的尺度,学习了一系列k区域回归器。每个回归器负责处理一个尺度与一个比率,k个回归器不共享权值。因此,锚点的设计使得尽管特征是固定大小与尺寸的,我们的方法还是可以预测不同尺度大小的区域。

3.1.3 RPNs训练、

  RPN可以通过反向传播(BP)与随机梯度下降法(SGD)进行端到端的训练。我们使用【2】中的图片中心取样策略来训练。每个mini-batch由一张包含许多正样本与负样本锚点的图片组成。这样可以针对所有锚点的损失进行优化,但是有可能偏向负样本,因为在负样本在整体中占大多数。因此,我们随机在一张图中去256个锚点来计算一个mini-batch的损失函数,是的正样本与负样本的比例基本达到1:1。如果一个mini-batch中的正样本少于128个,我们将剩下的用负样本补齐。

  我们使用标准差为0.01的零均值高斯分布来随机初始化所有的新层。所有其他的层(共享卷积层)按照惯例用在ImageNet【36】上面训练的预训练模型进行初始化。我们微调ZF所有的层或者VGG中conv3_1以上的层来节约内存。我们在60K个minibatch中使用0.001的学习率,之后的20Kminibatch中使用0.0001的学习率。数据集是PASCAL VOC。用门使用0.9的momentum与0.0005的权重衰减。我们的算法是在caffe的框架下实现的。

3.2 RPN与Fast R-CNN共享特征

  目前为止我们讨论了如何在不考虑基于区域的目标检测网络会使用这些提取的前提下,训练一个区域提取网络。在检测过程中我们使用Fast R-CNN网络。下面我们介绍如何训练一个由RPN与Fast R-CNN共享卷积层的统一网络的方法。(图2)

  不管是单独训练RPN还是Fast R-CNN都会对卷积层产出不同的影响。我们因此需要找到一种技术来共享两个网络中的卷积层,而不是分别训练两个单独的网络。我们在这里讨论三种不同的训练共享特征网络的方法:

(1)      轮流训练。在这种解决方案中我们先训练RPN网络,在用提取的区域来训练Fast R-CNN。然后用Fast R-CNN微调过的网络来初始化RPN。重复以上步骤。本文中所有的实验都是用这个方法实现的。

(2)      近似联合训练法。这种方案中,RPN与Fast R-CNN网络在训练时合并成一个网络结构如图2。每次SGD迭代训练Fast R-CNN检测器时,使用前向传播的提取区域作为固定的提前计算好的目标区域。反向传播时跟之前一样,共享层受RPN与Fast R-CNN的损失共同影响。这种方法易于实现,但是却忽视了区域坐标同样也是网络的一部分,因此是近似的。在实验中对比轮流训练的方式,我们根据经验得到了相似的处理结果,减少了百分之二十五到百分之50的时间。这种方法在我们python版本的代码中有展示。

(3)      完全联合训练的方法。正如上述讨论,RPN的输出区域还是其它层的输入。Fast R-CNN中的ROI POOLING层同时接受卷积特征与预测的区域作为输入,理论上来说一个方向传播的求解也可以包含区域坐标的梯度。这些梯度信息在之前的近似联合训练中被忽略了。在完全联合训练的解决方案中,我们需要一个例如【5】中这样的可以分开处理区域坐标的ROI POOLING层,在这里我们不做讨论。

四步轮流训练。本文中我们使用了务实的使用了4部训练算法轮流优化来学习共享的特征。第一步,训练例如3.1.3讨论的那样训练RPN。这个任务是由ImageNet预训练模型来初始化,进行端到端的微调来完成区域提取任务。第二步,我们利用步骤一总提取的RPN区域,独立训练一个Fast R-CNN网络。这个检测模型也是由ImageNet预训练模型进行初始化的。此时两个模型并不共享卷积层的权值。第三步,我们用检测网络来初始化RPN网络的训练,我们固定共享卷积层的权重,仅仅微调不同于RPN层的权重。这样,两个网络就共享卷积层了。最后我们固定共享的卷积层,微调Fast R-CNN中独有层的权重。因此两个网络都共享相同的卷积层,形成了一个统一的网络。这样的轮流训练可以迭代多次,但是实验显示改进不大。

3.3 实现细节

  我们的RPN与目标检测网络的训练与测试都是在单一尺度的样本中实现的【1】【2】。我们调整后的样本尺寸是短边为600像素【2】。多尺度特征提取(使用图像金字塔)可能提高准确率,但是对比时耗来说去不太划得来【2】。归一化大小后的样本中,在ZF与VGG 网络的最后一个卷积层的步幅都是16像素,相当于传统PASCAL 图片转化大小前(500*375)的10个像素。这种大的步幅得到的结果不错,当然如果使用更小的步幅的话得到的结果也会更好。

  我们使用了128*128,256*256,512*512三个尺度与1:1,1:2,2:1三个比例的9个锚点。这些超参数不是根据那个特定的数据集熏出来的。下一节中我们提供了这些参数的鲁棒性测试。就像之前所说,我们的解决防范不需要图像金字塔或者滤波器金字塔来预测不同尺度的样本,这样给我们解决了客观的运行时间。图3右展示了我们大范围的尺度与比例的冗余度。表1展示了利用ZF网络计算的平均提取区域的尺寸。我们发现我们的算法可以预测比感受野大的区域。这种预测并不是不吭能,一个人可以通过观察一个物体的中心来想到这个物体的全部是什么样子。

  那些超过了图像方位的锚点需要特别注意。在训练是,我们排除了所有跨边界的锚点,因此他们不对损失产生影响。在典型的1000*600的样本中,可能有大约20000(60*40*9)个锚点。去掉了边界的锚点,还剩大约6000个用来训练。如果不在训练中取出这些边界锚点,可能会产生大的难于优化的序列,这样可能会不收敛。在测试时,我们对全图使用全卷积RPN。这样可能会产生跨边界的提取预期,我们剪裁掉边界以外的部分。

有些RPN区域之间高度重叠,为了减少冗余,我们依据分类的得分使用NMS(非极大值抑制)的方法。我们将NMS的IOU阈值设为0.7。这样每张样本大约会有2000个提取区域。正如我们展示的,NMS对最终的检测准确率没有负面的影响。NMS后我们使用排名前N个的提取区域同于检测。接下来,我们用2000个RPN区域来训练Fast RCNN,在测试时,使用不同个数的提取区域。

 

4 测试

5 总结

 

我们提出了RPN用与快速有效的提取区域,通过与检测网络共享卷积层权值,使RPN基本无时耗。我们的方法提出了一种单一网络的基于深度学习的目标检测系统,并且几乎达到了实时帧率。提出的RPN方法也提高了区域提取的质量与整体的检测准确率。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值