【论文翻译】Fast R-CNN

《Fast R-CNN》

发表会议: CVPR 2015

Ross Girshick

Microsoft Research

Abstract:

本文提出了一种基于区域卷积的快速目标检测方法(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. Introduction:

近年来,deep ConvNets[14,16]显著提高了图像分类[14]和目标检测的准确性[9,19]。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,目前的方法(如[9,11,19,25])在多阶段管道中训练模型是缓慢且不优雅的。

复杂性的增加是因为检测需要精确定位对象,这带来了两个主要的挑战。首先,必须处理大量候选对象位置(通常称为“提案”)。其次,这些候选项只提供了必须进行细化才能实现精确定位的粗略定位。这些问题的解决方案常常会牺牲速度、准确性或简单性。

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

该方法可以训练出比R-CNN[9]快9倍、比SPPnet[11]快3倍的非常深的探测网络(VGG16[20])。在运行时,检测网络处理图像的时间为0.3秒(不包括对象建议时间),同时在PASCAL VOC 2012[7]上获得66%的最高精度(R-CNN为62%)

1.1. R-CNN and SPPnet:

基于区域的卷积网络方法(RCNN)[9]通过使用深度卷积网络对目标建议进行分类,获得了良好的目标检测精度。然而,R-CNN也有明显的缺点:

1. 培训是一个多阶段的过程。R-CNN首先使用日志丢失的方法对对象建议进行了修正。然后,将SVMs与ConvNet特性相结合。这些支持向量机充当对象检测器,代替了通过微调学习到的softmax分类器。在第三个训练阶段,学习了边界盒回归量。

2. 培训在空间和时间上都是昂贵的。在支持向量机和边界盒回归器训练中,从每张图像中的每个对象建议中提取特征并写入磁盘。对于深度网络,例如VGG16,这个过程需要2.5 gb的时间来处理VOC07 trainval集的5k图像。这些特性需要几百gb的存储空间。

3. 对象检测很慢。在测试时,从每个测试图像中的每个对象建议中提取特征。使用VGG16进行检测需要47s /图像(在GPU上)。

R-CNN很慢,因为它对每个对象建议执行一个前向传递,而不共享计算。空间金字塔汇聚网络(SPPnets)[11]被提出来通过共享计算来加速R-CNN。SPPnet方法为整个输入图像计算卷积特征图,然后使用从共享特征图中提取的特征向量对每个对象建议进行分类。通过将提案内的feature map的一部分maxpooling到一个固定大小的输出(如6×6)中,提取出提案的特征,将多个输出大小进行池化,然后如spatial pyramid pooling[15]中那样串联起来。SPPnet在测试时将R-CNN加速10到100倍。由于更快的提案特征提取,训练时间也减少了3倍。

所有的时间使用一个Nvidia K40 GPU超频到875 MHz。

SPPnet也有明显的缺点。与R-CNN一样,训练是一个多阶段的过程,包括提取特征、用日志损失对网络进行微调、训练支持向量机,最后再拟合边界盒回归量。特性也被写入磁盘。但与R-CNN不同,[11]中提出的微调算法不能更新空间金字塔池之前的卷积层。不足为奇的是,这种限制(固定的卷积层)限制了深度网络的准确性。

1.2. Contributions:

我们提出了一种新的训练算法,修正了R-CNN和SPPnet的缺点,同时提高了它们的速度和准确性。我们称这种方法为快速R-CNN,因为它的训练和测试相对较快。快速RCNN方法有以下几个优点:

1. 检测质量(mAP)高于R-CNN, SPPnet

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

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

4. 特性缓存不需要磁盘存储

Fast R-CNN是用Python和c++ (Caffe[13])编写的,并在MIT的开源许可下提供https://github.com/rbgirshick/fast-rcnn

2. Fast R-CNN architecture and training:

图1为快速R-CNN结构示意图。一个快速的R-CNN网络以整个图像和一组对象建议作为输入。该网络首先利用几个卷积(conv)和最大池化层对整个图像进行处理,生成一个conv特征图。然后,针对每个对象建议,一个感兴趣区域(RoI)池层从特征映射中提取一个固定长度的特征向量。每个特征向量送入一个序列的完全连接(fc)层,最后分支成两个兄弟输出层:一个生产softmax概率估计/ K对象类+全方位“背景”类和另一个层,输出四个实值编号为K的每个对象类。每一组4个值为K类中的一个类编码精确的边界框位置。

2.1. The RoI pooling layer:

RoI pooling层使用max pooling将任何有效的感兴趣区域内的特征转化为H×W(如7×7)固定空间范围内的小feature map,其中H和W是独立于任何特定RoI的layer hyper-parameters。在本文中,感兴趣区域是一个矩形窗口到一个conv特征映射。每个RoI由一个四元组(r, c, h, w)定义,该四元组指定其左上角(r, c)及其高度和宽度(h, w)。

【论文翻译】Fast R-CNN

图1所示。快R-CNN架构。一个输入图像和多个感兴趣区域(RoIs)被输入到一个全卷积网络中。每个RoI被合并到一个固定大小的特征映射中,然后通过全连接层(FCs)映射到一个特征向量。该网络在每个RoI上有两个输出向量:softmax概率和每个类的边界盒回归偏移量。该体系结构经过端到端训练,具有多任务丢失。

RoI max pooling的工作原理是将h×w RoI窗口分割成h×w个大小相近的子窗口组成的h×w网格,然后将每个子窗口的值max-pooling到相应的输出网格中。池独立地应用于每个feature map通道,就像标准的max池一样。RoI层只是SPPnets[11]中使用的空间金字塔池层的特例,其中只有一个金字塔层。我们使用在[11]中给出的池化子窗口计算。

2.2. Initializing from pre-trained networks:

我们用3个预先训练好的ImageNet[4]网络进行实验,每个网络有5个最大池化层和5到13个conv层(网络细节见4.1节)。当一个预先训练好的网络初始化一个快速的R-CNN网络时,它要经历三个转换。

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

其次,将网络的最后一个全连接层和softmax(为1000路ImageNet分类进行了训练)替换为前面描述的两个兄弟层(一个全连接层和softmax / K + 1类别和类别特定的边界盒回归器)。

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

2.3. Fine-tuning for detection:

利用反向传播训练所有网络权值是快速R-CNN的重要能力。首先,让我们来说明为什么SPPnet不能更新空间金字塔池层以下的权重。

根本原因在于,当每个训练样本(即RoI)来自不同的图像时,SPP层的反向传播效率非常低,这正是R-CNN和SPPnet网络训练的方式。这种低效率源于这样一个事实,即每个RoI可能有一个非常大的接受域,通常跨越整个输入图像。因为前传必须处理整个接受域,所以训练输入很大(通常是整个图像)。

提出了一种基于特征共享的高效训练方法。在快速RCNN训练中,随机梯度下降法(SGD)的小批量采样是分层次的,先对N幅图像进行采样,然后对每幅图像的R/N roi进行采样。关键的是,相同图像的roi在向前和向后传递中共享计算和内存。使N变小减少了小批量计算。例如,当使用N = 2和R = 128时,所提出的训练方案比从128个不同图像(即, R-CNN和SPPnet战略)。

这种策略的一个问题是它可能会导致缓慢的训练收敛,因为来自相同图像的roi是相关的。这种关注似乎不是一个实际问题,我们使用比R- cnn更少的SGD迭代来实现N = 2和R = 128的良好结果。

除了分层采样外,Fast R-CNN采用了一种精简的训练过程,该过程有一个微调阶段,联合优化了一个softmax分类器和限制盒回归器,而不是在三个独立的阶段中训练一个softmax分类器、支持向量机和回归器[9,11]。这个过程的组成部分(损失,小批量采样策略,通过RoI池层的反向传播,以及SGD超参数)描述如下。

多任务的损失。一个快速的R-CNN网络有两个兄弟输出层。第一个输出一个离散的概率分布(每RoI), p = (p0,…, pK),除以K + 1个类别。通常,p是由一个软最大值除以一个全连接层的K+1输出来计算的。第二个兄弟层输出限定框回归补偿,tk = ? tk x, y tk, tk w, tk h ?,为每个K对象类,被K。我们使用参数化在[9]tkgiven tkspecifies尺度不变的翻译和日志空间高度/宽度变化相对于一个对象的建议。

每个训练RoI都用一个ground-truth class u和一个ground-truth bounting -box regression target v标记。我们在每个标记的RoI上使用一个多任务损失L来联合训练分类和bounting -box regression:

【论文翻译】Fast R-CNN

其中Lcls(p, u) = - logpuis log损耗为真正的u类。

Lloc,第二个任务损失是定义在一个元组真正的限定框回归目标类u, v = (vx, v,大众,vh),和一个预测元组你=(你x,你y,你w,涂h),再次为类u。艾弗森支架指标函数(u≥1)等于1时,u≥1和0。按照惯例,所有的后台类都被标记为u = 0。对于背景roi,没有ground-truth边界框的概念,因此忽略了Llocis。对于边界盒回归,我们使用损失

【论文翻译】Fast R-CNN

在这

【论文翻译】Fast R-CNN

与R-CNN和SPPnet中使用的l2损耗相比,l1损耗对异常值的敏感性较低。当回归目标是无界的,使用L2loss进行训练可能需要仔细地调整学习率,以防止梯度爆炸。方程3消除了这种敏感性。

在情商的hyper-parameterλ。1控制两个任务损失之间的平衡。将均值和单位方差均为零的地面真值回归目标进行归一化处理。所有的实验都使用λ= 1。

我们注意到[6]使用一个相关的损失来训练一个与类无关的对象建议网络。与我们的方法不同,[6]提倡使用双网络系统来区分本地化和分类。OverFeat[19]、R-CNN[9]和SPPnet[11]也可以训练分类器和限定框定位器,但是这些方法使用的是分段训练,我们在快速R-CNN中展示了它的次优性(5.1节)。

Mini-batch抽样。在调优期间,每个SGD迷你批是由N = 2张图像构建的,这些图像都是随机选择的(通常的做法是,我们实际上遍历数据集的排列)。我们使用大小为R = 128的小批量,从每张图像中采样64个roi。就像在[9]中一样,我们从对象建议中获取25%的roi,这些对象建议的交集超过union (IoU),并且与至少0.5的groundtruth边界框重叠。这些roi包括用前景对象类标记的示例,即u≥1。剩下的roi是从对象提案中采样的,这些提案的最大IoU与ground truth的间隔[0.1,0.5]在[11]之后。这些是背景示例,并使用u = 0进行标记。较低的阈值0.1似乎是挖掘[8]的一个启发式实例。在训练过程中,图像水平翻转的概率为0.5。没有使用其他数据扩充。

通过RoI池层进行反向传播。反向传播通过RoI池层传递导数。为了清晰起见,我们假设每个小批处理只有一个图像(N = 1),尽管扩展到N > 1很简单,因为前向传递独立地处理所有图像。令xi∈R为RoI池层的第i个**输入,令yrjbe为第R个RoI的第j个输出。RoI池层计算yrj= xi (r,j),其中i (r,j) = arg马克西0∈r (r,j)xi0。R(R, j)是输出单元yrjmax所在的子窗口中输入的索引集。单个ximay被分配给几个不同的输出yrj。

RoI池层的backwardsfunction根据argmax开关计算损失函数对每个输入变量xiby的偏导数:

【论文翻译】Fast R-CNN

换句话说,对于每个小批量RoI r和每个池化输出单元yrj,如果i是yrjby max池化选择的argmax,那么就积累了∂L/∂yrjis。在反向传播中,∂L/∂yrj已经由RoI池层上的那层的向后函数计算出来了。

SGD hyper-parameters。用于softmax分类和bounding-box回归的全连通层分别由0 -均值分布和标准差0.01和0.001初始化。偏差初始化为0。所有层的权值使用1的每层学习速率,偏差使用2的每层学习速率,全局学习速率为0.001。在VOC07或VOC12训练中,我们运行SGD进行30k的小批量迭代,然后将学习率降低到0.0001,再进行10k的迭代训练。当我们在更大的数据集上训练时,我们运行SGD进行更多的迭代,如后面所述。使用0.9的动量和0.0005的参数衰减(关于权重和偏差)。

2.4. Scale invariance:

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

相比之下,多尺度方法通过图像金字塔为网络提供近似的尺度不变性。在测试时,使用图像金字塔对每个对象建议进行近似尺度规格化。在多尺度训练中,我们每次随机抽取一个金字塔尺度的图像,跟随[11],作为数据扩充的一种形式。由于GPU内存的限制,我们只对较小的网络进行多尺度训练。

3. Fast R-CNN detection:

一旦一个快速的R-CNN网络被微调,检测就相当于运行一个向前传递(假设对象建议是预先计算好的)。该网络以图像(或图像金字塔,编码为图像列表)和R对象建议列表作为输入进行评分。在测试时,R通常在2000左右,但是我们将考虑R更大的情况(≈45k)。当使用一个图像金字塔时,每个RoI被分配到比例,使比例的RoI在区域[11]中最接近2242px。

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

3.1. Truncated SVD for faster detection:

对于全图像分类,与conv层相比,计算全连通层所花费的时间较少。相反,在检测时,需要处理的roi数量较大,计算全连通层的时间占前向通过时间的近一半(见图2)。利用截断的SVD对大的全连通层进行压缩,很容易加速大的全连通层[5,23]。

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

【论文翻译】Fast R-CNN

使用圣言。在这种分解,你是一个U×t矩阵组成第t左奇异向量W,Σtis包含前t t×t对角矩阵奇异值的W和V V×t矩阵组成第t right-singular向量W .截断奇异值分解降低了参数计数从紫外线到t (U + V),可以显著如果t比最小值小得多(U, V)压缩一个网络,单一的完全连接层对应于W是两个完全连接层所取代,它们之间没有非线性关系。第一层使用重量矩阵ΣtVT(和没有偏见),第二个使用U(与原来的偏见与W)。这个简单的压缩方法给好的加速效果当roi的数量很大。

4. Main results:

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

1. 最新的VOC07, 2010和2012地图

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

3. 微调的conv层在VGG16改进地图

4.1. Experimental setup:

我们的实验使用了三种可以在线获得的预先训练过的ImageNet模型。第一个是来自R-CNN[9]的CaffeNet(本质上是alexnet[14])。我们或者参考以这款咖啡为S型,为“小”。第二个网络是来自[3]的VGG CNN M 1024,它的深度和S一样,但是更宽。我们称这个网络模型为M,意思是“媒介”。“最终的网络是来自[20]的非常深入的VGG16模型。由于这个模型是最大的,我们称之为模型l。在本节中,所有的实验都使用单标度的训练和测试(s = 600;详见5.2节)。

【论文翻译】Fast R-CNN

表1。VOC 2007测试检测平均精度(%)。所有方法都使用VGG16。训练集重点:07:VOC07训练集,07 \ diff: 07没有“困难”的例子,07+12:07与VOC12训练集的结合。†SPPnet结果由[11]的作者编写。

【论文翻译】Fast R-CNN

表2。VOC 2010测试检测平均精度(%)。宝宝学习使用基于[17]的网络。所有其他方法都使用VGG16。训练集键:12:VOC12训练,道具。:专有数据集,12+seg: 12 with segmentation annotations, 07++12: VOC07 trainval的union, VOC07 test, and VOC12 trainval。

【论文翻译】Fast R-CNN

表3。VOC 2012测试检测平均精度(%)。BabyLearning和NUS NIN c2000使用基于[17]的网络。所有其他方法都使用VGG16。训练集键:见表2,Unk。:未知。

4.2. VOC 2010 and 2012 results:

在这些数据集上,我们将Fast R-CNN(简称FRCN)与来自公共排行榜(表2、表3)的comp4(外部数据)轨道上的顶级方法进行比较。3关于新加坡国立大学的c2000和幼儿学习方法,目前没有相关的出版物,我们也无法找到关于使用的ConvNet架构的确切信息;它们是网络中的网络设计[17]的变体。所有其他方法都是从相同的预先训练好的VGG16网络初始化的。

Fast R-CNN以65.7%的mAP(和68.4%的额外数据)在VOC12上获得了最好的结果。它也比其他方法快两个数量级,这些方法都是基于“慢”R-CNN管道。VOC10,SegDeepM[25]实现了比Fast R-CNN更高的mAP (67.2% vs. 66.1%)。SegDeepM在VOC12 trainval上训练,加上分割注释;为了提高R-CNN的准确性,采用马尔科夫随机场对O2P[1]语义分割方法中R-CNN的检测和分割进行推理。快速R-CNN可以替换成SegDeepM来代替R-CNN,这可能会带来更好的结果。当使用扩大的07++12训练集(见表2说明)时,Fast R-CNN的mAP增加到68.8%,超过了SegDeepM。

4.3. VOC 2007 results:

在VOC07中,我们将Fast R-CNN与R-CNN和SPPnet进行比较。所有的方法都是从同一个预先训练好的VGG16网络开始,并使用了边界盒回归。VGG16 SPPnet结果是由[11]的作者计算的。SPPnet在培训和测试期间使用五种量表。与SPPnet相比,Fast R-CNN的改进表明,即使Fast R-CNN使用单尺度的训练和测试,微调conv层在mAP上提供了很大的改进(从63.1%到66.9%)。R-CNN实现了66.0%的地图。作为次要的一点,SPPnet在训练中没有使用PASCAL标记为“困难”的示例。删除这些例子改善快速R-CNN地图到68.1%。所有其他的实验都使用“困难”的例子。

4.4. Training and testing time:

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

【论文翻译】Fast R-CNN

表4。快速RCNN、R-CNN和SPPnet中相同模型的运行时比较。快速R-CNN采用单标度模式。SPPnet使用[11]中指定的五种刻度。†时间由作者提供的[11]。时间是在Nvidia K40 GPU上测量的。

截断奇异值分解。截断的SVD可以减少30%以上的检测时间,而mAP的下降幅度很小(0.3个百分点),并且不需要在模型压缩后执行额外的微调。图2展示了如何在VGG16的fc6层中使用25088×4096矩阵的前1024个奇异值,以及在mAP中使用4096×4096 fc7层的前256个奇异值来减少运行时的损失。进一步的加速是可能的,如果在压缩后对mAP进行微调,则可以使用更小的下降。

【论文翻译】Fast R-CNN

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

4.5. Which layers to fine-tune?:

对于SPPnet论文[11]中考虑的深度较低的网络,仅对全连接层进行微调似乎就足以获得良好的精度。我们假设这一结果不适用于非常深的网络。为了验证对conv层的调优对于VGG16是重要的,我们使用快速R-CNN进行调优,但是冻结13个conv层,这样只有完全连接的层才能学习。该消融模拟了单尺度SPPnet训练,mAP从66.9%降至61.4%(表5)。本实验验证了我们的假设:通过汇聚层进行训练对于非常深的网非常重要。

【论文翻译】Fast R-CNN

表5所示。限制VGG16微调哪些层的效果。微调≥fc6仿真SPPnet训练算法[11],但使用单一规模。SPPnet L的结果是在显著的(7×)速度代价下,使用5个量表得到的。

这是否意味着所有的conv层都应该进行微调?简而言之,没有。在较小的网络(S和M)中,我们发现conv1是通用的,并且与任务无关(一个众所周知的事实[14])。不管是否允许conv1学习,都不会对mAP产生有意义的影响。对于VGG16,我们发现只需要从conv3 1升级层(13个conv层中的9个)。这一观察结果是务实的:(1)与从conv3 1学习相比,从conv2 1更新将使训练速度降低1.3×(12.5 vs. 9.5小时);(2)从conv1升级会导致GPU内存溢出。从conv2 1 up学习时,mAP的差异仅为+0.3个点(表5,最后一列)。所有的快速R-CNN结果在本文中使用VGG16微调层conv31和以上;所有的实验与模型S和M微调层凸2和以上。

5. Design evaluation:

我们进行了实验,以了解RCNN与R-CNN和SPPnet相比有多快,并评估设计决策。根据最佳实践,我们在PASCAL VOC07数据集上执行了这些实验。

5.1. Does multi-task training help?:

多任务训练很方便,因为它避免了管理一个连续训练任务的管道。但它也有改善结果的潜力,因为任务通过共享表示(ConvNet)[2]相互影响。多任务训练能否提高快速R-CNN中目标检测的准确性?

为了测试这个问题,我们训练基线网络,它只使用Eq. 1中的分类损失Lcls。,设置λ= 0)。这些基线打印模型S, M, L在每一组的第一列在表6所示。注意,这些模型没有限制盒回归量。(每组第二列),我们把网络与多任务都是经过训练的损失(Eq。1λ= 1),但我们在测试时间回归边界框(禁用大小)。这隔离了网络的分类精度,并允许与基线网络进行比较。

