快速区域卷积神经网络(Fast R-CNN)

好的,这是对Ross Girshick的论文《Fast R-CNN》的完整中文翻译:


**快速区域卷积神经网络(Fast R-CNN)**

罗斯·吉什克(Ross Girshick)

微软研究院

rbg@microsoft.com

摘要

本文提出了一种用于目标检测的快速基于区域的卷积网络方法(Fast R-CNN)。Fast R-CNN 建立在先前工作的基础上,利用深度卷积网络高效地对目标候选区域进行分类。与先前工作相比,Fast R-CNN 采用了几项创新,以提高训练和测试速度,同时提升检测精度。Fast R-CNN 训练非常深的 VGG16 网络比 R-CNN 快 9 倍,测试时快 213 倍,并在 PASCAL VOC 2012 上取得了更高的平均精度均值(mAP)。与 SPPnet 相比,Fast R-CNN 训练 VGG16 快 3 倍,测试快 10 倍,并且更精确。Fast R-CNN 使用 Python 和 C++(基于 Caffe)实现,并在开源 MIT 许可证下发布于 https://github.com/rbgirshick/fast-rcnn。

1. 引言

近年来,深度卷积网络(ConvNets)14, 16 显著提高了图像分类 14 和目标检测 9, 19 的精度。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,当前的方法(例如,9, 11, 19, 25)在多阶段流程中训练模型,这些流程缓慢且不优雅。

复杂性源于检测需要精确地定位目标,这带来了两个主要挑战。首先,必须处理大量的候选目标位置(通常称为"候选区域")。其次,这些候选区域仅提供粗略的定位,需要对其进行精炼以实现精确定位。这些问题的解决方案常常在速度、精度或简洁性上做出妥协。

在本文中,我们精简了最先进的基于 ConvNet 的目标检测器 9, 11 的训练过程。我们提出了一种单阶段的训练算法,该算法联合学习对目标候选区域进行分类并精炼其空间位置。

由此产生的方法可以训练非常深的检测网络(VGG16 20),速度比 R-CNN 9 快 9 倍,比 SPPnet 11 快 3 倍。在运行时,检测网络在 0.3 秒内处理图像(不包括候选区域生成时间),同时在 PASCAL VOC 2012 7 上达到了顶级精度,mAP 为 66%,而 R-CNN 为 62%。

1.1 R-CNN 和 SPPnet

基于区域的卷积网络方法(R-CNN)9 通过使用深度 ConvNet 对目标候选区域进行分类,实现了出色的目标检测精度。然而,R-CNN 具有明显的缺点:

  1. **训练是一个多阶段流程。** R-CNN 首先使用对数损失(log loss)在目标候选区域上微调 ConvNet。然后,它拟合支持向量机(SVM)到 ConvNet 特征。这些 SVM 充当目标检测器,取代了微调阶段学习的 softmax 分类器。在第三个训练阶段,学习边界框回归器。

  2. **训练在空间和时间上都很昂贵。** 为了训练 SVM 和边界框回归器,需要从每张图像中的每个目标候选区域提取特征并写入磁盘。对于非常深的网络(如 VGG16),处理 VOC07 trainval 集的 5k 张图像需要 2.5 个 GPU 天。这些特征需要数百 GB 的存储空间。

  3. **目标检测速度慢。** 在测试时,需要从每张测试图像中的每个目标候选区域提取特征。使用 VGG16 进行检测每张图像需要 47 秒(在 GPU 上)。

R-CNN 速度慢是因为它对每个目标候选区域执行一次 ConvNet 前向传播,而没有共享计算。空间金字塔池化网络(SPPnets)11 被提出通过共享计算来加速 R-CNN。SPPnet 方法计算整个输入图像的卷积特征图,然后使用从共享特征图中提取的特征向量对每个目标候选区域进行分类。通过将候选区域内的特征图部分进行最大池化,生成固定大小的输出(例如,6×6),从而提取候选区域的特征。多个输出尺寸被池化后连接起来,如同空间金字塔池化 15。SPPnet 在测试时将 R-CNN 加速了 10 到 100 倍。由于候选区域特征提取更快,训练时间也减少了 3 倍。

SPPnet 也有明显的缺点。与 R-CNN 一样,训练是一个多阶段流程,涉及特征提取、使用对数损失微调网络、训练 SVM,以及最终拟合边界框回归器。特征也需要写入磁盘。但与 R-CNN 不同,11 中提出的微调算法无法更新空间金字塔池化层之前的卷积层。毫不意外,这种限制(固定的卷积层)限制了非常深网络的精度。

1.2 贡献

