【翻译】Faster R-CNN

                       Faster R-CNN:使用区域候选网络的实时物体跟踪

                                             任少卿 何凯文 Ross Girshick 孙健

 

 

摘要

最前沿水平的物体检测网络是基于候选算法来预测物体位置的。像SPPnet[1]和Fast R-CNN[2]这些先进的算法减少了检测网络的运行时间,但是RP的计算却仍然是瓶颈所在。本文中作者将介绍一种候选区域网络(RPN region proposal network),RPN使得检测网络和整个图片的卷积特征共享,也因此保证了几乎不耗费计算资源的RP的确定。RPN是一种xxx地在每个位置都能预测出物体的边界和分类的完全卷积网络。RPN采用端到端训练来保证能产生能在Fast R-CNN中使用的高质量RP。作者把RPN和Fast R-CNN两者结合在一起,方法是使用最近十分流行的神经网络的“注意”机制—RPN部分能引导整个网络更注意哪里,让两者能共享卷积特征。使用特别深的VGG-16模型时,本文的检测系统在GPU上的帧率是5fps,但是准确度却在每张图片采集300个RP的情况下达到了在Pascal VOC 2007,2012和MS COCO等数据集上的最佳。在ILSVRC和COCO2015数据集上的对比中,Faster R-CNN和RPN在一些情况下也是表现最好的。代码已经公开。

 

关键词:物体检测,区域候选,卷积神经网络

 

1.概要

最近最先进的物体检测算法都是由RP和基于区域的卷积神经网络[5]推动的。虽然原始R-CNN[5]计算代价过大,但是通过在区域中共享卷积[1],[2]已经使得计算量大大降低了。最新的Fast R-CNN 几乎到达了实时监测的速率,当然前提是不考虑产生RP的时间代价。那么可以看出,现在只有产生RP时巨大的计算代价是亟待解决的瓶颈问题。

区域候选的产生方法应该依靠廉价高效的特征方法。 最流行的方法莫过于Selective Search[4],它简单地把基于引擎化低级特征的超级像素结合起来,但当和高效地检测网络[2]对比时,每张图片在CPU上需要两秒处理时间的它就显得太慢了。EdgeBoxes[6]实现了在区域质量和检测速率上最好的平衡,0.2秒/张图片,然而,这里的区域候选步骤用时仍然和检测网络用时相同。

大家可能注意到Fast R-CNN使用了GPU,但RP的选择却使用的CPU,这就使得两者的运行时间比不公平。一种能加速候选计算显而易见的方法是在GPU上实现它,这在工程上不失为一种好的解决方案,但是重新实现的方案忽略了下流(down-stream)网络也就没办法实现计算的共享了。

本文中,作者提出一种算法性质上的变化—用CNN计算RP从而实现了一个优雅高效的解决方案,因为如果已知了检测网络的计算那么RP的计算几乎不再需要额外计算。为此,作者介绍了一种新颖的区域候选网络,它能和最先进的物体检测网络[1],[2]共享卷积层。通过测试时的共享卷积层可以使得RP计算的边际成本很小(10ms/张图片)。

作者注意到由Fast R-CNN使用的卷积特征映射也可以用来产生RP。在卷积特征上添加一些额外的卷积层便构建了一个RPN,这些卷积层在规律网格上的每一格上同时回归物体边界和物体分类得分,所以RPN实际上是一种全连接卷积神经网络,而且可以通过专门的端到端训练来产生检测区域。

(a)

 

(b)                                                                                                                            (c)
图1 实现多尺度尺寸的不同方法。
(a)构建图片和特征映射的金字塔,分类器在所有尺度上运行。
(b)滤波器金字塔,多尺度尺寸在特征映射上运行。
(c)本文在回归函数上使用标记金字塔。
(这里的references翻译成“(为了方便查询所用的)标记”)

 

