Fast R-CNN

Abstract

提出了一种基于区域卷积网络的快速目标检测方法(Fast R-CNN)。Fast R-CNN基于之前的工作,使用深度卷积网络对object proposals进行有效分类。与之前的工作相比,Fast R-CNN采用了多项创新技术来提高训练和测试速度,同时提高检测精度。Fast R-CNN比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

最近,深度ConvNets[14,16]显著提高了图像分类[14]和目标检测[9,19]的准确性。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,目前的方法(例如[9,11,19,25])在multi-stage pipelines中训练模型缓慢且inelegant。
复杂性的产生是因为检测需要精确定位对象,这带来了两个主要挑战。首先,必须处理大量候选目标位置(通常称为“proposals”)。其次,这些候选区域只提供粗略的本地化(localization),必须加以改进才能实现精确的本地化。这些问题的解决方案往往会影响速度、准确性或简单性。
在本文中,我们简化了最先进的基于ConvNet的目标检测器的训练过程[9,11]。我们提出了一种单阶段训练算法,该算法可以联合学习对目标提议进行分类并优化其空间位置。
由此产生的方法可以训练非常深的检测网络(VGG16[20]),比R-CNN[9]快9倍,比SPPnet[11]快3倍。在运行时,检测网络以0.3秒(不包括目标提议时间)的速度处理图像,同时在PASCAL VOC 2012[7]上实现最高精度,mAP为66%(而R-CNN为62%)

1.1 R-CNN and SPPnet

基于区域的卷积网络方法(RCNN)[9]通过使用深度ConvNet对目标提议(proposals)进行分类,实现了出色的目标检测精度。然而,R-CNN有明显的缺点:

1 Training is multi-stage pipeline

R-CNN首先使用log loss微调ConvNet 目标提案。然后,它将支持向量机与ConvNet功能相匹配。这些支持向量机充当目标检测器,取代通过微调学习的softmax分类器。在第三个训练阶段,学习bounding box回归。

2 Training is expensive in space and time

对于支持向量机和bounding box回归训练,从每个图像中的每个对象建议中提取特征并写入磁盘。对于非常深的网络,如VGG16,VOC07 TranVal集的5k图像需要GPU2.5天的处理时间。这些功能需要数百GB的存储空间。

3 Object detection is slow

在测试时,从每个测试图像中的每个对象提议中提取特征。使用VGG16进行检测需要47s/图像(在GPU上)。
R-CNN的速度很慢,因为它对每个对象建议执行ConvNet前向传递,而不共享计算。空间金字塔池网络(SPPnets)[11]被提出通过共享计算来加速R-CNN。SPPnet方法为整个输入图像计算卷积特征图,然后使用从共享特征图中提取的特征向量对每个对象提议进行分类。通过将提案中的部分特征图最大化为固定大小的输出(例如6×6),为提案提取特征。 将多个输出大小合并,然后像空间金字塔合并[15]中那样进行连接。SPPnet在测试时将R-CNN加速10到100倍。由于更快的提案特征提取,训练时间也减少了3倍。
SPPnet也有明显的缺点。与R-CNN一样,训练是一个多阶段的过程,包括提取特征、微调具有日志损失的网络、训练支持向量机,以及最终拟合bounding box回归器。特征也会写入磁盘。但与R-CNN不同,[11]中提出的微调算法无法更新空间金字塔池之前的卷积层。毫不奇怪,这种限制(固定卷积层)限制了非常深的网络的准确性。

1.2 Contributions

我们提出了一种新的训练算法,弥补了R-CNN和SPPnet的缺点,同时提高了它们的速度和准确性。我们称这种方法为Fast R-CNN,因为它的训练和测试速度相对较快。Fast RCNN方法有几个优点:
(1)比R-CNN、SPPnet更高的检测质量(mAP)
(2)训练是单阶段的,采用multi-task的loss
(3) 训练可以更新所有网络层
(4) 特征缓存不需要磁盘存储
Fast R-CNN使用Python和C++实现(使用caffe),并且可以在开源MIT许可下使用:https://github.com/rbgirshick/fast-rcnn

2、Fast R-CNN architecture and training