【论文翻译】Fast R-CNN

表6所示。多任务训练(每组第四列)改进了分段训练(每组第三列)的映射。

在这三个网络中,我们观察到多任务训练相对于单独的分类训练提高了纯分类的准确性。改进范围为+0.8 ~ +1.1映射点,表明多任务学习的效果是一致的。

最后,我们使用基线模型(仅使用分类损失进行训练),对边界盒回归层进行定位,并使用llocwith对它们进行训练,同时保持所有其他网络参数不变。每个组的第三列显示了这个阶段训练方案的结果:mAP比第一列有所改进,但是阶段训练不如多任务训练(每组第四列)。

5.2. Scale invariance: to brute force or finesse?:

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

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

在多尺度设置中,我们使用11中指定的相同的五个尺度,以便与SPPnet进行比较。然而,我们将最长的边限制在2000像素,以避免超过GPU内存。

表7显示了使用一个或五个量表进行训练和测试时的模型S和模型M。也许[11]中最令人惊讶的结果是,单尺度检测的性能几乎与多尺度检测一样好。我们的研究结果完全证实了它们的结果:深层卷积神经网络善于直接学习尺度不变性。多比例尺方法在mAP上只提供了一个小的增加,而在计算时间上花费了大量的时间(表7)。尽管R-CNN使用了“无限”尺度,即每个提案都被扭曲为一个标准尺寸,但Y et它获得了66.9%的地图,略高于R-CNN[10]报道的66.0%。

