Paper-----Fast R-CNN

论文标题:Fast R-CNN

标题翻译:改进的快速RCNN

论文作者:Ross Girshick

论文地址:https://arxiv.org/abs/1504.08083

-----------------------✂下面是正文✂---------------------------

摘要:

  本文提出一种基于快速的区域卷积网络方法(Fast R-CNN)用于物体检测(object detection)。Fast R-CNN建立在先前的工作的基础上,能够有效的使用深度卷积网络对物体候选区域(Region Proposals)进行分类。和之前的工作相比,Fast R-CNN采用了多种创新技术去提高训练和测试速度,然而它也提高了物体的检测精度。Fast R-CNN在很深的VGG16网络上的训练速度是R-CNN的9倍,测试速度是R-CNN的213倍,并且在PASCALVOC2012数据集上获得很高的平均精度均值(Mean Average Precision),简称MAP。相比于SPP-Net,Fast R-CNN在VGG16网络上的训练速度是SPP-Net的3倍,测试速度是SPP-Net的10倍,并且更精确了。Fast R-CNN被实现通过Python 和C++(利用Caffe),而且以MIT License是开源的、可利用的。地址是:https://github.com/rbgirshick/fast-rcnn

1. 引言

  最近,深度卷积网络在图像分类(image classification)和物体检测(object detection)领域有了很明显的提高。相比于图像分类问题,物体检测是一个更具挑战性的任务,它需要使用更复杂的方法去解决。正是由于这种复杂性,当前很多训练模型的方法都是采用多阶段流水线的形式,不仅很慢而且很不优雅。

  复杂性产生(Complexity arises)的原因是检测需要获得物体的精确位置,从而产生了两个主要的挑战(Challenges)。首先,许多的物体候选区域(经常被称为“Proposals”)必须被处理。其次,这些所谓的候选区域仅仅能提供物体的一个粗略位置信息,因此必须对它进行细化(Refine)以实现更精确的定位。解决这些问题往往需要在速度、精度、简易性上进行适当的妥协折中(Compromise)。

  在这篇论文中,我们简化了(streamline)基于最先进(state-of-the-art)的卷积网络的物体检测的训练过程(R-CNN和SPP-Net)。我们提出了一种单阶段(single-stage)的训练算法(algorithm),该算法将候选区域物体分类和它们的空间(spatial)位置细化合并在一起去学习训练(这里指的是图像分类和边界框回归)。

  由此产生的方法可以更快的训练一个非常深的卷积网络(VGG16,9倍于R-CNN,3倍于SPP-Net)。在测试时,检测网络处理一张图片仅仅需要0.3s(不包括候选区域的产生的时间),而且在PASCAL VOC 2012上的MAP为66%(R-CNN仅仅62%)。

1.1. R-CNN和SPP-Net

  基于区域的卷积网络方法(R-CNN)通过使用深度卷积网络完成了对物体候选区域的分类,并得到了很好的物体检测精度。然而,R-CNN有着明显地(notable)缺陷(drawbacks):

  (1)训练是多阶段的过程(Pipeline):首先,R-CNN利用物体候选区域(Object Proposals)对卷积网络(ConvNet)模型进行调优(fine-tunes),损失函数是采用log损失,其实就是softmax函数。然后,让SVMs去适应了卷积特征(其实就是训练了SVM分类器)。这些SVMs通过fine-tuning取代了softmax分类器作为物体检测器。在第三个训练阶段,边界框(Bounding-box)回归器被训练学习。

  (2)训练在空间和时间上都很昂贵(expensive):对于SVM分类器和边界框回归器的训练来说,所输入的特征需要每一张图片的每一个候选区域中被提取(extract)并被写入磁盘(disk)。对于非常深的网络,比如VGG16,训练VOC2017的大约5000张图片的训练集需要花费2.5个GPU-Days,这些特征需要数百GB的存储空间(storage)。

  (3)物体检测速度很慢:在测试时,特征从每一张测试图片的每一个物体候选区域被提取出来。对于VGG16网络来说,检测一张图片花费47s(在GPU上)。

  R-CNN是很慢的原因是对于图片的每一个候选区域都执行一次前向传播计算(提取特征的卷积层),没有共享卷积计算(sharing computation)。SPP-Net提出了共享计算去加速R-CNN算法。SPP-Net方法对于一张完整的输入图片只计算一次卷积特征映射,然后从共享的特征映射提取每一个物体候选区域所对应的特征向量并做分类处理。对于每一个候选区域最大池化(max-pooling)它的特征映射提取它的特征向量,输出是固定的大小。汇聚多种不同大小的池化输出,然后在空间金字塔池化层连接它们。SPP-Net在测试上是R-CNN的10-100倍;在训练时由于加快了候选区域的特征提取,训练时间减少了3倍。(共享卷积计算)

  SPP-Net也存在很明显地缺点。像R-CNN一样,训练是多阶段流水线,包含特征提取,利用log损失(softmax)fine-tuning网络,训练SVM分类器,最终拟合了边界框回归器。这些训练所需提取的特征需要存入磁盘。但是和R-CNN不同的是,在SPP-Net中的fine-tuning不同更新空间金字塔之前的池化层之前的卷积层。不足为奇,这种限制(固定卷积层)限制了非常深的网络(VGG16)的精度。

