1、摘要
提出了一种基于区域卷积网络的快速目标检测方法(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快三倍,测试速度快10倍,精度更高。
2、简介
近年来,深卷积神经网络显著提高了图像分类和目标检测精度。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,目前的方法在多阶段流程中训练模型速度慢且不优雅。复杂性的出现是因为检测需要精确定位目标,这带来了两个主要的挑战。首先,必须处理许多候选目标位置(通常称为“建议框”)。其次,这些候选项只提供了必须进行细化才能实现精确本地化的粗略本地化。这些问题的解决方案常常会牺牲速度、准确性或简单性。在本文中,我们简化了最先进的基于卷积神经网络的目标探测器的训练过程。我们提出了一种单阶段训练算法,该算法可以联合学习对目标建议进行分类,并对其空间位置进行细化。该方法可以训练出比R-CNN快9倍、比SPPnet快3倍的深度检测网络。在运行时,检测网络处理图像的时间为0.3秒(不包括目标建议时间),而在PASCAL VOC 2012上实现了66%的最高精度(R-CNN为62%)。
2.1、R-CNN and SPPnet
基于区域的卷积网络方法(R-CNN)通过使用深度卷积网络对目标方案进行分类,获得了良好的目标检测精度。然而,R-CNN有明显的缺点:
- 训练是一个多阶段的过程。R-CNN首先对使用对数损失的目标建议进行微调。然后,将SVMs与ConvNet特性相结合。这些支持向量机作为目标检测器,代替了通过微调学习到的softmax分类器。在第三个训练阶段,学习了边界盒回归器。
- 训练在空间和时间上都是昂贵的。在支持向量机和边界盒回归器训练中,从每幅图像中的每一个目标建议中提取特征并写入磁盘。对于非常深的网络,比如VGG16, VOC07 trainval集的5k张图片需要2.5个gpu天的处理时间。这些功能需要几百Gb的存储空间。
- 目标检测很慢。在测试时,从每个测试图像中的每个目标建议中提取特征。使用VGG16进行检测需要47s(在GPU上)。
R-CNN速度很慢,因为它对每个目标建议执行ConvNet转发,而不共享计算。为了提高R-CNN的计算速度,提出了空间金字塔池化网络(SPPnets)。SPPnet方法为整个输入图像计算卷积特征图,然后使用从共享特征图中提取的特征向量对每个对象建议进行分类。通过将建议内feature map的部分最大池化为固定大小的输出(如6×6)来提取建议的特征,将多个输出大小池化,然后像空间金字塔池一样串联起来。SPPnet在测试时将R-CNN加速10到100倍。训练时间也减少了3倍,因为更快的提案特征提取。SPPnet也有明显的缺点。与R-CNN一样,训练是一个多阶段的流程,包括提取特征、对具有对数损失的网络进行微调、训练支持向量机,最后再拟合边界盒回归器。特性也被写入磁盘。但与R-CNN不同,SPPNet中提出的微调算法不能更新空间金字塔池之前的卷积层。不足为奇的是,这种限制(固定卷积层)限制了非常深的网络的准确性。
2.2. 贡献
针对R-CNN和SPPnet的缺点,提出了一种新的训练算法,提高了它们的速度和精度。我们称这种方法为Fast R-CNN,因为它训练和测试相对较快。Fast R-CNN方法有几个优点:
1. 检测质量(mAP)高于R-CNN, SPPnet
2.训练是单阶段的,使用多任务丢失
3.训练可以更新所有网络层
4. 特性缓存不需要磁盘存储
3、Fast R-CNN的结构和训练
图1展示了Fast R-CNN架构。一个Fast R-CNN网络将整个图像和一组目标建议作为输入。网络首先使用几个卷积(conv)和最大池化层处理整个图像,生成一个conv特征图。然后,对于每个目标建议,一个感兴趣区域(RoI)池层从特征映射中提取一个固定长度的特征向量。每个特征向量被输入到一个完全连接的(fc)层序列中,该序列最终分支为两个同级输出层:一个生成K个目标类的softmax概率估计,另一个层为每个K个对象类输出4个实值数字。每组4个值为其中一个类编码精炼的边界框位置。
3.1、RoI池化层
RoI池层使用max池将任何有效感兴趣区域内的特征转换为具有固定的H×W空间范围的小feature map(如7×7),其中H和W是独立于任何特定RoI的层超参数。在本文中,RoI是一个矩形窗口到一个conv特征映射。每个RoI由一个四元组(r, c, h,w)定义,该四元组指定其左上角(r, c)及其高度和宽度(h,w)。
RoI最大池化的工作原理是将h×w RoI窗口划分为h×w个大小近似的子窗口组成的h×w网格,然后将每个子窗口的值max-pooling到相应的输出网格单元中。池独立应用于每个feature map通道,就像标准的max池一样。RoI层只是sppnet中使用的空间金字塔池层的特殊情况,其中只有一个金字塔级别。我们使用在SPPNet中给出的池化子窗口计算。
3.2、从预训练的网络初始化
我们用三个预先训练过的ImageNet网络进行实验,每个网络都有5个最大池层和5到13个conv层。当一个预先训练好的网络初始化一个Fast R-CNN网络时,它会经历三个转换。首先,将最后一个最大池层替换为RoI池层,通过将H和W设置为与网络的第一个完全连接的层兼容来配置RoI池层。其次,将网络的最后一个全连接层和softmax(它们是为1000路ImageNet分类而训练的)替换为前面描述的两个同级层(K 1类别上的一个全连接层和softmax以及特定于类别的边界框回归器)。第三,将网络修改为接受两个数据输入:图像列表和这些图像中的roi列表。
其根本原因是,当每个训练样本(即RoI)来自不同的图像时,SPP层的反向传播效率非常低,这正是R-CNN和SPPnet网络训练的方式。效率低下的原因在于,每个RoI可能有一个非常大的接受域,通常覆盖整个输入图像。由于前传必须处理整个接受域,所以训练输入很大(通常是整个图像)。提出了一种利用训练过程中特征共享的高效训练方法。在Fast R- CNN训练中,小批量随机梯度下降(SGD)是分层采样的,先对N幅图像进行采样,然后对每幅图像的R/N roi进行采样。关键是,RoIs从相同的图像共享计算和内存在前进和后退通过。使N小减少了小批量计算。例如,当使用N = 2和R = 128时,所提出的训练方案比从128幅不同的图像(即, R-CNN和SPPNet)。这种策略的一个问题是,由于来自同一图像的roi是相关的,因此可能会导致训练收敛较慢。这种关注似乎不是一个实际的问题,我们使用比R- cnn更少的SGD迭代来实现N = 2和R = 128的良好结果。除了分层采样,Fast R-CNN使用了一个精简的训练过程,一个微调阶段,联合优化一个softmax分类器和限制框回归器,而不是在三个独立的阶段训练一个softmax分类器、支持向量机和回归器。这个过程的组成部分(损失、小批量抽样策略、通过RoI池层的反向传播和SGD超参数)描述如下。
3.3、对检测进行fine-tune
多任务损失:一个Fast R-CNN网络有两个兄弟输出层。第一首先在在K 1类上输出一个离散的分布p=left(p_{0}, ldots, p_{K}right) 。通常p是在K 1的全连接层的输出上计算一个softmax函数。第二兄弟层输出边界盒回归偏移量,对K个目标类中的每一个类计算t^{k}=left(t_{x}^{k}, t_{y}^{k}, t_{w}^{k}, t_{h}^{k}right) ,其中k为指示数。我们使用SPPNet中给出的t^k 参数化,其中t^k 指定了一个尺度不变的平移和相对于目标建议的对数空间高度/宽度偏移。
每个训练RoI都有一个ground-truth类u和一个ground-truth包围框回归v。我们在每个标记RoI上使用一个多任务损失L,共同训练分类和边界框回归:
Lleft(p, u, t^{u}, vright)=L_{c l s}(p, u) lambda[u geq 1] L_{text {loc }}left(t^{u}, vright)
L_{c l s}(p, u)=-log p_{u}
是真实类u的对数损失。
第二个任务丢失L_{loc} 是在类的一个真正的边界框回归目标元组上定义的:u, v=left(v_{x}, v_{y}, v_{w}, v_{h}right) ,和类u的预测元组t^{u}=left(t_{x}^{u}, t_{y}^{u}, t_{w}^{u}, t_{h}^{u}right) 。Iverson括号指示函数[u geq 1] 表示当u geq 1 时值为1。按照惯例,将所有获得的后台类标记为u = 0。对于背景roi,没有ground-truth边界框的概念,因此忽略了L_{mathrm{loc}} 。对于边界框回归,我们使用损失:
L_{l o c}left(t^{u}, vright)=sum_{i in{x, y, w, h}} text { smooth }_{L_{1}}left(t_{i}^{u}-v^{i}right)
其中,
text { smooth }_{L_{1}}(x)=0.5 x^{2} quad text { if }|x|<1 quad text { otherwise }|x|-0.5
与R-CNN和SPPnet中使用的L2损失相比,L1损失对异常值的敏感性较低。当回归目标是无界的,使用L2损失的训练可能需要仔细调整学习率,以防止梯度爆炸。上式消除了这种敏感性。
超参数λ控制两个任务损失之间的平衡。我们将基本真实回归目标V_i 标准化,使其均值和单位方差为零。所有的实验都使用λ= 1。与我们的方法不同的是,提倡使用一种区分本地化和分类的双网络系统。OverFeat、R-CNN和SPPnet也可以训练分类器和边界框定位器,但是这些方法使用的是阶段训练,我们展示了它对于Fast R-CNN是次优的。
Mini-batch采样:在微调过程中,每个SGD小批都由N = 2张图像组成,它们是随机一致选择的(通常情况下,我们实际上遍历数据集的排列)。我们使用大小为R = 128的小批,从每个图像中抽取64个roi。就像在中一样,我们从对象建议中提取25%的roi,这些对象建议的交集超过union (IoU),并且与至少0.5的ground truth边界框重叠。这些roi包括使用前台对象类标记的示例,即u≥1。其余roi是从对象提案中取样的,这些提案的最大IoU与ground truth的间隔为[0.1,0.5],在SppNet之后。这些是背景示例,并且标记为u = 0。较低的阈值0.1似乎是挖掘R-CNN的一个启发式实例。在训练过程中,图像水平翻转的概率为0.5。没有使用其他数据增强。
通过roi池化层进行反向传播:通过RoI池层来反向传播路径导数。了清晰起见,我们假设每个小批处理只有一个图像(N = 1),尽管扩展到N > 1很简单,因为正向传递独立处理所有图像。用x_{i} in R 表示输入roi池化层的第i个激活,y_{r j} 为该层第r个RoI的第j个输出。roi池化层计算y_{r j}=x_{i *(j)} ,其中r^{*}(r, j)=operatorname{argmax}_{i^{prime} in R(r, j)}{ }^{X_{i^{prime}}} 。
R(r, j)是子窗口中输入的指标集,输出单元y_{r, j} 最大池化。
RoI池层的后向函数通过argmax开关计算损失函数对每个输入变量xi的偏导数:
frac{partial L}{partial x_{i}}=sum_{r} sum_{j}left[i=i^{*}(r, j)right] frac{partial L}{partial y_{r j}}
换句话说,对每个mini-batch的ROI r和每个池化输出单元y_{r j} ,如果如果i是通过max池为yrj选择的最大值,就对偏导数frac{partial L}{partial y_{r j}} 进行累加。在反向传播中,∂L/∂yrj已经由RoI池层上的层的反向函数计算出来了。
SGD超参数:softmax分类和边界盒回归所用的全连通层分别由标准偏差为0.01和0.001的零均值高斯分布初始化。初始化标准差为0。所有层对权重使用1的每层学习速率,对偏差使用2的每层学习速率,全局学习速率为0.001。在VOC07或VOC12训练中,我们运行SGD进行30k的小批量迭代,然后将学习率降低到0.0001,再进行10k的迭代训练。当我们对较大的数据集进行训练时,我们将运行SGD进行更多的迭代,如后面所述。动量为0.9,参数衰减为0.0005(关于权重和偏差)。
3.4、尺度变化
我们探讨了两种实现尺度不变目标检测的方法:(1)通过“蛮力”学习和(2)使用图像金字塔。这些策略遵循R-CNN中的两种方法。在蛮力方法中,每个图像在训练和测试期间都按照预先定义的像素大小进行处理。网络必须直接从训练数据中学习尺度不变的目标检测。相比之下,多尺度方法通过图像金字塔为网络提供近似的尺度不变性。在测试时,使用图像金字塔对每个对象建议进行近似尺度标准化。在多尺度训练中,每次采样图像时,我们都随机抽取一个金字塔尺度,追随R-CNN,作为数据增强的一种形式。由于GPU内存的限制,我们只对较小的网络进行多尺度训练实验。
4、Fast R-CNN检测
一旦一个Fast R-CNN网络被微调,检测就相当于运行一个正向传递(假设目标建议是预先计算好的)。网络将图像(或图像金字塔,编码为图像列表)和R目标建议列表作为输入进行评分。在测试时,R通常在2000左右,不过我们将考虑在某些情况下它会更大(≈45k)。当使用图像金字塔时,每个RoI都被分配到比例,使比例的RoI在R-CNN区域内最接近224^2 像素。对于每个测试RoI r,正向传递输出一个类后验概率分布p和一组相对于r的预测的边界盒偏移量(K个类中的每个类都有自己的精炼的边界框预测)。我们使用估计概率为每个目标类k分配一个检测置信度r,operatorname{Pr}(text { class }=k mid r)=p_{k} 。然后,我们使用R-CNN的算法和设置分别对每个类执行非最大抑制。
4.1、faster检测的截断SVD
对整幅图像的分类,与conv层相比,计算完全连接层所花费的时间更少。相反,对于检测,要处理的roi数量较大,计算全连通层花费了近一半的正向传递时间(见图2)。用截断的SVD压缩大的全连通层很容易加速。在该技术中,由u×v权矩阵W参数化的层近似分解为:
W approx U sum V^{T}
使用SVD。在这个分解中,U是由W的第一个t左奇异向量组成的U×t矩阵,sum_t 是包含W的t个最大奇异值的对角矩阵,V是由W的第一个t右奇异向量构成的V×t矩阵。截断SVD将参数从uv减少到t(u v),当t远远小于min(u, v)时,这一点非常显著。为了压缩网络,将与W对应的单全连通层替换为两个全连通层,它们之间没有非线性关系。第一 层使用重量矩阵sum_{t} V^{T} (没有偏置) 第二使用U。 当RoI数量很大时这种方法加速效果很好。
5、主要的结果
三个主要结果支持了本文的贡献:
- 最先进的地图VOC07, 2010年和2012年
- 与R-CNN、SPPnet相比,训练和测试速度更快
- 在VGG16中微调conv层可以改进mAP
5.1、实验步骤
我们的实验使用了三个预先训练的ImageNet模型,这些模型可以在网上找到。首先是CaffeNet,我们也可以将这个CaffeNet称为model S,表示“小”。第二个网络是VGG_CNN_M_1024,和S具有一样的深度,我们把这个网络模型称为M,意思是“中”。最终的网络是非常深入的VGG16模型。由于这个模型是最大的,我们称之为模型L。在本节中,所有的实验都采用单尺度训练和测试(s = 600)。
5.2. VOC 2010 and 2012结果
在这些数据集上,我们将Fast R-CNN(简称FRCN)与来自公共排行榜的comp4(外部数据)轨道上的顶级方法进行比较。对于NUS_NIN_c2000和BabyLearning methods,目前还没有相关的出版物,我们无法找到使用的ConvNet架构的确切信息;它们是NiN的变体。所有其他方法都是从相同的预先训练的VGG16网络初始化的。
Faster R-CNN在VOC12上以65.7%的mAP(和68.4%的额外数据)获得了最好的结果。它也比其他基于“慢”R-CNN流程的方法快两个数量级。在VOC10上,SegDeepM实现了比Fast R-CNN更高的mAP (67.2% vs. 66.1%)。SegDeepM 训练在VOC12 trainval 分割标记;为了提高R-CNN的精度,采用马尔可夫随机场对O2P语义分割方法中的R-CNN检测和分割进行推理。Fast R-CNN可以替换成SegDeepM代替R-CNN,这可能会带来更好的结果。当使用扩大的07 12训练集时,Fast R-CNN的mAP增加到68.8%,超过了SegDeepM。
5.3、VOC 2007结果
在VOC07中,我们将Fast R-CNN与R-CNN和SPPnet进行了比较。所有的方法都是从同一个预先训练好的VGG16网络开始,并使用边界盒回归。SPPnet的作者计算了VGG16 SPPnet的结果。SPPnet在训练和测试的时候使用5个尺度。SPPnet和Fast R-CNN的提升证明了使用单尺度训练和测试,微调卷积层使得精度提升很大(从63.1%提升到66.9%)。作为次要的一点,SPPnet在训练中没有使用PASCAL标记为“困难”的示例。删除这些例子将快速R-CNN mAP提高到68.1%。所有其他实验都使用“困难”的例子。
5.4、训练和测试时间
快速的训练和测试是第二个主要的贡献。表4比较训练时间和测试时间和R-CNN、SPPnet、Fast R-CNN在VOC07上的mAP。有截断SVD时Fast R-CNN比R-CNN快213倍,没有时快146倍。训练时间减少9×,从84小时减少到9.5小时。用VGG-16网络,训练时Fast R-CNN比SPPnet快2.7倍,测试时,有截断SVD快10倍,没有时快7倍。Fast R-CNN还消除了数百gb的磁盘存储,因为它不使用缓存功能。
截断SVD:截断SVD可以减少检测时间30%以上 , mAP只下降一小点,而不需要执行额外的模型压缩。图2证明了如何使用VGG fc6层中25088 × 4096矩阵中最大的1024个奇异值,和fc7层4096x4096的256个特征值来压缩模型。如果在在压缩之后再一次进行fine-tune,进一步压缩模型也是可能的。
5.5、微调哪一层
对SPPnet中比较浅的网络,仅仅微调全连接层对精度不是很好。我们假设这一结果不适用于非常深的网络。为了验证微调conv层对VGG16是重要的,我们使用Fast R-CNN进行微调,但是冻结了13个conv层,这样只有完全连接的层才能学习。该消融模拟单尺度SPPnet训练,mAP由66.9%降至61.4%(表5)。本实验验证了我们的假设:对于非常深的网,通过RoI池层进行训练是非常重要的。
这是否意味着所有conv层都应该进行微调?简而言之,在较小的网络(S和M)中,我们发现conv1是通用的,并且与任务无关(这是一个众所周知的事实)。允许conv1层是否学习对精度影响很小。对VGG-16,我们发现它仅仅对更新从conv3_1是必要的。这一观察结果是实用的:(1)与从conv3 1学习相比,从conv2 1更新将使训练速度降低1.3×(12.5 vs. 9.5小时);(2)从conv11更新会超出GPU内存。在学习conv2 1上时,mAP的差异仅为 0.3个点。本文采用VGG16微调图层conv3_1和实现所有Fast R-CNN结果;所有与 模型S和实验M微调层conv2和以上。
6、设计评估
我们执行实验来理解为什么Fast R-CNN比R-CNN和SPPnet更好,并且来评估设计准则。沿着最佳实践,我们在PASCAL VOC 2007上执行这些设计准则。
6.1、多任务训练有用吗?
多任务损失是方便的,因为它避免了一系列训练任务的流程。但它也有可能改进结果,因为任务通过共享表示(ConvNet)相互影响。多任务损失提升Fast R-CNN的精度吗?为了检验这个问题,我们训练baseline网络,损失中只使用分类损失。这些baseline打印模型S, M, L在每一组的第一列在表6所示。注意,这些模型没有边界盒回归器。接下来我们采用多任务损失训练的网络,但是在测试的时候不用Bounding Box回归。这隔离了网络的分类精度,并允许与baseline网络进行一对一的比较。
在所有三个网络中,我们观察到多任务训练相对于单独的分类训练提高了纯分类精度。改进范围从 0.8到 1.1映射点,表明多任务学习具有一致的积极效果。最终,我们采用baseline模型,附加边界框回归层,在保持所有其他网络参数冻结的情况下用L_{loc} 训练它们。每组的第三栏显示了该阶段训练计划的结果:mAP优于第一列,但是阶段训练不如多任务训练(每组第四列)。
6.2、规模不变性:蛮力还是技巧?
我们比较两种策略实现尺度不变的目标检测: 蛮力学习 (single scale) 和图像金字塔 (multi-scale)。在这两种情况下,我们将图像的比例尺s定义为其最短边的长度。所有单尺度实验均使用s = 600像素;年代 可能少于600一些图片我们最的图像一边限制在1000 像素和维护。图像的宽高比选择这些值是为了让VGG16在调优过程中适合GPU内存。较小的模型不受内存限制,可以从较大的s值中获益;然而,优化每个模型并不是我们的主要关注点。我们注意 PASCAL 的图像平均是384 × 473 像素,因此单尺度的上采样因子通常是1.6。因此,RoI池层的平均有效步长为约为10像素。
在多尺度设置中, 我们使用SPPnet中指定的五个尺度( s∈ {480, 576 , 688 , 864 , 1200 })来促进和SPPnet的比较,我们将最长的边限制在2000像素,以避免超过GPU内存。表7显示了模型S和模型M在使用一个或五个量表进行训练和测试时的情况。也许在SPPnet中最让人惊奇的结果是单尺度结果比多尺度好。我们的发现证实了他们的结果。多比例尺方法只在mAP上提供了一个小的增加,但在计算时间上花费很大。对VGG-16模型(模型L),我们限制使用单尺度来实现细节。但它还是获得了66.9%的mAP,略高于R-CNN报道的66.0%,尽管R-CNN使用一个有限的尺度,每个建议被扭曲成一个未知的尺度。由于单尺度处理提供了速度和精度之间的最佳权衡,特别是对于非常深的模型,本小节之外的所有实验都使用s = 600像素的单尺度训练和测试。
6.3、我们需要更多的训练数据吗?
一个好的目标检测器应该在提供更多的训练数据时得到改进。Zhu等人发现DPM的mAP浸透在只有几百几千训练样本。在这里,我们用VOC12 trainval集合来扩充VOC07 trainval集合,大约将图像数量增加三倍,达到16.5k,来评估Fast R-CNN。扩大训练集将VOC07测试mAP从66.9%提高到70.0%(表1)。我们对VOC10和2012年进行了类似的实验,构建了VOC07 trainval、test和VOC12 trainval联合的21.5k图像数据集。在该数据集上进行训练时,我们使用100k SGD迭代,每次40k迭代(而不是每次30k)的学习速度降低0.1×。VOC10和2012年mAP分别从66.1%提高到68.8%和65.7%提高到68.4%。
6.4、SVMs比softmax好吗?
快速的R-CNN使用在微调过程中学习的softmax分类器,而不是像R-CNN和SPPnet那样,在事后训练one-vs-rest线性svm。为了了解这种选择的影响,我们在快速R-CNN中实现了带有难负挖掘的SVM后自适应训练。我们使用与R-CNN相同的训练算法和超参数。
表8显示,softmax在所有三个网络上的性能都略优于SVM,分别为 0.1到 0.8个mAP点。这种效果很小,但它表明与以前的多阶段训练方法相比,“一次”微调就足够了。我们注意到softmax不同于one-vs-rest SVMs,它在获得RoI时引入了类之间的竞争。
6.5、更多建议总是更好吗?
(广泛地)有两种类型的对象检测器:一种使用稀疏的对象建议集(例如,选择性搜索),另一种使用密集的对象建议集(例如,DPM)。稀疏建议分类是一种级联方法,在这种方法中,建议机制首先拒绝大量候选项,留给分类器一个小的集合来评估。当应用于DPM检测时,这种级联提高了检测精度。We 找到 证据 证明 这个 提议 classifier 级 联 也 提高 了 Fast R-CNN accuracy.使用选择性搜索的质量模式,我们将每张图片从1k扫描到10k,每次对模型m进行再培训和再测试。我们发现证据建议分类器迭代也提升Fast R-CNN的精度。使用选择性搜索的质量模式,我们将每张图片从1k扫描到10k,每次对模型m进行再培训和再测试,不损mAP。我们发现,随着提案数量的增加,mAP先上升后下降(图3,实蓝色线)。实验表明,在深度分类器中加入更多的建议不仅没有帮助,甚至会对精度造成轻微的伤害。
没有实际的实验,这个结果很难预测。衡量目标建议质量的最新技术是平均召回(AR)。当使用固定数量的每幅图像时,AR与使用R-CNN的几种提案方法mAP有很好的相关性。从图3可以看出,AR(实心红线)与mAP没有很好的相关性,因为每张图像的建议数量是不同的。AR必须谨慎使用;更高的AR由于更多的提议并不意味着mAP将增加。幸运的是,使用model M进行训练和测试的时间不到2.5小时。因此,Fast R-CNN能够高效、直接地评估目标建议mAP,这优于代理度量。我们还研究了Fast R-CNN时,使用密集生成的框(超过规模,位置,纵横比),以约45k框/图像的速度。这个密集集足够丰富,当每个选择搜索框被其最近的(在IoU中)密集框替换时,mAP只下降1点(图3中蓝色三角形为57.7%)。密集框的统计与选择性搜索框的统计不同。从2k个选择搜索框开始,随机添加1000×{2,4,6,8,10,32,45}密集框作为样本,对mAP进行测试。对于每一个实验,我们都对模型m进行了再训练和再测试。当这些密集的框被添加时,mAP的下降幅度比添加更多的选择性搜索框时更大,最终达到53.0%。我们也训练和测试Fast R-CNN只使用密集的盒子(45k /图像)。此设置生成52.9%的地图(蓝色菱形)。最终,我们检查如果用难负挖掘的SVMs来解决密集框分布。SVMs甚至更差49.2%(篮圈)。
6.6、MS COCO上初步的结果
我们将Fast R-CNN (基于VGG16)应用于MS COCO数据集,建立了一个初步的baseline。我们在240k迭代的80k图像训练集上进行训练,并使用评估服务器在“test-dev”集上进行评估。PASCAL VOC为35.9%;新的co -style AP的平均水平也超过了IoU的阈值,为19.7%。
7、结论
本文提出了一种Fast R-CNN,对R-CNN和SPPnet进行了干净、快速的更新。除了报告最新的检测结果,我们还提供了详细的实验,希望能提供新的见解。特别值得注意的是,稀疏目标建议似乎可以提高检测器的质量。这个问题在过去花费太多(时间)去探索,但在Fast R-CNN中变得实用。当然,可能存在一些尚未发现的技术,允许密集的框执行稀疏的建议。如果开发出这样的方法,将有助于进一步加速目标检测。