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

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (2015/6)

1. 概述

  文章的主要贡献有:

  • 提出了 Region Proposal Network(RPN),通过共享检测网络的卷积特征,可以几乎零成本地生成候选区域。RPN 是一种全卷积网络,可以同时预测对象的边界框并给出对象分数(objectness score),可以端到端地进行训练。
  • 将 RPN 和 Fast R-CNN 整合到一个网络中,共享卷积特征,并引入注意力机制,构造了称为 Faster R-CNN 检测网络,在提高检测速度的同时还提高了准确率。
  • 给出了一种同时训练 RPN 和识别网络的方法,加快训练速度。

  对于如 R-CNN、Fast R-CNN 这些基于候选区域的的目标检测网络,把生成候选区域和识别看成两个独立的任务,其中生成候选区域这一步骤耗费了大量时间。这两个任务都是在同一张图像上的计算,应该有能够共享的部分。文章指出,对于这些基于候选区域的检测器,其中的特征图可以用来生成候选区域:RPN 通过在特征图上添加一系列卷积层,在网格中的各个位置上进行边界框的回归和 objectness score 的预测。

  为了生成不同尺寸和长宽比例的候选框,RPN 引入了锚点框(anchor box),即预先定义多个不同尺寸和比例的框作为参考(Figure 1c),避免使用图像金字塔(Figure 1a)或者过滤器金字塔(Figure 1b)。

Figure 1
Figure 1

  为了同时训练 RPN 和识别网络,文章给出了一种交替对二者进行微调的训练方法,先对 RPN 进行微调,再固定候选区域,对识别网络进行微调,交替进行。这个方法可以快速收敛,最终得到能够在生成候选区域和目标识别两个任务上共享卷积特征的统一网络,

2. Faster R-CNN

  Faster R-CNN 包含两个模块,分别是用于生成候选区域的深度全卷积网络即 RPN,以及用于识别候选区域的 Fast R-CNN 检测器,如 Figure 2 所示。

Figure 2
Figure 2

2.1. RPN

  RPN 的输入为一张任意尺寸的图像,输出为一组矩形候选区域,每一个区域有一个 objectness score。RPN 与 Fast R-CNN 检测器共享一系列卷积层,在最后一个共享卷积层的特征图上,使用一个输入为 $n \times n$ 的小网络进行滑动(文章选择 $n = 3$),将窗口内的特征图映射为低维特征,分别提供给边界框回归层(reg)和边界框分类层(cls)这两个全连接层,如 Figure 3 左图所示,注意这里的“分类”只是对该处是否有物体进行分类,不对物体类别进行分类。两个全连接层的参数是在所有位置共享的,整个结构可以实现为一个 $n \times n$ 卷积层,后接两路 $1 \times 1$ 卷积层的形式。

Figure 3
Figure 3

2.1.1. 锚点

  在滑窗的每一个位置,同时预测最多 $k$ 个候选区域。由此 reg 层输出 $k$ 个矩形框共计 $4k$ 个坐标;cls 层输出 $2k$ 个分数,估计候选区域内是否有目标的概率(这里使用了 softmax,因此有两个概率值,对应有和没有两种情况;也可以使用 logistic 回归来得到 $k$ 个分数)。

  $k$ 个候选区域以 $k$ 个锚点框为参考。每个锚点框的中心在滑窗的中心,具有不同的尺寸和长宽比。文章中默认使用 $3$ 种尺寸和 $3$ 种长宽比,共有 $k = 9$ 个锚点框。对于尺寸为 $W \times H$(通常约有 2000)的特征图,共有 $WHk$ 个锚点框。

  由于 reg 和 cls 两个全连接层在所有位置上共享,使得这种方法具有平移不变性(translation-invariant),同时参数量很少。对于 $k = 9$ 的情况,reg 和 cls 的输出的尺寸只有 $(4 + 2) \times 9$,对于 VGG-16 网络,参数量只有 $512 \times (4 + 2) \times 9 = 2.8 \times 10^4$。

  相比 Figure 1a 中使用图像/特征金字塔,或者 Figure 1b 中多尺寸的滑窗,Faster R-CNN 使用的方法基于锚点框金字塔,以不同尺寸和长宽比例的锚点框作为参考,只需单一尺寸的输入图像和特征图,并在在特征图上使用单一尺寸的过滤器,更加高效。