Fast R-CNN_第1张图片
图1说明了Fast R-CNN架构。Fast R-CNN网络将整个图像和一组object proposals作为输入。该网络首先通过几个卷积(conv)和最大池化层处理整个图像,以生成conv特征图。然后,对于每个目标提议,感兴趣区域(RoI)池层从特征图中提取固定长度的特征向量。每个特征向量被输入到一系列全连接(fc)的层中,这些层最终分支为两个同级输出层:一个层对K个对象类加上一个“背景”类生成softmax概率估计,另一个层为K个对象类中的每一个输出四个实数。每组4个值对其中一个K类的精确边界框位置进行编码。

2.1 The RoI pooling layer

RoI池化层使用最大池将任何有效感兴趣区域内的特征转换为具有固定空间范围H×W(例如7×7)的小特征图,其中H和W是独立于任何特定RoI的层超参数。在本文中,RoI是进入conv特征图的矩形窗口。每个RoI由一个四元组(r、c、h、w)定义,该元组指定其左上角(r、c)及其高度和宽度(h、w)。
RoI最大池化层的工作原理是将 h × w h\times w h×w的RoI窗口划分为近似为 h / H × w / W h/H \times w/W h/H×w/W的子窗口,然后将每个子窗口中的值最大化为对于的输出网格单元。池化独立应用于每个特征图纬度,如标准最大池化。RoI层至少SPPnet中使用的空间金字塔池化层的特例,其中只有一个金字塔层。我们使用[11]中给出的池化子窗口计算。

2.2 Initializing from pre-trained networks

我们使用三个预先训练好的ImageNet[4]网络进行实验,每个网络都有五个最大池层和五到十三个conv层(网络细节见第4.1节)。当一个预先训练好的网络初始化一个Fast R-CNN网络时,它会经历三次转换。
首先,将最后一个最大池化层替换为RoI池化层,该层通过将H和W设置为与网络的第一个全连接层兼容来配置(如,VGG16的H=W=7)。
其次,网络的最后一个全连接层和sofrmax层(针对1000类ImageNet进行了训练)被前面描述的两个sibling层(K+1类上的全连接层和特定类别的bounding box框回归器)替换。
第三,修改网络以获取两个数据输入:图像列表和这些图像中的ROI列表。

2.3 Fine-tuning for detection

使用反向传播训练所有网络权重是快速R-CNN的一项重要功能。首先,让我们解释为什么SPPnet无法更新空间金字塔池化层下的权重。
根本原因是,当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播效率非常低,这正是R-CNN和SPPnet网络的训练方式。效率低下的原因是,每个RoI可能有一个非常大的感受野,通常覆盖整个输入图像。由于前传必须处理整个感受野,训练输入很大(通常是整个图像)。
我们提出了一种更有效的训练方法,利用训练过程中的特征共享。在Fast RCNN训练中,随机梯度下降(SGD)小批量是分层采样的,首先对N幅图像进行采样,然后对每幅图像的R/N ROI进行采样。关键是,来自同一图像的ROI在向前和向后过程中共享计算和内存。使N变小可以减少小批量计算。例如,当使用N=2和R=128时,建议的训练方案比从128张不同的图像(即R-CNN和SPPnet策略)中采样一个RoI大约快64倍。
对这种策略的一个担忧是,它可能会导致训练收敛缓慢,因为来自同一图像的ROI是相关的。这种担忧似乎不是一个实际问题,我们使用比R-CNN更少的SGD迭代,在N=2和R=128时获得了良好的结果。
除了分层采样之外,Fast R-CNN还使用了一个精简的训练过程,其中有一个微调阶段,联合优化softmax分类器和bounding box回归器,而不是在三个单独的阶段训练softmax分类器、支持向量机和回归器[9,11]。该程序的组成部分(损失、小批量采样策略、通过RoI池层的反向传播以及SGD超参数)如下所述。

Multi-task loss