RPN通过大量的尺度和宽高比实现有效地预测RP。相较于原先[8][9][1][2]中使用图片金字塔(图1,a)或者滤波器金字塔(图1,b)的算法,作者介绍新颖的锚盒(anchor boxes)—在多尺度、多宽高比上的标记,可以理解成回归标记金字塔(图1,c),它可以避免多尺度尺寸图片或者分类器的枚举。得益于快速运算,本模型在训练测试时使用单尺度图片表现良好。

为把RPN和Fast R-CNN的检测网络部分结合起来本文提出一种训练体系——在保证RP混合的情况下把RP微调任务和检测微调任务对调,这种训练体系收敛极快,而且能呈现出一个让两个任务能共享卷积特征的神经网络。

作者在PASVAL VOC等检测数据集上理性地评估本文算法,结果是使用RPN的Fast R-CNN比使用Selective Search的Fast R-CNN在准确度上要略胜一筹。与此同时,本文的方法在测试时几乎甩掉了Selective Search所有的计算负担—求RP的有效计算时间只有10毫秒。即使是使用[3]的深度模型,本文所提出的检测方法仍然有基于GPU的5fps的速率,综上,本文所提出的是一个在速度准确度上都具有实用性的物体检测系统。作者也有基于MS COCO数据集的结果报告和对于PASCAL VOC使用COCO数据交叉验证的实现。

代码地址https://github.com/shaoqingren/faster_rcnn (MATLAB实现)

https://github.com/rbgirshick/py-faster-rcnn (Python实现)

本稿的初始版本之前有发表[10],从那时起,基于RPN或Faster R-CNN的框架便被应用到许多算法中,比如3D检测[13]、基于部分的检测[14]、实例分割[15]和图片说明[16]等。本文高效快速的检测系统也在像一Pinterests[17]等系统中使用,用以用户兴趣推荐。

在ILSVRC和COCO2015的比较中,Faster R-CNN和RPN是在ImageNet检测、ImageNet定位、COCO检测和COCO分割方面冠军的基础。RPN完全学会了从数据中选取RP所以更能从更深的网络更好的特征映射中受益。在这些比赛中其他名列前茅的算法很多也都采用了FasterR-CNN和RPN,这些结果也证明了本文所提出的算法不仅仅在实际应用中是一种好的解决方案,在提高物体检测准确度上也是一条有效途径。

 

2.相关性工作

候选物体。关于寻找候选物体的算法有一大堆论文,对这些算法有理性调查分析的论文有[19],[20],[21],广泛使用的RP产生算法有基于超级像素的Selective Search,CPMC,MCg和基于滑动窗口的EdgeBoxes。在Selective Search物体检测器和R-CNN[5]和Faster R-CNN中RP的选择被列为一个额外的独立于检测器的模块。

物体检测网络。R-CNN[5] 端到端地训练CNN完成把区域划分成对象类别还是背景的分类问题,R-CNN更主要的是充当一个分类器,它并没有预测物体的边界(除了通过边界盒子回归来微调),它的准确度就完全依赖RP模块的表现优差。有那么几篇文章[25,9,27,27]是介绍使用深度网络来预测物体边界盒子的。OverFeat算法[9]训练一个全连接层预测定位任务的盒子坐标,这里定位的是单个物体,这个全连接层然后进入到卷积层来完成物体的多分类。MultiBox算法[26,27]从一个 最后一个全连接层可以同时预测多个物体类别不可知盒子,产生单盒子版本的OverFeat 的网络中生成RP,这些物体类别不可知盒子被R-CNN用作RP。相较于本文整个图片的卷积,MultiBox算法可被应用在单一图像切片或者多个大的图像切片里(比如 224 x224)。MultiBox并没有在RP和检测网络之间共享图像卷积特征。稍后会将OverFeat、MultiBox与本文的方法做深入对比。同本文工作同时间的DeepMask[28]主要用来学习图像分割的候选区域。

