Faster RCNN精读

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

Faster R-CNN:使用区域建议网络实现实时目标检测

优异的网络模型总是经得起时间的推敲,Faster RCNN便是其中一员。

目录

一、摘要

二、结论

三、介绍和相关工作

四、Faster RCNN

(1)Region Proposal Networks

(2)Sharing Features for RPN and Fast R-CNN

五、部分实验结果和检测结果


一、摘要

最先进的目标检测网络依赖于区域建议算法来假设目标位置。SPPnet和Fast R- CNN等技术的进步降低了这些检测网络的运行时间,使得区域推荐计算成为瓶颈。在这项工作中,我们引入了一个区域建议网络( RPN ),它与检测网络共享全图像卷积特征,从而实现了几乎无成本的区域建议。RPN是一个全卷积网络,它同时预测每个位置的对象边界和对象得分。RPN经过端到端的训练,生成高质量的区域提案,供Fast R-CNN用于检测。 我们进一步通过共享它们的卷积特征将RPN和Fast R-CNN合并到一个网络中- -使用最近流行的具有"注意力"机制的神经网络术语,RPN组件告诉统一的网络在哪里看。对于非常深的VGG-16模型,我们的检测系统在GPU上的帧率为5fps(包括所有步骤),同时在PASCAL VOC 2007、2012和MS COCO数据集上达到了目前最好的目标检测精度,每幅图像仅有300个提议。在ILSVRC和COCO2015比赛中,Faster R - CNN和RPN是多条赛道获得第1名的基础。代码已公开发布。

二、结论

我们已经提出了RPNs用于高效和准确的区域提案生成。通过与下游检测网络共享卷积特征,区域建议步骤几乎无成本。我们的方法使一个统一的、基于深度学习的目标检测系统能够以接近实时的帧速率运行。学习的RPN还提高了区域建议的质量,从而提高了整体的目标检测精度。

三、介绍和相关工作

提出问题:最近的目标检测技术的进步是由区域推荐方法和基于区域的卷积神经网络的成功推动的。虽然基于区域的CNN如最初在R-CNN中开发的那样在计算上很昂贵,但由于在提案之间共享卷积,它们的成本已经大幅降低。最新的化身Fast R-CNN,在忽略区域建议所花费的时间的情况下,使用VGG达到接近实时的速度。现在,提案是最先进的检测系统中的测试时间计算瓶颈。

以往的解决方案:区域推荐方法通常依赖于廉价的特征和经济的推理方案。选择性搜索《Selective search for object recognition》是最流行的方法之一,它基于工程化的低层特征贪婪地合并超像素。然而,与高效的检测网络Fast R-CNN相比,选择性搜索的速度要慢一个数量级,在CPU实现中,每幅图像的速度为2秒。Edge Boxes目前在提案质量和速度之间提供了最佳折衷,每张图片0.2秒。尽管如此,区域推荐步骤仍然消耗与检测网络一样多的运行时间。人们可能会注意到,快速的基于区域的CNN利用了GPU,而研究中使用的区域建议方法是在CPU上实现的,使得这种运行时比较不公平。加速提案计算的一个显而易见的方法是将其重新实现为GPU。这可能是一个有效的工程解决方案,但重新实现忽略了下游的检测网络,因此错过了共享计算的重要机会。

我们的解决方案:在本文中,我们展示了一个带有深度卷积神经网络的算法更改计算提议--提供一个优雅和有效的解决方案,其中提议计算几乎是免费的,给定检测网络的计算。为此,我们引入了新的区域建议网络( RPN ),它与最先进的目标检测网络共享卷积层。通过在测试时共享卷积,计算提议的边际成本较小(例如,每幅图像10ms)。我们的观察是,基于区域的检测器使用的卷积特征图,如Fast R-CNN,也可以用于生成区域建议。在这些卷积特征的基础上,我们通过添加一些额外的卷积层来构建一个RPN,这些卷积层同时回归规则网格上每个位置的区域界限和客观性分数。因此,RPN是一种全卷积网络( FCN ),可以专门针对生成检测建议的任务进行端到端的训练。RPN旨在以广泛的尺度和纵横比有效地预测区域建议。与流行的使用图像金字塔(图1 , a )或滤波器金字塔(图1 , b)的方法不同,我们引入了新颖的"锚"框,作为多个尺度和纵横比的参考。我们的方案可以被看作是回归参考(图1 , c)的金字塔,避免了枚举多个尺度或纵横比的图像或滤波器。当使用单尺度图像进行训练和测试时,此模型表现良好,从而有利于运行速度。

