Faster R-CNN通过引入区域提议网络(RPN)显著提高了目标检测的速度和精度。以下是文章的主要内容概述:
-
背景与动机:
-
现有的目标检测系统依赖于区域提议算法,这些算法在计算上是瓶颈。
-
尽管 Fast R-CNN 等方法通过共享卷积特征减少了检测网络的运行时间,但区域提议计算仍然是瓶颈。
-
-
区域提议网络(RPN):
-
RPN 是一个全卷积网络,能够同时预测目标边界和目标性得分。
-
RPN 与检测网络共享卷积特征,使得提议计算几乎是免费的。
-
通过引入锚点(anchors),RPN 能够在多个尺度和宽高比上高效地生成提议。
-
-
训练与共享特征:
-
提出了一个四步训练算法,通过交替优化来学习共享特征。
-
训练过程包括 RPN 的微调、Fast R-CNN 的训练、RPN 的再训练和 Fast R-CNN 的再训练。
-
-
实验结果:
-
在 PASCAL VOC 2007、2012 和 MS COCO 数据集上,Faster R-CNN 的检测精度显著优于现有方法。
-
在 GPU 上,Faster R-CNN 的帧率达到 5fps,实现了接近实时的目标检测。
-
在 ILSVRC 和 COCO 2015 竞赛中,Faster R-CNN 和 RPN 是多个赛道中获得第一名的重要基础。
-
-
结论:
-
RPN 通过共享卷积特征,实现了高效的区域提议生成。
-
Faster R-CNN 系统在速度和精度上达到了实用水平,显著提高了目标检测的性能。
-
Faster R-CNN 通过引入 RPN 解决了区域提议计算的瓶颈问题,实现了高效且准确的目标检测,展示了深度学习在目标检测领域的显著进展。这里是自己的论文阅读记录,感兴趣的话可以参考一下,如果需要阅读原文的话可以看这里,如下所示:
官方项目地址在这里,如下所示:
摘要
目前最先进的目标检测网络依赖于区域提议算法来假设目标位置。像 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 是多个赛道中获得第一名的重要基础。代码已公开发布。
关键词:目标检测,区域提议,卷积神经网络。
1 引言
近年来,目标检测的进展得益于区域提议方法(例如 [4])和基于区域的卷积神经网络(R-CNNs)[5] 的成功。尽管最初在 [5] 中开发的基于区域的 CNNs 在计算上非常昂贵,但由于在提议之间共享卷积 [1, 2],其成本已经大大降低。最新的 Fast R-CNN [2] 使用非常深的网络 [3] 实现了接近实时的速率,当忽略区域提议所花费的时间时。现在,提议是现有最先进检测系统在测试时的计算瓶颈。
区域提议方法通常依赖于低成本的特征和经济的推理方案。选择性搜索(Selective Search)[4] 是最流行的方法之一,它基于工程化的低级特征贪婪地合并超像素。然而,与高效的检测网络 [2] 相比,选择性搜索在 CPU 实现中每张图像需要 2 秒,慢了一个数量级。EdgeBoxes [6] 目前在提议质量和速度之间提供了最佳的权衡,每张图像 0.2 秒。尽管如此,区域提议步骤仍然消耗与检测网络一样多的运行时间。
有人可能会注意到,快速的基于区域的 CNNs 利用了 GPU,而研究中使用的区域提议方法在 CPU 上实现,这样的运行时间比较是不公平的。加速提议计算的一个明显方法是为 GPU 重新实现它。这可能是一个有效的工程解决方案,但重新实现忽略了下游的检测网络,因此错过了共享计算的重要机会。
在本文中,我们展示了通过深度卷积神经网络计算提议的算法变化——导致了一个优雅而有效的解决方案,在给定检测网络计算的情况下,提议计算几乎是免费的。为此,我们引入了一种新颖的 区域提议网络(RPNs),它与最先进的目标检测网络 [1, 2] 共享卷积层。通过在测试时共享卷积,计算提议的边际成本很小(例如,每张图像 10 毫秒)。
我们的观察是,基于区域的检测器(如 Fast R-CNN)使用的卷积特征图也可以用于生成区域提议。在这些卷积特征之上,我们通过添加一些额外的卷积层来构建 RPN,这些卷积层同时在规则网格上的每个位置回归区域边界和目标性得分。因此,RPN 是一种全卷积网络(FCN)[7],可以为生成检测提议的任务进行端到端的训练。
RPN 旨在以各种尺度和宽高比高效地预测区域提议。与使用图像金字塔(图 1,a)或滤波器金字塔(图 1,b)的流行方法 [8, 9, 1, 2] 相比,我们引入了新的“锚”框,作为多个尺度和宽高比的参考。我们的方案可以被认为是回归参考的金字塔(图 1,c),它避免了枚举多个尺度或宽高比的图像或滤波器。当使用单尺度图像进行训练和测试时,该模型表现良好,从而提高了运行速度。
为了将 RPN 与 Fast R-CNN [2] 目标检测网络统一起来,我们提出了一个训练方案,该方案在区域提议任务的微调和目标检测的微调之间交替进行,同时保持提议固定。该方案快速收敛并生成一个统一的网络,其中卷积特征在两个任务之间共享。1
Footnote 1:自本文的会议版本 [10] 发表以来,我们还发现 RPN 可以与 Fast R-CNN 网络联合训练,从而减少训练时间。
我们在 PASCAL VOC 检测基准 [11] 上全面评估了我们的方法,其中 RPN 与 Fast R-CNN 结合产生的检测精度优于使用选择性搜索(Selective Search)的强基线。同时,我们的方法在测试时几乎消除了选择性搜索的所有计算负担——有效运行时间仅为 10 毫秒。使用昂贵的非常深的模型 [3],我们的检测方法在 GPU 上仍然具有 5fps 的帧率(包括所有步骤),因此在速度和精度方面都是一个实用的目标检测系统。我们还在 MS COCO 数据集 [12] 上报告了结果,并使用 COCO 数据研究了对 PASCAL VOC 的改进。代码已在 https://github.com/shaogingren/faster_rcnn(MATLAB 版本)和 https://github.com/rbgirshick/py-faster-rcnn(Python 版本)公开发布。
图 1:解决多尺度和大小问题的不同方案。(a) 构建图像和特征图的金字塔,并在所有尺度上运行分类器。(b) 在特征图上运行具有多尺度/大小的滤波器金字塔。(c) 我们在回归函数中使用参考框的金字塔
本文的初步版本之前已经发表 [10]。自那时以来,RPN 和 Faster R-CNN 的框架已被其他方法采用和推广,例如 3D 目标检测 [13]、基于部分的检测 [14]、实例分割 [15] 和图像字幕 [16]。我们的快速高效目标检测系统也已构建在商业系统中,例如 Pinterest [17],据报道用户参与度有所提高。
在 ILSVRC 和 COCO 2015 竞赛中,Faster R-CNN 和 RPN 是多个赛道中获得第一名的重要基础 [18]。RPN 完全从数据中学习提出区域,因此可以轻松受益于更深和更具表现力的特征(例如 [18] 中采用的 101 层残差网络)。Faster R-CNN 和 RPN 也被其他领先参赛者用于这些竞赛2。这些结果表明,我们的方法不仅是一个成本高效的实用解决方案,而且是提高目标检测精度的有效方法。
Footnote 2:http://image-net.org/challenges/ILSVRC/2015/results
2 相关工作
目标提议。 关于目标提议方法的文献很多。全面调查和比较目标提议方法可以在 [19, 20, 21] 中找到。广泛使用的目标提议方法包括基于超像素分组的方法(例如选择性搜索 [4]、CPMC [22]、MCG [23])和基于滑动窗口的方法(例如窗口中的目标性 [24]、EdgeBoxes [6])。目标提议方法被用作独立于检测器的外部模块(例如选择性搜索 [4] 目标检测器、R-CNN [5] 和 Fast R-CNN [2])。
图 2:Faster R-CNN 是一个用于目标检测的单一、统一的网络。RPN 模块作为这个统一网络的“注意力”机制
用于目标检测的深度网络。 R-CNN 方法 [5] 端到端地训练 CNNs 以将提议区域分类为目标类别或背景。R-CNN 主要作为分类器,不预测目标边界(除了通过边界框回归进行细化)。其精度依赖于区域提议模块的性能(参见 [20] 中的比较)。一些论文提出了使用深度网络预测目标边界框的方法 [25, 9, 26, 27]。在 OverFeat 方法 [9] 中,训练了一个全连接层来预测假设单个目标的定位任务的框坐标。然后将全连接层转换为卷积层,用于检测多个类特定目标。MultiBox 方法 [26, 27] 从网络生成区域提议,其最后一个全连接层同时预测多个类不可知框,推广了 OverFeat 的“单框”方式。这些类不可知框用作 R-CNN [5] 的提议。MultiBox 提议网络应用于单个图像裁剪或多个大图像裁剪(例如 224×224),与我们的全卷积方案不同。MultiBox 不在提议和检测网络之间共享特征。我们将在后面结合我们的方法更深入地讨论 OverFeat 和 MultiBox。共享卷积计算 [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)。使用最近流行的具有“注意力”机制的神经网络 [31] 术语,RPN 模块告诉 Fast R-CNN 模块在哪里看。在第 3.1 节中,我们介绍了区域提议网络的设计和属性。在第 3.2 节中,我们开发了用于共享特征的训练算法。
区域提议网络
区域提议网络(RPN)以图像(任意大小)作为输入,输出一组矩形目标提议,每个提议都有一个目标性得分。3 我们用全卷积网络 [7] 对这个过程进行建模,这在本文中进行了描述。因为我们的最终目标是与 Fast R-CNN 目标检测网络 [2] 共享计算,我们假设两个网络共享一组通用的卷积层。在我们的实验中,我们研究了 ZF 模型 [32](5 个共享卷积层)和 VGG-16 模型 [3](13 个共享卷积层)。
Footnote 3:“区域”是一个通用术语,在本文中我们只考虑矩形区域,这是许多方法的常见做法(例如 [27, 4, 6])。“目标性”衡量属于目标类别集合与背景的成员关系。
为了生成区域提议,我们在最后一个共享卷积层输出的卷积特征图上滑动一个小网络。这个小网络将输入卷积特征图的 n×n 空间窗口作为输入。每个滑动窗口映射到一个低维特征(ZF 为 256-d,VGG 为 512-d,后面是 ReLU [33])。这个特征被输入到两个兄弟全连接层——一个边界框回归层(reg)和一个边界框分类层(cls)。我们在本文中使用 n=3,注意到输入图像上的有效感受野很大(ZF 和 VGG 分别为 171 和 228 像素)。这个小网络在图 3(左)中的单个位置上进行了说明。注意,由于小网络以滑动窗口方式运行,所有空间位置共享全连接层。这个架构自然地通过 n×n 卷积层后跟两个兄弟 1×1 卷积层(分别用于 reg 和 cls)实现。
图 3:左:区域提议网络(RPN)。右:使用 RPN 提议在 PASCAL VOC 2007 测试集上的示例检测。我们的方法在广泛的尺度和宽高比范围内检测目标
3.1.1 锚点
在每个滑动窗口位置,我们同时预测多个区域提议,其中每个位置的最大可能提议数表示为 k。因此,reg 层有 4k 个输出,编码 kk 个框的坐标,cls 层输出 2k 个分数,估计每个提议的目标性或非目标性4。k 个提议相对于 k 个参考框进行参数化,我们称之为锚点。锚点以滑动窗口为中心,并与比例和宽高比相关联(图 3,左)。默认情况下,我们使用 3 个尺度和 3 个宽高比,在每个滑动位置产生 k=9 个锚点。对于大小为 W×H(通常 ∼∼2,400)的卷积特征图,总共有 WHkWHk 个锚点。
Footnote 4:由于我们的最终目标是与 Fast R-CNN 目标检测网络 [2] 共享计算,我们假设两个网络共享一组通用的卷积层。在我们的实验中,我们研究了 ZF 模型 [32](5 个共享卷积层)和 VGG-16 模型 [3](13 个共享卷积层)。
平移不变的锚点
我们方法的一个重要特性是它是平移不变的,无论是在锚点还是计算相对于锚点的提议的函数方面。如果一个目标在图像中平移,提议应该平移,并且相同的函数应该能够在任一位置预测提议。这个平移不变特性由我们的方法保证5。作为比较,MultiBox 方法 [27] 使用 k-means 生成 800 个锚点,这些锚点不是平移不变的。因此,MultiBox 不保证当一个目标平移时生成相同的提议。
Footnote 5:正如 FCNs [7] 的情况一样,我们的网络在网络的总步幅范围内是平移不变的。
平移不变特性也减小了模型大小。MultiBox 有一个 (4+1)×800 维的全连接输出层,而我们的方法在 k=9k=9 个锚点的情况下有一个 (4+2)×9 维的卷积输出层。因此,我们的输出层有 2.8×104 个参数(对于 VGG-16 为 512×(4+2)×9),比 MultiBox 的输出层少两个数量级,后者有 6.1×106 个参数(对于 GoogleNet [34] 在 MultiBox [27] 中为 1536×(4+1)×800)。如果考虑到特征投影层,我们的提议层仍然比 MultiBox 少一个数量级的参数6。我们期望我们的方法在小型数据集(如 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 损失函数
为了训练 RPN,我们为每个锚点分配一个二进制类别标签(是否为目标)。我们为两种锚点分配正标签:(i)与真实框具有最高交并比(IoU)重叠的锚点,或(ii)与任何真实框的 IoU 重叠高于 0.7 的锚点。注意,单个真实框可能为多个锚点分配正标签。通常第二个条件足以确定正样本;但我们仍然采用第一个条件,因为在一些罕见情况下第二个条件可能找不到正样本。如果一个锚点与所有真实框的 IoU 比率低于 0.3,我们为非正锚点分配负标签。既不正也不负的锚点不参与训练。
根据这些定义,我们最小化了一个目标函数,遵循 Fast R-CNN [2] 中的多任务损失。我们对图像的损失函数定义如下:
尽管如此,我们的方法通过与之前的基于 RoI(感兴趣区域)的方法 [1, 2] 不同的方式实现了边界框回归。在 [1, 2] 中,对从任意大小的 RoI 汇集的特征执行边界框回归,并且回归权重由所有区域大小共享。在我们的公式中,用于回归的特征在特征图上具有相同的空间大小(3×3)。为了应对不同的尺寸,学习了一组 k 个边界框回归器。每个回归器负责一个尺度和一个宽高比,并且 k 个回归器不共享权重。因此,即使特征具有固定的大小/尺度,仍然可以预测各种大小的框,这得益于锚点的设计。
3.1.3 训练 RPN
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 数据集上对 60k 个 mini-batch 使用 0.001 的学习率,对接下来的 20k 个 mini-batch 使用 0.0001 的学习率。我们使用 0.9 的动量和 0.0005 的权重衰减 [37]。我们的实现使用 Caffe [38]。
共享特征用于 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 损失的反向传播信号被组合。这个解决方案很容易实现。但是这个解决方案忽略了导数 w.r.t. 提议框的坐标也是网络响应,所以是近似的。在我们的实验中,我们经验性地发现这个求解器产生了接近的结果,但与交替训练相比,训练时间减少了约 25-50%。这个求解器包含在我们发布的 Python 代码中。
(iii)非近似联合训练。如上所述,RPN 预测的边界框也是输入的函数。Fast R-CNN 中的 RoI 池化层 [2] 接受卷积特征和预测的边界框作为输入,因此理论上有效的反向传播求解器也应该涉及关于框坐标的梯度。这些梯度在上述近似联合训练中被忽略。在一个非近似的联合训练解决方案中,我们需要一个关于框坐标可微分的 RoI 池化层。这是一个非平凡的问题,可以通过“RoI 扭曲”层给出解决方案 [15],这超出了本文的范围。
步交替训练
在本文中,我们采用一种实用的 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 像素,因此在调整大小(∼500×375)之前的典型 PASCAL 图像上约为 10 像素。即使如此大的步幅也能提供良好的结果,尽管更小的步幅可能会进一步提高精度。
表 2:在 PASCAL VOC 2007 测试集上的检测结果(在 VOC 2007 训练验证集上训练)。检测器是使用 ZF 的 Fast R-CNN,但使用不同的提议方法进行训练和测试
对于锚点,我们使用了 3 个尺度,框区域分别为 1282、2562 和 5122 像素,以及 3 个宽高比分别为 1:1、1:2 和 2:1。这些超参数并不是为特定数据集精心选择的,我们将在下一节中提供消融实验。如我们所展示的,我们的方法允许预测超出基础感受野的框。这些预测没有意义——我们可能仍然能够粗略地推断出目标的扩展,即使只有目标的中间部分是可见的。
跨边界的锚点框需要小心处理。在训练期间,我们忽略所有跨边界的锚点,因此它们不贡献损失。对于一个典型的 1000×600 的图像,总共大约有 20000(≈60×40×9)个锚点。忽略跨边界锚点后,每张图像约有 6000 个锚点用于训练。如果在训练中不忽略跨边界异常值,它们会在目标函数中引入大的、难以纠正的误差项,训练不会收敛。在测试期间,我们仍然应用全卷积 RPN 到整个图像。这可能会生成跨边界的提议框,我们将其裁剪到图像边界。
一些 RPN 提议彼此高度重叠。为了减少冗余,我们基于提议区域的 cls 分数对其进行非最大抑制(NMS)。我们将 NMS 的 IoU 阈值固定为 0.7,这每张图像留下了大约 2000 个提议区域。正如我们将展示的,NMS 不会损害最终的检测精度,但会大幅减少提议数量。在 NMS 之后,我们使用前 N 个排名提议进行检测。接下来,我们使用 2000 个 RPN 提议训练 Fast R-CNN,但在测试时评估不同数量的提议。
4 实验
4.1 PASCAL VOC 上的实验
我们对 PASCAL VOC 2007 检测基准 [11] 进行了全面评估。该数据集包含约 5000 张训练验证图像和 5000 张测试图像,涵盖 20 个目标类别。我们还提供了一些模型在 PASCAL VOC 2012 基准上的结果。对于 ImageNet 预训练网络,我们使用“快速”版本的 ZF 网络 [32],它有 5 个卷积层和 3 个全连接层,以及公共的 VGG-16 模型7 [3],它有 13 个卷积层和 3 个全连接层。我们主要评估检测平均精度(mAP),因为这是目标检测的实际指标(而不是关注目标提议的代理指标)。
Footnote 7:www.robots.ox.ac.uk/∼vgg/research/very deep/
表 3:在 PASCAL VOC 2007 测试集上的检测结果。检测器是使用 VGG-16 的 Fast R-CNN。训练数据:“07”:VOC 2007 训练验证集,“07+12”:VOC 2007 训练验证集和 VOC 2012 训练验证集的联合集。对于 RPN,Fast R-CNN 的训练时提议为 2000。†:此数字在 [2] 中报告;使用本文提供的代码库,此结果更高(68.1)
表 2(顶部)显示了使用各种区域提议方法训练和测试的 Fast R-CNN 结果。这些结果使用 ZF 网络。对于选择性搜索(SS)[4],我们通过“快速”模式生成约 2000 个提议。对于 EdgeBoxes(EB)[6],我们通过默认 EB 设置调整到 0.7 IoU 生成提议。SS 在 Fast R-CNN 框架下的 mAP 为 58.7%,EB 的 mAP 为 58.6%。RPN 与 Fast R-CNN 结合使用时,使用多达 300 个提议,mAP 达到 59.9%8。使用 RPN 的检测系统比使用 SS 或 EB 更快,因为共享卷积计算;更少的提议也减少了区域方面的全连接层成本(表 5)。
表 4:在 PASCAL VOC 2012 测试集上的检测结果。检测器是使用 VGG-16 的 Fast R-CNN。训练数据:“07”:VOC 2007 训练验证集,“07++12”:VOC 2007 训练验证集+测试集和 VOC 2012 训练验证集的联合集。对于 RPN,Fast R-CNN 的训练时提议为 2000。†:http://host.robots.ox.ac.uk:8080/anonymous/HZJTQA.html。‡:http://host.robots.ox.ac.uk:8080/anonymous/YNPLXB.html。§:http://host.robots.ox.ac.uk:8080/anonymous/XEDH10.html。
表 5:在 K40 GPU 上的时间(毫秒),除了 SS 提议在 CPU 上评估。“区域方面”包括 NMS、池化、全连接和 softmax 层。运行时间的分析请参见我们发布的代码
Footnote 8:对于 RPN,提议数量(例如 300)是图像的最大数量。RPN 可能在 NMS 后生成更少的提议,因此平均提议数量更小。
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 不与检测器共享特征。
表 6:使用 Fast R-CNN 检测器和 VGG-16 在 PASCAL VOC 2007 测试集上的结果。对于 RPN,Fast R-CNN 的训练时提议为 2000。RPN∗ 表示未共享特征的版本
在测试时用 300 个 RPN 提议替换 SS,mAP 为 56.8%。mAP 的损失是因为训练/测试提议之间的不一致。这个结果作为以下比较的基线。
有些令人惊讶的是,在测试时使用排名最高的 100 个提议时,RPN 仍然取得了有竞争力的结果(55.1%),表明排名靠前的 RPN 提议是准确的。在另一个极端,使用排名最高的 6000 个 RPN 提议(无 NMS)具有相当的 mAP(55.2%),这表明 NMS 不会损害检测 mAP,并可能减少误报。
接下来,我们分别通过在测试时移除 cls 或 reg 层来研究 RPN 的 cls 和 reg 输出的作用。当在测试时移除 cls 层(因此不使用 NMS/排名),我们从没有分数的区域中随机抽取 N 个提议。当 N=1000 时,mAP 几乎没有变化(55.8%),但当 N=100 时,mAP 显著下降到 44.6%。这表明 cls 分数说明了排名最高的提议的准确性。
另一方面,当在测试时移除 reg 层(因此提议成为锚点框),mAP 下降到 52.1%。这表明高质量的提议主要是由于回归的框边界。锚点框虽然有多个尺度和宽高比,但不足以进行准确检测。
我们还单独评估了更强大的网络对 RPN 提议质量的影响。我们使用 VGG-16 训练 RPN,并仍然使用上述 SS+ZF 检测器。mAP 从 56.8%(使用 RPN+ZF)提高到 59.2%(使用 RPN+VGG)。这是一个有希望的结果,因为它表明 RPN+VGG 的提议质量优于 RPN+ZF。由于 RPN+ZF 的提议与 SS 具有竞争力(当两者都与 Fast R-CNN 训练和测试时均为 58.7%),我们可以预期 RPN+VGG 优于 SS。以下实验验证了这一假设。
VGG-16 的性能
表 3 显示了 VGG-16 的提议和检测结果。使用 RPN+VGG 的 未共享 特征的结果为 68.5%,略高于 SS 基线。如上所述,这是因为 RPN+VGG 生成的提议比 SS 更准确。对于 共享 特征的变体,结果为 69.9%——优于强 SS 基线,但提议几乎无成本。我们在 PASCAL VOC 2007 和 2012 的联合训练集上进一步训练 RPN 和检测网络。mAP 为 73.2%。图 5 显示了 PASCAL VOC 2007 测试集上的一些结果。在 PASCAL VOC 2012 测试集上(表 4),我们的方法在 VOC 2007 训练验证+测试和 VOC 2012 训练验证的联合集上训练时,mAP 为 70.4%。表 6 和表 7 显示了详细数字。
在表 5 中,我们总结了整个目标检测系统的运行时间。SS 的运行时间取决于内容(平均约 1.5 秒),而使用 VGG-16 的 Fast R-CNN 在 2000 个 SS 提议上需要 320 毫秒(如果使用 SVD 对全连接层进行分解 [2],则为 223 毫秒)。我们的系统使用 VGG-16 总共需要 198 毫秒来完成提议和检测。由于共享卷积特征,RPN 单独仅需要 10 毫秒来计算额外的层。由于提议数量较少(每张图像 300 个),我们的区域计算量也更低。我们的系统使用 ZF 网络的帧率为 17 fps。
对超参数的敏感性
在表 8 中,我们研究了锚点的设置。默认情况下,我们使用 3 个尺度和 3 个宽高比(表 8 中的 69.9% mAP)。如果在每个位置仅使用一个锚点,mAP 会显著下降 3-4%。如果使用 3 个尺度(1 个宽高比)或 3 个宽高比(1 个尺度),mAP 会更高,这表明使用多尺度的锚点作为回归参考是一个有效的解决方案。仅使用 3 个尺度(1 个宽高比)(69.8%)与使用 3 个尺度和 3 个宽高比在这个数据集上效果相当,这表明尺度和宽高比对于检测精度不是解耦的维度。但我们仍在这两个维度上采用我们的设计,以保持系统的灵活性。
在表 9 中,我们比较了公式 (1) 中不同 λ 值的结果。默认情况下,我们使用 λ = 10,这使得公式 (1) 中的两个项在归一化后大致相等。表 9 显示,当 λ 在两个数量级范围内(1 到 100)时,结果仅受到轻微影响(约 1%)。这表明结果对 λ 在一个广泛范围内不敏感。
召回率与 IoU 的分析
接下来,我们计算提议在不同 IoU 比率下与真实框的召回率。值得注意的是,召回率与 IoU 指标与最终检测精度只是松散相关 [19, 20, 21]。使用这个指标来诊断提议方法比评估它更为合适。
在图 4 中,我们展示了使用 300、1000 和 2000 个提议的结果。我们与 SS 和 EB 进行了比较,N 个提议是基于这些方法生成的置信度排序的前 N 个。图表显示,当提议数量从 2000 减少到 300 时,RPN 方法表现良好。这解释了为什么 RPN 在使用仅 300 个提议时仍能获得良好的最终检测 mAP。正如我们之前分析的,这一特性主要归因于 RPN 的 cls 项。当提议数量较少时,SS 和 EB 的召回率比 RPN 下降得更快。
单阶段检测与两阶段提议 + 检测
OverFeat 论文 [9] 提出了一种在卷积特征图上使用滑动窗口的回归器和分类器的检测方法。OverFeat 是一个单阶段、类别特定的检测管道,而我们的方法是一个两阶段级联,包括类别不可知的提议和类别特定的检测。在 OverFeat 中,区域特征来自尺度金字塔上的一个宽高比的滑动窗口。这些特征用于同时确定目标的位置和类别。在 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% 的下降。我们还注意到,单阶段系统较慢,因为它有更多的提议需要处理。
4.2 MS COCO 上的实验
我们在 Microsoft COCO 目标检测数据集 [12] 上展示更多结果。该数据集涉及 80 个目标类别。我们在训练集上的 80k 张图像、验证集上的 40k 张图像和测试开发集上的 20k 张图像上进行实验。我们评估了 IoU ∈ [0.5 : 0.05 : 0.95] 的平均 mAP(COCO 的标准指标,简称为 mAP@[.5, .95])和 mAP@0.5(PASCAL VOC 的指标)。
表 7:使用 Fast R-CNN 检测器和 VGG-16 在 PASCAL VOC 2012 测试集上的结果。对于 RPN,Fast R-CNN 的训练提议为 2000。
表 8:使用不同锚点设置在 PASCAL VOC 2007 测试集上的 Faster R-CNN 检测结果。网络为 VGG-16。训练数据为 VOC 2007 训练验证集。默认设置为使用 3 个尺度和 3 个宽高比(69.9%),与表 3 相同
表 9:使用不同 λ 值在 PASCAL VOC 2007 测试集上的 Faster R-CNN 检测结果。网络为 VGG-16。训练数据为 VOC 2007 训练验证集。默认设置为使用 λ = 10(69.9%),与表 3 相同
表 10:单阶段检测与两阶段提议 + 检测。检测结果在 PASCAL VOC 2007 测试集上使用 ZF 模型和 Fast R-CNN。RPN 使用未共享特征
表 11:在 MS COCO 数据集上的目标检测结果(%)。模型为 VGG-16
表 12:使用不同训练数据在 PASCAL VOC 2007 测试集和 2012 测试集上的 Faster R-CNN 检测 mAP(%)。模型为 VGG-16。“COCO”表示使用 COCO 训练验证集进行训练。另见表 6 和表 7
对于这个数据集,我们的系统有一些小的变化。我们在 8-GPU 实现上训练我们的模型,RPN 的有效 mini-batch 大小变为 8(每个 GPU 1 个),Fast R-CNN 的有效 mini-batch 大小变为 16(每个 GPU 2 个)。RPN 和 Fast R-CNN 步骤都训练了 240k 次迭代,学习率为 0.003,然后是 80k 次迭代,学习率为 0.0003。我们修改了学习率(从 0.003 开始而不是 0.001),因为 mini-batch 大小发生了变化。对于锚点,我们使用 3 个宽高比和 4 个尺度(增加 642),主要动机是处理这个数据集上的小目标。此外,在我们的 Fast R-CNN 步骤中,负样本定义为与真实框的最大 IoU 在 [0, 0.5) 区间内的样本,而不是 [1, 2] 中使用的 [0.1, 0.5)。我们注意到,在 SPPnet 系统 [1] 中,[0.1, 0.5) 中的负样本用于网络微调,但 [0, 0.5) 中的负样本仍在 SVM 步骤中通过硬负样本挖掘访问。但 Fast R-CNN 系统 [2] 放弃了 SVM 步骤,因此 [0, 0.1) 中的负样本从未被访问。包括这些 [0, 0.1) 样本提高了 COCO 数据集上 Fast R-CNN 和 Faster R-CNN 系统的 mAP@0.5(但在 PASCAL VOC 上的影响可以忽略不计)。
其余的实现细节与 PASCAL VOC 相同。特别是,我们仍然使用 300 个提议和单尺度(s = 600)测试。测试时间在 COCO 数据集上仍然是每张图像约 200 毫秒。
在表 11 中,我们首先报告了使用本文实现的使用 Fast R-CNN 系统 [2] 的结果。我们的 Fast R-CNN 基线在测试开发集上的 mAP@0.5 为 39.3%,高于 [2] 中报告的结果。我们推测这种差距的主要原因是负样本的定义和 mini-batch 大小的变化。我们还注意到 mAP@[.5, .95] 只是可比的。
接下来,我们评估了我们的 Faster R-CNN 系统。使用 COCO 训练集进行训练,Faster R-CNN 在 COCO 测试开发集上的 mAP@0.5 为 42.1%,mAP@[.5, .95] 为 21.5%。这比相同协议下的 Fast R-CNN 基线(表 11)分别高出 2.8% 和 2.2%。这表明 RPN 在提高更高 IoU 阈值下的定位精度方面表现出色。使用 COCO 训练验证集进行训练,Faster R-CNN 在 COCO 测试开发集上的 mAP@0.5 为 42.7%,mAP@[.5, .95] 为 21.9%。图 6 显示了 MS COCO 测试开发集上的一些结果。
在 ILSVRC 和 COCO 2015 竞赛中的 Faster R-CNN
我们已经证明,Faster R-CNN 得益于更好的特征,因为 RPN 完全通过神经网络学习提出区域。即使将深度显著增加到 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 正交的其他改进,He 等人 [18] 在 COCO 测试开发集上获得了单模型结果 55.7%/34.9% 和集成结果 59.0%/37.4%,赢得了 COCO 2015 目标检测竞赛的第一名。同样的系统 [18] 也在 ILSVRC 2015 目标检测竞赛中获得了第一名,超过了第二名 8.5%。RPN 也是 ILSVRC 2015 定位和 COCO 2015 分割竞赛中第一名获奖作品的组成部分,详细信息分别在 [18] 和 [15] 中提供。
从 MS COCO 到 PASCAL VOC
大规模数据对于改进深度神经网络至关重要。接下来,我们研究 MS COCO 数据集如何帮助提高 PASCAL VOC 上的检测性能。
作为一个简单的基线,我们直接在 PASCAL VOC 数据集上评估 COCO 检测模型,而不在任何 PASCAL VOC 数据上进行微调。这种评估是可能的,因为 COCO 上的类别是 PASCAL VOC 的超集。在这个实验中,我们忽略了 COCO 上独有的类别,并且仅在 20 个类别加上背景上执行 softmax 层。在这种设置下,mAP 在 PASCAL VOC 2007 测试集上为 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 毫秒。
5 结论
我们提出了用于高效准确区域提议生成的 RPN。通过与下游检测网络共享卷积特征,区域提议步骤几乎是免费的。我们的方法使基于深度学习的统一目标检测系统能够以接近实时的帧率运行。学习的 RPN 还提高了区域提议质量,从而提高了整体目标检测的准确性。