译文:Faster R-CNN

【翻译】Faster R-CNN: Towards Real-Time Object
Detection with Region Proposal Networks

Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun

摘要:
目前最先进的目标检测网络需要先用区域建议算法推测目标位置。像SPPnet[7]和Fast R-CNN[5]这些网络已经减少了检测网络的运行时间,这时计算区域建议就成了瓶颈问题。在我们这个工作中,我们介绍一个RPN网络,这个RPN网络与检测网络共享全图卷积特征,因此这个RPN网络几乎不需要任何多余的时间消耗。这个RPN网络是一个全连接卷积网络,它同时预测每一个位置上目标对象的边界和对象分数。这个RPN网络是可端到端训练的,它可以产出高质量的区域建议框,产生的这些建议框将用于Fast R-cNN进行目标检测。我们通过共享卷积特征,进一步的将RPN网络和Fast R-CNN整合为一个网络(我们使用最近流行的神经网络术语“关注”机制,RPN网络将告诉这个统一的网络去对什么区域进行检测判断)。对于非常深的VGG-16模型[3],我们的检测系统在GPU上的帧速率为5fps(包括所有步骤),同时在PASCAL VOC 2007,2012上实现了最先进的目标检测精度, MS COCO数据集,每个图像只有300个提案。在ILSVRC和COCO 2015比赛中,基于更快的R-CNN和RPN,获得了多个第一名。 代码已经公开。
关键字:目标检测,区域建议框,卷积神经网络

1 介绍
目前目标检测领域的发展由区域建议方法【4】和基于区域的卷积神经网络【5】的成功驱动,尽管最初提出的基于区域的CNN在计算上耗时,他们耗时问题已经通过卷积特征共享的方法【1】【2】得到了很好的减少。当不考虑区域建议(候选区域获取)的时间,Fast R-CNN 基于深度网络获取了几乎实时的速率。现在建议框的获取成为好的目标检测系统的瓶颈。

区域建议方法目前主要基于消耗小的特征和经济的获取方案。SS(选择性搜索方法)是众多流行方法中的一个,贪心地将低级特征合成超像素。但是和高效的目标检测方法【5】相比,SS选择性搜索的速度要慢一个数量级,在cpu上,平均一个图像耗时2s。 EdgeBoxes【6】最近在建议框提取的数量和质量之间提供了最佳的折中点,每张图像平均耗时0.2s。 尽管如此,作为检测网络中一步,区域建议步骤仍然消耗了很多运行时间。

有一点需要注意的是,快速的基于区域的CNN方法利用了GPU的优势,而采用搜索策略的区域建议方法则使用的是CPU,因此使得运行时间对比不公平。有一个明显可以提升获取区域建议的速度的方法,就是我们重新采用GPU的方法实现区域建议部分,这可能是一个有效的工程解决方案,但是重新实现忽略了检测网络的下游部分,因此会失去享受共享计算的重要机会。

在这篇文章里面,我们展示一个基于深度神经网络的区域计算的算法,这个算法是一个优雅有效的解决方案,考虑到检测网络的计算,区域计算几乎没有成本。到此,我们介绍有效的RPNs网络,这个网络与检测网络【1】【2】共享网络卷积层。通过共享测试时的卷积,计算区域的时间很少(例如每张图象10ms)

我们观察到用于基于区域检测器的卷积特征图(例如Fast R-CNN)也可以用来生成区域建议框。在这些卷积特征上面,我们通过增加一些卷积层来构建RPN(构造RPN:第一个层把每个卷积映射位置编码为一个短的(例如256-d)特征向量,第二个层在每个卷积映射位置,输出这个位置上多种尺度和长宽比的k个区域建议的objectness得分和回归边界(k=9是典型值)),这个RPN同时在规则的网格上对每一个点进行边框回归个对象分数计算。这个RPN因此是一种全连接网络【7】,它可以被端到端地训练,尤其针对于生产检查区域的任务。