【论文翻译】Fast R-CNN

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

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

5.3. Do we need more training data?:

当提供更多的训练数据时,一个好的对象检测器应该得到改进。Zhu等人[24]发现,DPM[8]映射仅在几百到1000个训练样本后就饱和了。在这里,我们将VOC07训练集与VOC12训练集进行扩充,将图像的数量增加两倍至16.5k,以评估快速R-CNN。扩大训练集可以将VOC07测试的mAP从66.9%提高到70.0%(表1)。在这个数据集上进行训练时,我们使用60k的小批量迭代,而不是40k。

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

5.4. Do SVMs outperform softmax?:

Fast R-CNN使用在微调过程中学习的softmax分类器,而不是像R-CNN和SPPnet那样在事后训练one-vs-rest线性支持向量机。为了了解这种选择的影响,我们在Fast R-CNN中实现了支持向量机的硬负挖掘后自适应训练。我们使用与R-CNN相同的训练算法和超参数。

【论文翻译】Fast R-CNN

表8所示。快速R-CNN与softmax vs. SVM (VOC07地图)。

表8显示,softmax在所有三个网络上的表现略优于SVM,分别为+0.1到+0.8个映射点。这种效果很小,但它证明了与以前的多阶段训练方法相比,“一次性”的微调已经足够了。我们注意到,与one-vs-rest支持向量机不同,softmax在引入scoringaroi时引入了类间的竞争。