2.1.2. 代价函数

  训练 RPN 时,为每个锚点框赋予一个二值标签,表示区域内是否有目标。如果锚点框满足以下两个条件之一,则标记其为正例:

  • 对某个标注框,该锚点框与之具有最大 IoU;
  • 锚点框与某个标注框的 IoU 大于 0.7。

对于一个标注框,可能会有多个锚点框满足上述条件,并被标记为正例。通常来说使用第二个条件就已经足够了,但在极少的情况下有些标注框没有满足第二个条件的锚点框,此时通过第一个条件标记锚点框。如果锚点框与所有标注框的 IoU 都低于 0.3,则标记其为负例。

  文章使用了 Fast R-CNN 中的多任务损失

$$
\begin{aligned}
L(\{p_i\}, \{t_i\}) &= \frac{1}{N_{cls}} \sum_i L_{cls}(p_i, p_i^*) \\
& + \lambda \frac{1}{N_{reg}} \sum_i p_i^* L_{reg}(t_i, t_i^*)
\end{aligned} \tag{1}
$$

其中 $i$ 为小批量中锚点的索引,$p_i$ 是预测锚点 $i$ 为目标的概率,$p_i^*$ 为标签($1$ 为正例,$0$ 为负例)。$t_i$ 为预测的边界框,$t_i^*$ 为与锚点 $i$ 关联的标注框,二者都是长度为 4 的向量,表示框的坐标。$L_{cls}$ 为有/无目标的分类对数损失。$p_i^* L_{reg}$ 表示只对正例启用 $L_{reg}$ 损失,负例(背景)没有标注框。

  式 $(1)$ 中的 $\lambda$ 用于平衡两个损失,对于文中的场景,有 $N_{cls} = 256$,$N_{reg} \sim 2400$,文章设置 $\lambda = 10$,使得两个损失的权重大致相等。文章通过实验发现模型性能对 $\lambda$ 不敏感,当 $\lambda$ 在 1 到 100 这两个数量级间变动时,对 mAP 只有约 1% 的影响,当 $\lambda = 10$ 时获得了最高 mAP。

  式 $(1)$ 中的 $L_{reg}(t_i, t_i^*) = R(t_i – t_i^*)$,定义同 Fast-RCNN 的 $\mathrm{smooth}_{L_1}(x)$,即

$$
R(x) = \mathrm{smooth}_{L_1}(x) =
\begin{cases}
0.5 x^2 & \text{if } |x| < 1 \\
|x| – 0.5 & \text{otherwise}
\end{cases}
$$

  边界框回归使用了 R-CNN 中的形式

$$
\begin{aligned}
t_x &= (x – x_a) / w_a, \qquad & t_y = (y – y_a) / h_a \\
t_w &= \log(w / w_a), \qquad & t_h = \log(h / h_a) \\
t_x^* &= (x^* – x_a) / w_a, \qquad & t_y^* = (y^* – y_a) / h_a \\
t_w^* &= \log(w^* / w_a), \qquad & t_h^* = \log(h^* / h_a) \\
\end{aligned} \tag{2}
$$

其中 $x, y, w, h$ 分别为边界框的中心坐标和宽高,$x, x_a, x^*$ 分别表示预测框、锚点框和标注框。上面的方法将标注框回归到标注框。

2.1.3. 训练 RPN

  可以使用随机梯度下降(SGD)通过反向传播来训练 RPN,构造小批量时,在一张图像的众多锚点中进行采样 256 个锚点,并使得正例和负例的比例为 $1:1$,如果正例数量少于 128,则用负例补充。