1.2. 贡献(Contributions)

   我们提出了一种新的训练算法(algorithm),该算法在消除/修复(fix)R-CNN和SPPNet缺点(disadvantages)的同时,还提高了它们速度和精度。我们把这种方法叫做Fast R-CNN,因为该方法在训练和测试的时候是比较快的。Fast R-CNN方法的优点如下:

  (1)比R-CNN和SPPNet更高的检测精度(mAP)

  (2)训练是单阶段的,使用了多任务损失函数

  (3)训练可以更新所有的网络层参数

  (4)不需要磁盘去存储大量提取的特征 

   Fast R-CNN算法是使用Python和C++(Caffe)来编写实现的。它可以在开源的MIT Li-cense下获得,地址是:https://github.com/rbgirshick/fast-rcnn 

2. Fast R-CNN的架构和训练(Architecture and Training)

   图片1说明(illustrates)了Fast R-CNN的架构。Fast R-CNN网络将一个完整的图像和一组目标推荐区域作为输入。该网络首先通过几个(几组)卷积层和最大池化层处理输入的整个图像产生一个卷积特征映射(feature map)。然后,对于每一个目标推荐区域,使用感兴趣区域(RoI)池化层从特征映射图上提取固定维度的特征向量。每一个特征向量被输入(fed into)到一系列全连接层中,最终得到了两个同级的输出:第一个输出产生的是一个(K + 1)类的softmax概率估计(probability estimates),它包括了k个目标类别和一个背景类;第二个层是对于K个目标类的每一个类别输出4个实数值。K类目标的每一类的4个数字对边界框的位置进行编码,以获得更精细(refine)的边界框位置。

   图一. fast R-CNN架构。输入图像和多个感兴趣区域RoI被输入到完全卷积网络(这里指卷积网络的前面的所有卷积层)。每个感兴趣区域RoI被池化为固定尺寸的特征映射,然后通过全连接层映射到特征向量。网络中每个RoI有两个输出向量:softmax概率和每个类别的编辑框回归偏移量。该架构使用多任务损失函数实现了端到端的训练

 2.1 感兴趣区域池化层(RoI pooling layer)

   RoI 池化层使用最大池化操作将任何有效的感兴趣区域内的特征转换为一个固定空间范围H*W(例如,7*7)较小的特征映射,其中H和W是独立于任何特定(particular)的RoI区域的超参数(hyper-parameters)。在本文中,每一个RoI是被转换为在卷积特征映射上的一个矩形窗口。每个RoI通过4元组(r,c,h,w)来定义,矩形左上角顶点(r,c),矩形的高和宽是(h,w)。

   感兴趣区域最大池化的作用是通过尺寸大约(approximate)h/H * w/W 的子窗口将  h*w  的RoI窗口划分(dividing)为  H*W  的网格(grid cell),然后将每个子窗口中的值最大池化到相应的输出网格单元。池化操作是标准的最大池化,它独立的作用于特征映射的每一个通道(池化是不夸通道的)。RoI层是SPPNet网络中的空间金字塔池化层的一个简单的特例,它是只有一个尺度的金字塔层。我们使用文献[11](这里就是何恺明的SPPNet)中给出的池化窗口进行计算。

