转载自:http://blog.csdn.net/qq_14839543/article/details/54425051
摘要
本文提出了一种快速的基于区域的卷积网络方法(fast R-CNN)用于目标检测。Fast R-CNN建立在以前使用的深卷积网络有效地分类目标的成果上。相比于之前的成果,Fast R-CNN采用了多项创新提高训练和测试速度来提高检测精度。Fast R-CNN训练非常深的VGG16网络比R-CNN快9倍,测试时间快213倍,并在PASCAL VOC上得到更高的精度。与SPPnet相比,fast R-CNN训练VGG16网络比他快3倍,测试速度快10倍,并且更准确。
Introduction
最近,深度卷积网络[14,16]已经显著提高了图像分类[14]和目标检测[9,19]的准确性。与图像分类相比,目标检测是一个更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,当前的方法(例如,[9,11,19,25])在多层网络中训练模型,这些模型是很慢和精度不高的。
复杂性的产生是因为检测需要目标的精确定位,这就导致两个主要的难点。首先,必须处理大量候选目标位置(通常称为“建议”)。 第二,这些候选框仅提供粗略定位,其必须被精细化以实现精确定位。 这些问题的解决方案经常会影响速度,准确性或简单性。
在本文中,我们简化了最先进的基于卷积网络的目标检测器的训练过程[9,11]。我们提出一个单阶段训练算法,共同学习分类候选框和改进他们的空间位置。
所得到的方法用来训练非常深的检测网络(例如VGG16) 比R-CNN快9倍,比SPPnet快3倍。在运行时,检测网络在PASCAL VOC 2012数据集上实现最高准确度,其中mAP为66%(R-CNN为62%),每张图像处理时间为0.3秒,不包括候选框的生成。
1.1 R-CNN and SPPnet
基于区域的卷积网络方法(RCNN)通过使用深度卷积网络来分类目标候选框,获得了很高的目标检测精度。然而,R-CNN具有显着的缺点:
1.训练的模型是多级管道(pipeline)。R-CNN首先使用目标候选框对卷积神经网络进行微调。然后,它将卷积神经网络得到的特征送入SVM。 这些SVM作为目标检测器,替代通过微调学习的softmax分类器。 在第三个训练阶段,学习bbox(边界)回归。
2.训练在时间和空间上是很大代价的。对于SVM和bbox回归训练,从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,这个过程需要2.5 GPU-天在VOC07训练集上的5k图像。这些特征需要数百GB的存储空间。
3.目标检测速度很慢。在测试时,从每个测试图像中的每个目标候选框提取特征。用VGG16网络检测目标需要47s /图像(在GPU上)。
R-CNN很慢是因为它为每个目标候选框进行卷积神经网络正向传递,而不共享计算。SPP网络[11]通过共享计算加速R-CNN。SPP网络计算整个输入图像的卷积特征映射,然后使用从共享特征映射提取的特征向量来对每个候选框(object proposals)进行分类。通过将候选框内的特征图的一部分最大化为固定大小的输出(例如,6X6)来提取针对候选框的特征。多个输出被池化,然后连接成空间金字塔池[15]。SPPnet在测试时将R-CNN加速10到100倍。由于更快的候选框特征提取训练时间也减少3倍。
SPP网络也有显著的缺点。像R-CNN一样训练网络是一个多阶段的涉及提取特征的网络,和对网络进行微调有损失,训练SVM分类器,最后拟合边界回归(bbox)。特征也写入磁盘。但与R-CNN不同,在[11]中提出的微调算法不能更新在空间金字塔池之前的卷积层。不出所料,这种限制(固定的卷积层)限制了深度网络的精度。
1.2 Contributions
我们提出一种新的训练算法,修正R-CNN和SPPnet的缺点,同时提高其速度和准确性。我们称之为fast R-CNN,因为它能比较快地进行训练和测试。Fast RCNN方法有几个优点:
1.比R-CNN和SPP网络具有更高精度(mAP)的目标检测;
2.训练是使用多任务损失(loss)的单阶段训练;
3.训练可以更新所有网络层参数;
4.特征缓存不需要磁盘空间
Fast R-CNN使用Python和C++语言编写,在
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个类中的一个的精确边界位置。
图1.快速R-CNN架构。输入图像和多个感兴趣区域(RoI)被输入到完全卷积网络中。每个RoI被合并到固定大小的特征图中,然后通过完全连接的层(FC)映射到特征向量。网络对于每个RoI具有两个输出向量:softmax概率和每类边界回归偏移。该架构是端到端训练的,带有多任务丢失。
2.1 ROI pooling layer
RoI池化层使用最大池化将任何有效的感兴趣区域内的特征转换成具有H × W(例如,7×7)的固定空间范围的小特征地图,其中H和W是层超参数,独立于任何特定的RoI层。在本文中,RoI是一个矩形窗口,成为一个特征映射。 每个RoI由指定其左上角(r; c)及其高度和宽度(h; w)的四元组(r; c; h; w)定义。
RoI最大池化工作通过除以h × w RoI窗口变成H × W网格,子窗口大小约为h/H ×w/ W,然后将每个子窗口中的最大值合并到相应的输出网格单元中。池化操作独立应用于每个特征图通道,比如在标准最大池中。RoI层只是SPPnets [11]中使用的空间金字塔池层的特殊情况,其中只有一个金字塔层。 我们使用[11]中给出的池化子窗口计算方法。
2.2 从预训练网络得到的初始化(Initializing from pretrained
networks)
我们实验了三个预训练的ImageNet [4]网络,每个网络有五个最大池层和五到十三个卷积层(网络详细信息,请参见第4.1节)。当预训练网络初始化fast R-CNN网络时,其经历三个变换。
首先,最后的最大池化层由RoI池层代替,其通过将H和W设置为与网络的第一完全连接层兼容来配置(例如,对于VGG16,H = W = 7)。
其次,网络的最后完全连接层和softmax(其被训练用于1000类ImageNet分类)被替换为前面描述的两个同级层(完全连接的层和softmax在K + 1类别和类别特定的边界回归)。
第三,网络被修改为采用两个数据输入:图像的列表和这些图像中的RoI的列表。
2.3 微调
用反向传播训练所有网络权重是fast R-CNN的重要能力。首先,让我们阐明为什么SPPnet无法更新低于空间金字塔池层的权重。
根本原因是当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播是非常低效的,这正是如何训练R-CNN和SPPnet网络的方法。低效的部分是因为每个RoI可能具有非常大的接受场,通常跨越整个输入图像。由于正向传递必须处理整个接受场,训练输入是大的(通常是整个图像)。
我们提出了一种更有效的训练方法,利用训练期间的特征共享。在fast RCNN网络训练中,随机梯度下降(SGD)minibatches被分级采样,首先通过采样N个图像,然后通过从每个图像采样R/N个 RoIs。关键的是,来自同一图像的RoI在向前和向后传播中共享计算和存储器。减小N,减少了minibatches计算。例如,当N = 2和R = 128时,得到的训练方案比从128幅不同的图采样一个RoI快64倍。
这个策略的一个关注是它可能导致慢训练收敛,因为来自相同图像的RoI 是相关的。这个问题似乎不是一个实际问题,我们使用比R-CNN更少的SGD迭代,获得N = 2和R = 128的良好结果。
除了分层采样,fast R-CNN使用一个精细的训练过程,一个微调阶段联合优化softmax分类器和边界框回归,而不是在三个独立的阶段训练softmax分类器,SVM和回归因子[9 ,11]。 下面描述该过程的组件(loss,小批量采样策略,通过RoI池层的反向传播和SGD超参数)。
多任务损失。 Fast R-CNN网络具有两个同级输出层。 第一个输出在K + 1个类别上的离散概率分布(每个RoI),p =(p0,...pK)。 通常,通过完全连接层的K + 1个输出上的softmax来计算p。第二个输出层输出边界框回归偏移,tk =(tkx,tky,tkw,tkh),对于由k索引的K个对象类中的每一个。 我们使用[9]中给出的tk的参数化,其中tk指定相对于候选框的尺度不变转换和对数空间高度/宽度移位。
每个训练的RoI用ground truth类u和ground truth边界框回归目标v标记。我们对每个标记的RoI使用多任务损失L以联合训练分类和边界框回归:
公式中, 是真正的u类的损失。
第二个损失Lloc是在u,v =(vx; vy; vw; vh)和预测元组tu =(tux; tuy; tuw; tuh)的真正边界框回归目标的元组 ,再次分类为类u。 Iverson括号指示函数[u≥1]当u≥1的时候为值1,否则为0。按照惯例,catch-all背景类标记为u = 0。对于背景RoI,没有ground truth边界框的概念,因此Lloc被忽略。对于边界框回归,我们使用损失
其中:
smooth是鲁棒的L1损失,对于异常值比在R-CNN和SPPnet中使用的L2损失更不敏感。当回归目标无界时,具有L2损失的训练可能需要仔细调整学习速率,以防止爆炸梯度。等式 3消除了这种灵敏度。
公式1中的超参数λ控制两个任务损失之间的平衡。我们将groundtruth回归目标vi归一化为具有零均值和单位方差。所有实验都使用λ = 1。
我们注意到[6]使用相关损失来训练一个诊断候选框网络。 与我们的方法不同的是[6]倡导一个分离本地化和分类的双网络系统。 OverFeat [19],R-CNN [9]和SPPnet [11]也训练分类器和边界定位器,但是这些方法使用逐级训练,这对于fast RCNN来说是次优的。
小批量取样。 在微调期间,每个SGD小块由N = 2个图像构成,均匀地随机选择(如通常的做法,我们实际上迭代数据集的排列)。 我们使用大小为R = 128的小块,从每个图像采样64个RoI。 如在[9]中,我们从候选框中获取25%的RoI,这些候选框具有至少为0.5的groundtruth边界框与交集的联合(IoU)重叠。 这些RoI包括用前景对象类标记的示例,即u≥1。 剩余的RoI从候选框中采样,该候选框具有在区间[0.1; 0.5)上最大的IoU,[11]。 这些是背景示例,并用u = 0标记。0.1的下限阈值似乎充当硬示例挖掘的启发式算法[8](The lower threshold of 0.1 appears to act as a heuristic for hard example mining)。 在训练期间,图像以概率0.5水平翻转。不使用其他数据扩充。
通过RoI池层的反向传播。 反向传播通过RoI汇聚层。为了清楚起见,我们假设每个小批量(mini-batch)(N = 1)只有一个图像,虽然N> 1的扩展是直接的,因为前向传播独立地处理所有图像。
令xi∈ R是到RoI池化层的第i个激活输入,并且令yrj是来自第r个RoI的层的第j个输出。RoI池化层计算yrj = xi*(r; j),其中i*(r; j)= argmaxi’∈R(r; j)xi’。 R(r; j)是输出单元yrj 最大池化的子窗口中的输入的索引集合。单个xi可以被分配给几个不同的输出yrj。
RoI池化层后向传播函数通过遵循argmaxs witches来计算关于每个输入变量xi的损失函数的偏导数:
换句话说,对于每个小批量(mini-batch)RoI r和对于每个池化输出单元yrj,如果i是yrj通过最大池化选择的argmax(一个函数),则将这个偏导数αL/αyrj积累下来。在反向传播中,偏导数αL/αyrj已经由RoI池层顶部的层的向后函数(backwards function)计算。
SGD超参数。 用于softmax分类和边界框回归的完全连接层分别从具有方差0.01和0.001的零均值高斯分布中初始化。偏差初始化为0.所有层都使用每层的学习率为1,权重为2,偏差为0,全局学习率为0.001。 当对VOC07或VOC12 trainval训练时,我们运行SGD进行30k次小批量迭代,然后将学习率降低到0.0001,再训练10k次迭代。当我们训练更大的数据集,我们运行SGD更多的迭代,如下所述。 使用0.9的动量和0.0005的参数衰减(基于权重和偏差)。
2.4 尺度不变性
我们探索两种实现尺度不变对象检测的方法:(1)通过“强力”学习和(2)通过使用图像金字塔。 这些策略遵循[11]中的两种方法。 在强力方法中,在训练和测试期间以预定义的像素大小处理每个图像。 网络必须直接从训练数据学习尺度不变性目标检测。
相反,多尺度方法通过图像金字塔向网络提供近似尺度不变性。 在测试时,图像金字塔用于大致缩放- 规范化每个候选框。 在多尺度训练期间,我们在每次图像采样时随机采样金字塔尺度,遵循[11],作为数据增加的形式。由于GPU内存限制,我们只对较小的网络进行多尺度训练。
3,fast R-CNN 检测
一旦fast R-CNN网络被微调完毕,检测相当于运行前向传递(假设候选框是预先计算的)。网络将图像(或图像金字塔,编码为图像列表)和待计算概率的R个候选框的列表作为输入。在测试的时候,R通常在2000左右,虽然我们将考虑将它变大(≈45k)的情况。当使用图像金字塔时,每个RoI被分配给标尺,使得缩放的RoI最接近区域[11]中的2242个像素。
对于每个测试的RoI r,正向传递输出类别后验概率分布p和相对于r的预测的边界框偏移集合(K个类别中的每一个获得其自己的精细边界框预测)。我们使用估计的概率Pr(class= k|r)= pk为每个对象类别k分配r的检测置信度。然后,我们使用R-CNN算法的设置和对每个类别独立执行非最大抑制[9]。
3.1 使用截断的SVD来进行更快的检测
对于整体图像分类,与卷积层相比,计算完全连接的层花费的时间较小。相反,为了检测,要处理的RoI的数量很大,并且接近一半的正向传递时间用于计算完全连接的层(参见图2)。大的完全连接的层容易通过用截短的SVD压缩来加速[5,23]。
在这种技术中,u×v权重矩阵因子W近似被分解为
在这种因式分解中,U是一个u×t的矩阵,包括W的前t个左奇异向量,是t×t对角矩阵,其包含W的前t个奇异值,并且V是v×t矩阵,包括W的前t个右奇异向量。截断SVD将参数计数从uv减少到t(u + v)个,如果t远小于min(u,v),则SVD可能是重要的。 为了压缩网络,对应于W的单个完全连接的层由两个完全连接的层替代,在它们之间没有非线性。这些层中的第一层使用权重矩阵VT(并且没有偏差),并且第二层使用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节)。
表1. VOC 2007测试检测平均精度(%)。 所有方法都使用VGG16。 训练集键:07:VOC07 trainval,07 \diff:07没有“困难”的例子,07 + 12:07和VOC12训练的联合。 ySPPnet结果由[11]的作者准备。
表2. VOC 2010测试检测平均精度(%)。 BabyLearning使用基于[17]的网络。 所有其他方法使用VGG16。训练集键:12:VOC12 trainval,Prop:专有数据集,12 + seg:12具有分段注释,07 ++ 12:VOC07 trainval,VOC07测试和VOC12 trainval的联合。
表3. VOC 2012测试检测平均精度(%)。 BabyLearning和NUS NIN c2000使用基于[17]的网络。 所有其他方法使用VGG16。培训设置键:见表2,UNK:未知。
4.2 VOC 2010和2012数据集结果
在这些数据集上,我们从公共排行榜(表2,表3)中比较Fast R-CNN(简称FRCN)和comp4(外部数据)轨道上的顶层方法.对于NUS NIN c2000和BabyLearning方法,目前没有相关的出版物,我们无法找到所使用的ConvNet架构的确切信息;它们是网络到网络设计的变体[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的mAP。 所有方法从相同的预训练VGG16网络开始,并使用边界框回归。 VGG16 SPPnet结果由[11]的作者计算。SPPnet在训练和测试期间使用五个尺度(scales)。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%。 所有其他实验使用“困难”(difficult)的例子。
4.4 训练和测试时间
很快的培训和测试时间是我们的第二个主要成果。表4比较了fast RCNN,R-CNN和SPPnet之间的训练时间(小时),测试速率(每秒图像数)和VOC07上的mAP。对于VGG16,fast R-CNN处理图像比没有截断SVD的R-CNN快146倍和有截断SVD的R-CNN快213倍。训练时间减少9倍,从84小时减少到9.5。与SPPnet相比,fast RCNN训练VGG16网络比没有截断SVD的SPPnet快2.7倍(9.5对25.5小时)和测试时间快7倍,比有截断SVD的SPPnet快10倍。 Fast R-CNN还消除了数百GB的磁盘存储,因为它不缓存特征。
表4.Fast RCNN,R-CNN和SPPnet中相同模型之间的运行时间比较。Fast R-CNN使用单尺度(scale)模式。SPPnet使用[11]中指定的五个尺度。由[11]的作者
提供。在Nvidia K40 GPU上测量时间。
截断SVD。截断的SVD可以将检测时间减少30%以上,同时在mAP中只有很小(0.3个百分点)的下降,并且无需在模型压缩后执行额外的微调。图2示出了如何使用来自VGG16的fc6层中的25088×4096矩阵的顶部1024个奇异值和来自fc7层的4096×4096矩阵的顶部256个奇异值减少运行时间而在mAP中几乎没有损失。如果在压缩之后再次微调,则可以在mAP中具有更小的下降的情况下进一步加速。
图2.截断SVD之前和之后VGG16的时间分布。在SVD之前,完全连接的层fc6和fc7需要45%的时间。
4.5 微调哪些层
对于在SPPnet论文[11]中考虑的不太深的网络,仅微调完全连接层似乎足以获得良好的精度。我们假设这个结果不适用于非常深的网络。为了验证微调卷积层对于VGG16是重要的,我们使用fast R-CNN微调,但冻结十三个卷积层,以便只有完全连接的层学习。这种消融模拟单尺度SPPnet训练,将mAP从66.9%降低到61.4%(表5)。这个实验验证了我们的假设:通过RoI池层的训练对于非常深的网是重要的。
表5.限制哪些层对VGG16进行微调产生的影响。微调 ≥fc6模拟SPPnet训练算法[11],但使用单个尺度。 使用五个尺度,以显著(7倍)速度成本获得SPPnetL
结果。
这是否意味着所有卷积层应该微调?没有。在较小的网络(S和M)中,我们发现conv1(第一个卷积层)是通用的和任务独立的(一个众所周知的事实[14])。允许conv1学习或不学习,对mAP没有很有意义的影响。对于VGG16,我们发现只需要更新conv3_1及以上(13个卷积层中的9个)的层。这种观察是务实的:(1)从conv2_1更新使训练变慢1.3倍(12.5 vs. 9.5小时);和(2)从conv1_1更新超过GPU内存。当从conv2_1学习时mAP的差异仅为+0.3点(表5,最后一列)。 所有Fast R-CNN在本文中结果都使用VGG16微调层conv3_1及以上; 所有实验用模型S和M微调层conv2及以上。
5 设计评估
我们通过实验来了解fast RCNN与R-CNN和SPPnet的比较,以及评估设计决策。按照最佳实践,我们在PASCAL VOC07数据集上进行了这些实验。
5.1 多任务训练有用吗?
多任务训练是方便的,因为它避免管理顺序训练的任务的流水线。但它也有可能改善结果,因为任务通过共享的表示(ConvNet)[2]相互影响。多任务训练能提高fast R-CNN中的目标检测精度吗?
为了测试这个问题,我们训练仅使用分类损失Lcls的基准网络等式1(即设置λ= 0)。这些基准线是为表6中每组的第一列中的模型S,M和L打印的。请注意,这些模型没有边界框回归。接下来(每组的第二列),我们采用用多任务损失(等式1,λ= 1)训练的网络,但是我们在测试时禁用边界框回归。这隔离了网络的分类准确性,并允许与基准网络的苹果对苹果(apple to apple)的比较。
在所有三个网络中,我们观察到多任务训练相对于单独的分类训练提高了纯分类精度。改进范围从+0.8到+1.1 个mAP点,显示了多任务学习的一致的积极效果。
最后,我们采用基准线模型(仅使用分类损失进行训练),粘连边界框回归层,并使用Lloc训练它们,同时保持所有其他网络参数冻结。每组中的第三列显示了这种逐级训练方案的结果:mAP相对于第一列改进,但逐级训练表现不如多任务训练(每组第四列)。
表6.多任务训练(每组第四列)改进了分段训练(每组第三列)的mAP。
5.2 尺度不变性:暴力或精细?
我们比较两个策略实现尺度不变物体检测:暴力学习(单尺度)和图像金字塔(多尺度)。在任一情况下,我们将图像的尺度定义为其最短边的长度。
所有单尺度实验使用s = 600像素;对于一些图像,s可以小于600,因为我们在1000像素处覆盖最长图像侧并且保持图像的纵横比。这些值被选择,使得VGG16在微调期间适合GPU存储器。较小的模型不是内存边界,可以受益于较大的s值;然而,每个模型的优化不是我们的主要关注。我们注意到PASCAL图像是384×473个像素,因此单尺度设置通常以1.6倍的倍数上采样图像。因此,RoI池化层的平均有效步幅为≈10像素。
在多尺度设置中,我们使用[11](s ∈{ 480; 576; 688; 864; 1200})中指定的相同的五个刻度来方便与SPPnet进行比较。但是,我们以2000像素为上限,以避免超过GPU内存。
表7显示了当使用一个或五个尺度进行训练和测试时的模型S和M.也许在[11]中最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的研究结果能证明他们的结果:深度ConvNets是擅长直接学习尺度不变性。多尺度方法在计算时间中以大的成本仅提供mAP的小的增加(表7)。在VGG16(模型L)的情况下,我们仅限于通过实施细节使用单个尺度。然而,它得到了66.9%的mAP,略高于R-CNN的66.0%[10],尽管R-CNN在每个候选区域被扭曲为规范大小的意义上使用“无限”尺度。
由于单尺度处理提供速度和精度之间的最佳折衷,特别是对于非常深的模型,本子节以外的所有实验使用单尺度训练和测试,s = 600像素。
表7.多尺度与单尺度。 SPPnet ZF(类似于模型S)的结果来自[11]。 具有单规模的较大网络提供最佳的速度/精度权衡。(L在我们的实现中不能使用多尺度,因为GPU内存限制。)
5.3 我们需要更过训练数据吗?
当提供更多的训练数据时,良好的目标检测器应该改善。 Zhu et al.[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,训练和VOC12 trainval的联合构造了21.5k图像的数据集。当训练这个数据集,我们使用100k次SGD迭代和每40k次迭代(而不是每30k次)降低学习率0.1倍。对于VOC10和2012,mAP分别从66.1%提高到68.8%和从65.7%提高到68.4%。
5.4 SVM分类是否优于softmax?
Fast R-CNN在微调期间使用softmax分类器学习,而不是如在R-CNN和SPPnet中进行的训练一个对静止线性SVMs。为了理解这种选择的影响,我们在Fast R-CNN中实施了具有硬性负采样的事后SVM训练。我们使用与R-CNN中相同的训练算法和超参数。
表8.具有softmax的fast R-CNN和有对SVM的fast RCNN(VOC07mAP)。
表8示出了对于所有三个网络,+ 0.1至+0.8个mAP点的softmax略优于SVM。这种效应很小,但是它表明与先前的多级训练方法相比,“一次性”微调是足够的。我们注意到,softmax,不像one-vs-rest的SVMs,在评分RoI时引入类之间的竞争。
5.5 更多的候选区域更好吗?
存在(广义地)两种类型的目标检测器:使用候选区域的稀疏集合(例如,选择性搜索[21])和使用密集集合(例如DPM [8])的那些。分类稀疏提议是级联的一种类型[22],其中提议机制首先拒绝大量候选者,留下具有小集合的分类器来评估。当应用于DPM检测时,该级联提高了检测精度[21]。我们发现提案分类器级联也提高了fast R-CNN的精度。
使用选择性搜索的质量模式,我们扫描每个图像1k到10k的候选框,每次重新训练和重新测试模型M.如果候选框纯粹是计算的角色,增加每个图像的候选框数量不应该损害mAP。
图3.各种候选区域方案的VOC07测试mAP和AR。
我们发现mAP上升,然后随着候选区域计数增加而略微下降(图3,实线蓝线)。这个实验表明,用更多的候选区域来划分深分类器没有帮助,甚至稍微有点伤害准确性。
如果不实际运行实验,这个结果很难预测。用于测量候选区域质量的最先进的技术是平均召回率(AR)[12]。当对每个图像使用固定数量的候选区域时,AR与使用R-CNN的几种候选区域方法良好地相关。图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%。
我们还训练和测试fast R-CNN只使用密集盒(45k /图像)。此设置的mAP为52.9%(蓝色菱形)。最后,我们检查是否需要使用硬消极挖掘的SVM来处理密集盒分布。 SVM做得更糟:49.3%(蓝色圆圈)。
5.6 初步MS COCO结果
我们将fast R-CNN(使用VGG16)应用于MS COCO数据集[18],以建立初步基线。我们对80k图像训练集进行了240k次迭代训练,并使用评估服务器对“test-dev”集进行评估。 PASCAL型mAP为35.9%; 新的COCO-style的AP,其平均超过IoU阈值,为19.7%。
6.结论
本文提出Fast R-CNN,一个干净,快速的更新R-CNN和SPPnet。 除了报告现状检测结果之外,我们还提供了详细的实验,希望提供新的见解。 特别值得注意的是,稀疏物体候选区域似乎提高了检测器的质量。 这个问题过于昂贵(在时间上)过去探索,但使用Fast R-CNN变得实用。当然,可能存在允许密集盒执行以及稀疏候选框的尚未发现的技术。这样的方法,如果开发,可以帮助进一步加速目标检测。