Fast R-CNN网络有两个同级的输出层。第一个输出离散概率分布(每个 RoI), p = ( p 0 , . . . , p K ) p=(p_{0},...,p_{K}) p=(p0,...,pK),共K+1类别。通常情况下,p是由全连接层的K+1输出上的softmax来计算的。第二个sibling层为每个以k为索引的K目标类输出bounding box回归偏移 t k = ( t x K , t y K , t w K , t h K ) t^k=(t^K_{x},t^K_{y},t^K_{w},t^K_{h}) tk=(txK,tyK,twK,thK)。我们使用[9]中给出的 t k t^k tk的参数化,其中 t k t^k tk指定了相对于目标提议的比例不变的平移和log-space高度\宽度偏移。
每一个训练的RoI都标记一个ground-truth类u和ground-truth bounding-box回归目标v。我们在每个标记的RoI上使用一个多任务损失L,联合训练分类和bounding box回归:
在这里插入图片描述
其中 L c l s ( p , u ) = − l o g p u L_{cls}(p,u)=-log p_{u} Lcls(p,u)=logpu是真实类的log损失。
第二个任务损失 L l o c L_{loc} Lloc定义在一个元组上,这个元组包含u类的真实bounding box回归目标, v = ( v x , v y , v w , v h ) v=(v_{x},v_{y},v_{w},v_{h}) v=(vx,vy,vw,vh),以及u类的一个预测元组 t u = ( t x u , t y u , t w u , t h u ) t^u=(t^u_{x},t^u_{y},t^u_{w},t^u_{h}) tu=(txu,tyu,twu,thu)。Iverson bracket indicator函数 [ u ⩾ 1 ] [u \geqslant1] [u1]表明当 u ⩾ 1 u \geqslant1 u1时,值为1,否则为0。按照惯例,捕获所有的背景类被标记为u = 0。对于背景RoIs,没有ground-truth bounding box的概念,因此忽略了 L l o c L_{loc} Lloc。对于bounding box回归,我们使用loss:
Fast R-CNN_第2张图片
smoothL1是一个平滑的L1损失,比R-CNN和SPPnet中使用的L2损失对异常值不那么敏感。当回归目标是无界的,L2loss训练可能需要仔细调整学习率,以防止梯度爆炸。上式消除了这种敏感性。
Eq1中的超参数λ控制着两个任务损失之间的平衡。我们将ground-truth回归目标 v i v_{i} vi归一化,使其均值和单位方差均为0。所有实验都使用λ=1。
我们注意到[6]使用了一个相关的损失来训练一个类无关的对象提议网络。与我们的方法不同,[6]提倡将本地化和分类分开的双网络系统。ObverFea、R-CNN和SPPnet也训练分类器和bounding-box localizers,但这些方法使用阶段式训练,我们表明这对Fast R-CNN是次优的。

Mini-batch sampling

在微调期间,每个SGD小批是从N = 2张图像构建而来的,这些图像都是均匀随机选择的(通常的做法是,我们实际上迭代了数据集的排列)。我们使用大小为128的小批量,从每幅图像中采样64个RoI。就像在[9]中一样,我们从对象提议中获取25%的roi,这些提议与groundtruth包围框有至少0.5(IoU)的重叠。这些RoIs包含用前景对象类标记的例子,如 u ⩾ 1 u\geqslant1 u1,剩下的RoIs从在间隔[0.1,0.5)内具有最大ground truth的IoU的目标提案中采样,紧随[11]。这些都是背景例子,用u=0标记。较低的阈值0.1似乎可以作为hard example mining的启发式方法。在训练过程中,图像水平翻转的概率为0.5。没有使用其他数据增强。

Back-propagation through RoI pooling layers

反向传播通过RoI池化层routes导数。为了清晰,我们假设每个小批量处理只有一幅图像(N=1),尽管扩展到N>1是简单的,因为正向传播独立处理所有图像。
x i ∈ R x_{i}\in R xiR是进入RoI池化层的第i个激活输入,设 y r j y_{rj} yrj是第r个RoI层的第j个输出。RoI池化层计算 y r j = x i ∗ ( r , j ) y_{rj}=x_{i*(r,j)} yrj=xi(r,j),其中 i ∗ ( r , j ) = a r g m a x i ′ ∈ R ( r , j ) x i ′ i*(r,j)=argmax_{i^{'}\in R(r,j)}x_{i^{'}} i(r,j)=argmaxiR(r,j)xi R ( r , j ) R(r,j) R(r,j)是输出单元 y r j y_{rj} yrj最大池化中的子窗口的输入索引集。单个 x i x_{i} xi可以分配给几个不同的输出 y r j y_{rj} yrj
RoI池化层的backwards函数通过argmax计算损失函数对每个输入变量 x i x_{i} xi的偏导数:
在这里插入图片描述
换句话说,对于每个小批量RoI r和每个池化输出单元 y r j y_{rj} yrj,如果i是通过最大池化 y r j y_{rj} yrj选择的argmax,则偏导数 ∂ L ∂ y r j \frac{\partial L}{\partial y_{rj}} yrjL是累积的。在反向传播中,偏导数 ∂ L ∂ y r j \frac{\partial L}{\partial y_{rj}} yrjL已经由RoI池化层顶部的层的反向函数计算出来了。