2.2 从预训练(pre-trained)的网络初始化

   我们的实验采用了三种在ImageNet数据集上预训练的网络,每一个网络拥有5个最大池化层和5-13个卷积层(可查看4.1节获取详细网络结构)。当一个预训练的网络初始化Fast R-CNN网络时,它经历(undergoes)了三次转换(transformations)。

  首先,最后一个最大池化层被RoI池化层所取代,该RoI池化层通过设置合理H和W实现了与第一个全连接层兼容性配置(例如,H=W=7,对于VGG16)。

  其次,网络的最后的全连接层和softmax层(被训练1000个类别在ImageNet分类数据集上)被两个同级并列的层所取代(一个是K+1个类别的softmax分类层,另一个是指定类别的边界框回归偏移量)。

  第三,网络被修改为两种数据输入:一个是图像列表,另一个是这些图像的RoI列表。

2.3 微调网络用于目标检测(Fine-tuning for detection)

  对于Fast R-CNN来说,使用反向传播算法(back-propagation)训练网络的所有权重是一个很重要的功能。首先,让我们阐述一下为什么SPPNet不能去更新空间金字塔池化层之下的卷积层权重。

  根本的原因在于当每一个训练样本(即RoI)来自于不同的图像时,通过SPP层的反向传播的效率是很低的,这正是R-CNN和SPPNet网络的训练方式。这种效率低下源自于(stems from)每一个感兴趣区域ROI可能有一个非常大的感受野(receptive field),通常跨越(spanning)整个输入图像。由于前向传播过程必须处理整个感受野,因此训练需要的输入很大(通常是整幅图像)。

  我们提出了一种更加有效的训练方法,它在训练期间利用特征共享。在Fast R-CNN训练时,随机梯度下降(SGD)的小批量(mini-batches)采用分层抽样,首先采样N个图像,然后对于每一张图像采样R/N个RoI区域。更重要的是,来自于同一张图像的所有RoI区域在前向传播和反向传播过程中共享计算和内存。这样使得较小的N会减少mini-batch的计算量。例如,当使用N=2,R=128,这个提出(propose)的训练方案(scheme)比来自128张的一个RoI区域(即,R-CNN和SPP-Net的训练策略strategy)快了大约(roughly)64倍。

  对于这种策略(strategy)的一个担忧是它可能导致训练时的收敛(convergence)速度减缓,因为来自于同一张图像的RoI区域是相关的(correlated)。这种担忧在实际问题中并没有出现,我们使用了比R-CNN更少的迭代步数,采用N=2,R=128这种策略反而取得了很好的结果。

  除了分层抽样之外,Fast R-CNN使用一个阶段的微调同时优化softmax分类器和边界框回归器来简化的训练过程,而不是三个单独训练以下分类器:softmax分类器、SVM、回归器(像R-CNN和SPPNet中那样)。该程序(procedure)的组成部分(损失、小批量采样策略、RoI池化层的方向传播、SGD参数)如下所示。

 