5.5. Are more proposals always better?:

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

使用选择性搜索的质量模式,我们扫描从1k到10k的建议每幅图像,每次重新训练和重新测试模型m。如果建议服务于一个纯粹的计算角色,增加建议每幅图像的数量不应该损害地图

【论文翻译】Fast R-CNN

图3。VOC07测试地图和AR用于各种提案方案。

我们发现,随着提案数量的增加,mAP会有轻微的上升和下降(图3,实心蓝线)。这个实验表明,用更多的建议来淹没深度分类器并没有帮助,甚至会轻微地损害准确性

没有实际的实验,这个结果很难预测。衡量对象提案质量的最新技术是平均召回率(AR)[12]。AR与使用R-CNN的几种提案方法的mAP很好地相关,当使用每个图像的提案数量固定时。从图3可以看出,AR(实心红线)与mAP的相关性不是很好,因为每幅图像的建议数是不同的。AR必须谨慎使用;更高的AR由于更多的建议并不意味着地图将增加。幸运的是,使用model M进行培训和测试只需要不到2.5小时。因此,Fast R-CNN能够高效、直接地评估对象建议映射,这比代理度量更可取

我们还研究了快速R-CNN,当使用密集生成的框(超过规模,位置和长宽比)时,以大约45k框/图像的速率。这个稠密集足够丰富,当每个选择搜索框被其最近的(IoU中的)稠密框替换时,mAP只下降1点(图3中的蓝色三角形为57.7%)。