图1:处理多个尺度和大小的不同方案。

  • ( a )构建图像和特征图的金字塔,并在所有尺度下运行分类器。
  • ( b )在特征图上运行多个尺度/大小的滤波器金字塔。
  • ( c )我们在回归函数中使用参考框的金字塔。

训练方案:为了将RPN与Fast R- CNN目标检测网络统一起来,我们提出了一种训练方案,在保持提案固定不变的情况下,对区域提案任务进行微调,然后对目标检测进行微调。该方案快速收敛并生成一个统一的网络,其中包含两个任务之间共享的卷积特征。

基于数据集的实验结果:我们在PASCAL VOC检测基准上全面评估了我们的方法,其中使用Fast R - CNNs的RPNs产生的检测精度优于使用Fast R - CNNs的Selective Search的强基线。同时,我们的方法几乎免去了选择性搜索的所有计算负担- -提案的有效运行时间仅为10毫秒。使用昂贵的深度模型VGG,我们的检测方法在GPU上仍然具有5fps(包括所有步骤)的帧率,因此在速度和精度方面都是一个实用的目标检测系统。我们还报告了在MS COCO数据集上的实验结果,并研究了使用COCO数据对PASCAL VOC的改进。

比赛结果:在ILSVRC和COCO 2015竞赛中,FasterR - CNN和RPN是ImageNet检测、Ima - geNet定位、COCO检测和COCO分割轨道中多个第一位置的基础。RPN完全学习从数据中提出区域,因此可以轻松地从更深层次和更具表现力的特性(如Resnet101)中获益。Faster R-CNN和RPN也被其他几个在这些比赛中领先的参赛者使用。这些结果表明,我们的方法不仅是一个具有成本效益的解决方案,用于实际使用,而且是提高目标检测精度的有效途径。

Object Proposals:关于对象建议方法的文献很多。对象建议方法的全面调查和比较可以在《How good are de-tection proposals, really?》
《What makesfor effective detection proposals》
《Object-Proposal Evaluation Protocol is ’Gameable’》
中找到。广泛使用的对象建议方法包括基于分组超像素的方法(例如, 选择性搜索、CPMC 、MCG )和基于滑动窗口的方法(如objectness in windows、Edge Boxes )。对象提议方法作为独立于检测器(例如, Selective Search object detectors, R-CNN and Fast R-CNN)的外部模块被采用。

Deep Networks for Object Detection:R - CNN方法端到端地训练CNN,将候选区域分类为目标类别或背景。R - CNN主要作为一个分类器,它不预测对象边界(除通过边界框回归进行精炼外)。其准确性取决于区域建议模块的性能。一些文献提出了利用深度网络预测物体边界框的方法《Overfeat: Integrated recognition,localizationand detection using convolutional networks》《Deep neural networksfor object detection》
《Scalable object detection using deep neural networks》
《Scalable, high-quality object detection》。在OverFeat方法中,训练了一个全连接层来预测假定单个对象的定位任务的框坐标。然后将全连接层变成一个卷积层,用于检测多个特定于类的对象。The MultiBox methods 从最后一个全连接层同时预测多个类别不相关框的网络中生成区域建议,推广了OverFeat的"单框"方式。这些类无关的盒子被用作R - CNN的提案。The MultiBox methods Proposal 网络应用于单个图像 crop 或多个大型图像 crop (例如, 224 × 224),与我们的全卷积方案相反。The MultiBox methods 不在提案和检测网络之间共享特性。后文将结合我们的方法对Over Feat和 The MultiBox methods 进行更深入的讨论。结合我们的工作,发展了Deep Mask方法用于学习分割提议。