多任务损失(Multi-task loss)

   Fast R-CNN网络有两个同级(sibling)并列的输出层,第一个输出层是一个离散的概率分布(对于每一个RoI区域),p = (p0,...,pk),包含有 K+1 个类别。通常 p 由全连接层的 k+1 个输出上的softmax计算得到的。第二个同级的输出层是边界框回归偏移量(offsets),对于每个K对象类,有 tk = (tkx,tky,tkw,tkh),索引是K。我们使用了文献[9](本文作者的另一篇文章)中给出的  tk 的参数化,其中 tk 指定相对于目标推荐区域的尺度不变的平移和对数空间的高度、宽度的偏移。

  每个训练的RoI区域都标注有完全真实的类(ground-truth class) u 和完全真实的边界框(ground-truth bounding-box)回归目标 v 。我们对于每一个标注的 RoI 区域使用多任务损失函数 L 来联合训练分类和边界框回归:

        L(p,u,tu,v)= Lcls(p,u)+ λ * [u >= 1] * Lloc(tu,v)          (1)     

  这里, Lcls(p,u) = -logpu,表示对真实类的对数损失(也就是交叉熵损失)。

  第二个任务损失 Lloc 是针对类 u 和 v = (vx,vy,vw,vh)的真实边界框回归目标的元组定义的,并且预测的元组 tu = (tux,tuy,tuw,tuh),还是针对u类别。当u>1时,中括号的指示器函数 [u >= 1]的计算结果为1,否则为0。对于背景 ROI 区域没有完全真实的边界框的概念(notion)。因此(hence)Lloc  被忽略(ignored)。对于边界框回归,我们使用如下的损失函数:

  Lloc(tu,v)= ∑ i=(x,y,w,h) smoothL1(tui,vi)                              (2)

   这里,

  smoothL1(x) = {0.5 * x^2,if |x| < 1|x| - 0.5,if |x| >=1}                (3)

   它是一种稳定的(robust)的L1损失,对于异常值的敏感度要低于R-CNN和SPPNet中使用的 L2 损失。当回归目标无限制时,L2 损失训练可能需要仔细的调整学习率以防止梯度爆炸。式子3消除了这种敏感性。

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

  我们注意到文献[6]使用相关的损失来训练一个与类无关的区域建议网络。与我们的方法不同,它提出了一种双网络的系统,它将定位与分类分开。OverFeat、R-CNN和SPPNet也训练分类器和边界框定位器,但是这些方法使用阶段式训练,我们将在5.1节展示它们对于Fast R-CNN来说是次优的。

小批量抽样(Mini-batch sampling)

  在微调(fine-tuning)期间,每个SGD的mini-batch是由N=2个图像构成(constuct),随机选择单一形式(通常的做法是,我们实际上只对数据集的排列进行了调整)。我们使用的min-batches的尺寸是R=128,每1个图像采样了64个RoI区域。与文献[9]中一样,我们从目标推荐区域中选择25%的推荐区域和真正边界框交并比(IOU)大于0.5的区域。这些RoI区域包括用前景对象类标记的示例(类别指示函数),例如: [ u >= 1] 。剩余的RoI区域从和真实边界框交并比在[0.1,0.5)的推荐区域中采样,参考文献[11]。这些是背景示例,并标记 u = 0 。0.1的下限阈值似乎充当了困难实例挖掘的启发式算法[8]。在训练期间,图像以0.5 的概率进行水平翻转,没有使用其它的数据增强方法。

通过RoI池化层的反向传播(Back-propagration through RoI pooling layers)

  通过RoI池化层的反向传播的导出路径。为了清楚起见(for clarity),我们假设每个mini-batch仅仅有一张图片,即N=1,但是扩展到N>1是显而易见的( straightforward),因为对于所有的图片的前向传播过程都是独立的。

  令为进入RoI池化层的第 i 个激活输入,并让为 r 层RoI的第 j 个输出。RoI池化层计算,其中是子窗口中输入单最大池化层的输入索引集。单个可以分配给几个不同的输出

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

  换言之,对于每个小批量RoI r 和每个合并输出单元  ,如果 i 是通过最大合并为 选择的argmax,则偏导数就会累计。再反向传播中,偏导数已经由顶部的RoI池化层的反向函数计算。

SGD超参数(SGD hyper-parameters)

  全连接层被用来做softmax分类和bounding-box回归,它们的权重初始化分别( respectively)采用具有标准差为0.01和0.001的零均值高斯分布,偏差(biases)被初始化为0。对于所有的层来说,每一层权重的学习率为1,偏差的学习率为2,全局学习率为0.001。在训练集VOC07或者VOC12上训练时,我们运行SGD进行30K次的小批量迭代,然后将学习率降低到0.0001并进行另外10K次迭代训练。当我们在更大的数据集上训练时,我们运行SGD以进行更多的迭代,如稍后所述。使用0.9的动量和0.0005的参数衰减(关于权重和偏差)。

2.4 尺度不变性(Scale invariance)

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

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