卷积计算的共享在由于快速准确的视觉识别引起了广泛关注。OverFeat从图像金字塔出发计算卷积特征以实现分类定位和识别。基于卷积特征映射共享的尺寸适应池化(SPP)用以实现高效的基于RP的物体检测[1,30]和语义分割。Fast R-CNN是保证端到端训练的基于卷积特征共享的检测器,表现出惊人的[compelling]速度、准确度。

3.Faster R-CNN

本文提出的检测系统叫Faster R-CNN,包括两个模块,第一个模块是用来产生RP的全连接卷积神经网络,第二个模块是使用RP的Fast R-CNN检测器,整个系统是单体的统一的物体检测网络(如图2所示)。RPN借助于现在流行的网络的“注意力”机制告诉Fast R-CNN模块“看”向哪里。

图2
 Faster R-CNN是一个单体的统一的物体检测网络。RPN模块作为整个网络的“注意力”。

 

3.1章节介绍RPN的设计和属性,3.2章节介绍如何同时训练特征共享的两个模块。

3.1 区域候选网络(RPN Region Proposal Network)

RPN把一张图片(任意尺寸)作为输入喂进去,输出是一系列矩形(每个矩形代表一个物体候选区域)和每个矩形的物体分类得分,作者把这整个过程建模成一个全连接的卷积神经网络。

因为我们的最终目的是和Fast R-CNN检测网络共享计算,所以可以等价为这两个网络(RPN&Fast R-CNN)共享的是一系列普通的卷积层。在实验中,作者调研有5层共享卷积层的ZF[32]和有13层共享卷积层的VGG-16网络模型。

为生成RP,作者借助共享的最后一层卷积层把一个小网络滑过卷积特征映射的输出,这个小网络以一个n*n的-以卷积特征映射作为输入的-空间窗口作为输入 (This small network takes as input an n × n spatial window of the input convolutional feature map) ,每个滑动窗口都被映射到一个低维度特征(ZF成了256维,VGG成了512维, 这个低维度特征之后紧跟着的是Relu层),然后这个特征又被喂给两个全连接网络层-盒子回归层(reg)和盒子分类层(cls)。本文中的n=3,注意,输入图像上的有效可被接收域是很大的(ZF:171像素,VGG:228像素)。图3解释了这个迷你网络。因为这个迷你网络是以滑动窗口的模式运算的,所以这些全连接层在所有的空间位置上都是被共享的,这个构造可以通过一个n x n的卷积神经网络和一个紧跟着的两个1x1的卷积层(一个用来reg,一个用来cls)很自然地实现出来。

 

(a)

 

(b)

图3
(a)区域候选网络(RPN)
(b)在PASCAL VOC数据集上使用RPN测试的检测样本结果图。
本文提出的算法可以检测各种尺度和宽高比列的物体。

 

3.1.1锚点(anchors)

在每个滑动窗口的位置,我们会同时预测多个RP,每个位置被预测出的RP数目的最大值记为k(图3.(a)中的k),也因此reg层有4k个输出,代表了k个盒子的坐标(x,y,w,h),cls层有2k个输出,代表了这k个盒子是不是(是/不是)一个物体可能性。这k个候选区域成了关于这k个标记盒子的参数,我们称这k个盒子为锚盒。锚是滑动窗口的中间点,与尺度和宽高比都有关系(如图3.(a)所示),默认在每个滑动窗口位置使用3个尺度单位3个宽高比单位和9个锚点,对于一个WxH(一般约为2400)的卷积特征映射来讲,总共应该有W*H*k个锚。

 

平移不变的锚盒

锚的一个很重要的特性是平移不变性,不管是对于锚盒还是关于锚盒的函数。如果平移一副图像中的物体,那么RP应该移动,并且使用同一个函数应该也能在任意坐标位置预测出该移动后的RP。平移不变性由[7]而知。对比而言的MultiBox使用k-means产生了800个锚点还没有平移不变性,因此如果物体平移的话MultiBox并不能保证还会产生同样的RP。