卷积的共享计算已经吸引了越来越多的关注,高效准确的视觉识别。Over Feat 从图像金字塔中计算卷积特征用于分类、定位和检测。共享卷积特征图上的自适应大小池化( SPP ) 被开发用于高效的基于区域的目标检测和语义分割。Fast R- CNN能够在共享的卷积特征上实现端到端的检测器训练,并表现出令人信服的精度和速度。

四、Faster RCNN

我们的目标检测系统叫做Faster R-CNN,由两个模块组成。第一个模块是提出区域的深度卷积网络,第二个模块是使用提出区域的Fast R- CNN检测器。整个系统是一个单一的、统一的目标检测网络( 图2 )。使用最近流行的带有"注意力"机制的神经网络术语,RPN模块告诉Fast R - CNN模块在哪里看。接下来,我们将介绍区域建议网络的设计和属性。我们开发了用于训练具有共享特性的两个模块的算法。

图2:Faster R - CNN是一个单一的、统一的目标检测网络。RPN模块作为这个统一网络的"注意力"。

(1)Region Proposal Networks

区域建议网络( RPN )将一个image(任意大小)作为输入,并输出一组矩形对象建议,每个建议都有一个对象性分数。我们用一个全卷积网络来建模这个过程,我们将在本节中描述。因为我们的最终目标是与一个Fast R - CNN目标检测网络共享计算,所以我们假设这两个网络共享一组共同的卷积层。在我们的实验中,我们研究了具有5个共享卷积层的Zeiler和Fergus模型( ZF )和具有13个共享卷积层的the Simonyan and Zisserman model ( VGG-16 )。

为了生成区域建议,我们在最后一个共享卷积层输出的卷积特征图上滑动一个小网络。这个小网络将输入卷积特征图的一个n × n空间窗口作为输入。每个滑动窗口映射到一个低维特征(用于ZF的256-d和用于VGG的512-d ,具有ReLU )。该特征被馈送到两个同胞全连接层- - box回归层( reg )和box分类层( cls )。本文中我们使用n = 3,注意到输入图像上的有效感受野是large( ZF和VGG分别为171和228像素)。在图3 (左)的单个位置展示了这个微型网络。需要注意的是,由于微型网络是以滑动窗口的方式运行的,因此全连接层在所有空间位置上共享。该体系结构自然地由一个n × n卷积层和 two sibling 1 × 1卷积层( for reg and cls,respectively )。

图3:左:区域建议网络( RPN )。右:在PASCALVOC 2007测试中使用RPN建议的示例检测。我们的方法在广泛的尺度和纵横比范围内检测物体。 

Anchors:在每个滑动窗口位置,我们同时预测多个区域提议,其中每个位置的最大可能提议数表示为。因此,reg层有4k个输出,编码k个框的坐标,而cls层输出2k个分数,用于估计每个提案的对象或非对象的概率。k个提议相对于k个参考框是参数化的,我们称之为锚。锚点位于问题的滑动窗口中心,并与尺度和纵横比(图3 ,左)相关。默认情况下,我们使用3个尺度和3个纵横比,在每个滑动位置产生k = 9个锚。对于一个大小为 W × H (典型的有2 , 400)的卷积特征图,共有 WHk 锚点。

Translation-Invariant Anchors:我们的方法的一个重要特性是它的平移不变性,无论是在锚点方面还是在计算相对于锚点的建议的函数方面。如果一个人翻译了一幅图像中的一个物体,那么这个提议应该是翻译的,并且同一个函数应该能够预测任意位置的提议。这种平移不变性质由我们的方法保证。作为比较,The MultiBox mothed 使用k - means生成800个锚,这些锚不是平移不变的。所以 The MultiBox mothed 并不能保证如果一个对象被翻译了,同样的建议也会被生成。平移不变属性也减少了模型大小。The MultiBox mothed 有一个( 4 + 1 ) × 800维全连接输出层,而我们的方法在k = 9个锚点的情况下有一个( 4 + 2 ) × 9维卷积输出层。因此,我们的输出层有2.8 × 104个参数( VGG - 16为512 × ( 4 + 2 ) × 9 ),比 MultiBox 的输出层有6.1 × 106个参数( MultiBox中的GoogleNet为1536 × ( 4 + 1 ) × 800 )少两个数量级。如果考虑特征投影层,我们的建议层的参数仍然比 MultiBox 少一个数量级。我们期望我们的方法在小数据集上有更小的过拟合风险,比如PACSAL VOC。