SGD hyper-parameters

用于softmax分类和bounding-box回归的全连接层分别从标准偏差为0.01和0.001的零均值高斯分布初始化。偏差被初始化为0。所有层的加权学习率为1,偏差学习率为2,整体学习率为0.001。当在VOC07或VOC12 trainval上训练时,我们运行SGD进行30k的小批量迭代,然后将学习速率降低到0.0001,并训练另一个10k的迭代。当我们在更大的数据集上训练时,我们运行SGD进行更多的迭代,如后面所述。动量为0.9,参数衰减为0.0005(在权重和偏差上)。

2.4 Scale invariance

我们探讨了两种实现尺度不变目标检测的方法。
(1)通过"brute force"学习
(2)使用图像金字塔
这些策略遵循了[11]中的两种方法。在brute force方法中,在训练和测试过程中,每幅图像都按照预先定义的像素大小进行处理。该网络必须直接从训练数据中学习尺度不变的目标检测。
相比之下,多尺度方法通过图像金字塔为网络提供了近似的尺度不变性。在测试时,使用图像金字塔对每个目标提案进行近似尺度归一化。在多尺度训练过程中,我们在每次对图像进行采样时,在[11]之后随机对金字塔尺度进行采样,作为数据增强的一种形式。由于GPU内存的限制,我们只对较小的网络进行多尺度训练。

3、Fast R-CNN detection

一旦一个Fast R-CNN网络被微调,检测就相当于运行一个前向传递(假设对象提议是预先计算的)。该网络将一个图像(或一个图像金字塔,编码为图像列表)和一个R对象提案列表作为输入来评分。在测试时,R通常在2000左右,尽管我们会考虑它更大的情况(≈45k)。当使用图像金字塔时,将每个RoI分配到尺度,使缩放后的RoI在区域[11]中最接近 22 4 2 224^{2} 2242个像素。
对于每个测试RoI r,前向传递输出一个类后验概率分布p和一组相对于r的预测bounding-box偏移(K个类都有自己的精确的bounding-box预测)。我们使用估计的概率 P r ( c l a s s = k ∣ r ) = p k Pr(class=k|r)=p_{k} Pr(class=kr)=pk为每个类别k的对象分配一个检测置信度r。然后我们使用R-CNN[9]的算法和设置对每个类单独执行非最大抑制。

3.1 Truncated SVD for faster detection

Fast R-CNN_第3张图片
对于整幅图像的分类,全连接层的计算时间比卷积层的计算时间要小。相反,对于检测,需要处理的RoIs数量很大,近一半的前向时间都花在计算全连接层上(见图2)。使用truncated SVD压缩大的全连接层很容易加速。
该方法将由KaTeX parse error: Undefined control sequence: \timesv at position 2: u\̲t̲i̲m̲e̲s̲v̲权重矩阵w参数化的层利用SVD近似分解为
在这里插入图片描述
在这种分解中, U U U是由 W W W的第一个 t t t左奇异向量组成的 u × t u\times t u×t矩阵, ∑ t \sum_{t} t是包含w的top t奇异值的 t × t t \times t t×t对角矩阵, V V V是由 W W W的第一个t右奇异向量组成的 u × t u\times t u×t矩阵。Truncated SVD将参数计数从 u v uv uv减少到 t ( u + v ) t(u+v) t(u+v),如果 t t t远小于 m i n ( u , v ) min(u,v) min(u,v),这将是显著的。为了压缩网络,将W对应的单个全连接层替换为两个全连接层,它们之间没有非线性。第一个层使用权重矩阵 ∑ t V T \sum_{t}V^{T} tVT(且无偏差),第二个层使用 U U U(与 W W W相关的原始偏差)。当roi的数量很大时,这种简单的压缩方法可以提供很好的加速。