我们提出了一种新的训练算法,解决了 R-CNN 和 SPPnet 的缺点,同时提高了它们的速度和精度。我们称这种方法为 Fast R-CNN,因为它在训练和测试方面相对较快。Fast R-CNN 方法有几个优点:

  1. 比 R-CNN、SPPnet 有更高的检测质量(mAP)。

  2. 训练是单阶段的,使用多任务损失。

  3. 训练可以更新所有网络层。

  4. 不需要磁盘存储来缓存特征。

Fast R-CNN 使用 Python 和 C++(Caffe 13)编写,并在开源 MIT 许可证下发布于 https://github.com/rbgirshick/fast-rcnn。

2. Fast R-CNN 架构与训练

图 1 展示了 Fast R-CNN 架构。Fast R-CNN 网络将整个图像和一组目标候选区域作为输入。网络首先使用几个卷积(conv)层和最大池化层处理整个图像,以生成卷积特征图。然后,对于每个目标候选区域,一个感兴趣区域(RoI)池化层从特征图中提取一个固定长度的特征向量。每个特征向量被输入到一系列全连接(fc)层中,这些层最终分支成两个同级输出层:一个输出覆盖 K 个目标类别加上一个"背景"类别的 softmax 概率估计,另一个为 K 个目标类别中的每一个输出四个实数值。每组 4 个值编码了 K 个类别之一的精炼边界框位置。

2.1 RoI 池化层

RoI 池化层使用最大池化,将任何有效感兴趣区域内的特征转换为一个具有固定空间范围 H×W(例如,7×7)的小特征图,其中 H 和 W 是层超参数,独立于任何特定的 RoI。在本文中,RoI 是卷积特征图中的一个矩形窗口。每个 RoI 由一个四元组 (r, c, h, w) 定义,指定其左上角 (r, c) 以及其高度和宽度 (h, w)。

<center>图 1. Fast R-CNN 架构。输入图像和多个感兴趣区域(RoIs)被输入到一个全卷积网络。每个 RoI 被池化为一个固定大小的特征图,然后通过全连接层(FCs)映射到一个特征向量。网络对每个 RoI 有两个输出向量:softmax 概率和每类边界框回归偏移量。该架构使用多任务损失进行端到端训练。</center>

RoI 最大池化的工作原理是:将 h×w 的 RoI 窗口划分为一个 H×W 的子窗口网格,每个子窗口的大小近似为 h/H × w/W,然后将每个子窗口中的值最大池化到相应的输出网格单元中。与标准最大池化一样,池化操作独立地应用于每个特征图通道。RoI 层只是 SPPnets 11 中使用的空间金字塔池化层的一个特例,即只有一个金字塔级别。我们使用 11 中给出的池化子窗口计算方法。

2.2 从预训练网络初始化

我们使用三个预训练的 ImageNet 4 网络进行实验,每个网络都有五个最大池化层,以及五到十三个卷积层(网络细节见第 4.1 节)。当用预训练网络初始化 Fast R-CNN 网络时,需要进行三次转换。

首先,最后一个最大池化层被替换为一个 RoI 池化层,该层通过设置 H 和 W 以兼容网络的第一个全连接层(例如,对于 VGG16,H = W = 7)。

其次,网络的最后一个全连接层和 softmax(为 1000 类 ImageNet 分类训练)被替换为前述的两个同级层(一个用于 K+1 个类别的全连接层和 softmax,以及类别特定的边界框回归器)。

第三,网络被修改为接受两个数据输入:一个图像列表和这些图像中的 RoI 列表。

2.3 检测微调

使用反向传播训练所有网络权重是 Fast R-CNN 的一项重要能力。首先,让我们阐明为什么 SPPnet 无法更新空间金字塔池化层以下的权重。

根本原因是,当每个训练样本(即 RoI)来自不同图像时,通过 SPP 层的反向传播效率极低,而这正是 R-CNN 和 SPPnet 网络的训练方式。这种低效率源于每个 RoI 可能具有非常大的感受野,通常覆盖整个输入图像。由于前向传播必须处理整个感受野,因此训练输入很大(通常是整个图像)。

我们提出了一种更高效的训练方法,利用训练期间的特征共享。在 Fast R-CNN 训练中,随机梯度下降(SGD)小批量是分层采样的,首先采样 N 张图像,然后从每张图像中采样 R/N 个 RoI。关键在于,来自同一图像的 RoI 在前向和后向传播中共享计算和内存。使 N 变小可以减少小批量计算。例如,当使用 N=2 和 R=128 时,所提出的训练方案比从 128 张不同图像中各采样一个 RoI(即 R-CNN 和 SPPnet 的策略)快大约 64 倍。