Multi-Scale Anchors as Regression References:我们的锚点设计提供了一种新颖的方案来处理多个尺度的(和纵横比)。如图1所示,已有两种流行的多尺度预测方法。第一种是基于图像/特征金字塔的方法,如DPM和基于CNN的方法。在多个尺度上对图像进行缩放,计算每个尺度下的特征图( HOG或深度卷积特征) (图1 ( a ) )。这种方式往往是有用的,但很耗时。第二种方法是在特征图上使用多个scale(和/或纵横比)的滑动窗口。例如,在DPM中,使用不同的滤波器尺寸(例如5 × 7和7 × 5)分别训练不同纵横比的模型。如果使用这种方式来处理多个尺度,它可以被认为是一个"过滤器金字塔" (图1 ( b ) )。第二种方式通常与第一种方式结合使用。作为对比,我们的基于锚点的方法是建立在锚点金字塔的基础上,更具有成本效益。我们的方法根据多个尺度和纵横比的锚框对边界框进行分类和回归。它只依赖单一尺度的图像和特征图,并使用单一尺寸的filter(在特征图上滑动窗口)。我们通过实验展示了该方案在处理多个尺度和大小时的效果(表8 )。由于这种基于锚点的多尺度设计,我们可以简单地使用在单尺度图像上计算的卷积特征,正如Fast R - CNN检测器所做的那样。多尺度锚点的设计是在不增加寻址尺度成本的情况下共享特征的关键部分。

表8:使用不同锚点设置的Faster R - CNN在PAS - CAL VOC 2007测试集上的检测结果。

Loss Function(根据正负标签来定义损失函数):对于训练RPN,我们为每个锚点分配一个二进制类标签。我们给两类锚赋予一个正标签:( i )常规的锚或者交并比( IoU )最高的锚与一个真实框重合,或者( ii ) IoU重合度高于0.7的锚与任何真实框重合。需要注意的是,单个真实框可能为多个锚点分配正标签。通常第二个条件足以确定正样本;但我们仍然采用第一个条件,因为在一些罕见的情况下第二个条件可能没有发现阳性样本。如果一个非正定锚点的IoU比在所有真实框中都低于0.3,则为其分配一个负标签。既不积极也不消极的锚对训练目标没有贡献。根据这些定义,我们在Fast R- CNN中最小化多任务损失后的目标函数。我们对图像的损失函数定义为:

这里,是小批量中锚的索引,p_{i} 是锚 i 是对象的预测概率。真实标签 p_{i}^{*} 在锚点为正的情况下为1,在锚点为负的情况下为0,t_{i} 是表示预测边界框的4个参数化坐标的向量,t_{i}^{*} 是与正锚点相关的真实框的坐标。分类损失Lcls是两个class(宾语vs )上的日志损失。对于回归损失,我们使用,其中 R 是 Fast R- CNN 中定义的 robust loss function (smooth L1 )。术语表示仅对正锚( p_{i}^{*} = 1 )激活回归损失,否则禁用( p_{i}^{*} = 0 )。cls 层和 reg 层的输出分别由 { p_{i}} 和 { t_{i} } 组成。 

这两个项由 N_{cls} 和 N_{reg} 标准化,并由平衡参数 λ 加权。在我们目前的实现 (如在发布的代码中),式( 1 )中的 cls 项用小批量的 (即N_{cls} = 256) 进行归一化,reg 项用锚点的个数 (即N_{reg} ≥ 2400) 进行归一化。默认情况下,我们设置 λ = 10,因此 cls reg 项的权重大致相等。我们通过实验发现,该结果在很大范围内对 λ 的取值不敏感 (表9)。我们还注意到,上面的规范化不是必需的,可以简化。