4、Main results

三个主要结果支持了本文的贡献:
1.在VOC07,2010和2012上最先进的mAP。
2.与R-CNN和SPPnet相比,更快速的训练和测试
3.在VGG16上微调卷积层改进了mAP

4.1 Experimental setup

我们的实验使用了
三个预训练的在线ImageNet模型。第一个个来自R-CNN的CaffeNet(本质上是AlexNet)。我们也可以将这种CaffeNet模型称为S型,表示“小”。第二个网络是[3]中的VGG_CNN_M_1024,深度与S相同,但更宽。我们称这个网络模型为M,即"medium"。最后的网络是来自[20]的非常深的VGG16模型。由于该模型最大,我们称其为模型L。在本节中,所有实验均采用单尺度训练和测试(s=600,详见5.2节)。

4.2 VOC2010 and 2012 results

Fast R-CNN_第4张图片
Fast R-CNN_第5张图片
Fast R-CNN_第6张图片
在这些数据集上,我们将Fast R-CNN(简称FRCN)和来自公开排行版的comp4(外部数据)track上的顶级方法进行了比较(表2,表3)。对于NUS_NIN_c2000和BabyLearning法,目前没有相关的出版物,我们也无法找到使用的卷积神经网络架构的确切消息;它们是网络内网络设计(NiN)的变体。所有其他方法都从同一个预训练的VGG15网络初始化。
Fast R-CNN在VOC12上获得了最好的结果,mAP值为65.7%(加上额外数据为68.4%)。它也比其他方法快两个数量级,这些方法都是基于"慢速"的R-CNN pipeline。在VOC10上,SegDeepM比Fast R-CNN获得更高的mAP(67.2%比66.1%)。SegDeepM在VOC12训练验证+分割标注上进行训练;目的是提高R-CNN的准确性,使用马尔可夫随机场推理的R-CNN检测和分割的O2P语义分割方法。Fast R-CNN可以替换成SegDeepM来代替R-CNN,这样可能会由更好的结果。使用大的07++12训练集(见表2标题),Fast R-CNN的mAP增加到68.8%,超过SegDeepM。

4.3 VOC2007 results

在VOC07中,我们将Fast R-CNN与R-CNN和SPPnet进行了比较。所有方法都从同一个预先训练的VGG16网络开始,并使用bounding-box回归。VGG16 SPPnet的结果由[11]的作者计算。SPPnet在训练和测试中使用五种scales。在SPPnet上对Fast R-CNN的改进表明,尽管Fast R-CNN使用了单尺度的训练和测试,但微调卷积层在mAP上提供了很大的改进(从63.1%到66.9%)。R-CNN获得了66.0%的mAP。作为次要点,SPPnet没有在PASCAL中被标记为"困难"的例子。移除了这些例子提高了Fast R-CNN的mAP到68.1%其他所有的实验都使用"困难"的例子。

4.4 Training and testing time

Fast R-CNN_第7张图片
快速的训练和测试时间是我们的第二个主要结果。表4比较了Fast RCNN、R-CNN和SPPnet在VOC07上的训练时间(小时)、测试速率(每幅图像秒数)和mAP。对于VGG16,Fast R-CNN在没有truncated的情况下比R-CNN处理图像快146倍,在truncated后比R-CNN处理图像快213倍。训练时间减少9倍,从84小时减少到9.5小时。与SPPnet相比,Fast RCNN对VGG15的训练快了2.7倍(9.5小时vs25.5小时),在没有truncated SVD的情况下测试速度快了7倍,使用它测试速度则快了10倍。Fast R-CNN还消除了数百GB的磁盘存储,图为它没有缓存功能。

Truncated SVD

Fast R-CNN_第8张图片
Truncated SVD可以减少30%以上的检测时间,mAP只下降了0.3个百分点,并且无需在模型压缩后进行额外的微调。图2展示了使用VGG16的fc6层的25088 ×4096矩阵的前1024个奇异值和4096×4096 fc7层的前256个奇异值在mAP中损耗很小的情况下减少了运行时间。如果在压缩后再次进行微调,则mAP的下降量会更小,从而可以进一步提高速度。

