Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
NIPS,2015
论文获取地址
在 Faster R-CNN 中加入一个生成候选区域的网络,如此,目标检测的四个基本步骤(候选区域生成、特征提取、分类、回归)都被整合到一个深度网络中。
使用 SS 算法生成候选区域需要花费大量时间
引入 RPN 网络代替 SS 算法生成更高质量的候选区域
SPPNet、Fast R-CNN 等先进的网络减少了检测模型的运行时间,但也暴露了生成候选区域需要耗费大量时间和计算量的瓶颈。在本文中,引入了候选区域网络(RPN),它与检测网络共享整个图像的卷积特征。RPN 是一个全卷积网络,它能同时预测每个位置的目标边界和分数。RPN 经过端到端的训练来生成高质量的候选区域,再输入进 Fast R-CNN 中用于检测任务。通过共享 RPN 和 Fast R-CNN 的卷积特征,可以进一步将它们合并到一个网络中。
在 CPU 上,一张图像需要花费 2s 才能生成候选区域。与高效的检测网络相比,选择性搜索慢了一个数量级。
我们注意到,快速的 CNN 网络利用了 GPU 的加速性能,而候选区域的生成是在 CPU 上完成的,这导致了运行时间上的不公平。一个明显的改进思路是将生成候选区域这一步骤放到 GPU 上实现,但是这样无法让生成候选区域与 CNN 中的特征提取做到共享计算(生成候选区域需要对整个图像做一次操作,特征提取又需要对整个图像做一次操作)。
在本文中,我们使用深度卷积神经网络来实现候选区域的计算,把该网络称之为 Region Proposal Network(RPN),它与最先进的目标检测网络共享卷积层。使用了 RPN 之后,一张图像只需 10ms 就能生成候选区域。
据我们观察,像 Fast R-CNN 这样的基于区域的检测模型中使用到的特征图也可以用来生成候选区域。在这些卷积特征的基础上,我们通过增加几个额外的卷积层来构造 RPN,这些卷积层在一个规则的网格上对每一个位置同时回归区域边界和客观性分数。
因此 RPN 是一种全卷积网络,并且可以针对生成候选区域的任务进行端到端的专门训练。
RPN 被设计用来有效地预测具有大范围比例和长宽比的候选区域。与之前那些使用金字塔图像或金字塔滤波器的方法不同,我们引入了 anchor 框,作为多种比例和长宽比的参考。我们的方法可以避免列举多个尺度的图像或滤波器。
为了将 RPN 和 Fast R-CNN 统一起来,我们提出了一种训练方案,即在保持候选区域不变的情况下,交替着先对候选区域任务做微调,然后对目标检测做微调。该方案能快速收敛,并产生在两个任务之间共享的卷积特征。
Faster R-CNN 由两个模块组成,第一个模块是能生成候选区域的深度全卷积网络(RPN),第二个模块是 Fast R-CNN 检测器。
RPN 网络以任意大小的图像为输入,输出一组矩形的目标候选区域,每一个候选区域都有一个客观性分数。
我们做了实验以研究 RPN 与 Fast R-CNN 的共享计算,分别研究了具有 5 个可共享卷积层的 ZF 模型与具有 13 个可共享卷积层的 VGG-16 模型。
为了生成候选区域,我们在最后一个共享卷积层输出的特征图上滑动一个小的网络。我们把特征图上一个 n*n 的空间窗口作为这个小网络的输入,在小网络内部每个滑动窗口映射成一个低维特征(ZF 模型为 256 维,VGG 模型为 512 维)。这个低维特征被传入到两个并行的全连接层,一个用于分类,一个用于边框回归。
假设得到 H*W 的特征图,且有 C=256 个通道,空间窗口大小为 3*3,那么就需要将 3*3*256 的特征输入到小网络中,让这个小网络根据输入的低维特征去判断原图上对应的位置能不能产生候选区域。判断完之后将滑动窗口向右滑动一小格,再将这个 3*3*256 的特征输入小网络,判断原图对应位置能否产生候选区域。
上图中所示的 intermediate layer 可以通过 3*3 的卷积层实现,cls layer 可以通过 1*1 的卷积层或全连接层再加上一个 softmax 来实现,reg layer 也可以通过 1*1 的卷积层或全连接层实现。
其中,k 表示 anchor 的数量;分类分支输出 2k 个分数,2 表示包含目标的概率和不包含目标的概率。
Anchors: 滑动窗口每滑动到一个位置,会同时预测多个候选区域,最大能预测 k 个可能的候选区域,它根据 k 个参考框得到,我们将这 k 个参考框称为 anchors。一个 anchor 的中心位于滑动窗口的中心,每个位置我们使用 3 种尺度和 3 种长宽比(每种长宽比具有 3 种尺度),因此有 k=9 个 anchor。
损失函数: 在训练 RPN 网络时,我们给每一个 anchor 分配一个二分类标签(即是否包含目标),在两种情况下,我们会给 anchor 一个正标签(包含目标):(1)与 ground truth 具有最高 IoU 值的 anchor;(2)与任何一个 ground truth 的 IoU 值大于 0.7 的 anchor。
因此,一个 ground truth 可能分配正标签给多个 anchors。通常第二种情况就足以确定正样本,但我们仍然采用第一种情况,因为在某些特殊情况下,第二种情况可能找不到正样本。
我们将与所有 ground truth 的 IoU 值小于 0.3 的 anchor 分配负标签,既不是正样本也不是负样本的 anchor 对训练目标没有贡献。
i i i 是一个 mini-batch 中一个 anchor 的索引, p i p_i pi 表示第 i i i 个 anchor 是一个目标的预测概率, p i ∗ p_i^* pi∗ 表示 ground truth(anchor 为正样本时等于 1,为负样本时等于 0), t i t_i ti 是一个包含预测边界框 4 个参数化坐标的向量, t i ∗ t_i^* ti∗ 是 ground truth 的 4 个坐标。
训练 RPN: RPN 可以通过反向传播和随机梯度下降进行端到端训练。我们遵循“以图像为中心”的采样策略:每个 mini-batch 都来自一张图像(一张图像包含许多正标签和负标签的 anchors)。
可以将所有 anchors 用于优化损失函数,但这样做会偏向负样本,因为它们数量更多从而占主导地位。
我们的方法是在一张图像中随机采样 256 个 anchors 来计算一个 mini-batch 的损失函数,其中采样的正样本和负样本比例接近 1:1,如果在一个图像中采样的正样本数量少于 128,那就用负样本填补。
RPN 和 Fast R-CNN 网络各自独立训练,因此会用不同的方式更新它们的卷积层参数。我们需要开发一种技术使得两个网络能够共享卷积层。
我们讨论了三种训练共享特征网络的方法:(1)交替训练。首先训练 RPN 网络,然后用 RPN 网络生成的候选区域来训练 Fast R-CNN,Fast R-CNN 的权重又能用来初始化 RPN 网络。本文中所有实验皆用此方法。(2)近似联合训练。将 RPN 和 Fast R-CNN 合并成一个网络,在每一次 SGD 迭代中,前向传递生成候选区域,当训练 Fast R-CNN 时冻结候选区域任务,反向传播时将 RPN 的损失跟 Fast R-CNN 的损失组合起来。该方法能产生与交替训练法相近的结果,并且训练时间能减少 25-50%,因此后续发布的 Python 代码中使用了该方法。虽然该方法容易实现,但忽略了候选框坐标的偏导数。(3)非近似联合训练。
四步交替训练: 本文采用一种实用的四步训练法,通过交替优化来学习共享特征。第一步,训练 RPN 网络,该网络使用 ImageNet 预训练模型进行初始化,并针对候选区域任务进行端到端的微调;第二步,使用 RPN 网络生成的候选区域来训练一个单独的检测网络,该检测网络也通过 ImageNet 预训练模型进行初始化(这一步,两个网络不共享卷积层);第三步,使用检测网络来初始化 RPN 训练,但是冻结了共享的卷积层,并且只微调 RPN 网络独有的层(这一步,两个网络共享卷积层);第四步,继续冻结共享层,并微调 Fast R-CNN 独有的层。
使用单尺度的图像来训练和测试 RPN 和 Fast R-CNN 网络。重新缩放图像,使其短边为 600 像素。多尺度特征提取也许能提高精度,但不能很好的权衡速度和精度。
对于 anchors,我们使用三种尺度(分别为 128*128、256*256、512*512),每一种尺度又使用三种长宽比(分别为 1:1、1:2、2:1)。
如前所述,我们的解决方案不需要用一个图像金字塔或滤波器金字塔去预测多个尺度的候选区域,从而节省了大量的运行时间。
有些 anchors 可能会跨越图像边界,这些 anchors 将被忽略掉。对于一张 1000*600 的图像,可能生成大约 20000 个 anchors,忽略掉跨越边界的 anchors,最后可能有 6000 个能用来训练。如果这些跨越边界的 anchors 也用来训练,它们会给目标函数引入很大的误差,并导致训练无法收敛。在测试的时候会保留这些跨越图像边界的框,会把超出图像的部分裁剪掉。
一些通过 RPN 网络产生的候选框可能会高度重叠,为了降低冗余度,我们基于它们的分类分数采用非极大值抑制来过滤。当 NMS 的 IoU 阈值设置为 0.7 的时候,最后每张图像能留下大约 2000 个候选区域。NMS 不会损害最终的检测精度,而且能大大减少候选框的数量。在 NMS 之后,我们根据分数对候选框进行排序,然后选取前 N 个候选区域用于检测。
该实验证明了 :
该实验证明了 RPN 网络能显著提高生成候选区域的速度。
该实验证明了在同一种长宽比的情况下,多种尺度更有助于提升检测精度;同样地,在同一种尺度的情况下,多种长宽比更有助于提升精度。
该实验证明了增加数据能显著提升精度。