2.2. 共享特征

  Faster R-CNN 中包含 RPN 和 Fast R-CNN 检测器两个网络,二者共享部分卷积特征。文章给出了三种训练方法:

  • 交替训练(alternating training):先训练 RPN,然后用得到的候选区域训练 Fast R-CNN,再用调整后的 Fast R-CNN 初始化 RPN,迭代进行。
  • 近似联合训练(approximate joint training):将 RPN 和 Fast R-CNN 合并为一个网络,如 Figure 2 所示。前向传播时,RPN 生成候选区域,把这些区域看作固定的、预计算的输入来训练 Fast R-CNN 检测器。反向传播时,共享层会整合两个网络的传播信号。这个方法容易实现,但训练 Fast R-CNN 时将输入的候选框作为固定数据,忽略了对候选框坐标的梯度。
  • 非近似联合训练(non-approximate joint training):Fast R-CNN 时将输入的候选框是由 RPN 预测的,也是从输入图像得到的。因此反向传播时,也要考虑对候选框坐标的梯度,这要求 Fast R-CNN 中的 RoI 池化要能对候选框坐标可微。

  文章使用了 4 步交替训练:

  1. 训练 RPN,使用 ImageNet 预训练权重作为初始化;
  2. 使用第 1 步生成的候选框训练 Fast R-CNN 检测器,此时训练的 Fast R-CNN 是一个单独的网络,使用 ImageNet 预训练权重作为初始化,不与 RPN 共享卷积层;
  3. 使用检测器网络初始化 RPN,固定共享的卷积层,只对 RPN 独有的层进行微调,此时两个网络共享卷积层;
  4. 固定共享的卷积层,对 Fast R-CNN 独有的层进行微调。

由此训练了共享卷积层的两个网络。文章指出,虽然可以再以此迭代多次,但提升很少。

3. 实验结果

  文章在 VOC 2007 上比较了使用不同方法生成候选区域的性能,如 Table 2 所示。可见 Faster R-CNN(RPN+ZF, shared)只用 300 个候选框就获得了 59.9 的最高 mAP。

Table 2
Table 2

  针对 RPN,文章实验了以下场景:

  • 不共享卷积:RPN+ZF, unshared 在训练到第 2 步时停止,两个网络没有共享卷积层,mAP 为 58.7,差于共享卷积。
  • 在训练时不使用 RPN:在训练时使用 SS,测试时使用 RPN(不共享卷积),mAP 在 55 到 56 附近,这是因为训练和测试时的候选框不一致。注意即便在测试时只用 100 个候选区域,也达到了 55.1 的 mAP,说明 RPN 生成的头部候选区域足够准确。RPN+ZF (no NMS) 没有 NMS,使用了 6000 个候选区域,mAP 为 55.2,说明 NMS 不会影响性能。
  • 不使用 RPN 的 cls:测试时删除 RPN 的 cls 层,随机从候选区域中采样 $N$ 个,可见 mAP 随 $N$ 的降低快速下降。
  • 不使用 RPN 的 reg:测试时删除 RPN 的 reg 层,使用锚点框作为候选区域,使用 300 个候选区域时 mAP 下降到 52.1,可见通过 reg 回归可以提高候选框的准确度,仅使用锚点框不足以进行准确的检测。
  • 在 RPN 中使用更大的网络:文章尝试了在 RPN 使用 VGG,使用 300 个候选区域时,RPN+VGG 获得了 59.2 的 mAP,相比 RPN+ZF 的 56.8 有所提升。

  文章进一步试验了使用 VGG-16 在 VOC 2007 和 VOC 2012 的性能,如 Table 3、Table 4 所示。

Table 3
Table 3
Table 4
Table 4

  Faster R-CNN 测试时的速度如 Table 5 所示。

Table 5
Table 5