(目标检测篇)系列文章目录
第一章:R-CNN网络详解
第二章:Fast R-CNN网络详解
第三章:Faster R-CNN网络详解
第四章:YOLO v1网络详解
第五章:YOLO v2网络详解
第六章:YOLO v3网络详解
文章目录
- 系列文章目录
- 技术干货集锦
- 前言
- 一、摘要
- 二、正文分析
- 1.引入库
- 2.读入数据
- 总结
技术干货集锦
Faster R-CNN
Faster R-CNN算法流程可分为3个步骤
- 将图像输入网络得到相应的特征图
- 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵。
- 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。
RPN + Fast R-CNN
Faster R-CNN框架
Region proposal Feature extraction Classification Bounding-box regression (CNN) |
前言
- 引言 最近物体检测的进展得益于区域提议方法(例如[4])和基于区域的卷积神经网络(R-CNN)[5]的成功。尽管最初开发的基于区域的CNN在计算上非常昂贵[5],但通过在提议之间共享卷积计算[1],[2],其成本已经大大降低。最新的版本Fast R-CNN[2]使用非常深的网络[3]实现了接近实时的速度,忽略了在区域提议上花费的时间。然而,在最先进的检测系统中,提议仍然是测试时的计算瓶颈。区域提议方法通常依赖于廉价的特征和经济的推理方案。Selective Search [4]是最流行的方法之一,它基于特定的低级特征贪婪地合并超像素。然而,与高效的检测网络[2]相比,Selective Search的速度慢了一个数量级,每张图像在CPU实现中需要2秒的时间。EdgeBoxes [6]目前在提议质量和速度之间提供了最好的折衷方案,每张图像耗时0.2秒。然而,区域提议步骤仍然消耗与检测网络相同的运行时间。
- RPNs旨在高效地预测具有各种尺度和长宽比的区域提议。与常见的方法[8],[9],[1],[2]使用图像金字塔(图1.a)或滤波器金字塔(图1.b)相比,我们引入了新颖的“锚定框”作为多尺度和长宽比的参考。我们的方案可以看作是一个回归参考金字塔(图1.c),避免了枚举多个尺度或长宽比的图像或滤波器。该模型在使用单尺度图像进行训练和测试时表现良好,并且有利于运行速度。为了将RPN与Fast R-CNN[2]目标检测网络统一起来,我们提出了一种训练方案,交替进行区域提议任务的微调和目标检测的微调,同时固定提议。这种方案收敛迅速,并产生了一个统一的网络,卷积特征在两个任务之间共享。我们在PASCAL VOC检测基准测试[11]上对我们的方法进行了全面评估,其中RPN与Fast R-CNN相比,产生了比Selective Search与Fast R-CNN强基线更好的检测准确性。同时,我们的方法在测试时几乎不需要计算负担——提议的有效运行时间仅为10毫秒。使用昂贵的非常深的模型[3],我们的检测方法在GPU上的帧率仍然达到了5fps(包括所有步骤),因此在速度和准确性两方面都是一个实用的目标检测系统。我们还在MS COCO数据集[12]上报告了结果,并研究了使用COCO数据改进PASCAL VOC的效果。代码已在以下链接中公开提供: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]。我们快速而有效的目标检测系统还被应用在商业系统中,如Pinterest [17],并报告了用户参与度的改善。在ILSVRC和COCO 2015的比赛中,Faster R-CNN和RPN是几个第一名入选的项目的基础,涵盖了ImageNet检测,ImageNet定位,COCO检测和COCO分割的领域[18]。RPN完全通过数据学习提出区域的方法,因此可以轻松受益于更深层次和更具表现力的特征(如[18]中采用的101层残差网络)。Faster R-CNN和RPN也被其他几个领先项目在这些比赛中使用[2]。这些结果表明,我们的方法不仅是一种成本高效的实用解决方案,而且是提高目标检测准确性的有效方法。
一、摘要
摘要:目前最先进的目标检测网络依赖于区域提议算法来猜测目标位置。像SPPnet [1]和Fast R-CNN [2]这样的进展已经减少了这些检测网络的运行时间,暴露了区域提议计算作为瓶颈。在本文中,我们引入了一个区域提议网络(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的比赛中,Faster R-CNN和RPN是一些赛道中第一名的基础。代码已经公开发布。
关键词:目标检测、区域提议、卷积神经网络。
二、正文分析
2.相关工作
对象提议。关于对象提议方法有大量的文献。[19],[20],[21]中可以找到对对象提议方法的全面调研和比较。广泛使用的对象提议方法包括基于超像素分组的方法(例如Selective Search [4],CPMC [22],MCG [23])和基于滑动窗口的方法(例如窗口中的物体性 [24],EdgeBoxes [6])。对象提议方法通常作为独立于检测器(例如Selective Search [4],R-CNN [5]和Fast R-CNN [2])的外部模块被采用。 用于对象检测的深度网络。R-CNN方法[5]通过端到端训练CNN将提议区域分类为对象类别或背景。R-CNN主要作为分类器,不预测对象边界(除了通过边界框回归进行细化)。它的准确性取决于区域提议模块的性能(参见[20]中的比较)。一些论文提出了使用深度网络来预测对象边界框的方法[25],[9],[26],[27]。在OverFeat方法[9]中,训练一个全连接层来预测单个对象的定位任务的框坐标。然后,将全连接层转换为卷积层,以检测多个类别特定的对象。MultiBox方法[26],[27]从一个网络中生成提议区域,该网络的最后一个全连接层同时预测多个类别无关的框,扩展了OverFeat的“单框”方式。这些类别无关的框被用作R-CNN的提议。与我们的完全卷积方案相比,MultiBox方法在单个图像剪裁或多个大型图像剪裁(例如224×224)上应用提议网络。MultiBox不在提议和检测网络之间共享特征。我们稍后在与我们的方法相关的上下文中详细讨论OverFeat和MultiBox。与我们的工作同时进行的DeepMask方法[28]是用于学习分割提议的方法。
共享卷积的计算[9],[1],[29],[7],[2]引起了越来越多关于高效且准确的视觉识别的注意。OverFeat论文[9]通过图像金字塔计算卷积特征,进行分类、定位和检测。自适应大小的池化(SPP)[1]在共享的卷积特征图上进行开发,用于高效的基于区域的目标检测[1],[30]和语义分割[29]。Fast R-CNN [2]可以在共享的卷积特征上进行端到端的检测器训练,并展示出令人信服的准确性和速度。
3 FASTER R-CNN
我们的目标检测系统称为Faster R-CNN,由两个模块组成。
第一个模块是一个深度全卷积网络,用于提出区域,
第二个模块是使用提出的区域的Fast R-CNN检测器[2]。
整个系统是一个用于目标检测的单一统一网络(图2)。使用最近流行的具有"注意力"机制的神经网络术语,RPN模块告诉Fast R-CNN模块在哪里查找。在第3.1节中,我们介绍了用于区域提议的网络的设计和特性。在第3.2节中,我们开发了用于训练这两个模块的特征共享算法。
3.1 区域提议网络
区域提议网络(RPN)将一张图像(任意大小)作为输入,并输出一组矩形目标提议,每个提议都有一个目标得分[3]。我们使用全卷积网络[7]来建模这个过程,并在本节中描述。因为我们的最终目标是与Fast R-CNN目标检测网络[2]共享计算,所以我们假设两个网络共享一组公共的卷积层。在我们的实验中,我们研究了Zeiler和Fergus模型32,它有5个可共享的卷积层,以及Simonyan和Zisserman模型3,它有13个可共享的卷积层。 为了生成区域提议,我们在最后一个共享的卷积层输出的卷积特征图上滑动一个小网络。这个小网络将输入的n×n空间窗口映射到一个低维特征(ZF为256维,VGG为512维,并在之后使用ReLU [33])。这个特征被输入到两个兄弟全连接层 - 一个用于边界框回归(reg)和一个用于边界框分类(cls)。在本文中,我们使用n = 3,注意到输入图像上的有效感受野很大(ZF为171个像素,VGG为228个像素)。这个小网络在图3(左侧)中的一个位置示意图中说明。注意,由于小网络以滑动窗口的方式操作,全连接层在所有空间位置上共享。这种架构自然地用一个n×n卷积层后跟两个兄弟1×1卷积层(分别用于reg和cls)来实现。
3.1.1 锚点
在每个滑动窗口位置,我们同时预测多个区域提议,在每个位置上可能的最大提议数量被表示为k。因此,reg层有4k个输出,编码k个框的坐标,而cls层输出2k个得分,用于估计每个提议的目标或非目标的概率。这k个提议相对于k个参考框进行参数化,我们称之为锚点。一个锚点位于所讨论的滑动窗口的中心,并与一个比例和一个纵横比相关联(图3,左)。默认情况下,我们使用3个比例和3个纵横比,在每个滑动位置产生k=9个锚点。对于一个大小为W×H(通常约为2400)的卷积特征图,总共有WHk个锚点。 平移不变的锚点 我们方法的一个重要特性是它在锚点和计算相对于锚点的提议的函数方面是平移不变的。如果在图像中平移一个物体,提议应该随之平移,并且相同的函数应该能够预测出在任何位置的提议。我们的方法保证了这个平移不变的性质。作为对比,MultiBox方法[27]使用k-means生成800个锚点,它们不是平移不变的。因此,MultiBox不能保证如果一个物体被平移,生成的是相同的提议。平移不变的特性还减小了模型的大小。MultiBox有一个(4 + 1)×800维的全连接输出层,而我们的方法在k = 9个锚点的情况下有一个(4 + 2)×9维的卷积输出层。因此,我们的输出层只有2.8×10^4个参数(对于VGG-16,512×(4 + 2)×9),比MultiBox的输出层少了两个数量级,MultiBox的输出层有6.1×10^6个参数(对于MultiBox [27]中的GoogleNet [34],1536×(4 + 1)×800)。考虑到特征投影层,我们的提议层的参数数量仍然比MultiBox少一个数量级。因此,我们的方法在小数据集(如PASCAL VOC)上过拟合的风险更小。
多尺度锚点作为回归参考
我们的锚点设计提供了一种解决多尺度(和纵横比)问题的新方案。如图1所示,有两种常见的多尺度预测方法。
第一种方法基于图像/特征金字塔,例如在DPM [8]和基于CNN的方法[9],[1],[2]中。图像被调整为多个尺度,并且对每个尺度计算特征图(HOG [8]或深度卷积特征[9],[1],[2])(图1(a))。这种方法通常很有用,但是耗时较长。
第二种方法是在特征图上使用多个尺度(和/或纵横比)的滑动窗口。例如,在DPM [8]中,使用不同的滤波器尺寸(如5×7和7×5)分别训练不同纵横比的模型。如果这种方法用于处理多个尺度,可以将其视为“滤波器金字塔”(图1(b))。第二种方法通常与第一种方法一起使用[8]。相比之下,我们基于锚点的方法是建立在锚点金字塔之上的,更具成本效益。我们的方法通过参考多个尺度和纵横比的锚点框来对边界框进行分类和回归。它只依赖于单一尺度的图像和特征图,并使用单一尺寸的滤波器(在特征图上的滑动窗口)。我们通过实验证明了这种方案对于处理多个尺度和大小的效果(表8)。由于基于锚点的这种多尺度设计,我们可以简单地使用在单一尺度图像上计算的卷积特征,这也是Fast R-CNN检测器[2]所做的。多尺度锚点的设计是在不额外增加成本的情况下共享特征的关键组成部分。
3.1.2 损失函数
对于训练RPNs,我们为每个锚点分配一个二元类别标签(表示是否为对象)。我们将正标签分配给两种类型的锚点:
(i)与地面真实框具有最高IoU(交并比)重叠的锚点/锚点,或(ii)与任何地面真实框的IoU重叠大于0.7的锚点。请注意,单个地面真实框可能会为多个锚点分配正标签。通常情况下,第二个条件就足以确定正样本;但是由于在某些罕见情况下,第二个条件可能找不到正样本,因此我们仍然采用第一个条件。对于所有地面真实框,如果非正锚点的IoU比率都低于0.3,我们将为其分配负标签。既不是正标签也不是负标签的锚点不会对训练目标产生影响。根据这些定义,我们通过最小化Fast R-CNN [2]中的多任务损失函数来优化目标函数。我们对于一张图像的损失函数定义如下: L(fpig;ftig)=1 N 1 Ncls X i i Lcls(pi;p∗i )+λ1 N N r N reg Xi p∗i Lreg(ti;t∗i ):(1) 在这里,i是mini-batch中锚点的索引,pi是预测的锚点i为对象的概率。如果锚点是正样本,那么地面真实标签p∗i为1,如果锚点是负样本,那么地面真实标签p∗i为0。ti是表示预测边界框的4个参数化坐标的向量,而t∗i是与正锚点相关联的地面真实框的参数化坐标。分类损失Lcls是两类(对象 vs.非对象)的对数损失。对于回归损失,我们使用L reg(ti;t∗i )=R(ti −t∗i),其中R是[2]中定义的鲁棒损失函数(平滑L1)。p∗i Lreg项表示仅对正锚点(p∗i =1)激活回归损失,否则禁用回归损失。cls和reg层的输出分别为fpig和ftig
3.1.2 损失函数
对于训练RPNs,我们为每个锚点分配一个二元类别标签(表示是否为对象)。我们将正标签分配给两种类型的锚点:
(i)与地面真实框具有最高IoU(交并比)重叠的锚点/锚点,或
(ii)与任何地面真实框的IoU重叠大于0.7的锚点。
请注意,单个地面真实框可能会为多个锚点分配正标签。通常情况下,第二个条件就足以确定正样本;但是由于在某些罕见情况下,第二个条件可能找不到正样本,因此我们仍然采用第一个条件。对于所有地面真实框,如果非正锚点的IoU比率都低于0.3,我们将为其分配负标签。既不是正标签也不是负标签的锚点不会对训练目标产生影响。根据这些定义,我们通过最小化Fast R-CNN [2]中的多任务损失函数来优化目标函数。我们对于一张图像的损失函数定义如下: L(fpig;ftig)=1 N 1 Ncls X i i Lcls(pi;p∗i )+λ1 N N r N reg Xi p∗i Lreg(ti;t∗i ):(1) 在这里,i是mini-batch中锚点的索引,pi是预测的锚点i为对象的概率。如果锚点是正样本,那么地面真实标签p∗i为1,如果锚点是负样本,那么地面真实标签p∗i为0。ti是表示预测边界框的4个参数化坐标的向量,而t∗i是与正锚点相关联的地面真实框的参数化坐标。分类损失Lcls是两类(对象 vs.非对象)的对数损失。对于回归损失,我们使用L reg(ti;t∗i )=R(ti −t∗i),其中R是[2]中定义的鲁棒损失函数(平滑L1)。p∗i Lreg项表示仅对正锚点(p∗i =1)激活回归损失,否则禁用回归损失。cls和reg层的输出分别为fpig和ftig。 这两项损失函数都经过了Ncls和Nreg的归一化,并且通过一个平衡参数λ进行加权。在我们当前的实现中(与发布的代码相同),公式(1)中的cls项通过mini-batch的大小进行归一化(即Ncls =256),而reg项则通过锚点位置的数量进行归一化(即Nreg ∼2,400)。默认情况下,我们设置λ=10,因此cls和reg项大致具有相等的权重。通过实验证明,在一定范围内,λ的值对结果不敏感(表9)。我们还注意到,上述的归一化并不是必需的,可以简化。对于边界框回归,我们采用了[5]中的参数化方法:tx =(x −xa)=wa;ty =(y −ya)=ha;tw =log(w=wa);th =log(h=ha);t∗x ∗x =(x∗−xa)=wa;t∗y =(y∗−ya)=ha;t∗w ∗w =log(w∗=wa);t∗h =log(h∗=ha);(2),其中x,y,w和h分别表示边界框的中心坐标和宽度和高度。变量x,xa和x∗分别表示预测的边界框,锚点框和地面真实框(y,w,h也是如此)。可以将其视为从锚点框到附近地面真实框的边界框回归。然而,我们的方法通过与以前基于RoI(感兴趣区域)的方法[1],[2]不同的方式实现了边界框回归。在[1],[2]中,边界框回归是在从任意大小的RoI池化的特征上执行的,并且回归权重由所有区域大小共享。在我们的公式中,用于回归的特征具有相同的空间大小(3×3)在特征图上。为了适应不同的大小,学习了一组k个边界框回归器。每个回归器负责一个尺度和一个宽高比,而k个回归器不共享权重。因此,即使特征是固定的大小/尺度,仍然可以预测各种大小的边界框,这要归功于锚点的设计。
3.1.3 训练RPNs
RPN可以通过反向传播和随机梯度下降(SGD)[35]进行端到端的训练。我们遵循[2]中的“以图像为中心”的采样策略来训练这个网络。每个mini-batch来自包含许多正负样本锚点的单个图像。可以优化所有锚点的损失函数,但这会偏向于负样本,因为它们数量多。相反,我们随机采样256个锚点来计算mini-batch的损失函数,其中采样的正负锚点比例为1:1。如果图像中的正样本少于128个,则用负样本填充mini-batch。我们通过从均值为零的高斯分布中随机抽取权重来随机初始化所有新层,标准差为0.01。所有其他层(即共享的卷积层)通过对ImageNet分类的预训练模型进行初始化,这是标准做法[5]。我们调整ZF网络的所有层和VGG网络的conv3 1及以上层以节省内存[2]。在PASCAL VOC数据集上,我们使用学习率为0.001的60k个mini-batch,之后使用学习率为0.0001的20k个mini-batch。我们使用0.9的动量和0.0005的权重衰减[37]。我们使用Caffe [38]进行实现。
3.2 RPN和Fast R-CNN的共享特征
到目前为止,我们已经描述了如何训练一个用于区域建议生成的网络,而没有考虑将利用这些建议的基于区域的目标检测CNN。对于检测网络,我们采用了Fast R-CNN[2]。接下来,我们将描述一种学习由RPN和Fast R-CNN组成的统一网络的算法,这两个网络共享卷积层(图2)。RPN和Fast R-CNN分别进行独立训练,并以不同的方式修改它们的卷积层。因此,我们需要开发一种技术,允许在这两个网络之间共享卷积层,而不是学习两个独立的网络。我们讨论了三种训练具有共享特征的网络的方法:
(i) 交替训练。在这个解决方案中,我们首先训练RPN,并使用建议来训练Fast R-CNN。通过Fast R-CNN调整的网络然后用于初始化RPN,然后迭代此过程。这是本文中所有实验中使用的解决方案。
(ii) 近似联合训练。在这个解决方案中,RPN和Fast R-CNN网络在训练过程中合并为一个网络,如图2所示。在每个SGD迭代中,正向传递生成区域建议,这些建议在训练Fast R-CNN检测器时被视为固定的、预计算的建议。反向传播则像往常一样进行,对于共享层,来自RPN损失和Fast R-CNN损失的反向传播信号被合并。这个解决方案容易实现。但是这个解决方案忽略了对于建议框坐标的导数,而这些坐标也是网络的响应,所以是近似的。在我们的实验中,我们经验性地发现这个求解器产生了接近的结果,同时将训练时间缩短了约25-50%,与交替训练相比。这个求解器已经包含在我们发布的Python代码中。
(iii) 非近似联合训练。如上所述,RPN预测的边界框也是输入的函数。Fast R-CNN中的RoI pooling层[2]接受卷积特征和预测的边界框作为输入,因此一个理论上有效的反向传播求解器也应该涉及到边界框坐标的梯度。这些梯度在上述近似联合训练中被忽略了。在非近似联合训练的解决方案中,我们需要一个RoI pooling层,它对边界框坐标是可微分的。这是一个非平凡的问题,可以通过在[15]中开发的"RoI warping"层给出一个解决方案,但这超出了本文的范围。
4步交替训练。
在本文中,我们采用了一种实用的4步训练算法,通过交替优化来学习共享特征。在第一步中,我们按照第3.1.3节中描述的方法训练RPN。该网络使用一个在ImageNet上预训练的模型进行初始化,并进行端到端的微调,以用于区域建议任务。在第二步中,我们使用第一步RPN生成的建议来训练一个单独的Fast R-CNN检测网络。该检测网络也使用在ImageNet上预训练的模型进行初始化。此时,两个网络不共享卷积层。在第三步中,我们使用检测器网络来初始化RPN的训练,但是我们固定共享的卷积层,只微调RPN特有的层。现在,两个网络共享卷积层。最后,在固定共享的卷积层的情况下,我们微调Fast R-CNN的特有层。这样,两个网络共享相同的卷积层,形成一个统一的网络。可以运行类似的交替训练多次迭代,但我们观察到改进微不足道。
3.3 实现细节
我们在单一尺度的图像上训练和测试区域建议和目标检测网络[1],[2]。我们将图像重新缩放,使其较短的一边为s = 600像素[2]。多尺度特征提取(使用图像金字塔)可能提高准确性,但在速度和准确性之间没有很好的权衡[2]。在重新缩放的图像上,ZF和VGG网络在最后一个卷积层的总步长为16个像素,因此在典型的PASCAL图像(约500×375)调整大小之前,步长约为10个像素。即使使用这样大的步长,也能得到良好的结果,但如果使用较小的步长,准确性可能会进一步提高。对于锚点,我们使用3个尺度,其框的面积分别为1282、2562和5122像素,并且使用3个宽高比为1:1、1:2和2:1。这些超参数并没有针对特定的数据集进行精心选择,我们会在下一节中提供关于它们效果的消融实验。正如前面讨论的,我们的解决方案不需要图像金字塔或过滤器金字塔来预测多尺度的区域,从而节省了大量的运行时间。图3(右侧)展示了我们的方法在各种尺度和宽高比下的能力。表1显示了使用ZF网络学习到的每个锚点的平均建议尺寸。我们注意到,我们的算法允许预测大于底层感受野的区域。这样的预测并不是不可能的,如果只能看到物体的中间部分,仍然可以粗略地推断物体的范围。跨越图像边界的锚点需要小心处理。在训练过程中,我们忽略所有跨越边界的锚点,以使它们不对损失贡献。对于一个典型的1000×600像素的图像,总共大约有20000个(≈60×40×9)锚点。在忽略跨边界的锚点后,每个图像大约有6000个锚点用于训练。如果在训练中不忽略跨边界的异常值,它们会引入大的、难以纠正的误差项,并且训练不会收敛。然而,在测试时,我们仍然将完全卷积的RPN应用于整个图像。这可能会生成越界的建议框,我们会将其裁剪到图像边界。
一些RPN提议之间存在很高的重叠。为了减少冗余,我们根据它们的分类得分使用非极大值抑制(NMS)对提议区域进行处理。我们将NMS的IoU阈值固定为0.7,这样每个图像留下大约2000个提议区域。正如我们将要展示的那样,NMS不会损害最终的检测准确性,但大大减少了提议的数量。在NMS之后,我们使用排名前N的提议区域进行检测。在接下来的实验中,我们使用2000个RPN提议来训练Fast R-CNN,但在测试时评估不同数量的提议。
4 实验
4.1 PASCAL VOC上的实验
我们在PASCAL VOC 2007检测基准[11]上全面评估了我们的方法。该数据集包含约5k个训练验证图像和5k个测试图像,涵盖了20个目标类别。我们还在一些模型上提供了PASCAL VOC 2012基准的结果。对于ImageNet预训练网络,我们使用具有5个卷积层和3个全连接层的“fast”版本的ZF Net [32],以及具有13个卷积层和3个全连接层的公共VGG-16模型 [3]。我们主要评估检测平均精度(mAP),因为这是目标检测的实际度量标准(而不是关注目标提议代理度量标准)。表2(顶部)展示了使用各种区域提议方法进行训练和测试的Fast R-CNN结果。这些结果使用了ZF Net。对于选择性搜索(SS)[4],我们通过“fast”模式生成了约2000个提议。对于边缘框(EB)[6],我们使用默认的EB设置生成了经过0.7 IoU调优的提议。在Fast R-CNN框架下,SS的mAP为58.7%,EB的mAP为58.6%。RPN与Fast R-CNN取得了竞争性的结果,mAP为59.9%,同时使用了最多300个提议。使用RPN比使用SS或EB更快,因为共享了卷积计算;较少的提议也减少了区域级全连接层的计算成本(表5)。
RPN的消融实验。
为了研究RPN作为提议方法的行为,我们进行了几个消融研究。首先,我们展示了在RPN和Fast R-CNN检测网络之间共享卷积层的效果。为此,我们在4步训练过程中的第二步停止。使用独立的网络将结果略微降低到58.7%(RPN+ZF,未共享,表2)。我们观察到,这是因为在第三步中,当使用经过调优的检测器特征来微调RPN时,提议的质量得到了提高。接下来,我们解开了RPN对训练Fast R-CNN检测网络的影响。为了这个目的,我们使用了2000个SS提议和ZF网络来训练一个Fast R-CNN模型。我们固定这个检测器,并通过在测试时改变使用的提议区域来评估检测mAP。在这些消融实验中,RPN不与检测器共享特征。将SS替换为300个RPN提议在测试时导致mAP为56.8%。mAP的损失是因为训练和测试提议之间的不一致。这个结果作为后续比较的基线。令人惊讶的是,当在测试时使用排名前100的RPN提议时,RPN仍然能够得到竞争性的结果(55.1%),表明排名靠前的RPN提议是准确的。另一方面,在测试时使用排名前6000的RPN提议(无NMS)具有相当的mAP(55.2%),这表明NMS不会损害检测的mAP,而且可能会减少误报。
接下来,我们分别调查了RPN的分类和回归输出在测试时的作用,通过关闭它们中的任何一个来进行测试。当在测试时移除分类层(因此不使用NMS/排名)时,我们从未评分的区域中随机采样N个提议。当N=1000时,mAP几乎没有变化(55.8%),但当N=100时,mAP显著下降到44.6%。这表明分类分数对于排名靠前的提议的准确性起到了重要作用。另一方面,当在测试时移除回归层(因此提议变为锚框)时,mAP下降到52.1%。这表明高质量的提议主要是由于回归的边界框。虽然锚框具有多个尺度和长宽比,但对于准确的检测来说是不足够的。我们还评估了更强大的网络对RPN提议质量的影响。我们使用VGG-16来训练RPN,仍然使用上述的SS+ZF检测器。mAP从使用RPN+ZF的56.8%提高到使用RPN+VGG的59.2%。这是一个有希望的结果,因为它表明RPN+VGG的提议质量比RPN+ZF更好。因为RPN+ZF的提议与SS具有竞争力(在一致地用于训练和测试时都为58.7%),我们可以预期RPN+VGG比SS更好。下面的实验证实了这个假设。
VGG-16的性能。
表3展示了VGG-16在提议和检测方面的结果。使用RPN+VGG,未共享特征的结果为68.5%,略高于SS基线。正如上面所示,这是因为RPN+VGG生成的提议比SS更准确。与预定义的SS不同,RPN是主动训练的,并且受益于更好的网络。对于共享特征的变体,结果为69.9%——优于强大的SS基线,而且提议几乎没有额外的成本。我们进一步在PAS CAL VOC 2007 trainval和2012 trainval的并集上训练RPN和检测网络,得到的mAP为73.2%。图5展示了在PASCAL VOC 2007测试集上的一些结果。在PASCAL VOC 2012测试集上(表4),我们的方法在VOC 2007 trainval+test和VOC 2012 trainval的并集上训练,mAP为70.4%。表6和表7显示了详细的数字。
(图1:处理多尺度和大小的不同方案。(a)构建图像和特征图金字塔,并在所有尺度上运行分类器。(b)在特征图上运行具有多个尺度/大小的滤波器金字塔。(c)在回归函数中使用参考框的金字塔)
图2:Faster R-CNN是一个用于目标检测的单一统一网络。RPN模块充当这个统一网络的“注意力”。
(图3:左侧:区域提议网络(RPN)。右侧:使用RPN提议在PASCAL VOC 2007测试集上进行的示例检测。我们的方法可以检测各种尺度和长宽比的目标。)
表1:使用ZF网络学习得到的每个锚点的平均提议大小(s = 600时的数值)
(表2:在PASCAL VOC 2007测试集上的检测结果(在VOC 2007 trainval上进行训练)。检测器为使用ZF网络的Fast R-CNN,但在训练和测试中使用了不同的提议方法。)
(表3:在PASCAL VOC 2007测试集上的检测结果。检测器为Fast R-CNN和VGG-16。训练数据为:“07”:VOC 2007 trainval,“07+12”:VOC 2007 trainval和VOC 2012 trainval的并集。对于RPN,Fast R-CNN的训练时提议数量为2000。y:这个数字在[2]中有报道;使用该论文提供的仓库,该结果更高(68.1))
(表4:在PASCAL VOC 2012测试集上的检测结果。检测器为Fast R-CNN和VGG-16。训练数据为:“07”:VOC 2007 trainval,“07++12”:VOC 2007 trainval+test和VOC 2012 trainval的并集。对于RPN,Fast R-CNN的训练时提议数量为2000。y:http://host.robots.ox.ac.uk:8080/anonymous/HZJTQA.html。z:http://host.robots.ox.ac.uk:8080/anonymous/YNPLXB.html。x:http://host.robots.ox.ac.uk:8080/anonymous/XEDH10.html。)
(表5:在K40 GPU上的计时(毫秒),除了SS提议在CPU上评估。“区域化”包括NMS、池化、全连接和softmax层。请参考我们发布的代码以了解运行时间的分析。)
(表6:在PASCAL VOC 2007测试集上使用Fast R-CNN检测器和VGG-16的结果。对于RPN,Fast R-CNN的训练时提议数量为2000。RPN∗表示未共享特征的版本。)
表7:在PASCAL VOC 2012测试集上使用Fast R-CNN检测器和VGG-16的结果。对于RPN,Fast R-CNN的训练时提议数量为2000。
表8:在PASCAL VOC 2007测试集上,使用不同锚点设置的Faster R-CNN的检测结果。网络为VGG-16。训练数据为VOC 2007 trainval。默认设置使用3个尺度和3个长宽比(69.9%),与表3中的设置相同。
表9:在PASCAL VOC 2007测试集上,使用不同λ值(方程1中的参数)的Faster R-CNN的检测结果。网络为VGG-16。训练数据为VOC 2007 trainval。默认设置使用λ=10(69.9%),与表3中的设置相同。
在表5中,我们总结了整个目标检测系统的运行时间。SS根据内容需要1-2秒(平均约1.5秒),而使用VGG-16的Fast R-CNN在2000个SS提议上需要320毫秒(如果在全连接层上使用SVD,则为223毫秒)。我们的系统使用VGG-16在提议和检测上总共需要198毫秒。在卷积特征共享的情况下,仅RPN需要10毫秒来计算额外的层。由于提议较少(每张图像300个),我们的区域化计算也更低。我们的系统在ZF网络下的帧率为17 fps。 在表8中,我们研究了锚点的设置。默认情况下,我们使用3个尺度和3个长宽比(表8中的69.9%mAP)。如果仅在每个位置使用一个锚点,mAP将下降3-4%。如果使用3个尺度(带有一个长宽比)或3个长宽比(带有一个尺度),mAP会更高,这表明使用多个尺寸的锚点作为回归参考是有效的解决方案。仅使用3个尺度和1个长宽比(69.8%)与使用3个尺度和3个长宽比在此数据集上的效果相当,这表明尺度和长宽比对于检测准确性来说并不是相互独立的维度。但我们仍然采用这两个维度在我们的设计中,以保持系统的灵活性。 在表9中,我们比较了方程(1)中λ的不同取值。默认情况下,我们使用λ=10,使得方程(1)中的两个项在归一化后大致具有相等的权重。表9显示,当λ在大约两个数量级的范围内(1到100)时,我们的结果只受到轻微的影响(约1%)。这表明结果对于λ在广泛范围内不敏感。感。
对Recall-to-IoU的分析。接下来,我们计算在不同IoU比率下与真实边界框的提议的召回率。值得注意的是,Recall-to-IoU指标与最终的检测准确性只有松散的相关性[19] [20] [21]。使用这个指标来诊断提议方法比评估它更为合适。在图4中,我们展示了使用300、1000和2000个提议的结果。我们与SS和EB进行了比较,N个提议是基于这些方法生成的置信度进行排名的前N个。图表显示,当提议数量从2000减少到300时,RPN方法的表现非常出色。这解释了为什么当使用只有300个提议时,RPN具有良好的最终检测mAP。正如我们之前分析的那样,这个特性主要归因于RPN的cls项。当提议更少时,SS和EB的召回率下降得比RPN更快。
一阶段检测与两阶段提议+检测。
OverFeat论文[9]提出了一种检测方法,该方法在卷积特征图上使用回归器和分类器对滑动窗口进行操作。OverFeat是一个一阶段的、具有类别特定的检测流程,而我们的方法是一个由类别不可知的提议和类别特定的检测组成的两阶段级联流程。在OverFeat中,区域级的特征来自于一个纵横比为1的滑动窗口在尺度金字塔上进行操作。这些特征被用来同时确定目标的位置和类别。在RPN中,特征来自于方形(3×3)的滑动窗口,并且根据具有不同尺度和纵横比的锚点预测提议。虽然这两种方法都使用了滑动窗口,但是区域提议任务只是Faster R-CNN的第一阶段——下游的Fast R-CNN检测器用于对提议进行精细调整。在我们级联的第二阶段中,区域级的特征是从更加准确地覆盖区域特征的提议框中自适应池化[1],[2]得到的。我们认为这些特征可以导致更准确的检测。为了比较一阶段和两阶段系统,我们通过一阶段的Fast R-CNN来模拟OverFeat系统(因此也规避了其他实现细节的差异)。在这个系统中,“提议”是3个尺度(128、256、512)和3个纵横比(1:1、1:2、2:1)的密集滑动窗口。Fast R-CNN被训练用于从这些滑动窗口中预测类别特定的分数和回归框的位置。因为OverFeat系统采用了图像金字塔,我们还评估了从5个尺度提取的卷积特征。我们使用与[1],[2]中相同的5个尺度。表10比较了两阶段系统和一阶段系统的两个变体。使用ZF模型,一阶段系统的mAP为53.9%。这低于两阶段系统(58.7%)的4.8%。这个实验证明了级联区域提议和目标检测的有效性。类似的观察结果在[2],[39]中也有报告,其中用滑动窗口替换SS区域提议会导致两篇论文中约6%的性能下降。我们还注意到,一阶段系统的速度较慢,因为它需要处理更多的提议。
表10: 一阶段检测 vs 两阶段提议 + 检测。使用ZF模型和Fast R-CNN在PASCAL VOC 2007测试集上进行的检测结果。RPN使用了非共享的特征。
4.2 在MS COCO上的实验
我们在Microsoft COCO目标检测数据集[12]上展示了更多的结果。这个数据集涉及80个目标类别。我们使用了训练集中的80k张图像,验证集中的40k张图像和测试集中的20k张图像。我们评估了IoU 2 [0:5 :0:05 :0:95]下的平均mAP(COCO的标准指标,简称mAP@[.5,.95])和mAP@0.5(PASCAL VOC的指标)。针对这个数据集,我们对系统进行了一些小的修改。我们在8个GPU上进行模型训练,有效的小批量大小分别为RPN为8(每个GPU 1个)和Fast R-CNN为16(每个GPU 2个)。RPN步骤和Fast R-CNN步骤都进行了240k次迭代的训练,学习率为0.003,然后进行了80k次迭代的训练,学习率为0.0003。我们修改了学习率(从0.001开始改为0.003),因为小批量大小发生了变化。对于锚点,我们使用了3个纵横比和4个尺度(添加了642),主要是为了处理这个数据集上的小目标。另外,在我们的Fast R-CNN步骤中,负样本被定义为与真实标签具有最大IoU的样本,其IoU在[0;0:5)的区间内,而不是在[0:1;0:5)中使用的样本(参考[1],[2])。我们注意到,在SPPnet系统[1]中,[0:1;0:5)区间中的负样本用于网络微调,但是在SVM步骤中仍然会访问[0;0:5)中的负样本进行难例挖掘。但是Fast R-CNN系统[2]放弃了SVM步骤,所以[0;0:1)中的负样本永远不会被访问。包含这些[0;0:1)样本可以提高COCO数据集上Fast R-CNN和Faster R-CNN系统的mAP@0.5(但对于PASCAL VOC数据集的影响很小)。
表11:MS COCO数据集上的目标检测结果(%)。模型为VGG-16。
其余的实现细节与在PASCAL VOC上的相同。特别是,我们仍然使用300个提议和单尺度(s=600)进行测试。在COCO数据集上,每张图像的测试时间仍然约为200毫秒。在表11中,我们首先报告了使用本文实现的Fast R-CNN系统[2]的结果。我们的Fast R-CNN基准在test-dev集上的mAP@0.5为39.3%,高于[2]中报告的结果。我们推测造成这种差距的原因主要是负样本的定义以及小批量大小的变化。我们还注意到mAP@[.5,.95]只是可比较的。接下来,我们评估了我们的Faster R-CNN系统。使用COCO训练集进行训练,Faster R-CNN在COCO test-dev集上的mAP@0.5为42.1%,mAP@[.5,.95]为21.5%。与相同协议下的Fast R-CNN相比,mAP@0.5提高了2.8%,mAP@[.5,.95]提高了2.2%(表11)。这表明RPN在更高的IoU阈值下提高了定位准确性。使用COCO trainval集进行训练,Faster R-CNN在COCO test-dev集上的mAP@0.5为42.7%,mAP@[.5,.95]为21.9%。图6展示了在MS COCO test-dev集上的一些结果。
Faster R-CNN在ILSVRC和COCO 2015竞赛中的表现。我们已经证明,在RPN完全通过神经网络学习提出区域的情况下,Faster R-CNN更能受益于更好的特征。即使将深度大幅增加到100多层[18],这一观察结果仍然有效。只需将VGG-16替换为101层残差网络(ResNet-101)[18],Faster R-CNN系统在COCO验证集上的mAP从41.5%/21.2%(VGG-16)增加到48.4%/27.2%(ResNet-101)。通过与Faster R-CNN无关的其他改进,何恺明等人[18]在COCO test-dev集上获得了单一模型的结果为55.7%/34.9%,集成结果为59.0%/37.4%,在COCO 2015目标检测竞赛中获得了第一名。同样的系统[18]还在ILSVRC 2015目标检测竞赛中获得了第一名,绝对优势达到了8.5%。RPN还是ILSVRC 2015定位竞赛和COCO 2015分割竞赛的第一名成绩的构建模块,其详细信息分别在[18]和[15]中提供。
(表12:使用不同训练数据在PASCAL VOC 2007测试集和2012测试集上的Faster R-CNN检测mAP(%)。模型为VGG-16。“COCO”表示使用COCO的trainval集进行训练。请参阅表6和表7)
4.3 从MS COCO到PASCAL VOC
大规模数据对于改进深度神经网络至关重要。接下来,我们研究MS COCO数据集如何提高在PASCAL VOC上的检测性能。作为一个简单的基准,我们直接在PASCAL VOC数据集上评估COCO检测模型,而不对任何PASCAL VOC数据进行微调。这种评估是可能的,因为COCO上的类别是PASCAL VOC上类别的超集。在这个实验中,忽略了COCO中独有的类别,并且Softmax层只对20个类别加上背景进行操作。在PASCAL VOC 2007测试集上,这种设置下的mAP为76.1%(表12)。这个结果比在VOC07+12上训练的结果(73.2%)要好得多,即使没有利用PASCAL VOC数据。然后,我们在VOC数据集上对COCO检测模型进行微调。在这个实验中,COCO模型替代了ImageNet预训练模型(用于初始化网络权重),并且使用Faster R-CNN系统进行微调,如第3.2节所述。这样做可以在PASCAL VOC 2007测试集上获得78.8%的mAP。来自COCO数据集的额外数据将mAP提高了5.6%。表6显示,在PASCAL VOC 2007上,使用COCO+VOC训练的模型对于每个独立类别都具有最佳的AP。在PASCAL VOC 2012测试集上也观察到类似的改进(表12和表7)。我们注意到,获得这些强大结果的测试时间速度仍然约为每张图像200毫秒。
(Figure 5: 使用Faster R-CNN系统在PASCAL VOC 2007测试集上进行目标检测的选定示例。模型为VGG-16,训练数据为07+12 trainval(在2007测试集上的mAP为73.2%)。我们的方法可以检测各种尺度和长宽比的物体。每个输出框都与一个类别标签和一个在[0;1]范围内的softmax分数相关联。这些图像的显示使用了0.6的分数阈值。获取这些结果的运行时间为每张图像198毫秒,包括所有步骤。)
(Figure 6: 使用Faster R-CNN系统在MS COCO test-dev集上进行目标检测的选定示例。模型为VGG-16,训练数据为COCO trainval(在test-dev集上的mAP@0.5为42.7%)。每个输出框都与一个类别标签和一个在[0;1]范围内的softmax分数相关联。这些图像的显示使用了0.6的分数阈值。对于每个图像,一种颜色代表该图像中的一个物体类别。)
总结
- 结论 我们提出了RPN(区域提议网络)来高效准确地生成区域提议。通过与下游检测网络共享卷积特征,区域提议步骤几乎没有额外的计算开销。我们的方法使得基于统一的深度学习的目标检测系统可以以接近实时的帧率运行。学习到的RPN还提高了区域提议的质量,从而提高了整体目标检测的准确性。