RPNs 被设计用来通过一个宽范围的缩放比和横宽比来有效地预测候选区域。和之前的方法【8】【9】【1】【2】对比,之前的方法采用图像金字塔【图1,a】或者过滤器金字塔【图1,b】,我们引入了新颖的“锚点”框,用作多种尺度和纵横比的参考。我们的方案可以被认为是一种回归参考的金字塔【图1,c】,避免了去列举图像或者滤波器的多尺度或者多种横宽比。这个模型用在单个尺度的图像上,表现很好,因此有利于运行速度。

为了将RPN与快速R-CNN [2]物体检测网络统一起来,我们提出了一种训练方案,它在区域建议任务的微调和微调物体检测之间交替进行,同时保持建议的固定。这个方案使得网络收敛快速,通过是这两个任务同时共享卷积特征,使得生成一个统一的网络。**

我们在PASCAL VOC检测基准上综合评估了我们的方法,基于RPNs的Fast R-CNN方法比基于SS的Fast R-CNN得到的检测准确率更好,同时,我们的方法在几乎放弃了选择搜索在测试是所以的时间效果负担,对于区域建议的有效运行时间仅仅10ms。使用那个昂贵的深度模型,我们的检测方法在GPU上仍然有5fps的帧率速度(包括所有步骤)。因此考虑到准确率和速度问题,它是一个很实用的目标检测方法。我们也在MS COCO等数据库上进行展示了我们的结果,代码在https://github.com/shaoqingren/faster_rcnn上,有matlab和python版本的。

这份手稿的初稿版已经出版过了【10】,自那以后,RPN和Faster R-CNN相结合的框架已经被适用和融合到其他方法中,例如3D目标检查【13】,基于块检测【14】,实例分割【15】,图像标注【16】,我们快速和有效的目标检测系统也用于广告系统例如Pinterests【17】,使得用户报告得到提升。

在ILSVRC and COCO2015竞赛中,Faster R-CNN 和RPN是多个项目第一名的基础,这些项目包括图像的检测跟踪,图像定位,coco检测,coco分割。RPNs 完全从数据中学习如何生产候选区域,因此也很容易受益与更深更贵的特征(例如101曾的残差网络)。更快的R-CNN和RPN也被其他几个主要条目使用比赛。这些结果表明我们的方法不仅效率高适合实际应用,也是个可以提高准确率的高效方法。

2 相关工作

目标建议框:这里有大量的关于目标建议框获取方法的文章。目标建议框获取方法的全面调查和比较可以在【19】【20】【21】里面找到。广泛被使用的目标建议框获取方法包括这些基于组合超像素(例如选择性搜索,CPMC,MCG)和那些基于滑动窗口(例如窗口中的对象【26】和EdgeBox【6】)。目标建议方法被采用作为独立于探测器的外部模块(例如选择性搜索检测器,R-CNN 和 Fast R-CNN)

深度目标检测网络:R-CNN 方法训练CNN 端到端的去将获得的建议框进行二分类(目标对象或者背景)。R-CNN 主要作为一个分类器,它不能预测对象边界(除了通过边界框回归进行细化)。 它的准确率依赖于区域建议模块(看对比【20】),几篇论文已经提出了用深度学习的方法去对目标的边缘框框进行预测【25】【9】【26】【27】。在OverFeat方法中,针对定位任务(假设认为是单目标),一个全连接层被训练来预测目标的边框坐标。然后将完全连接的层变成卷积层以检测多个类别特定的对象。MultiBox 方法从一个网络中生成区域建议框,这个网络的最后一层同时预测多个类间无关的框框,生产“单盒子”版本的OverFeat。这些类间无关的框框被作为R-CNN 的候选区域。这个MultiBox建议网络被应用到单个裁剪的图像或者多个大图像(例如224*224),和我们的全卷积方案相比。MultiBox 没有对区域建议和检测网络使用的特征进行共享。我们将在后面更进一步讨论OverFeat and MultiBox。在我么正在进行这个论文工作同时,DeepMask 方法【28】被提出来学习建议分割。