3 Fast R-CNN检测
一旦Fast R-CNN网络被微调,检测相当于运行正向传播(假设对象建议框object proposal是预先计算的)。网络将图像(或图像金字塔,编码为图像列表)和待给得分的 R 对象建议框(object proposal)列表作为输入。在测试阶段,RoI 大约为2K个,当使用图像金字塔的时候,每个RoI被指定尺度使得接近224*224。对于每个测试RoI r ,网络输出关于 r 的一个后验概率分布 p 和一系列预测bbox偏移(每个类 [共k个类] 获得自己的精确bbox预测)。然后使用估计概率Pr(class=k|r)Δ=pk.Pr(class=k|r)=Δpk.给 r 赋予关于 k 个对象类的检测置信度。最后给每个类都实施一个非极大值抑制。
 

3.1  Truncated SVD 加快检测速度

   对于整个图像分类,与conv层相比,计算全连接层所花费的时间较少。相反,检测时需要处理的 ROI的数量很大,并且将近一半的时间用于计算完全连接层(参见图2)。通过SVD压缩他们可以很容易的节省时间。

  通过这种技术,层的 u*v 权重矩阵 W 通过SVD被近似的分解为

   在这种因式分解中,U是由W的第一个左奇异向量组成的U×t矩阵,∑t是包含W的前t个奇异值的t×t对角矩阵,V是包含W的第一个t右奇异向量的V×t矩阵。截断SVD将参数计数从uv减少到t(U+V),如果t比min(u,v)小得多,这一点可能很重要。为了压缩网络,将对应于W的单个全连接层替换为两个完全连接的层,它们之间没有非线性。第一层使用权重矩阵∑tVT(无偏差),第二层使用U(原始偏差与W相关)。这种简单的压缩方法在roi数目很大的情况下具有很好的加速效果。

4、主要结果

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

  1,VOC 2007,2010, 2012 的最高mAP

  2,相比如R-CNN,SPP-net,快速训练和测试

  3,在VGG16中微调卷积层改善了mAP