4.5 Which layers to fine-tune?

Fast R-CNN_第9张图片
对于SPPnet论文[11]中考虑的不太深的网络,仅微调全连接层似乎足以获得良好的精度。我们假设这个结果不适用于非常深的网络。 为了验证微调卷积层对VGG16的重要性,我们使用Fast R-CNN进行微调,但冻结十三个conv层,以便只有全连接层才能学习。这种消融模拟单尺度SPPnet训练,并将mAP从66.9%降至61.4%(表5)。这个实验验证了我们的假设:通过RoI池化层进行训练对于非常深的网络非常重要。
这是否意味着所有的conv层都需要微调?不。在较小的网络(S和M)中,我们发现conv1是通用的,与任务无关(这是一个众所周知的事实[14])。不管是否允许conv1学习,对mAP都没有任何意义。 对于VGG16,我们发现只需要更新conv3_1及以上的层(13个conv层中的9个)。 这一观察结果是务实的:(1)与从conv3_1学习相比,从conv2_1更新会使训练慢1.3×(12.5小时对9.5小时);(2)从conv1_1更新会在GPU内存上运行。 从conv2_1 up学习时,mAP的差异仅为+0.3分(表5,最后一列)。本文使用VGG16微调层conv3_1及以上的所有Fast R-CNN结果;所有使用S和M模型的实验都会对conv2及以上的层进行微调。

5、Design evaluation

我们进行了实验,以了解Fast RCNN与R-CNN和SPPnet相比的速度,并评估设计决策。按照最佳实践,我们在PASCAL VOC07数据集上进行了这些实验。

5.1 Does multi-task training help?

Fast R-CNN_第10张图片

多任务训练很方便,因为它避免了管理顺序训练任务的管道。但它也有可能改善结果,因为任务通过共享表示(ConvNet)相互影响[2]。多任务训练是否能提高快速R-CNN中的目标检测精度?为了测试这个问题,我们训练只使用公式1中分类损失 L c l s L_{cls} Lcls的基线网络(即设置λ=0)。 这些基线打印在表6每组的第一列中,用于模型S、M和L。请注意,这些模型没有bounding-box回归器。接下来(每组第二列),我们选取用多任务损失(等式1,λ=1)训练的网络,但我们在测试时禁用bounding-box回归。 这隔离了网络的分类精度,并允许与基线网络进行apples-to-apples的比较。
在所有三个网络中,我们观察到多任务训练相对于单独的分类训练提高了纯粹的分类准确性。从多个任务到多个学习点的持续改善。
最后,我们采用基线模型(仅使用分类损失进行训练),在边界框回归层上进行固定,并使用 L l o c L_{loc} Lloc对其进行训练,同时保持所有其他网络参数不变。每组的第三栏显示了该阶段性训练计划的结果:mAP比第一栏有所改善,但阶段性训练不如多任务训练(每组第四栏)。

5.2 Scale invariance:to brute force or finesse?

Fast R-CNN_第11张图片
我们比较了两种实现尺度不变目标检测的策略:蛮力学习(单尺度)和图像金字塔(多尺度)。无论哪种情况,我们都将图像的比例s定义为其最短边的长度。
所有单尺度实验都使用s=600像素;对于某些图像,s可能小于600,因为我们将图像的最长边限制为1000像素,并保持图像的纵横比。选择这些值是为了在微调期间使VGG16适合GPU内存。较小的模型没有内存限制,可以受益于较大的s值;然而,为每种模型优化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(model L)的情况下,我们仅限于根据实现细节使用单一规模。它实现了66.9%的映射,略高于R-CNN[10]报告的66.0%,尽管R-CNN使用了“无限”尺度,即每个提案都被扭曲为标准尺寸。
由于单尺度处理提供了速度和精度之间的最佳折衷,尤其是对于非常深的模型,因此本小节以外的所有实验都使用s=600像素的单尺度训练和测试。

5.3 Do we need more training data?

