Fork me on GitHub

深度学习论文翻译解析(十二):Fast R-CNN

论文标题:Fast R-CNN

论文作者:Ross Girshick

论文地址:https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf

  https://arxiv.org/pdf/1504.08083.pdf

Fast RCNN 的GitHub地址:https://github.com/rbgirshick/fast-rcnn

参考的Fast R-CNN翻译博客:http://www.dengfanxin.cn/?p=403  https://blog.csdn.net/ghw15221836342/article/details/79549500

声明:小编翻译论文仅为学习,如有侵权请联系小编删除博文,谢谢!           

  小编是一个机器学习初学者,打算认真研究论文,但是英文水平有限,所以论文翻译中用到了Google,并自己逐句检查过,但还是会有显得晦涩的地方,如有语法/专业名词翻译错误,还请见谅,并欢迎及时指出。

如果需要小编其他论文翻译,请移步小编的GitHub地址

  传送门:请点击我

  如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote

1,前言

  在R-CNN网络结构模型中,由于卷积神经网络的全连接层对于输入的图像尺寸有限制,所以所有候选区域的图像都必须经过变形转换后才能交由卷积神经网络模型进行特征提取,但是无论采用剪切(crop)还是采用变形(warp)的方式,都无法完整保留原始图像的信息,Kaiming He等人提出的空间金字塔池化层(Spatial Pyramid Pooling Layer)有效的解决了传统卷积神经网络对输入图像的尺寸限制。

  SPP-net:R-CNN候选区域缩放后畸变问题和提取特征时的重复计算导致了模型性能和速度的瓶颈。为了解这些问题,2015年,Kaming He等人提出了SPP-net,在保证性能的同时,检测速度也有了较大的提升。论文之前有翻译。

  R-CNN 需要对候选区域进行缩放的原因是全连接层的输入维度必须固定。整个网络包含底部的卷积层和顶部的全连接层,卷积层能够适用任意尺寸的输入图像,产生相应维度的特征图,但是全连接层不同,全连接层的参数是神经元对于所有输入的连接权重,即如果输入维度不固定,全连接层的参数数量也无法确定,网络将无法训练。为了既能固定全连接层的输入维度又不让候选区域产生畸变,很自然的想法就是在卷积层和全连接层的衔接处加一个新的网络层,使得通过该层后特征的维度可以固定,在SPP-net中引入的空间金字塔池化层(Spatial Pyramid Pooling Layer,SPP Layer)就是这样一种网络层,SPP-net也因此而得名。

  此外,SPP-net 也解决了R-CNN重复计算的问题。SPP-net 的思路是由于原图与经过卷积层后得到的特征图在空间位置上存在一定的对应关系,所以只需要对整张图片进行一次卷积层特征提取,然后将候选区域在原图的位置映射到卷积层的特征图上得到该候选区域的特征,最后将得到每个候选区域的卷积层特征输入到全连接层进行后续操作。

  下面回顾一下SPP-net的目标检测整体流程:

1,输入一幅待检测图像

2,提取候选区域:利用 Selective Search算法在输入图像中提取出约 2000个最有可能包含目标实例的候选框

3,候选区域尺度缩放:候选区域长宽中的较短边长度进行统一,即 min(w, h) = s,s 属于 { 480, 576, 688, 864, 1200},s取值标准是使用统一后的候选区域尺寸与 224*224最接近

4,特征提取:利用SPP-net网络结构提取特征

5,分类与回归:根据所提特征,利用SVM进行分类,用边框回归器微调候选框的位置

  空间金字塔池化操作有许多明显的优点:一是实现了任意尺寸输入,固定大小输出。层多可对任意尺度提取的特征进行池化。二是大大降低了计算时间。将某一大小的图片输入到卷积神经网络中,结果特征值提取处理得到了特征图(feature maps),然后利用空间金字塔池化对所有的候选框进行处理处理可以得到固定长度的特征向量。相比之下,R-CNN是将所有的候选框——输入之后再进入CNN来处理,在R-CNN中,一般使用Selective Search方法将一种图片生成多个(2000个左右)候选区,再对于每个候选框内图像块提取特征,使用分类器判别对候选框中提取出的这些特征是否属于一个特定类。对于属于某一特征的候选框,用回归器进一步调整其位置。使用过分割的方法将数据分割成小区域,然后不断地重复合并可能性最高的两个区域直到整张图片上合并为一个区域为止。因为空间金字塔池化操作对整张图片的特征提取过程是操作了一次。R-CNN遍历了一个CNN 2000次,而SPP-net只遍历了一次,而两者最后都是采用SVM算法进行了特征向量分类识别,所以整体计算速度提高了很多倍。

   SPP layer 一般跟在卷积层后面,此时网络的输入可以是任意尺度的,在 SPP layer中每一个 pooling 的 filter会根据输入调整大小,而SPP的输出则是固定维度的向量,然后给到全连接FC层。

  SPPnet 解决了R-CNN 重复提取候选区域特征的问题,同时运行各种尺寸图像作为输入,解决了图像畸变的问题,但R-CNN的其他问题,如训练步骤繁琐,磁盘空间开销大等依然有待解决。

  为了解决R-CNN的训练速度慢,训练所需空间大的问题,R-CNN的原作者Ross Girshick对R-CNN做出了改进,提出了Fast R-CNN,该网络吸收了SPP-net的特点,使得目标检测的速度大幅提升,论文名字为”Fast R-CNN”。下面领略一下其风采。