4.1、实验配置

  我们的实验使用了三个经过预训练的ImageNet网络模型,这些模型可以在线获得(https://github.com/BVLC/caffe/wiki/Model-Zoo)。第一个是来自R-CNN的CaffeNet(实质上是AlexNet)。 我们将这个CaffeNet称为模型S,即小模型。第二网络是来自的VGG_CNN_M_1024,其具有与S相同的深度,但是更宽。 我们把这个网络模型称为M,即中等模型。最后一个网络是来自的非常深的VGG16模型。由于这个模型是最大的,我们称之为L。在本节中,所有实验都使用单尺度训练和测试

 

4.2  VOC 2010 和 2012 的结果

   如上表(表2,表3)所示,在这些数据集上,我们比较Fast R-CNN(简称FRCN)和公共排行榜中comp4(外部数据)上的主流方法(http://host.robots.ox.ac.uk:8080/leaderboard ,访问时间是2015.4.18)。对于NUS_NIN_c2000和BabyLearning方法,目前没有其架构的确切信息,它们是Network-in-Network的变体。所有其他方法从相同的预训练VGG16网络初始化。

  Fast R-CNN在VOC12上获得最高结果,mAP为65.7%(加上额外数据为68.4%)。它也比其他方法快两个数量级,这些方法都基于比较“慢”的R-CNN网络。在VOC10上,SegDeepM 获得了比Fast R-CNN更高的mAP(67.2%对比66.1%)。SegDeepM使用VOC12 trainval训练集训练并添加了分割的标注,它被设计为通过使用马尔可夫随机场推理R-CNN检测和来自的语义分割方法的分割来提高R-CNN精度。Fast R-CNN可以替换SegDeepM中使用的R-CNN,这可以导致更好的结果。当使用放大的07++12训练集(见表2标题)时,Fast R-CNN的mAP增加到68.8%,超过SegDeepM。

4.3  VOC 2007 结果

  在 VOC 2007数据集上,我们比较 Fast R-CNN与RCNN和SPP-net的mAP。所有方法从相同的预训练VGG16网络开始,并使用边界框回归。VGG16 SPP-net结果由【11】的作者提供。SPP-net在训练和测试期间使用了五个尺度。Fast R-CNN 对SPP-net的改进说明,即使Fast  R-CNN 使用单个尺度训练和测试,卷积层微调在 PASCAL中没有使用被标记为“困难”的样本进行训练。除去这些样本,Fast R-CNN 的 mAP 为 68.1%,所有其他实验都使用标记为“困难”的样本。

4.4  训练和测试时间

  快速的训练和测试是我们的第二个主要成果。表4比较了Fast RCNN, R-CNN,SPP-net之间的训练时间(小时),测试速率(每秒图像数)和VOC 2007上的 mAP。对于 VGG16,没有截断 SVD 的Fast R-CNN 处理图像比R-CNN 快 146倍,有截断 SVD的 R-CNN 快 213倍。训练时间减少 9倍,从84小时减少到9.5小时。与SPP-net相比,没有截断 SVD的 Fast RCNN训练 VGG16网络比 SPPNet 快 2.7倍(9.5小时 VS 25.5小时),测试时间快 7倍,有截断的SVD的 Fast RCNN 比SPPNet快 10倍。Fast R-CNN还不需要数百GB的磁盘存储,因为它不缓存特征。

  截断的SVD:截断的 SVD可以将检测时间减少 30%以上,同时在mAP中只有很小(0.3个百分点)的下降,并且无需在模型压缩后执行额外的微调。图2显示出了如何来自VGG16的fc层中的矩阵的顶部 1024个奇异值和来自fc层的矩阵的顶部 256个奇异值减少运行时间,而在mAP中几乎没有损失。如果压缩之后再次微调,则可以在mAP中具有更小的下降的情况下进一步加速。

4.5  微调哪些层?

  对于在SPP-net论文中考虑的不太深的网络,仅微调全连接层似乎足以获得良好的精度。我们假设这个结果不适用于非常深的网络,为了验证微调卷积层对于VGG16的重要性,我们使用 Fast R-CNN微调,但冻结13个卷积层,以便只有全连接层学习。这种消融模拟单尺度SPP-net训练,将mAP从 66.9%降低到 61.4%(表5)。这个实验验证了我们的假设:通过 ROI 池化层的训练对于非常深的网络是很重要的。

 

  这是否意味着所有卷积层应该微调?简而言之,没有。在较小的网络(S和M)中,我们发现conv1(第一个卷积层)是通用的和任务独立的(一个众所周知的事实)。允许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,最后一列)。所有 FastR-CNN在本文中结果都实用VGG16微调层conv3_1及以上的层,所有实验用模型S和M微调层conv2及其以上的层。

5、设计评估

  我们通过实验来了解 Fast RCNN与 R-CNN和SPP-net的比较,以及评估设计决策。按照最佳实践,我们在PASCAL VOC 2007数据集上进行了这些实验。

5.1  多任务训练有用吗?

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

  为了测试这个问题,我们训练仅使用公式中的分类损失(即设置)的基准网络,这些基线是表6中每组的第一列。请注意,这些模型没有检测框回归。接下来(每组的第二列),是我们采用多任务损失(公式)训练的网络,但是我们在测试时禁用检测框回归。这隔离了网络的分类准确性,并允许与基准网络的 apple-to-apple 的比较。

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

  最后,我们采用基线模型(仅使用分类损失进行训练),加上检测回归层,并使用训练他们,同时保持所有其他网络参数冻结。每组中的第三列显示了这种逐级训练方案的结果:mAP相对于第一列改进,但逐级训练表现不如多任务训练(每组第四列)

 

5.2  尺度不变性:暴力或精细?

   我们比较了实现尺度不变的物体检测的两种策略:蛮力学习(单尺度)和图像金字塔(多尺度)。无论哪种情况,我们都将图像的比例尺s定义为其最短边的长度。

  所有单尺度实验都使用 s=600像素;对于某些图像,s可能小于 600,因为我们将最长的图像边上限为1000像素,并保持图像的长宽比。选择这些值是为了使VGG16在微调起见适合GPU内存。较小的模型不受内存限制。可以受益于更大的 s 值;但是,为每个模型优化并不是我们主要关心的问题。我们注意到,PASCAL图像的平均大小为 384*473 像素,因此单比例设置通常会将图像上采样率提高 1.6倍。因此,ROI池化的平均有效步长约为10个像素。

  在多标度设置中,我们使用【11】中指定的相同的五个标度(s∈{480,576,688,864,1200})便于与SPP-net进行比较。但是,我们将最长边的上限设置为 2000 像素,以避免超出  GPU内存。

  表7显示了使用一或五个量表训练和测试的模型S和M。也许【11】中最令人惊讶的结果是单标度检测的性能几乎与多标度检测相同。我们的发现证明了他们的结果:深度ConvNets擅长直接学习规模不变性。多尺度方法消耗计算量大且只提供了很小的mAP的增加(表7)。在VGG16(型号L)的情况下,根据实现细节,我们只能使用单一比例。然而,即使R-CNN使用“无限”标度,因为每个提案都扭曲为规范大小,它的mAP达到了 66.9%,略高于R-CNN报道的 66.0%。

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

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

   当提供更多的额训练数据时,好的目标检测器应该会得到改善。Zhu等人发现DPM mAP在只有几百到千个训练样本的时候就饱和了。在这里我们增加 VOC 2007 trainval训练集 与 VOC 2012 trainval训练集,大约增加到3倍的图像,数量达到了 16.5k,以评估Fast R-CNN。扩大训练集提高了 VOC 2007测试的 mAP,从 66.9%到70.0%(表1)。当对这个数据集进行训练时,我们使用 60k次小批量迭代而不是 40k。

  我们对 VOC 2010 和 2012进行类似的实验,我们用 VOC 2007 trainval,test和 VOC 2012 trainval构造了 21.5K图像的数据集。当训练这个数据集时,我们使用 100k次SGD迭代和每 40k 次迭代(而不是 30k次)降低学习率10倍。对于 VOC2010 和 2012,mAP分别从 66.1%提高到68.8%和从 65.7%提高到 68.4%。

5.4  SVM 是否胜过 Softmax?

  Fast R-CNN 使用在微调过程中学习到的Softmax分类器,而不是像 R-CNN和SPP-net那样事后训练一对一的线性SVM。为了了解此选择的影响,我们在Fast R-CNN中实施了具有难负采样重训练的SVM训练。我们使用与R-CNN中相同的训练算法和超参数。

   表8显示了所有三个网络中的 Softmax略胜于SVM,提高了 +0.1 到+0.8 个mAP点。这种效果很小,但是它表明与先前的多级训练方法相比,“一次性”微调是足够的。我们注意到,Softmax不像SVM那样,在分类 ROI 时引入类之间的竞争。

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

  使用选择性搜索的质量模式,我们扫描每个图像1k到 10k个候选框,每次重新训练和重新测试模型M,如果候选框纯粹扮演计算的角色,增加每个图像的候选框数量不应该损害mAP。

    我们发现mAP上升,然后随着候选框区域计数增加而略微下降(图3,实线蓝线)。这个实验表明,用更多的候选区域没有帮助,甚至稍微有点伤害准确度。

  如果不实际运行实验,这个结果很难预测。用于测量候选区域质量的最先进的技术是平均召回率(AR)。当对每个图像使用固定数量的候选区域时,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个选择性搜索框开始,我们在添加的随机样本密集框时测试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数据集,以建立初步基线。我们对 80K图像训练集进行了 240K迭代训练,并使用评估服务器对“test-dev”集进行评估。PASCAL标准下的mAP为 35.9%。新的COCO标准下的mAP也达到了IOU阈值的平均值,为 19.7%

6,总结

  本文提出 Fast R-CNN,一个对 R-CNN和SPP-net干净,快速的更新。除了报告目前的检测结果之外,我们还提供了详细的实验,希望提供新的见解。特别值得注意的是,稀疏目标候选区域似乎提高了检测器的质量。过去探索这个问题过于昂贵(在时间上),但Fast R-CNN使其变得可能。当然,可能存在允许密集盒执行以及稀疏候选框的尚未发现的技术。这样的方法如果被开发,可以进一步帮助加速目标检测。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值