针对在视觉识别方面速度和准确率方面,卷积计算共享【9,1,29,7,2】已经吸引越来越多的关注,OverFeat【9】基于图像金字塔计算卷积特征,然后用来进行分类,定位,检测。用在共享卷积特征图层上的自适应大小池化【spp】被设计来提高基于区域的目标检测速率。Fast R-CNN 使得检测器可以端到端的在共享特征上进行训练并且表现出很好的准确率和速度。

3 Faster R-CNN
我们这个目标检测系统称为Faster R-CNN,它由两个模块组成。第一个模块是用来生成建议区域的深度全卷积网络,第二个模块是Fast R-CNN检测器【2】,这个检测器将使用生成的建议框。整个系统是单一,统一的目标检测系统(图2所示)。这个RPN使用了类似目前比较流行的注意力机制的神经网络,它告诉Fast R-CNN 模块去检测哪里。在3.1 节我们介绍这个区域建议网络的设计和性能。3.2节我们设计一个算法来通过特征共享同时训练两个模块。


3.1 区域建议网络
RPN 将图像作为输入(任意大小),然后输出一组矩形目标区域,每一个区域有一个对象分数。我们用完全卷积网络为这个过程建模,我们将在这个节对它进行描述。因为我们最终的目标是去和Fast R-CNN 目标检测网络共享计算,我们假设两个网络共享同一组共同的卷积层。在我们的实验中,我们调查ZF模型【32】,这个ZF模型有5个可共享的卷积层,另外一个模型就是VGG-16 ,它有13个可共享的卷积层。

为了生成区域建议框,我们能在由最后一个共享卷积网络生成的特征图层上滑动一个小网络。这个小网络的输入是卷积特征层的n * n的空间大小。每个滑动的窗口被映射到低维特征(ZF模型为256维,VGG则是512维,后面接着的激活函数是RElu【33】)。这个特征被输入到两个并列的全连接层,一个是标定框的回归层(reg),一个是框框分类层(cls)。我们在这篇文章中使n = 3 ,因此注意此时每个3 *3 的滑动框所对应到原图上的有效感受野大小分别为171个像素(ZF模型)和228个像素(VGG模型)。这个小网络在图3左边的一个独立的位置展示。注意由于这个小窗口以滑动的方式,这个全连接层在整个空间位置共享。这个框架很自然的通过一个n * n 的卷积层实现,后面接着两个并列的1 * 1 的卷积层(分别是reg和cls)。


3.3.1 锚

在每一个活动窗口经过的位置,我们同时预测多个多个区域建议(候选框),每一个位置可能被预测的区域建议(候选框)的最大个数为k。因此reg层对k个框框有4k个数值去表示对应的坐标位置,cls层则相应的输出2k个分数值,每一个框框对应两个分数值,分别是他们是对象和不是对象的分数值,这个k个区域建议根据相关的k个框框进行参数化,我们称这k个框框为锚。锚点位于滑动窗口的中心,还有相关的尺度和横纵比(图3,左边)。默认我们用3个尺度比率和3个横纵比,因此每一个滑动位置产生k = 9 个锚,一个大小为W * H (典型的2400)的特征图,那么总共有W * H * k 个锚。

平移不变性的锚

我们的方法有一个重要的特点,就是平移不变性,不仅从锚的角度还有根据这个锚计算相应区域建议框的函数。如果平移图像中的一个对象,对应的建议区域也应该平移,相同的函数应该可以在其他位置仍然预测这个建议区域。这个平移不变性特性由我们的方法保证。对比一下,那个MultiBox[27]方法用k-means 方法生产800个锚,但是这些锚不具有平移不变性。所以MultiBox在对象被平移后不能保证相同的建议区域。

这个平移不变性也减少了模型的大小,MultiBox有(4+1)* 800 维全连接输出层,但是我们的方法只有(4 + 2) * 9 维卷积输出层(当我们设置k = 9 的情况下)。因此,我们的输出层有\(2.8 * 10^4\)个参数(如果是VGG模型 参数个数为 512 * (4 + 2)* 9 ),相对于输出层参数有\(6.1 * 10^6\) 的MultiBox(如果模型为GoogleNet【34】参数个数有1536 *(4 + 1)* 800),我们的方法的参数要少两个数量级。如果考虑特征映射层,我们建议层仍然要比MultiBox少一个数量级。我们希望我们的方法在小数据集存在较小的过拟合风险。