对这种策略的一个担忧是,由于来自同一图像的 RoI 是相关的,可能会导致训练收敛缓慢。这种担忧似乎不是一个实际问题,我们使用 N=2 和 R=128,用比 R-CNN 更少的 SGD 迭代次数就取得了良好的结果。

除了分层采样,Fast R-CNN 还使用了一个简化的训练过程,即单次微调阶段,联合优化 softmax 分类器和边界框回归器,而不是像 9, 11 那样分三个阶段分别训练 softmax 分类器、SVM 和回归器。该过程的组成部分(损失、小批量采样策略、通过 RoI 池化层的反向传播以及 SGD 超参数)如下所述。

**多任务损失。** Fast R-CNN 网络有两个同级输出层。第一个输出离散概率分布(每个 RoI),p = (p0, ..., pK),覆盖 K+1 个类别。通常,p 是通过对全连接层的 K+1 个输出应用 softmax 计算的。第二个同级层输出边界框回归偏移量,t^k = (t_x^k, t_y^k, t_w^k, t_h^k),对应于 K 个目标类别中的每一个,由 k 索引。我们使用 9 中给出的 t^k 的参数化方式,其中 t^k 指定了一个相对于目标候选区域的尺度不变平移和对数空间中的高/宽偏移。

每个训练 RoI 被标记一个真实类别 u 和一个真实的边界框回归目标 v。我们对每个标记的 RoI 使用多任务损失 L 来联合训练分类和边界框回归:

\[

L(p, u, t^u, v) = L_{cls}(p, u) + \lambda u \\ge 1 L_{loc}(t^u, v), \quad (1)

\]

其中 \(L_{cls}(p, u) = -\log p_u\) 是真实类别 u 的对数损失。

第二个任务损失 \(L_{loc}\) 定义在真实类别 u 的边界框回归目标元组 \(v = (v_x, v_y, v_w, v_h)\) 和预测元组 \(t^u = (t_x^u, t_y^u, t_w^u, t_h^u)\) 上(同样针对类别 u)。艾弗森括号指示函数 \(u \\ge 1\) 在 u ≥ 1 时值为 1,否则为 0。按照惯例,背景类别的标签为 u = 0。对于背景 RoI,没有真实边界框的概念,因此忽略 \(L_{loc}\)。对于边界框回归,我们使用损失

\[

L_{loc}(t^u, v) = \sum_{i \in \{x, y, w, h\}} smooth_{L_1}(t_i^u - v_i), \quad (2)

\]

其中

\[

smooth_{L_1}(x) = \begin{cases}

0.5x^2 & \text{if } |x| < 1 \\

|x| - 0.5 & \text{otherwise},

\end{cases} \quad (3)

\]

是一种鲁棒的 L1 损失,它对离群值的敏感度低于 R-CNN 和 SPPnet 中使用的 L2 损失。当回归目标无界时,使用 L2 损失训练可能需要仔细调整学习率以防止梯度爆炸。公式 (3) 消除了这种敏感性。

公式 (1) 中的超参数 λ 控制两个任务损失之间的平衡。我们将真实的回归目标 \(v_i\) 归一化为零均值和单位方差。所有实验均使用 λ = 1。

我们注意到 6 使用了一种相关的损失来训练类别无关的目标候选区域网络。与我们的方法不同,6 提倡使用双网络系统来分离定位和分类。OverFeat 19、R-CNN 9 和 SPPnet 11 也训练了分类器和边界框定位器,但是这些方法使用分阶段训练,我们证明这对 Fast R-CNN 来说不是最优的(第 5.1 节)。