当提供更多训练数据时,一个好的目标检测器应该会有所改进。Zhu等人[24]发现,DPM[8]mAP在仅经过几百到几千个训练示例后就饱和了。在这里,我们用VOC12 trainval集扩充VOC07 trainval集,将图像数量大致增加三倍,达到16.5k,以评估Fast R-CNN。扩大训练集将VOC07测试的mAP从66.9%提高到70.0%(表1)。在这个数据集上进行训练时,我们使用60k小批量迭代,而不是40k。
我们对VOC10和2012进行了类似的实验,为此我们从VOC07 TranVal、test和VOC12 TranVal的联合中构建了一个包含21.5k图像的数据集。在这个数据集上进行训练时,我们使用100k SGD迭代,每40k次(而不是每30k次)学习率降低0.1倍。对于VOC10和2012,mAP分别从66.1%提高到68.8%和65.7%提高到68.4%。

5.4 Do SVMs outperform softmax?

Fast R-CNN_第12张图片
Fast R-CNN使用在微调过程中学习的softmax分类器,而不是像R-CNN和SPPnet中所做的那样,在事后训练一个或多个线性支持向量机。为了了解这种选择的影响,我们在Fast R-CNN中实施了带有hard negative挖掘的事后SVM训练。我们使用与R-CNN相同的训练算法和超参数
表8显示,softmax在所有三个网络中的表现都略优于SVM,在+0.1到+0.8个mAP点之间。这种影响很小,但它表明,与以前的多阶段训练方法相比,“一次性”微调是足够的。我们注意到,softmax与one-vs-rest支持向量机不同,在获得RoI时引入了类之间的竞争。

5.5 Are more proposals always better?

Fast R-CNN_第13张图片
有(大致上)两种类型的对象检测器:使用稀疏对象集的检测器(例如选择性搜索[21])和使用密集对象集的检测器(例如DPM[8])。对稀疏提议进行分类是一种级联[22],在这种级联中,提议机制首先拒绝大量候选项,留下一个小的分类器集进行评估。当应用于DPM检测时,这种级联提高了检测精度[21]。我们发现证据表明,proposal分类器级联也提高了Fast R-CNN的准确性。
使用选择性搜索的质量模式,我们从每幅图像1k扫描到10k提案,每次重新训练和重新测试模型M。如果提案仅起计算作用,增加每幅图像的提案数量不应损害mAP。
我们发现,随着提案数量的增加,mAP先上升,然后略有下降(图3,蓝色实线)。这个实验表明,用更多的建议淹没深层分类器无助于,甚至会略微损害准确性。
如果不进行实验,这个结果很难预测。测量对象提议质量的最新技术是平均召回率(AR)[12]。对于使用R-CNN的几种提案方法,当使用固定数量的提案时,AR与mAP具有很好的相关性。图3显示,AR(实心红线)与mAP没有很好的相关性,因为每个图像的提案数量是不同的。AR必须小心使用;更多提案导致的AR增加并不意味着mAP将增加。幸运的是,使用model 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%
我们还只使用密集盒(45k/图像)训练和测试Fast R-CNN。此设置生成52.9%(蓝色钻石)的地图。最后,我们检查是否需要具有hard negative挖掘的支持向量机来处理密集盒分布。支持向量机表现更差:49.3%(蓝色圆圈)。

5.6 Preliminary MS COCO result

我们将Fast R-CNN(带有VGG16)应用于MS COCO数据集[18],以建立初步基线。我们在80k图像训练集上训练240k次迭代,并使用评估服务器在“测试开发”集上进行评估。PASCAL格式的mAP为35.9%,新的COCO格式AP平均也超过了IoU阈值,为19.7%

6.Conclusion

本文提出了Fast R-CNN,它是对R-CNN和SPPnet的一个干净、快速的更新。除了报告最新检测结果外,我们还提供了详细的实验,希望能提供新的见解。特别值得注意的是,稀疏对象方案似乎可以提高探测器的质量。在过去,这个问题的调查成本(时间)太高,但在Fast R-CNN中变得实用。当然,可能存在一些尚未被发现的技术,可以让密集的boxes和稀疏的提议一样发挥作用。如果开发出这种方法,可能有助于进一步加速目标检测。

你可能感兴趣的:(#,Mask,R-CNN,实例分割,r语言,cnn,开发语言)