目前的目标检测网络依赖于region proposal算法来提出假设的目标位置。之前SPPnet和Fast R-CNN已经减少了检测网络的运行时间,但是减少proposal的时间还是一个瓶颈。本文中,**我们介绍一种region proposal network(RPN),可以与检测网络共享整张图像的卷积特征,这就使得proposal几乎不耗费时间。RPN网络是一个完全conv网络,同时在每个位置预测目标的bounds和objectness分数。RPN端对端训练,生成高质量的region proposals,然后送入Fast R-CNN进行检测。**进一步优化之后,RPN和Fast R-CNN可以训练成共享卷积特征。对于使用backbone VGG-16,我们的检测系统可以达到5帧每秒(5fps),包含所有步骤。在PASCAL VOC2007取得了73.2%mAP,2012上取得了70.4%mAP,每张图像使用300个proposals。
最近目标检测的发展得益于region proposal方法的成功以及R-CNNs的成功。尽管R-CNN刚开始比较耗时,但是Fast R-CNN通过共享卷积,大大降低了计算量,当忽略region proposal的时间基础上,已经可以几乎达到实时。也就是说,现在proposals是主要的计算瓶颈。
区域proposal方法依赖于inexpensive features和economical inference策略。SS算法,基于低级特征来不断融合proposal,然而这个算法还是较慢,在CPU上每张图需要两秒。EdgeBoxes目前在proposal质量与速度上达到了最好的平衡,0.2s每张。但是无论哪种,都需要花费与检测网络时间相近的时间。
有人可能注意到,CNN使用了GPU加速,而proposal使用CPU计算,这可能会使得对比不公平。一个显然的加速proposal的方法就是使用GPU,但是这种方法可能会使得GPU忽视下游的检测网络,因此不能够共享计算。
本文中,我们改变了算法,使用深度网络来计算proposal,这种方法很有效,使得proposal计算几乎cost-free,与检测网络共享计算。我们提出了新的Region proposal networks(RPNs),可以与目前的目标检测网络共享卷积层,使得测试时,proposal的时间很短(10ms每张)。
我们观察到,R-CNN/Fast R-CNN生成的卷积特征图,同样可以用来生成region proposals。在这些卷积层的后几层(top),我们构建RPN网络(引入了两个额外的conv层),一个用来将每个conv map位置编码成一个短的(比如256维)的特征向量;另一层,在每个conv map位置,输出一个objectness分数,然后在这个位置以不同尺度和长宽比的k个区域进行回归找边界,通常k = 9。
我们的RPN网络因此是一种fully-convolutional network(FCN),它们可以对于生成proposal这个任务来进行端对端训练。**为了将RPN整合到Fast R-CNN检测网络中,我们提出了一种简单的策略:保持proposal固定时,alternates对RPN任务进行微调或对目标检测进行微调。**这种策略收敛很快,训练的网络的conv 特征可以被两种任务shared。
我们使用PASCAL VOC来评估我们的模型,我们的模型效果超过了使用SS的Fast R-CNN,同时我们还消除了SS方法在测试时的时间消耗。使用VGG,我们的检测网络在GPU上仍可以达到5fps(包括所有步骤),这意味着我们在速度和准确率方面都很实用(PASCAL VOC2007 73.2%mAP,2012上,70.4%mAP)。
最近的一些文章提出了一些使用深度网络的方法来**生成class-specific或者class-agnostic的bbox。**在Overfeat中,对于只有一个单个目标的定位任务,使用一个FC层来预测box的坐标,这个FC层之后转换为conv层来检测多个class-specific目标。多box的方法从网络中生成区域proposals,网络的最后一个FC层同时预测多个boxes,R-CNN就是这种方式。它们的proposal网络在单个图像或者多个crops上应用。
共享卷积计算由于它的准确以及有效率,目前也引起了注意。Overfeat论文从一个图像金字塔来计算conv特征,用来分类、定位、检测。SPP共享卷积特征图,可以计算R-CNN和语义分割。Fast R-CNN在共享的conv特征上完成端对端检测,因此取得了好的准确率和速。
我们的目标检测系统叫做Faster R-CNN,由两个模块组成,一个是一个深度fully convolutional网络,来提出区域,第二个模块是Fast R-CNN检测器。整体来说如图2所示。使用了最近流行的神经网路中的“注意”策略,RPN网络告诉Fast R-CNN去看哪里。
**RPN网络输入任意尺寸的图像,输出一系列矩形的目标proposals,每个proposal都带有一个objectness分数。**我们使用这部分介绍的一种fully-convolutional网络来完成这个过程。因为我们最终的目的是与Fast R-CNN来共享卷积计算,我们假设RPN与它共享同样的卷积层。我们的实验中,我们使用ZF5(5个卷积层),以及VGG16(13卷积层)作为模型。
**为了生成区域proposal,我们在最后一层共享卷积层的输出特征图上滑动一个小的网络,这个网络与输入卷积图的每个n * n空间窗口完全相连。每个滑动的窗口映射到一个更低维的向量(ZF-256维,VGG-512维)。**这个向量被送入两个分别的FC层,一个bbox回归层(reg),一个box-分类层(cls)。**我们在本文中,设置n = 3,注意到这个尺寸映射回输入图像的感受野是很大的(两种模型分别对应171和228像素)。**图1左边简要描述了这个网络在某位置的样子。注意到因为这个网络使用滑窗的形式,FC层在所有空间位置都是共享的。这种结构很自然的使用一个n * n的卷积层,后面接两个1 * 1的卷积层用来reg和cls,在n * n卷积层之后,使用ReLU。
在每个滑窗位置,**我们同时预测k个区域proposal,reg层最后输出4k,表示k个boxes的坐标。cls输出2k,表示目标/非目标的可能性。**k个proposals使用k个参考box进行参数化,这些参考box称作anchor。每个anchor的中心是滑窗的中心,有着不同的尺度和长宽比。我们使用3个尺度和3个长宽比,一共k = 9个anchor。**对于一个尺寸为W * H的卷积特征图(通常~2400),一共就有WHk个anchors。**我们方法的一个重要特性就是平移不变性(translation invariant),在anchor和计算proposal阶段都是。
作为对比,MultiBox方法使用k-means聚类来对整张图像生成800个anchors,而且没有平移不变性。如果图像中的一个目标平移了,proposal也应该平移,同样的函数可以在另一个位置成功预测出来目标。而且,由于MultiBox anchors不是平移不变的,它需要(4+1) * 800维度的输出层,而我们方法需要的是(4 + 2)* 9维度(我们是一个小网络滑窗)的输出层,我们的proposal层参数更少,更不容易过拟合。
我们的anchor同样考虑了多尺度,我们的k个anchor的尺度和长宽比都是不同的,因此不需要金字塔,也不需要多尺度的图像,只需要在单尺度图像计算得到的特征图上取得多种anchors即可满足Fast R-CNN的要求。
为了训练RPN,我们对每一个anchor使用一个二分类的标签(是目标or not)。我们对两种anchor标记为正标签:
注意到,一个ground truth可能会使得多个anchors标记成positive。我们对与所有的ground truth的IoU都小于0.3的anchors标记为负样本,其他的样本既不是正也不是负,忽略掉,对训练没有贡献。
使用以上定义,我们依照Fast R-CNN中的多任务loss来定义我们要最小化的loss函数,如下:
这里i是一个mini-batch中anchor的index,pi是anchor i是目标的预测概率。pi * 是ground truth的label,如果anchor为positive,则为,否则为。ti是一个向量,表示预测的bbox的四个参数,ti * 是与这个positive的anchor相关联的ground truth的bbox参数。分类的Loss,Lcls为两类(目标or not)的log loss。**对于回归loss,我们使用 L r e g ( t i , t i ∗ ) = R ( t i − t i ∗ ) L_{reg}(t_i,t_i^*) = R(t_i-t_i^*) Lreg(ti,ti∗)=R(ti−ti∗),其中R为鲁棒的损失函数(smooth L1,Fast R-CNN中定义),对于 p i ∗ L r e g p_i^*L_{reg} pi∗Lreg表示只有正anchor可以激活这个回归loss。**最后的输出包括pi和ti,使用Ncls和Nreg进行归一化,并且有一个平衡权重 λ \lambda λ。
这里的x、y、w、h表示box中心的坐标以及宽度和高度。x、xa、x * 分别表示预测的box,anchor box,ground truth。这就可以看做从anchor不断逼近ground-truth box的回归过程。
无论如何,我们的bbox回归的方法与之前的基于特征图的回归方法都不同。之前的bbox回归是工作在对任意尺寸区域求得的卷积特征图上,回归的参数被所有区域尺寸shared。我们的方法中,用于回归的特征在特征图上有着相同的空间尺寸(n * n)。为了考虑到多种尺寸,网络学习了一系列k个bbox regressors。每个regressor负责一个尺度和长宽比,这k个regressors不共享参数。这样,尽管特征是固定尺寸的,网络仍能够预测多种不同尺寸的boxes。
RPN网络可以通过端到端的反向传播和SGD来训练。我们遵循“image-centric”采样策略来训练网络。每一个mini-batch来自于单个图像,包括许多positive和negative的anchors。也可以对所有的anchor来对loss进行优化,但是这样可能会有所阻碍,因为negative的anchors占大多数。所以我们对一张图像随机取样256个anchors来计算这个mini-batch的loss函数,这256个正负anchor比例应该为1:1。如果正anchor少于128,那就使用更多的负anchor。
我们使用均值为0,标准差为0.01的高斯分布来对新的层随机初始化。其他的共享的卷积层使用在ImageNet分类上预训练的模型的权值。然后我们对ZF的所有层,以及VGG的con3_1之后的层进行fine-tuning。在PASCAL VOC 数据集上,我们前60k个mini-batches使用0.001的学习率,之后的20k mini-batch使用0.0001。我们使用动量0.9,0.0005的weight decay。
尽管上面我们已经描述了如何训练RPN网络,但是我们没有考虑基于区域的目标检测RNN如何利用这些proposals。对于检测网络,我们使用Fast R-CNN。下面我们描述如何使得RPN和Fast R-CNN结合到一起并且共享卷积层的算法。
单独训练RPN或者Fast R-CNN,它们对以不同方式修改卷积网络,因此我们需要使用一种技术可以在它们两个之间共享卷积层,而不是分别学习两个网络。我们讨论了三种方法:
4-Step Alternating Training。本文中,我们使用一个4步训练算法来通过alternating优化来学习共享的特征。==第一步,我们使用3.1.3中描述的过程来训练RPN网络,网络使用在ImageNet预训练的模型初始化,然后针对region proposal任务进行微调;第二步,我们使用Fast R-CNN训练一个单独的检测网络,使用第一步中的RPN生成的proposals,这个网络也是使用在ImageNet预训练的模型初始化,此时这两个网络没有共享卷积层;第三步,我们使用检测网络来初始化RPN训练,但是我们固定了需要共享的conv层,只微调与RPN网络不同的层,这时两个网络就共享卷积层了;最后,保持共享卷积层不变,我们微调Fast R-CNN特有的层。==这样,两个网络共享了相同的卷积层,并且形成了一个整体网络。这种alternating训练可以迭代多次,但是我们没有观察到特别好的效果提升。
**我们训练和测试网络都使用单尺度,我们resize图像使其短边为600像素。**多尺度的特征提取(金字塔)可能会提升准确率,但是会耗费许多时间,达不到一个速度和准确率的平衡。在re-scaled图像上,ZF和VGG的总步长为16像素,在rescale之前大概是10像素,即使这么大的步长也会取得好的结果,尽管使用更小的步长准确率可能会提升。
**对于anchors,我们使用3种尺度的anchor,128 * 128,256 * 256,512 * 512。三种长宽比1:1,2:1,1:2。**这几个参数不针对特定数据集,是通用的。我们的方法没有使用金字塔(以降低运行时间),但是结果表明我们的网络对各种长宽比以及尺度都有很好的效果(如图1右)。表1展示了使用ZF网络地每个anchor学习到的平均proosal尺寸。我们注意到我们的算法可以产生比感受野更大的proposal。这样的预测是可能的,感受野中可能只是目标的一部分,因此需要扩大。
跨过图像边界的anchor也需要认真处理。在训练阶段,我们忽视了所有的跨边界的anchors,它们不会对loss产生影响。**对于一个1000 * 600的图像,总计可能会有接近20000(60 * 40 * 9,总步长大约为16)个anchors。**忽略了跨边界的anchors,有大概6000个anchors用来训练。如果不忽视这些跨边界的anchors,它们会对修正错误引入困难,并且训练不会收敛。然而在测试阶段,我们仍对整张图像使用fully convolutional RPN,可能会产生跨边界的box,我们直接将其剪切到边界上。
一些RPN proposal互相高度重叠。为了减少冗余,我们使用非极大值抑制NMS,依据它们的cls分数。我们设定阈值为0.7(IoU大于0.7被留下),最后每张图像留下大概2000个proposal。我们之后会展示,NMS不会损害最终的准确率,但会极大降低proposal的数量。在NMS之后,我们使用top-N ranked区域用来检测。我们使用2000了RPN proposals来训练Fast R-CNN。
我们在PASCAL VOC 2007上来评估我们的方法。这个数据集包含了5k的训练验证集合5k的测试集,20类目标。对于预训练网络,我们使用ZF5的快速模式,有5层conv,3层fc,以及VGG16模型,有着13层conv。我们使用mAP评估检测效果。
表2(top)展示了使用不同的region proposal方法的Fast R-CNN结果,这些结果使用了ZF网络。对于SS算法,我们使用快速模式生成2000个proposals;对于EdgeBoxes(EB),我们使用默认EN设置,0.7IoU。前者取得了58.7%的mAP,后者取得了58.6%的mAP。使用RPN,300个proposals情况下,我们取得了59.9%的mAP。RPN的速度快得多,因为共享了卷积,且proposal较少,对FC计算也有所减少。
Ablation Experiments on RPN。为了探究RPN作为proposal方法的表现,我们做了一些对比实验。首先我们展示了RPN和Fast R-CNN共享卷积层的效果,为了做到这个,我们在训练第二步停止;对比可以发现,不共享的情况下mAP从59.9%降低到58.7%。
之后我们探究RPN对训练上面的影响。我们使用SS算法来训练网络,在测试时使用RPN,且不与Fast R-CNN共享卷积。可以发现效果都降低了,但是任可以达到最差55.1%。
之后我们探究cls和reg的作用。没有使用cls的情况,我们就直接随机取样N个proposal送入后面。当N=1000时,效果几乎没什么变化,因为proposal足够多;但是N=100时,准确率明显下降了。
另一方面,当去除reg之后,即直接将anchors作为proposal输出,mAP都有所下降,这证明了RPN中的reg回归也是很有用的,只使用anchor,取得的效果不够好。
我们同样使用了更好的模型,我们使用VGG-16来训练RPN,然后仍然使用上面的SS+ZF检测器,mAP上升到了59.2%。这证明了更深的网络对训练RPN来说也更有效。
**Performance of VGG-16。**表3展示了使用VGG-16用于RPN和检测的效果,在不共享卷积的情况下取得了68.5%的mAP,比所有的SS算法的都要好,不像SS这种pre-defined,RPN网络更受益于好的网络。使用了特征共享,可以达到69.9%mAP。我们继续使用PASCAL VOC2007和2012的训练验证集组合进行训练,mAP达到了73.2%。
在PASCAL VOC 2012测试集上(表4),我们方法取得了70.4%的mAP。
在表5中,我们总结了目标检测系统的运行时间,SS算法花费1-2秒,平均1.5s,Fast R-CNN(VGG-16)花费320ms,针对于2000个proposals,使用SVD在FC层分解,花费降低到223ms。我们的方法(VGG16)总共只花费198ms,因为共享了卷积层,RPN只需要10ms来计算,我们的proposal更少(300左右),也使得花费更少,我们使用ZF网络可以达到17fps。
**Sensitivities to Hyper-parameters。**表8中,我们探究anchor的设置。我们的默认设置是3尺度,3个长宽比,取得了69.9%mAP。如果每个位置只使用一个anchor,mAP大概会下降3-4%。使用3个尺度,一个长宽比,或者3个长宽比,一个尺度,都会提升效果,这证明了使用多尺度的anchors是有效的。在这个数据集上,使用3尺度1长宽比取得了与3尺度3长宽比相当的效果。但是我们仍使用三个长宽比来保持我们网络的灵活性。
在表9中,我们对比了不同的 λ \lambda λ值对结果的影响。我们默认设为10,这使得两个任务的在归一化之后权重大致相等。表9表明结果在很大范围内对 λ \lambda λ不敏感。
**Analysis of Recall-to-IoU。**下面我们计算与ground truth有不同IoU的proposal的recall。值得注意的是Recall-to-IoU尺度与最后的检测准确率仅仅是松散关联。更适合用这个来分析proposal方法而不是评估效果。
图4中,我们展示了使用300,1000,2000个proposals,的结果。我们比较了SS和EB以及N proposal根据评分排序。图中展示出RPN方法当proposal数量从2000到300中表现很好。这也就解释了RPN可以在只有300proposal还可以取得好的结果,根据我们之前的分析,这主要由于RPN的cls项。当proposal数量较少时,SS和EB的召回率下降更快。
One-Stage Detection vs. Two-Stage Proposal + Detection。
OverFeat提出的检测方法是在卷积特征图上使用regressors和classifiers进行滑窗。**OverFeat是一个one-stage,class-specific的检测pipeline,我们的方法是two-stage,级联的流程,包括class-agnostic proposal和class-specific检测。**在OverFeat中,基于区域的特征来自于一个对金字塔进行一个固定长宽比的滑窗。这些特征用来同时决定定位和目标的种类。在RPN中,特征是来自3 * 3的滑窗,然后使用不同尺度和长宽比的anchors来预测proposal。尽管两种方法都使用了滑窗,但是proposal 任务只是Faster R-CNN的第一阶段,之后还会使用Fast R-CNN对proposal进行微调。在我们方法的第二阶段,region-based的特征通过RoI pooling从第一步生成的proposal中生成,更加可信。
为了对比one-stage和rwo-stage的系统,我们使用one-stage的Fast R-CNN仿真了OverFeat系统。在这个系统中,proposals是dense滑窗,三个尺度(128,256,512)和三个长宽比(1:1,1:2,2:1)。Fast R-CNN训练来预测class-specific的分数,对这些滑窗来回归box位置。因为OverFeat系统使用了图像金字塔,我们也可以使用从5个尺度提取的卷积特征进行评价。
表10比较了two-stage的系统和两个one-stage系统的效果。使用ZF模型,one-stage系统取得53.9%的mAP。这比two-stage的58.7%要低。实验证明了级联的proposal和检测是更有效的。我们也注意到这里的one-stage方法更慢,因为需要考虑更多的proposals。
我们在COCO数据集上进行了进一步测试,数据集包含80类目标,80k图像训练,40k验证集,20k测试集。我们评估mAP使用IoU{0.5:0.05:0.95}平均求得mAP。(这是COCO的标准评估尺度mAP@[.5,.95],PSACAL VOC的评估尺度为[email protected])
在这个数据集上,我们对系统进行了一些小的调整。我们使用8个GPU训练模型,这样mini-batch就是对于RPN是8(1 per GPU),对于Fast R-CNN是16(2 per GPU)。RPN和Fast R-CNN都是使用0.003学习率训练240k迭代,然后使用0.0003学习率训练80k迭代。我们修正了学习率(使用0.003而不是0.001)是因为mini-batch的尺寸变了。对于anchors,我们使用3个长宽比和4个尺度(增加了64),主要是考虑到数据集中可能有较小的目标。另外,在我们的Fast R-CNN检测中,负样本定义为与groundtruth的IoU在[0,0.5)区间内,而不是[0.1,0.5),因为我们注意到在之前的Fast R-CNN中,[0,0.1)这部分样本一直没有使用。
其他的应用细节与在PASCAL VOC 上的应用一一致,我们仍保持单尺度s=600,300个proposals。测试时间每张图像大约是200ms。
Faster R-CNN in ILSVRC & COCO 2015 competitions。我们已经证明了Faster R-CNN得益于更好的特征,多亏了RPN是通过神经网络来学习proposal生成。这个结果甚至在网络增加到100层以上也是存在的,我们使用ResNet-101来替代backbone VGG-16,COCO上的mAP提升到了48.4%/27.2%。使用了一些提升手段,He等人获得了单个模型55.7%/34.9%以及组合模型59.0%/37.4%,获得了COCO2015检测竞赛的第一名。同样的系统也取得了ILSVRC2015的第一名。
对于提升深度神经网络来说,大尺度数据是十分关键的。下面我们探究MS COCO数据如何提升在PASCAL VOC 上的检测效果。
如表12所示,我们可以看到,增加了COCO上的训练,可以提升网络在VOC上的表现。
我们提出RPN网络用于有效且准确的生成region proposal,通过共享卷积特征,这步的时间花费几乎可以忽略不计。我们的方法是一个整合的、基于深度学习的目标检测系统,可以接近实时检测。学习到的RPN提升了region proposal的质量,因此总体上提升了目标检测的准确率。