密集搜索框的统计数据与选择性搜索框的统计数据不同。我们从2k个选择搜索框开始,随机加入1000×{2,4,6,8,10,32,45}的稠密框作为样本,对mAP进行测试。对于每一个实验,我们都对模型m进行了再训练和再测试。当这些密集的盒子被加入时,mAP的下降比加入更多的选择性搜索盒子时更强烈,最终达到53.0%。

我们也训练和测试快速R-CNN只使用密集的盒子(45k /图片)。这个设置产生52.9%的地图(蓝钻)。最后,我们检验了是否需要带硬负向挖掘的支持向量机来处理稠密的箱形分布。支持向量机的情况更糟:49.3%(蓝色圆圈)。

5.6. Preliminary MS COCO results:

我们将Fast R-CNN(使用VGG16)应用于MS COCO数据集[18],以建立一个初步的基线。我们在240k迭代的80k图像训练集上进行训练,并使用评估服务器在“test-dev”集上进行评估。帕斯卡尔式地图为35.9%;新的COCO-style AP的平均值也超过了IoU的阈值,为19.7%。

6. Conclusion:

本文提出快速R-CNN,对R-CNN和SPPnet进行一个干净、快速的更新。除了报告最新的检测结果,我们还提供了详细的实验,希望能提供新的见解。特别值得注意的是,稀疏对象建议似乎可以提高检测器的质量。这个问题在过去花费太大(在时间上)而无法探测,但在Fast R-CNN中变得实用起来。当然,可能存在一些尚未发现的技术,这些技术允许密集的框执行稀疏的建议。如果开发出这样的方法,将有助于进一步加速目标检测。

确认。我感谢何开明、Larry Zitnick和Piotr Dollar的有益讨论和鼓励。