对于边界框回归,我们采用以下4个坐标的参数化(R-CNN):

其中 x、y、w、h 分别表示 box 的中心坐标、宽度和高度。变量 xx_{a} 和 x^{*} 分别表示预测框、锚框和真实框 (同理可得y , w , h)。这可以被认为是从锚框到附近的事实框的边界框回归。

尽管如此,我们的方法通过与以前基于RoI的(感兴趣区域)方法不同的方式实现边界框回归。先前的工作,边界框回归是对来自任意大小RoIs的特征池进行的,回归权重由所有区域大小共享。在我们的公式中,用于回归的特征在特征图上具有相同的空间大小( 3 × 3)。为了适应不同的大小,学习了一组 k 个边界框回归器。每个回归器负责一个尺度和一个纵横比,而 k 个回归器不共享权重。因此,仍然有可能预测不同尺寸的盒子,尽管由于锚的设计,这些特征是固定尺寸/尺度的。

Training RPNs:RPN可以通过反向传播和随机梯度下降( SGD )进行端到端的训练。我们遵循 Fast R-CNN 中的"以图像为中心"的采样策略来训练这个网络。每个迷你批次产生于包含许多正负示例锚点的单个图像。对所有锚点的损失函数进行优化是可能的,但由于负样本占主导地位,这将偏向负样本。相反,我们在一个图像中随机采样256个锚点来计算一个小批量的损失函数,其中采样的正负锚点的比例高达1:1。如果一幅图像中的正样本少于128个,我们用负样本填充小样本。

我们通过从标准差为0.01的零均值高斯分布中抽取权重来随机初始化所有新层。所有其他层(即共享的卷积层)都是通过预训练一个模型来初始化ImageNet分类,作为标准实践。我们对ZF网络的所有层进行调优,并对VGG网络进行conv3 1和up调优以节约内存。在PASCAL VOC数据集上,我们对60k个mini - batch使用0.001的学习率,对接下来的20kmini - batch使用0.0001的学习率。我们使用动量为0.9和重量衰减为0.0005。我们的实现采用Caffe。

(2)Sharing Features for RPN and Fast R-CNN

到目前为止,我们已经描述了如何训练一个用于区域建议生成的网络,而没有考虑将利用这些建议的基于区域的目标检测 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损失的反向传播信号被合并。这个解决方案很容易实现。但是这个解决方案忽略了w . r . t .提案框的坐标也是网络响应,所以是近似的。在我们的实验中,我们经验地发现这个解算器产生了接近的结果,但是与交替训练相比减少了大约25 - 50 %的训练时间。这个求解器包含在我们发布的Python代码中。
  3. 非近似联合训练。如前所述,RPN预测的边界框也是输入的函数。Fast R - CNN中的Ro I池化层接受卷积特征,也接受预测的边界框作为输入,因此一个理论上有效的反向传播求解器还应该包含关于框坐标的梯度。这些梯度在上面的近似联合训练中被忽略。在一个非近似的联合训练解决方案中,我们需要一个RoI池化层,它是可微的w . r . t .盒子坐标。

4-Step Alternating Training. 在本文中,我们采用一种实用的4步训练算法,通过交替优化来学习共享特征。在第一步中,我们按照上文所述方式训练RPN。该网络使用ImageNet预训练模型进行初始化,并针对区域建议任务进行端到端微调。在第二步中,我们使用step - 1 RPN生成的建议通过Fast R- CNN训练一个单独的检测网络。该检测网络同样由ImageNet预训练模型初始化。此时,两个网络不共享卷积层。在第三步中,我们使用探测器网络初始化RPN训练,但是我们固定了共享的卷积层,只对RPN特有的层进行微调。现在这两个网络共享卷积层。最后,保持共享卷积层固定不变,我们微调Fast R-CNN的唯一层。因此,这两个网络共享相同的卷积层,并形成一个统一的网络。类似的交替训练可以运行更多的迭代,但我们观察到的改进微不足道。

五、部分实验结果和检测结果

 >>>如有疑问,欢迎评论区一起探讨!

猜你喜欢

转载自blog.csdn.net/qq_54185421/article/details/128142209