多尺度锚点作为回归参考

针对解决多尺度(还有横纵比)问题,我们关于锚的设计呈现了一个新意的方案。如图1所示,这里存在两个流行的方法解决多尺度预测。第一个方法是基于图像或者特征金字塔,例如在DPM【8】 和 基于CNN方法【9】【1】【2】。图像被调整为多种尺度,特征图谱(Hog[8]或者深度卷积特征【9】【1】【2】)在每一个尺度下都计算一次。这个方法一般情况下很有效,但是受到时间限制。第二个方法则是在特征图谱上采用多尺度(或者横纵比)的窗口进行滑动。例如在DPM【8】中,不同横纵比的模型采用不同的滤波器大小分开进行训练【例如5 * 7 和 7 * 5】。如果这个方法被用来解决多尺度问题,它被认为是一种“滤波器金字塔”(图1(b)所示)。第二个方法则经常被适用于和第一个方法一起联合使用。

作为对比,我们的基于锚的方法是基于一个锚金字塔,这个锚金字塔更加的高效,我们的方法基于多尺度和多种横纵比的锚来分类和回归边框。(在特征图谱上滑动)。它仅仅依赖于一个尺度的图像和特征图谱,然后使用单个尺度的滤波器。我们通过实验展示这个解决多尺度和多宽纵比的方案的效果(表8所示)。

由于基于锚的多尺度的设计,我们可以方便地使用由单尺度图像获得的卷积特征,这种方法也被Fast R-CNN 检测器使用。这种多尺度锚的设计是是实现特征共享的关键,因为它不需要额外的操作来解决多尺度问题。

3.1.2 损失函数

对于训练RPNs,我们对每一个锚设计一个二值类别标签(是对象或者不是对象)。我们对两种类别的锚标注为正样本:(i)和真实标签框具有最高的IoU值得锚,(ii)和真实标签框的IoU值大于0.7的锚。注意一个真实标签框可能作为多个锚的正样本标签。通常情况下第二个条件能满足正样本的需求;但是我们仍然考虑第一种情况,因为存在一定概率情况就是我们采用第二种条件会找不到正样本。我们也针对非正样本的锚中当与所有的真实标签框的IoU值小于0.3时则标注为负标签。既不是正样本也不是负样本的锚则丢弃不参与训练。

基于这些定义,我们跟Fast R-CNN的多任务损失一样来最小化我们的目标函数。

这里,i是一个小批次里面一个锚的下标,\(p_i\)是时第i个锚是对象的预测概率。如果这个锚是正样本,则这个真实标签\(p^*_i\)为1,如果这个锚是负样本,则这个标签为0。\(t_i\)是一个向量,表示预测框框的的4个坐标参数值。\(t^*_i\) 是与正样本锚相对应的真实标签。分类损失\(L_cls\) 是两个类别的对数损失(对象vs非对象),对于回归损失,我们用\(L_reg(t_i,t^*_i) = R(t_i - t^*_i)\),这里的R是强大的损失函数(平滑损失函数\(L_1\)),定义在参考文献【2】中。\(p^*_iL_reg\)表示回归损失只有在正样本的情况下才被激活,其他情况下不进行训练。cls和reg层的输出分别为\({p_i}和{t_i}\).

那两个式子分别被\(N_cls\)和\(N_reg\)进行归一化,然后被y这个平衡参数赋予权重。在我们目前的实现中(发布的代码)公式1中的cls被小批次中样本的总个数(例如\(N_cls = 256\))进行归一化,reg项则被锚的位置个数(例如\(N_reg = 2400\))进行归一化。我们默认设置y = 10,因此cls和reg的权重大致相同。我们通过实验展示了结果,实验结果对于y在一定范围内影响不大,我们也主要到上面的归一化不是必须的,可以被简化。