平移不变性大大减小了模型的大小,不用那么臃肿庞大。MultiBox有(4+1)*800维的全连接输出层,而本文的算法却只有(4+2)*9维的卷积层输出,其结果就是本文的2.8*104   (512*(4+2)*9)个输出层参数比MultiBox[27]的6.1*106(1536*(4+1)*800)少了2个指数级。如果只考虑特征工程层,本文的RP层也要比MultiBox少1个指数级的参数个数。作者希望本文的算法在像PASCAL VOC的小数据集上尽量不会过拟合。

多尺度锚充当回归标记

锚也是一个解决多尺度(和各种宽高比)问题的新颖方法。如图1所示,已经有两种针对多尺度预测问题的流行算法,第一种是基于图像/特征金字塔,如DPM[8],基于CNN的,如[9,1,2],图像在多尺度上被重新定义尺寸,这种方法有效是有效,就是忒费时。第二种是在图像特征上使用多尺度的滑动窗口,如在DPM中,如果这种方法被用来解决多尺度问题,那它可以被归为“滤波器金字塔”,第二种办法经常和第一种方法结合起来用[8]。

对比一下,本文的基于锚的算法就是“锚金字塔”,省时省力更高效,这里的分类器(指当前RP是不是物体)和回归的边界盒子标记于多尺度多宽高比的锚盒。如果仅仅依靠单尺度的图像特征并且使用单尺度的滤波器。 作者用实验证明了本文的“锚金字塔”解决多尺度和多宽高比问题的有效性(如表8所示)。

8

正是由于锚是基于多尺度设计的,所以我们能够简单的使用一张单尺度图片的卷积特征,巧了,Fast R-CNN检测器就是直接使用的单尺度图片的卷积特征。锚的多尺度设计是“兵不血刃”实现卷积特征共享的关键部分。

3.1.2 代价函数

为训练RPN,我们对每个锚都赋值一个二类别标签,即是一个物体/不是一个物体,正值标签代表是物体,负值标签代表不是物体。符合正值标签的有两种锚:(i)这个锚的最大IoU(整体重叠部分)和一个真值盒子重叠了或者(ii)这个锚有一个任意真值盒子的最大重叠部分大于0.7倍的真值盒子大小。要注意,同一个真值盒子可能给多个锚赋给正值标签。一般来说,第二种情况更可能遇到,但是我们仍然要把第一种情况考虑进去,因为在一些极端情况下第二个条件可能并不能给应该正的锚赋予正值标签。符合负值标签的锚只有一个条件:它和所有真值的IoU都小于0.3。如果该锚的标签既不是正值标签又不是负值标签,那么这个锚在训练过程中将不再起作用。

用上面的定义我们就可以模仿Fast R-CNN里的多任务损失机制来最小化一个RPN的代价函数,公式(1)所示的是一张图片的损失函数。

在公式(1)中,i是小批次里某个锚的下标,pi 是下标为i 的锚是正值标签的概率,pi* 是真值(如果这个锚所在区域真的是个物体那pi* =1,不然p*i =0),ti 是一个容器,该容器里是代表下标是i的锚里面的预测边界盒子的4个参数(x,y,w,h),t∗i是ti 的真实值,当然前提是这个锚所在区域应该是个物体。分类损失函数Lcls 是2类逻辑损失函数(应该就是差平方那个吧),回归损失函数Lreg (ti ,t∗i ) = R(ti -t∗i ),这里的R是smooth L1损失。p*i*Lreg 意思是只有锚所在区域是物体才能有物体边界,才能回归去拟合边界,才有回归拟合损失一说。分类层和回归层的输出分别是{pi}和{ti}。

分类和回归两部分分别取了Ncls和Nreg来归一化,还加了λ超参数来进行加权。在公布出来的代码里,公式(1)中的Ncls是等于小批次的尺寸(256),Nreg是等于锚能定位的所有点的数目(大约是2400),λ默认是10,这样的话分类和回归两部分基本是等权重的。作者通过实验发现最终结果对λ并不敏感[表9],而且上面说的归一化根本不需要甚至可以简化掉。

