Fast R-CNN——基于快速区域卷积网络的目标检测方法

Fast R-CNN是一种用于目标检测的快速且高效的卷积神经网络方法。主要研究内容包括:

  1. 改进的训练和测试速度

    • Fast R-CNN通过共享计算和单阶段训练算法,显著提高了训练和测试速度。与R-CNN相比,Fast R-CNN训练VGG16网络快9倍,测试时快213倍。

  2. 多任务损失

    • 提出了一个多任务损失函数,联合优化分类和边界框回归,简化了训练过程,避免了多阶段训练的复杂性。

  3. RoI池化层

    • 引入RoI池化层,将不同大小的区域提议映射到固定大小的特征图,使得网络能够处理任意大小的输入图像。

  4. 截断SVD加速

    • 使用截断奇异值分解(SVD)压缩全连接层,进一步加速检测过程,同时保持较高的检测精度。

  5. 实验验证

    • 在PASCAL VOC 2007、2010和2012数据集上进行了广泛的实验,验证了Fast R-CNN在检测精度和速度上的优势。

    • 比较了不同训练策略(如单尺度与多尺度训练)和不同分类器(如softmax与SVM)的效果。

  6. 扩展应用

    • 初步探索了Fast R-CNN在MS COCO数据集上的应用,建立了初步基线。

Fast R-CNN通过一系列创新设计,显著提升了目标检测的效率和准确性,为后续的研究提供了新的方向。这里是自己的论文阅读记录,感兴趣的话可以参考一下,如果需要阅读原文的话可以看这里,如下所示:

摘要