对于边框回归,我们采用以下4个参数【5】:

其中 x,y,w,h分别代表矩形框的中心坐标和他的宽,高。变量x,xa 和x*则分别表示预测的矩形框,锚的矩形框,标签矩形框。(相应的y,w,h同理)。这可以被认为是一个锚矩形框回归到一个接近于标签矩形框的回归过程。

尽管如此,我们的方法采用了与之前基于感兴趣区域方法【1】【2】不一样的方式。在【1】【2】中,矩形框回归是在池化后的特征层上进行的,这些池化得到的特征是基于任意尺度大学的感兴趣区域,另外这个回归权重被所有区域尺度共享。在我们的公式中,被用于回归的特征是特征图谱上相同空间大小的区域(3 * 3)。考虑到变化的尺度,k个边界框回归器被学习。每一个回归器代表一个尺度和一个横纵比,这k个回归器不共享权重。因此,它尽管特征大学是被固定的尺度和缩放比,它仍然可以预测多种尺度大小的框框,这得益于锚的这种设计。

3.3.3 训练RPNs

这个RPN可以通过反向传播算法和SGD[2]进行端到端的训练,我们依从【2】中“图像为中心”降采样策略去训练这个网络。每一个小批次的样本来自单张图像,这个批次里面包含许多正样本和负样本的锚。它可以针对所有锚的损失函数进行优化,但是这将偏向负样本因为负样本占多数。我们对这个方法进行替代,我们从一张图像中随机获取256个锚,其中正负样本锚的比率为1:1.如果这里正样本的锚歌声达不到128,我们用负样本补充。

我们基于均值为0,标准方差为0.01 的高斯分布初始化所有新的网络层。所有其他层(例如共享卷积层)则用imageNet 分类训练好的模型进行初始化【36】。我们微调ZF 网络的所有层,调整VGG网络以节省内存。我们在PASCAL VOC 数据集上用学习率为0.001 来学习前60k批次的样本,然后用学习率为0.0001 来学习后20k 批次的样本。我们的冲量值为0.9,衰减值为0.0005【37】,我们采用caffe框架实现。

3.2 RPN与 Fast R-CNN 共享特征

到目前为止,我们描述了在不考虑基于区域的CNN将会使用这些候选区域的情况下,我们描述了如何训练一个网络。 对于检测网络,我们采用Fast R-CNN,接下来,我们描述如何训练基于卷积特征共享由RPN和Fast R-CNN整合一起的完整网络的算法。

如何RPN和Fast R-CNN分开单独的训练,他们将会用不同的方式修改他们的卷积层。我们因此需要去设计一个技术,允许他们两个网络之间共享卷积层,而不是需要分开学习。我们讨论三种方法来训练这个特征共享的网络:
(i)交替训练:在这个解决方法中,我们先训练RPN,然后用生成的建议区域去训练 Fast R-CNN。调试好的Fast R-CNN 被用来初始化RPN网络,这个过程是交替的。这也是被使用在这篇文章里面的所有实验中。
(ii)近似联合训练:这个方案中,RPN和Fast R-CNN在训练中如图2所示一样整合到一个网络中。在每一个随机梯度下降的迭代过程中,前向传播生成的区域建议被视为当训练Fast R-CNN时固定,预计算好的区域建议。反向传播像往常一样发生,其中对于共享层,来自RPN损失Fast R-CNN损失的反向传播信号被合成一起。这个解决方法很好实现。但是这个方法忽略了衍生物。建议框的坐标也是网络反应,所有是近似的。在我们的实验中,我们通过经验发现这个解决方法生成相似的结果,但是相比迭代的方法减少了25%-50%的训练时间。这个方法包含在我们发布的Python代码里面。
(iii)非近似联合训练 正如上面讨论的一样,由RPN网络预测得到的边框也是输入的函数。Fast R-CNN中的RoI池层[2]接受卷积特征和预测的边界框作为输入,所以理论上有效的反向传播求解器也应该包含梯度w.r.t. 边框坐标。这些梯度在上面近似联合训练中被忽略,在非联合训练解决方案中,我们需要一个可区分边框坐标wi.t.的RoI池层。