摘要

  本文提出了一种Fast Region-based (快速的基于区域)的卷积网络方法(Fast R-CNN)进行目标检测。Fast R-CNN 以先前的工作为基础,使用深度卷积网络对目标提案进行有效分类。与之前的工作相比,Fast R-CNN 采用了一些创新技术来提高训练和测试速度,同时也提高了检测精度。Fast R-CNN 训练非常深的 VGG16 网络比 R-CNN 快 9倍,测试比R-CNN快了 213倍,并在PASCAL  VOC 2012 上实现了更高的mAP,与SPP-net相比,Fast R-CNN在VGG16网络上的训练的速度快了 3倍,测试速度提高了10倍,并且更加准确。Fast R-CNN 是使用Python和C++实现的(基于Caffe)。

1,引言

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

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

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

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

1.1  R-CNN 和 SPP-net

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

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

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

  3,物体检测速度很慢(slow):在测试时,特征从每一张测试图片的每一个物体候选区域被提取出来。对于 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和SPP-net缺点的同时,还提高了他们速度和精度。我们把这种方法叫做Fast R-CNN,因为该方法在训练和测试的时候还是比较快的。Fast R-CNN 方法的优点如下:

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

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

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

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

  Fast R-CNN 算法是使用Python和C++(Caffe)来编写实现的,他们可以在开源的 MIT license下获得。

2,Fast R-CNN 的架构和训练

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

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

  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  微调网络用于目标检测

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

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

  我们提出了一种更加有效的训练方法,它在训练期间利用特征共享。在FastR-CNN训练时,随机梯度下降(SGD)的小批量(mini-batches)采用分层抽样,首先采样N个图像,然后对于每一张图像采样R/N个ROI区域。更重要的是,来源于同一张图像的所有ROI区域在前向传播和反向传播过程中共享计算和内存。这样使得较小的N会减少 mini-batches的计算量。例如,当使用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和SPP-net中那样)。该程序(procedure)的组成部分(损失,小批量采样策略,ROI池化层的方向传播,SGD超参)如下图所示。

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

   每个训练的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和SPP-net中使用的 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个图像构成(construct),随机选择单一形式(通常的做法是,我们实际上只对数据的排列进行了调整)。我们使用的mini-batch 的尺寸为 R=128,每一个图像采样了 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),因为对于所有的图片的前向传播过程都是独立的。

  令 xi 属于 R;为进入ROI池化层的第 i 个激活输入,并让 Yrj 为第 r 层 ROI的第j个输出。ROI池化层计算 yri = xi*(r, j),其中 i*(r, j)=argmaxi' 属于 R(r, j)xi',R(i, j) 是子窗口中输入单 yrj 最大池化层的输入索引集。单个 xi 可以分配给几个不同的输出 Yrj。

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

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

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

2.4  Scale invariance(尺度不变性)

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

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

  在分类回归阶段,在R-CNN中,先生成候选框,然后再通过CNN提取特征,之后再用SVM分类,最后再做回归得到具体位置(bbox regression)。而在Fast R-CNN中,作者巧妙的把最后的 bbox regression 也放进了神经网络内部,与区域分类合并成为了一个 multi-task 模型,如下图所示:

   实验表明,这两个任务能够共享卷积特征,并且相互促进。

  Fast R-CNN 很重要的一个贡献是成功地让人们看到了Region Proposal + CNN(候选区域 + 卷积神经网络)这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度。

3,Fast R-CNN检测

   一旦Fast R-CNN 网络被微调完毕,检测相当于运行前向传播(假设候选框是预先计算的),网络将图像(或图像金字塔,编码为图像列表)和待计算概率的候选框的列表作为输入。在测试的时候,通常在2000左右,虽然我们考虑将它变大(大约45K)的情况。当使用图像金字塔时,每个ROI被缩放,使其最接近224*224个像素。

  对于每个测试 ROI r,前向传递输出概率分布 p 和一组相对于 r 的预测边界框偏移量(每个K类获得其自己的边界框预测)。我们使用后验概率 p 为每个 r 估计每K类的检测置信度。然后,我们使用 R-CNN的算法和设置,为每个类独立地执行非极大值抑制。

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使其变得可能。当然,可能存在允许密集盒执行以及稀疏候选框的尚未发现的技术。这样的方法如果被开发,可以进一步帮助加速目标检测。

 

posted @ 2020-08-04 10:31  战争热诚  阅读(1550)  评论(0编辑  收藏  举报