本文提出了一种快速基于区域的卷积网络方法(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许可证下提供,代码在这里,如下所示:

1 引言

最近,深度卷积网络[14, 16]显著提高了图像分类[14]和目标检测[9, 19]的准确性。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,当前的方法(例如,[9, 11, 19, 25])采用多阶段流水线进行模型训练,这些流水线速度慢且不够优雅。

复杂性之所以产生,是因为检测需要目标的精确定位,从而产生了两个主要挑战。首先,必须处理大量候选目标位置(通常称为“提议”)。其次,这些候选位置仅提供粗略的定位,必须进行细化以实现精确的定位。解决这些问题的方法通常需要在速度、准确性或简单性上做出妥协。

在本文中,我们简化了最先进的基于卷积网络的目标检测器的训练过程[9, 11]。我们提出了一种单阶段训练算法,联合学习对目标提议进行分类并细化其空间位置。

由此产生的方法可以训练非常深的检测网络(VGG16 [20])比R-CNN [9]快9倍,比SPPnet [11]快3倍。在运行时,检测网络处理图像仅需0.3秒(不包括目标提议时间),同时在PASCAL VOC 2012 [7]上以66%的mAP(相对于R-CNN的62%)达到最高精度。1

Footnote 1: 所有计时均使用超频至875 MHz的Nvidia K40 GPU。

R-CNN和SPPnet

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

  1. 训练是一个多阶段流水线。R-CNN首先使用对数损失在目标提议上对卷积网络进行微调。然后,它将SVM拟合到卷积网络特征上。这些SVM充当目标检测器,取代了通过微调学习的softmax分类器。在第三阶段,学习边界框回归器。

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

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

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

SPPnet也有显著的缺点。像R-CNN一样,训练是一个多阶段流水线,涉及特征提取、使用对数损失对网络进行微调、训练SVM,最后拟合边界框回归器。特征也被写入磁盘。但与R-CNN不同,[11]中提出的微调算法无法更新空间金字塔池化层之前的卷积层。不出所料,这种限制(固定的卷积层)限制了非常深网络的准确性。

贡献

我们提出了一种新的训练算法,解决了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个值对一个类的精细化边界框位置进行编码。

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

RoI池化层

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

RoI最大池化通过将h×w RoI窗口划分为近似大小为h/H×w/W的H×W网格子窗口,然后将每个子窗口中的值最大池化到相应的输出网格单元中。池化独立应用于每个特征图通道,如在标准最大池化中。RoI层只是SPPnets [11]中使用的空间金字塔池化层的一个特例,其中只有一个金字塔级别。我们使用[11]中给出的池化子窗口计算。

从预训练网络初始化

我们实验了三个在ImageNet [4]上预训练的网络,每个网络有五个最大池化层和五个到十三个卷积层(参见第4.1节了解网络细节)。当一个预训练网络初始化一个Fast R-CNN网络时,它经历三次变换。

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

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

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

检测微调

使用反向传播训练所有网络权重是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是相关的。这种担忧在实践中似乎不是一个实际问题,我们使用比R-CNN更少的SGD迭代,取得了良好的结果,使用N=2和R=128。

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

多任务损失。一个Fast R-CNN网络有两个同级输出层。第一个输出在K+1个类别上的离散概率分布(每个RoI),p=(p0, ..., pK)。通常,p通过全连接层的K+1个输出上的softmax计算。第二个同级层输出边界框回归偏移,tk=(tkx, tky, tkw, tkh),对于每个K个目标类别,索引为k。我们使用[9]中给出的tk参数化,其中tk指定相对于目标提议的尺度不变平移和对数空间高度/宽度偏移。

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

其中Lcls(p,u)=-log pu是真实类别u的对数损失。

第二个任务损失Lloc,定义在真实边界框回归目标的元组u,v=(vx, vy, vw, vh)和预测元组tu=(tux, tuy, tuw, tuh)上,对于类别u。Iverson括号指示函数[u≥1]在u≥1时为1,否则为0。按照惯例,背景类标记为u=0。对于背景RoI,没有真实边界框的概念,因此Lloc被忽略。对于边界框回归,我们使用损失:

是一个稳健的L1损失,比R-CNN和SPPnet中使用的L2损失对异常值不那么敏感。当回归目标无界时,使用L2损失进行训练需要仔细调整学习率,以防止梯度爆炸。公式3消除了这种敏感性。

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

我们注意到[6]使用了一个相关的损失来训练一个类别无关的目标提议网络。与我们的方法不同,[6]主张使用两个网络系统来分离定位和分类。OverFeat [19]、R-CNN [9]和SPPnet [11]也训练分类器和边界框定位器,但这些方法使用阶段式训练,我们表明这对于Fast R-CNN来说是次优的(第5.1节)。

小批量采样。在微调期间,每个SGD小批量由N=2个图像构成,均匀随机选择(如通常的做法,我们实际上迭代数据集的排列)。我们使用大小为R=128的小批量,从每个图像采样64个RoI。如[9]中所述,我们从目标提议中选取25%的RoI,这些提议与真实边界框标签的IoU至少为0.5。这些RoI包含用前景目标类标记的示例,即u≥1。剩余的RoI从目标提议中采样,这些提议的最大IoU与真实值在区间[0.1, 0.5)内,如[11]中所述。这些是背景示例,标记为u=0。较低的阈值0.1似乎起到了硬示例挖掘的启发式作用[8]。在训练期间,图像以0.5的概率水平翻转。不使用其他数据增强方法。

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

设xi∈R为输入到RoI池化层的第i个激活输入,yrj为从第r个RoI的第j个输出。RoI池化层计算yrj=xi*(r,j),其中i*(r,j)=argmaxl∈R(r,j)xi。R(r,j)是输出单元yrj最大池化的子窗口中的输入的索引集。单个xi可以分配给几个不同的输出yrj。

RoI池化层的后向函数通过遵循argmax开关计算损失函数相对于每个输入变量xi的偏导数:

换句话说,对于每个小批量RoI r和每个池化输出单元yrj,如果i是yrj通过最大池化选择的argmax,则累积偏导数∂L/∂yrj。在反向传播中,偏导数∂L/∂yrj已经由RoI池化层顶部的层的后向函数计算。

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

尺度不变性

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

相比之下,多尺度方法通过图像金字塔向网络提供近似的尺度不变性。在测试时,图像金字塔用于近似缩放规范化每个目标提议。在多尺度训练期间,我们在每次图像采样时随机采样一个金字塔尺度,如[11]中所述,作为数据增强的一种形式。由于GPU内存限制,我们仅对较小的网络进行多尺度训练实验。

3 Fast R-CNN检测

一旦Fast R-CNN网络被微调,检测就相当于运行一个前向传递(假设目标提议是预先计算的)。网络将图像(或图像金字塔,编码为图像列表)和R个目标提议列表作为输入进行评分。在测试时,R通常在2000左右,尽管我们将考虑更大的情况(≈45k)。当使用图像金字塔时,每个RoI被分配到尺度,使得缩放后的RoI最接近2242像素的区域[11]。

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

截断SVD以加速检测

对于整个图像分类,计算全连接层的时间比卷积层的时间少。相反,对于检测,要处理的RoI数量很大,并且几乎一半的前向传递时间用于计算全连接层(参见图2)。通过截断SVD[23, 5]压缩大的全连接层可以很容易地加速。

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

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

4 主要结果

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

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

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

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

实验设置

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

VOC 2010和2012结果

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

Fast R-CNN在VOC12上以65.7%的mAP(以及68.4%的额外数据)取得了最佳结果。它也比其他方法快两个数量级,这些方法都基于“慢速”R-CNN流水线。在VOC10上,SegDeepM [25]的mAP高于Fast R-CNN(67.2% vs. 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。

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在训练时没有使用标记为“困难”的示例。删除这些示例将Fast R-CNN的mAP提高到68.1%。所有其他实验都使用“困难”示例。

训练和测试时间

快速训练和测试时间是我们的第二个主要结果。表4比较了Fast R-CNN、R-CNN和SPPnet在VOC07上的训练时间(小时)、测试速率(秒/图像)和mAP。对于VGG16,Fast R-CNN在不使用截断SVD的情况下处理图像比R-CNN快146倍,在使用截断SVD的情况下快213倍。训练时间减少了9倍,从84小时减少到9.5小时。与SPPnet相比,Fast R-CNN训练VGG16快2.7倍(9.5 vs. 25.5小时),不使用截断SVD测试快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可以在不进行额外微调的情况下,仅以0.3个百分点的mAP下降为代价,将检测时间减少超过30%。图2说明了使用VGG16的fc6层中前1024个奇异值和fc7层中前256个奇异值如何减少运行时间,同时mAP几乎没有损失。进一步的加速是可能的,但mAP会略有下降,如果再次压缩后进行微调。

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

哪些层需要微调?

对于SPPnet论文[11]中考虑的较浅网络,仅微调全连接层似乎足以获得良好的精度。我们假设这个结果不适用于非常深的网络。为了验证微调卷积层对于VGG16的重要性,我们使用Fast R-CNN进行微调,但冻结了十三个卷积层,以便只有全连接层学习。这种消融模拟了单尺度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及以上的层进行更新(9个卷积层中的6个)。这一观察是实用的:(1)从conv2_1更新比从conv3_1更新慢1.3倍(12.5 vs. 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数据集上进行了这些实验。

多任务训练有帮助吗?

多任务训练很方便,因为它避免了管理顺序训练任务的流水线。但它也有可能通过共享表示(卷积网络)来提高结果[2]。多任务训练能提高Fast R-CNN中的目标检测精度吗?

表6. 多任务训练(每组的第四列)比逐段训练(每组的第三列)提高了mAP

为了测试这个问题,我们训练了仅使用分类损失Lcls(即设置λ=0在公式1中)的基线网络。这些基线打印在表6中每个组的第一个列中。请注意,这些模型没有边界框回归器。接下来(每个组的第二列),我们获取使用多任务损失(公式1,λ=1)训练的网络,但在测试时禁用边界框回归。这隔离了网络的分类精度,并允许与基线网络进行苹果对苹果的比较。

在所有三个网络中,我们观察到多任务训练相对于单独的分类训练提高了纯分类精度。改进范围从+0.8到+1.1 mAP点,显示了多任务学习的一致积极效果。

最后,我们获取基线模型(仅使用分类损失训练),附加边界框回归层,并使用Lloc进行训练,同时保持所有其他网络参数冻结。每个组的第三列显示了这种分阶段训练方案的结果:mAP比第一列有所提高,但分阶段训练不如多任务训练(每个组的第四列)。

尺度不变性:蛮力还是技巧?

我们比较了两种实现尺度不变目标检测的策略:蛮力学习(单尺度)和图像金字塔(多尺度)。在任一情况下,我们将图像的尺度s定义为其最短边的长度。

所有单尺度实验使用s=600像素;对于一些图像,s可能小于600,因为我们限制图像的最长边为1000像素并保持图像的宽高比。这些值的选择使得VGG16在微调期间适合GPU内存。较小的模型不受内存限制,可以从较大的s值中受益;然而,优化每个模型的s不是我们的主要关注点。我们注意到,PASCAL图像的平均大小为384×473像素,因此单尺度设置通常将图像上采样1.6倍。因此,RoI池化层的平均有效步幅约为10像素。

在多尺度设置中,我们使用[11]中指定的相同五个尺度(s∈{480, 576, 688, 864, 1200})以便与SPPnet进行比较。然而,我们将最长边限制在2000像素,以避免超出GPU内存。

表7. 多尺度与单尺度对比。SPPnet ZF(类似于模型S)结果来自[11]。较大的网络使用单尺度提供了最佳的速度/精度权衡。(由于GPU内存限制,L无法在我们的实现中使用多尺度。)

表7显示了模型S和M在训练和测试时使用一个或五个尺度时的结果。也许[11]中最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的发现证实了他们的结果:深度卷积网络擅长直接学习尺度不变性。多尺度方法仅以计算时间为代价提供了很小的mAP增加(表7)。在VGG16(模型L)的情况下,由于实现细节的限制,我们只能使用单尺度。然而,它实现了66.9%的mAP,略高于R-CNN报告的66.0%,尽管R-CNN在“无限”尺度的情况下,每个提议都被扭曲到规范大小。

由于单尺度处理提供了速度和精度之间的最佳权衡,特别是对于非常深的模型,本节之外的所有实验都使用单尺度训练和测试,s=600像素。

我们需要更多训练数据吗?

当提供更多的训练数据时,一个好的目标检测器应该会提高性能。Zhu等人[24]发现DPM [8]的mAP在仅提供几百到几千个训练示例后就会饱和。在这里,我们通过将VOC07 trainval集与VOC12 trainval集结合起来,将图像数量增加到16.5k,来评估Fast R-CNN。训练集的扩大将VOC07测试的mAP从66.9%提高到70.0%(表1)。当对这个数据集进行训练时,我们使用60k小批量迭代而不是40k。

我们对VOC10和2012进行了类似的实验,构建了一个包含VOC07 trainval、test和VOC12 trainval的21.5k图像数据集。当对这个数据集进行训练时,我们使用100k SGD迭代,并将学习率每40k次迭代降低0.1倍(而不是每30k次)。对于VOC10和2012,mAP分别从66.1%提高到68.8%,从65.7%提高到68.4%。

SVM的表现是否优于softmax?

Fast R-CNN在微调期间使用softmax分类器(它在R-CNN和SPPnet中被训练为one-vs-rest线性SVM),而不是训练one-vs-rest线性SVM。为了理解这种选择的影响,我们在Fast R-CNN中实现了带难负样本挖掘的SVM训练。我们使用与R-CNN中相同的训练算法和超参数。

表8显示,对于所有三个网络,softmax略微优于SVM,分别为+0.1到+0.8 mAP点。这种影响很小,但表明与之前的多阶段训练方法相比,“一次性”微调就足够了。我们注意到,softmax不像one-vs-rest SVM那样在评分RoI时引入类之间的竞争。

更多的提议总是更好吗?

存在(广义上)两种类型的目标检测器:使用稀疏集合目标提议(例如,选择性搜索[21])和使用密集集合(例如,DPM [8])。分类稀疏提议是一种级联[22],其中提议机制首先拒绝大量候选者,留下一小部分供分类器评估。当应用于DPM检测时,这种级联提高了检测精度[21]。我们发现证据表明提议-分类器级联也提高了Fast R-CNN的精度。

图3. VOC07测试中不同提议方案的mAP和AR

使用选择性搜索的质量模式,我们从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%(蓝色圆圈)。

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中变得实用。当然,可能存在尚未发现的技术,使密集框的表现与稀疏提议一样好。如果开发出这样的方法,可能有助于进一步加速目标检测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值