边界盒子回归的参数,采用公式(2)的方法计算得到。

公式2中的x,y,w,h分别代表盒子的中心点坐标和盒子的宽高。具体地,变量x,xa 和x*是预测的盒子、锚盒和真值盒子的(y,w,h三个变量的指代也同理),公式(2)所表达的意思可以看做是从锚盒到真值盒子的边界盒子回归问题。

但是本文获取边界盒子回归的办法却不同于[1,2]中使用的基于RoI的办法,在[1,2]中边界盒子回归是在从随意尺寸的RoI上池化的图像特征上运行的,而且回归权重是所有区域尺寸共享的,而在本文的算法中,所有用于回归的特征都是从特征映射上取下的同样的空间尺寸(3x3)。为了解决不同尺寸的问题,本文算法在每个滑动窗口上学习k个边界回归器,每个边界回归器只负责某一尺寸下某一个宽高比的区域,而且这k个边界回归器并不共享参数w,也正是多亏了这个锚,才使得本文算法能够预测不同尺寸不同宽高比的边界盒子。

3.1.3 训练RPN

RPN可以使用反向传播和SGD实现端到端的训练[35]。本文模仿Fast R-CNN[2]中的图像中心采样策略(“image-centric”sampling strategy)来训练RPN,每个小批次都是从包含许多正负样本锚的一张图片里产生的。直接对所有锚损失函数进行随机最优化是可以的,但是,由于负样本占据了大量数目这样做会使得训练偏向负样本(this will bias towards negative samples as they are dominate)。本文修改为每张图片随机取样256个锚来计算这个小批次的损失函数,这256个锚里的正负样本个数最大比例是1:1,也就是说256个锚里最多有128个正锚,要是不够128个正锚,就用负锚填上这些空缺。

初始化时所有新网络层时,使它们的权重满足一个平均值为0标准差为0.01的高斯分布。所有其他的网络层(也就是共享的卷积网络层)就用通过ImageNet数据集预训练的分类网络。本文调整了ZF网络的所有网络层,conv3_1从而为VGG网络节省内存 (We tune all layers of the ZF net, and conv3 1 and up for the VGG net to conserve memory)。在PASCAL VOC数据集上训练时,前6万个小批次的学习率取0.001,接下来的2万个的学习率取0.0001,动量为0.9,w的衰退是0.0005[37]。在Caffe平台上实现[38]。

3.2 RPN和Fast R-CNN共享图像卷积特征

截止到此,本文已经介绍了如何训练出一个能产生RP的网络,而且训练这个网络时根本不需要考虑需要使用这些RP的R-CNN。本文的检测网络使用Fast R-CNN。接下来就来介绍把RPN和Fast R-CNN如何统一到一个网络并让它们两个共享卷积网络层的算法。

首先试想,如果把RPN和Fast R-CNN分别训练的话,结果它们产生的卷积网络权重肯定是不一样的。因此就需要想出来一种能让这两个模块共享卷积层的办法。本文这里介绍三种能使网络共享图像特征的方法:

(i)交叉训练(Alternating training)。首先训练RPN,然后拿着RPN生成的RP们去训练Fast R-CNN,然后通过训练Fast R-CNN得到调整的网络再去初始化RPN,然后迭代上述过程。本文中的所有实验都使用了这种办法。

(ii)近似联合训练(Approximate joint training)。如图2所示,训练时把RPN和Fast R-CNN混合到一个网络里。每次SGD迭代时,训练Fast R-CNN检测器的正向传播会生成被认为是固定的预计算的RP,反向传播照旧进行,只不过这时对于共享的卷积神经网络层们来说梯度便会同时来自RPN和Fast R-CNN。这种办法易于实现,但是它忽略了xxx,所以求出的结果是近似的。实验中,作者发现虽然这种办法到了近似结果,但是它相比于交叉训练的足足少了25%-50%的训练时间。发布的Python代码里有这种方法的具体实现。