4步交替训练
这篇文章中,我们基于交替优化采用实用的4步训练算法来学习共享特征。第一步,我们训练3.1.3节描述的RPN网络。这个网络采用ImageNet-pre-trained 网络模型初始化,然后端到端的调试完成区域建议框生产的任务。第二步我们基于第一步RPN生成的建议框,然后采用Fast R-CNN训练一个分离的检测网络。这个检测网络也由ImageNet-pre-trained 网络模型初始化。在这个点,这两个网络不共享卷积层。第三步,我们用检测网络去初始化RPN训练,但是我们固定共享卷积层,并且只调试RPN独有的层。现在这两个网络共享卷积层。最后,保持共享卷积层固定,我们微调Fast R-CNN的独有的层。最后因此两个网络共享相同的卷积层,形成一个统一的网络。这哥交替的训练方法可以多次迭代,但我们观察到可以忽略的改进。

3.3 实现细节

我们训练、测试区域建议和目标检测网络都是在单一尺度的图像上[7, 5]。我们缩放图像,让它们的短边s=600像素[5]。多尺度特征提取可能提高准确率但是不利于速度与准确率之间的权衡[5]。我们也注意到ZF和VGG网络,对缩放后的图像在最后一个卷积层的总步长为16像素,这样相当于一个典型的PASCAL图像(~500x375)上大约10个像素(600/16=375/10)。即使是这样大的步长也取得了好结果,尽管若步长小点准确率可能得到进一步提高。

对于anchor,我们用3个简单的尺度,包围盒面积为128x128,256x256,512x512,和3个简单的长宽比,1:1,1:2,2:1。这些超参数对于一些特殊的数据集不准确,因此我们在下节提供了实验分析。正如上面讨论的,我们的解决方法不需要图像金字塔或者滤波器金字塔去预测多尺度的区域,这样节约了可观的运行时间。图3(右)显示了我们的算法处理多种尺度和长宽比的能力。表1展示了对每一个锚,用ZF模型学习到的平均目标框大小。我们注意到我们的算法允许预测超过潜在的接受领域。这样的预测并非不可能 - 如果只有对象的中间部分是可见的,那么仍然可以大致推断出对象的范围。

那些跨域图像编辑的锚边框需要小心的处理。在训练中,我们忽略所有跨边界的锚,这样他们就对损失不会有贡献。例如对一个典型的 1000 * 600图像,这里就会总共产生差不多20000(^ 60 * 40 * 9)个锚。当忽略跨边界的锚,这里每张图就有大约6000个锚训练。如果不忽略跨边界的锚,它们会在目标中引入大的,难以纠正的错误项,并且训练不会收敛。然而,在测试中,我们仍然将整个卷积RPN应用到整幅图像上。这将生成跨边界的建议框,我们会根据图像边缘进行裁剪,

RPN生成的建议框中存在重合度很高的建议框。为了减少这个冗余性,我们基于他们Cls分数,采用NMS进行过滤。我们固定IoU的阈值为0.7,这样每幅图像最终剩下大约2000个建议框。正如我们将要表明的那样,NMS不会影响这个
最终检测精度,但大幅降低提案的数量。在NMS之后,我们使用排名前N的提案区域进行检测。在里面接下来,我们使用2000个RPN提案对Fast R-CNN进行培训,但在测试时要评估不同数量的建议框。
测试时间。
4 实验
5 总结
我们对高效和准确的区域建议的生成提出了区域建议网络(RPN)。通过与其后的检测网络共享卷积特征,区域建议的步骤几乎是无损耗的。我们的方法使一个一致的,基于深度学习的目标检测系统以5-17 fps的速度运行。学到的RPN也改善了区域建议的质量,进而改善整个目标检测的准确性。

继续尝试翻译,欢迎指正。

猜你喜欢

转载自blog.csdn.net/ZHANG2012LIANG/article/details/79418367