**小批量采样。** 在微调期间,每个 SGD 小批量由 N=2 张图像构建,这些图像是均匀随机选择的(按照惯例,我们实际上是在数据集的排列上进行迭代)。我们使用大小为 R=128 的小批量,从每张图像中采样 64 个 RoI。如 9 所述,我们从与真实边界框的交并比(IoU)重叠至少为 0.5 的目标候选区域中抽取 25% 的 RoI。这些 RoI 构成了标记为前景目标类别(即 u ≥ 1)的样本。剩余的 RoI 从与真实边界框的最大 IoU 落在区间 0.1, 0.5) 的目标候选区域中采样,遵循 \[11。这些是背景样本,标记为 u = 0。0.1 的下限阈值似乎起到了困难样本挖掘 8 的启发式作用。在训练期间,图像以 0.5 的概率水平翻转。未使用其他数据增强。

**通过 RoI 池化层的反向传播。** 反向传播通过 RoI 池化层传递导数。为清晰起见,我们假设每个小批量只有一张图像(N=1),但扩展到 N>1 是直接的,因为前向传播独立处理所有图像。

设 \(x_i \in \mathbb{R}\) 为进入 RoI 池化层的第 i 个激活输入,设 \(y_{rj}\) 为该层从第 r 个 RoI 输出的第 j 个输出。RoI 池化层计算 \(y_{rj} = x_{i^*(r,j)}\),其中 \(i^*(r,j) = \arg \max_{i' \in \mathcal{R}(r,j)} x_{i'}\)。\(\mathcal{R}(r,j)\) 是输出单元 \(y_{rj}\) 进行最大池化的子窗口中的输入索引集。一个单独的 \(x_i\) 可能被分配给几个不同的输出 \(y_{rj}\)。

RoI 池化层的反向函数通过跟随 argmax 开关来计算损失函数相对于每个输入变量 \(x_i\) 的偏导数:

\[

\frac{\partial L}{\partial x_i} = \sum_r \sum_j i = i\^\*(r, j) \frac{\partial L}{\partial y_{rj}}. \quad (4)

\]

换句话说,对于每个小批量 RoI r 和每个池化输出单元 \(y_{rj}\),如果 i 是最大池化为 \(y_{rj}\) 所选择的 argmax,则偏导数 \(\partial L / \partial y_{rj}\) 被累加起来。在反向传播中,偏导数 \(\partial L / \partial y_{rj}\) 已经由 RoI 池化层之上的层的反向函数计算得出。

**SGD 超参数。** 用于 softmax 分类和边界框回归的全连接层分别从均值为零、标准差为 0.01 和 0.001 的高斯分布初始化。偏置初始化为 0。所有层对权重使用每层学习率 1,对偏置使用每层学习率 2,全局学习率为 0.001。当在 VOC07 或 VOC12 trainval 上训练时,我们运行 SGD 进行 30k 次小批量迭代,然后将学习率降至 0.0001,再训练 10k 次迭代。当在更大的数据集上训练时,我们运行更多次迭代,如下所述。使用动量为 0.9,参数衰减为 0.0005(应用于权重和偏置)。

2.4 尺度不变性

我们探索了两种实现尺度不变目标检测的方法:(1)通过"暴力"学习,(2)使用图像金字塔。这些策略遵循 11 中的两种方法。在暴力方法中,每张图像在训练和测试期间都以预定义的像素尺寸进行处理。网络必须直接从训练数据中学习尺度不变的目标检测。

相比之下,多尺度方法通过图像金字塔为网络提供近似的尺度不变性。在测试时,图像金字塔用于近似地对每个目标候选区域进行尺度归一化。在多尺度训练期间,我们按照 11,每次采样图像时随机采样一个金字塔尺度,作为一种数据增强形式。由于 GPU 内存限制,我们仅对较小的网络进行多尺度训练实验。

3. Fast R-CNN 检测

一旦 Fast R-CNN 网络微调完成,检测几乎等同于运行一次前向传播(假设目标候选区域已预先计算)。网络将一张图像(或一个图像金字塔,编码为图像列表)和一个包含 R 个待评分目标候选区域的列表作为输入。在测试时,R 通常约为 2000,但我们也会考虑更大(约 45k)的情况。当使用图像金字塔时,每个 RoI 被分配到使得缩放后的 RoI 面积最接近 224² 像素 11 的那个尺度。

对于每个测试 RoI r,前向传播输出一个类别的后验概率分布 p 和一组相对于 r 的预测边界框偏移量(每个 K 类都有自己的精炼边界框预测)。我们使用估计的概率 \(\Pr(\text{class} = k | r) \triangleq p_k\) 为 r 分配每个目标类别 k 的检测置信度。然后,我们使用 R-CNN 9 中的算法和设置为每个类别独立执行非极大值抑制。

3.1 用于更快检测的截断 SVD

对于整图分类,计算全连接层的时间相对于卷积层是很少的。相反,对于检测,需要处理的 RoI 数量很大,几乎一半的前向传播时间都花费在计算全连接层上(见图 2)。大型全连接层可以通过使用截断 SVD 5, 23 进行压缩来轻松加速。

在这种技术中,由 u×v 权重矩阵 W 参数化的层被近似分解为:

\[

W \approx U \Sigma_t V^T \quad (5)

\]

使用 SVD。在这个分解中,U 是一个 u×t 的矩阵,包含 W 的前 t 个左奇异向量;\(\Sigma_t\) 是一个 t×t 的对角矩阵,包含 W 的前 t 个奇异值;V 是一个 v×t 的矩阵,包含 W 的前 t 个右奇异向量。截断 SVD 将参数数量从 uv 减少到 t(u+v),如果 t 远小于 min(u, v),则效果显著。为了压缩网络,对应于 W 的单个全连接层被替换为两个全连接层,它们之间没有非线性。第一层使用权重矩阵 \(\Sigma_t V^T\)(无偏置),第二层使用 U(带有与 W 相关的原始偏置)。当 RoI 数量很大时,这种简单的压缩方法能提供良好的加速效果。

4. 主要结果

三个主要结果支持了本文的贡献:

  1. 在 VOC07、2010 和 2012 上达到最先进的 mAP。

  2. 与 R-CNN、SPPnet 相比,训练和测试速度快。

  3. 在 VGG16 中微调卷积层可提高 mAP。

4.1 实验设置

我们的实验使用了三个在线可用的预训练 ImageNet 模型。第一个是来自 R-CNN 9 的 CaffeNet(本质上是 AlexNet 14)。我们将这个 CaffeNet 称为模型 S,代表"小"。第二个网络是来自 3 的 VGG_CNN_M_1024,其深度与 S 相同,但更宽。我们称这个网络为模型 M,代表"中"。最后一个网络是来自 20 的非常深的 VGG16 模型。由于这个模型最大,我们称其为模型 L。在本节中,所有实验都使用单尺度训练和测试(s=600;详见第 5.2 节)。

4.2 VOC 2010 和 2012 结果

在这些数据集上,我们将 Fast R-CNN(简称 FRCN)与公共排行榜上 comp4(外部数据)赛道的前列方法进行比较(表 2,表 3)。对于 NUS_NIN_c2000 和 BabyLearning 方法,目前没有相关的出版物,我们也无法找到关于所用 ConvNet 架构的确切信息;它们是 Network-in-Network 17 设计的变体。所有其他方法都从相同的预训练 VGG16 网络初始化。

Fast R-CNN 在 VOC12 上取得了最佳结果,mAP 为 65.7%(使用额外数据时为 68.4%)。它比其他方法快两个数量级,这些方法都基于"慢速"的 R-CNN 流程。在 VOC10 上,SegDeepM 25 取得了比 Fast R-CNN 更高的 mAP(67.2% 对 66.1%)。SegDeepM 在 VOC12 trainval 加上分割标注上训练;它旨在通过使用马尔可夫随机场对 R-CNN 检测结果和来自 O2P 1 语义分割方法的分割结果进行推理,来提高 R-CNN 的精度。Fast R-CNN 可以替换 SegDeepM 中的 R-CNN,这可能会带来更好的结果。当使用扩大的 07+12 训练集(见表 2 标题)时,Fast R-CNN 的 mAP 提高到 68.8%,超过了 SegDeepM。

4.3 VOC 2007 结果

在 VOC07 上,我们将 Fast R-CNN 与 R-CNN 和 SPPnet 进行比较。所有方法都从相同的预训练 VGG16 网络开始,并使用边界框回归。VGG16 SPPnet 的结果由 11 的作者计算。SPPnet 在训练和测试期间都使用五个尺度。Fast R-CNN 相对于 SPPnet 的改进表明,尽管 Fast R-CNN 使用单尺度训练和测试,但微调卷积层提供了 mAP 的大幅提升(从 63.1% 到 66.9%)。R-CNN 的 mAP 为 66.0%。作为一个小问题,SPPnet 的训练没有使用 PASCAL 中标记为"困难"的样本。移除这些样本将 Fast R-CNN 的 mAP 提高到 68.1%。所有其他实验都使用"困难"样本。

4.4 训练和测试时间

快速训练和测试时间是我们的第二个主要结果。表 4 比较了 Fast R-CNN、R-CNN 和 SPPnet 在 VOC07 上的训练时间(小时)、测试速率(秒/图像)和 mAP。对于 VGG16,Fast R-CNN 处理图像的速度比 R-CNN 快 146 倍(不使用截断 SVD)和 213 倍(使用它)。训练时间减少了 9 倍,从 84 小时减少到 9.5 小时。与 SPPnet 相比,Fast R-CNN 训练 VGG16 快 2.7 倍(9.5 小时对 25.5 小时),测试快 7 倍(不使用截断 SVD)或 10 倍(使用它)。Fast R-CNN 还消除了数百 GB 的磁盘存储,因为它不缓存特征。

**表 4. Fast R-CNN、R-CNN 和 SPPnet 中相同模型之间的运行时比较。Fast R-CNN 使用单尺度模式。SPPnet 使用 11 中指定的五个尺度。计时由 11 的作者提供。时间是在 Nvidia K40 GPU 上测量的。**(表格数据已根据原文内容转述)

**截断 SVD。** 截断 SVD 可以将检测时间减少 30% 以上,而 mAP 仅有微小下降(0.3 个百分点),并且无需在模型压缩后进行额外的微调。图 2 展示了如何使用 VGG16 的 fc6 层中 25088×4096 矩阵的前 1024 个奇异值和 fc7 层中 4096×4096 矩阵的前 256 个奇异值,减少了运行时间,而 mAP 损失很小。如果在压缩后再次微调,可以在 mAP 损失更小的情况下实现进一步的加速。

<center>图 2. VGG16 在截断 SVD 前后的计时。在 SVD 之前,全连接层 fc6 和 fc7 占用 45% 的时间。</center>

4.5 微调哪些层?

对于 SPPnet 论文 11 中考虑的较浅网络,仅微调全连接层似乎就足以获得良好的精度。我们假设这个结果对于非常深的网络不成立。为了验证微调卷积层对 VGG16 的重要性,我们使用 Fast R-CNN 进行微调,但冻结 13 个卷积层,仅让全连接层学习。这种消融实验模拟了单尺度 SPPnet 训练,并将 mAP 从 66.9% 降低到 61.4%(表 5)。这个实验验证了我们的假设:通过 RoI 池化层进行训练对于非常深的网络至关重要。

**表 5. 限制 VGG16 中微调层的影响。微调 ≥ fc6 模拟了 SPPnet 训练算法 11,但使用单尺度。SPPnet L 的结果是使用五个尺度获得的,速度成本显著(7 倍)。**

这是否意味着应该微调所有卷积层?简而言之,不是。在较小的网络(S 和 M)中,我们发现 conv1 是通用的且与任务无关(这是一个众所周知的事实 14)。允许 conv1 学习或不学习,对 mAP 没有有意义的影响。对于 VGG16,我们发现只需要更新从 conv3.1 开始的层(13 个卷积层中的 9 个)。这个观察是实用的:(1)与从 conv3.1 开始学习相比,从 conv2.1 开始更新会使训练速度减慢 1.3 倍(12.5 小时对 9.5 小时);(2)从 conv1.1 开始更新会超出 GPU 内存。从 conv2.1 开始学习时,mAP 的差异仅为 +0.3 个百分点(表 5,最后一列)。本文中使用 VGG16 的所有 Fast R-CNN 结果均微调 conv3.1 及更高层;所有使用模型 S 和 M 的实验均微调 conv2 及更高层。

5. 设计评估

我们进行了实验来理解 Fast R-CNN 与 R-CNN 和 SPPnet 的比较,并评估设计决策。遵循最佳实践,我们在 PASCAL VOC07 数据集上进行了这些实验。

5.1 多任务训练有帮助吗?

多任务训练很方便,因为它避免了管理顺序训练任务的流程。但它也有可能改善结果,因为这些任务通过共享表示(ConvNet)相互影响 2。多任务训练能提高 Fast R-CNN 中的目标检测精度吗?

为了测试这个问题,我们训练了仅使用分类损失 \(L_{cls}\)(即设置公式 (1) 中的 λ = 0)的基线网络。这些基线网络不使用边界框回归。表 6 比较了三种网络(S、M、L)在有和没有多任务损失的情况下的结果。

**表 6. 多任务训练与仅分类训练(VOC07 mAP)的比较。**

对于所有三个网络,多任务训练都比单独的分类训练提高了 mAP(在模型 L 上提高了约 +2.5 个百分点)。这表明联合训练分类和边界框回归确实可以提高检测精度,部分原因是通过共享网络表示实现了任务间的相互影响。

5.2 尺度不变性:暴力还是多尺度?

在 SPPnet 11 中,多尺度训练和测试比单尺度训练和测试产生了更好的 mAP。但是,SPPnet 无法更新卷积层。由于 Fast R-CNN 可以更新卷积层,我们尝试确定单尺度训练是否足够,或者多尺度训练是否仍然有益。

**表 7. 单尺度与多尺度训练及测试(VOC07 mAP)。**

在单尺度训练(s=600)下,Fast R-CNN 在测试时使用单尺度(s=600)达到了 66.9% 的 mAP。在测试时使用多尺度(五个尺度),mAP 略微提高到 67.5%。有趣的是,多尺度训练(在五个尺度上采样)加上单尺度测试(s=600)也提供了类似的小幅提升(67.1%)。多尺度训练和测试一起使用时,mAP 达到了 67.6%。这些结果表明,虽然多尺度处理可以带来一些改进,但与能够更新卷积层带来的根本性改进(相比 SPPnet 的 63.1%)相比,这种提升是次要的。由于内存限制,这部分实验仅在较小的模型(S 和 M)上进行。对于模型 L(VGG16),使用多尺度会耗尽 GPU 内存,因此我们所有的 VGG16 实验都使用单尺度训练和测试。

5.3 训练需要更多数据吗?

目标检测的一个常见智慧是,更多数据通常会带来更好的结果。我们通过实验评估了增加训练数据(在 VOC07 数据集上)对 Fast R-CNN 的影响。我们使用不同的训练集大小(从 1k 到 10k 图像)训练模型 M,并测量在 VOC07 测试集上的 mAP。结果显示,增加数据量确实带来了持续的 mAP 提升,这与其他检测器(如 DPM 8)的观察结果一致 24

5.4 SVM 是否优于 Softmax?

R-CNN 和 SPPnet 在微调后训练 SVM 分类器,而不是使用微调网络中的 softmax 输出。一种假设是,这种后处理步骤是必要的,因为在微调期间使用的正负样本分布不平衡(或由于其他原因)。Fast R-CNN 在训练期间直接使用 softmax,从而避免了在后处理阶段训练 SVM。我们测试了在 Fast R-CNN 之后使用 SVM 是否仍然有益。

我们在 Fast R-CNN 中实现了带有困难负样本挖掘的后处理 SVM 训练,使用与 R-CNN 相同的训练算法和超参数。表 8 显示,对于所有三个网络,softmax 都略微优于 SVM,mAP 提高了 +0.1 到 +0.8 个百分点。这种影响很小,但它表明"一次性"微调就足够了,相比之前的多阶段训练方法。我们注意到,与一对多的 SVM 不同,softmax 在对 RoI 进行评分时引入了类别间的竞争。

**表 8. Fast R-CNN 中使用 Softmax 与 SVM 的比较(VOC07 mAP)。**

5.5 更多候选区域总是更好吗?

(广义上)有两种目标检测器:一种使用稀疏的目标候选区域集(例如,选择性搜索 21),另一种使用密集集(例如,DPM 8)。分类稀疏候选区域是一种级联 22 形式,其中候选区域机制首先拒绝大量候选者,留给分类器一个小的集合进行评估。当应用于 DPM 检测时,这种级联提高了检测精度 21。我们发现证据表明,候选-分类器级联也提高了 Fast R-CNN 的精度。

使用选择性搜索的质量模式,我们从每张图像 1k 到 10k 个候选区域进行扫描,每次都重新训练和重新测试模型 M。如果候选区域仅起计算作用,那么增加每张图像的候选区域数量不应损害 mAP。

我们发现,随着候选区域数量的增加,mAP 先上升然后略微下降(图 3,实蓝线)。这个实验表明,向深度分类器提供更多候选区域并无帮助,甚至略微损害了精度。

如果没有实际运行实验,这个结果是很难预测的。衡量目标候选区域质量的最新标准是平均召回率(AR)12。在使用固定数量的每张图像候选区域时,对于几种候选区域方法,AR 在使用 R-CNN 时与 mAP 相关性很好。图 3 显示,随着每张图像候选区域数量的变化,AR(实红线)与 mAP 的相关性并不好。必须谨慎使用 AR;由于更多候选区域带来的更高 AR 并不意味着 mAP 会增加。幸运的是,使用模型 M 的训练和测试时间不到 2.5 小时。因此,Fast R-CNN 能够高效、直接地评估目标候选区域的 mAP,这比代理指标更可取。

我们还研究了 Fast R-CNN 在使用密集生成的框(覆盖尺度、位置和长宽比)时的情况,每张图像约 45k 个框。这个密集集足够丰富,当每个选择性搜索框被其最接近的(在 IoU 上)密集框替换时,mAP 仅下降 1 个百分点(至 57.7%,图 3,蓝色三角形)。

密集框的统计特性与选择性搜索框不同。从 2k 个选择性搜索框开始,我们测试在添加随机采样的 1000×{2, 4, 6, 8, 10, 32, 45} 个密集框时的 mAP。对于每个实验,我们都重新训练和重新测试模型 M。当添加这些密集框时,mAP 的下降比添加更多选择性搜索框时更为显著,最终达到 53.0%。

我们还仅使用密集框(每张图像 45k)训练和测试 Fast R-CNN。这种设置产生的 mAP 为 52.9%(蓝色菱形)。最后,我们检查是否需要有困难负样本挖掘的 SVM 来应对密集框的分布。SVM 的表现更差:49.3%(蓝色圆圈)。

<center>图 3. 各种候选区域方案的 VOC07 测试 mAP 和 AR。</center>

5.6 MS COCO 初步结果

我们将 Fast R-CNN(使用 VGG16)应用于 MS COCO 数据集 18,以建立一个初步基线。我们在 80k 图像训练集上训练了 240k 次迭代,并使用评估服务器在"test-dev"集上进行评估。PASCAL 风格的 mAP 为 35.9%;新的 COCO 风格的 AP(也在 IoU 阈值上取平均)为 19.7%。

6. 结论

本文提出了 Fast R-CNN,这是对 R-CNN 和 SPPnet 的一个简洁且快速的更新。除了报告最先进的检测结果外,我们还提供了详细的实验,希望能提供新的见解。特别值得注意的是,稀疏的目标候选区域似乎提高了检测器的质量。这个问题在过去由于成本(时间)过高而难以探究,但在 Fast R-CNN 中变得可行。当然,可能存在尚未发现的技术,使得密集框的表现与稀疏候选区域一样好。如果开发出这样的方法,可能有助于进一步加速目标检测。

**致谢。** 我感谢 Kaiming He、Larry Zitnick 和 Piotr Dollár 的有益讨论和鼓励。

参考文献

1 J. Carreira, R. Caseiro, J. Batista, and C. Sminchisescu. Semantic segmentation with second-order pooling. In ECCV, 2012. 5, 9

2 R. Caruana. Multitask learning. Machine learning, 1997. 6, 7

3 K. Chatfield, K. Simonyan, A. Vedaldi, and A. Zisserman. Return of the devil in the details: Delving deep into convolutional nets. In BMVC, 2014. 5, 9

4 J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. ImageNet: A large-scale hierarchical image database. In CVPR, 2009. 2, 9

5 E. Denton, W. Zaremba, J. Bruna, Y. LeCun, and R. Fergus. Exploiting linear structure within convolutional networks for efficient evaluation. In NIPS, 2014. 4, 9

6 D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014. 3, 9

7 M. Everingham, L. Van Gool, C. K. Williams, J. Winn, and A. Zisserman. The PASCAL visual object classes (VOC) challenge. IJCV, 2010. 1, 9

8 P. Felzenszwalb, R. Girshick, D. McAllester, and D. Ramanan. Object detection with discriminatively trained part based models. TPAMI, 2010. 3, 8, 9

9 R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014. 1, 2, 3, 4, 5, 6, 7, 8, 9

10 R. Girshick, J. Donahue, T. Darrell, and J. Malik. Region-based convolutional networks for accurate object detection and segmentation. TPAMI, 2015. To appear. 5, 8, 9

11 K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV, 2014. 1, 2, 3, 4, 5, 6, 7, 9

12 J. Hosang, R. Benenson, P. Dollar, and B. Schiele. What makes for effective detection proposals? CoRR, abs/1502.05082, 2015. 8, 9

13 Y. Jia, E. Shelhamer, J. Donahue, S. Karayev, J. Long, R. Girshick, S. Guadarrama, and T. Darrell. Caffe: Convolutional architecture for fast feature embedding. In ACM MM, 2014. 2, 9

14 A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012. 1, 4, 6, 9

15 S. Lazebnik, C. Schmid, and J. Ponce. Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories. In CVPR, 2006. 1, 9

16 Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel. Backpropagation applied to handwritten zip code recognition. Neural Computation, 1989. 1, 9

17 M. Lin, Q. Chen, and S. Yan. Network in network. In ICLR, 2014. 5, 9

18 T.-Y. Lin, M. Maire, S. Belongie, J. Hays, P. Perona, D. Ramanan, P. Dollár, and C. L. Zitnick. Microsoft COCO: Common objects in context. In ECCV, 2014. 8, 9

19 P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks. In ICLR, 2014. 1, 3, 9

20 K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015. 1, 5, 9

21 J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013. 8, 9

22 P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features. In CVPR, 2001. 8, 9

23 J. Xue, J. Li, and Y. Gong. Restructuring of deep neural network acoustic models with singular value decomposition. In Interspeech, 2013. 4, 9

24 X. Zhu, C. Vondrick, D. Ramanan, and C. Fowlkes. Do we need more training data or better models for object detection? In BMVC, 2012. 7, 9

25 Y. Zhu, R. Urtasun, R. Salakhutdinov, and S. Fidler. segDeepM: Exploiting segmentation and context in deep neural networks for object detection. In CVPR, 2015. 1, 5, 9