(iii)非近似联合训练(Non-Approximate joint training)。如上所述,RPN预测的边界盒子是其他函数的输入,Fast R-CNN中的RoI池化层就接收卷积特征和预测的边界盒子作为输入,因此理论上来说,有效的反向传播算法应该把关于边界盒子坐标的梯度算上,然而这个梯度在上个方法里被忽略了。在非近似联合训练里,我们就需要加上一个关于边界盒子梯度的RoI池化层。这就成了一个复杂的问题,可以通过[15]里介绍的“RoI转换”解决,当然这不是本文的重点。

 

4步交叉训练。本文使用的是4步交叉训练算法来学习共享的卷积层。第一步,像3.1.3章节说的那样先训练RPN。这个RPN网络是ImageNet预训练并且被调整过专门用于RP任务。第二步,用第一步里生成的RP单独训练Fast R-CNN。这里Fast R-CNN开始的那个卷积神经网络也是ImageNet预训练的。到第二步,两个网络还没有共享卷积层。第三步,用Fast R-CNN的网络来初始化RPN的训练,但是这次就把卷积层固定起来,并且仅仅针对RPN微调卷积层。现在两个网络是共享卷积层了。第四步,继续固定卷积层,仅仅针对Fast R-CNN微调卷积层。四步下来之后,RPN和Fast R-CNN就在一个网络里共享卷积层了。类似的交叉训练需要更多次迭代,但最后结果却提升不大。

 

3.3实现细节

本文是使用单一尺寸的图片训练测试RPN和Fast R-CNN的,把图片都缩放到600像素。多尺度特征提取(使用图片金字塔)可能会提高一些准确度,不过会牺牲处理速度。对于一张经过缩放的图片而言,不管是ZF还是VGG网络,在最后一层卷积层上的总步幅都是16像素,要是不缩放那一张典型的PASCAL VOC图片的话,总步幅大概是10像素。虽然步幅越小准确度越高,但即使是那么大的步幅也达到了很好的效果。

对于锚,本文使用3个尺度:盒子面积1282, 2562, 5122(像素),3个宽高比:1:1,1:2,2:1,这些超参数对于特定的数据集不用过于纠结它们的设定,在下个部分中实验会验证它们的效果。前面说过,本文算法不需要图片或者滤波器金字塔来预测不同尺度宽高比的RP从而节省了大量的处理时间,图3.b是本文算法对不同尺度宽高比物体的检测效果图。表1所示是使用ZF网络时对每个锚来说学习的平均RP大小,可以看出本文算法允许预测比可接收域大的多的RP。这些RP是不可能的---即使是人眼也很难认为那是一个物体,除非这个物体的中间部分可见。

穿过物体边缘的锚盒需要用心处理。在训练时,本文忽略了所有穿过物体边缘的锚盒,这样它们就不会产生loss了。对于一个1000x600的图片,总共大概有20000(60x40x9)个锚,又因为要忽略穿过物体边缘的锚盒,所有这张图片上能参与训练的锚不过6000个。如果穿过物体边缘的锚盒训练时没有被忽略的话,这些锚盒就会使得检测错误率提升,训练永远不会收敛。但是在测试的时候,仍然对整张图片使用全连接卷积的RPN,虽然这可能产生(This may generate cross-boundary proposal boxes, which we clip to the image boundary)。

有一些RP甚至高度重合了,为减少这种情况,本文使用无最大值supperession(NMS)。最后的结果是一张图片上还剩下大约2000个锚。正如即将呈现的那样,NMS并不会影响最后的检测精度,但可以有效地减少RP数量。在NMS之后,使用top-N选取检测器要用的RP。接下来就是使用2000个RPN产生的RP训练Fast R-CNN,不过在测试时RP的数目就不确定了。

【后面是实验部分,等动手实现Faster R-CNN的时候仔细研究,再翻译】 

【如有问题,请大牛们批评指正】

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值