【Fast R-CNN】Fast R-CNN (2015) 全文翻译
作者
Ross Girshick(Microsoft Research,rbg@microsoft.com)
摘要
提出了一种基于区域的快速卷积网络目标检测方法(Fast R-CNN)。快速R-CNN建立在先前工作的基础上,使用深卷积网络有效地分类对象建议。与以往的工作相比,Fast R-CNN采用了一些创新技术来提高训练和测试速度,同时也提高了检测精度。Fast R-CNN训练非常深的vgg16网络比R-CNN快9倍,测试时快213倍,在PASCAL VOC 2012上实现了更高的映射。与SPPnet相比,Fast R-CNN训练VGG16速度快3倍,测试速度快10倍,精度更高。快速的RCNN在Python和C++中实现(使用CAFE),并且可以在开放源码MIT许可下使用,网址:https://github.com/rbgirshick/fast-rcnn。
1. 引言
最近,深度卷积网络[14,16]显著提高了图像分类[14]和目标检测[9,19]的准确性。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,目前的方法(例如[9、11、19、25])多阶段管道中的列车模型速度慢且不雅。
复杂性的产生是因为检测需要精确定位目标,这就带来了两个主要的挑战。首先,必须处理大量的候选对象位置(通常称为“建议”)。第二,这些候选者只提供粗略的定位,必须经过改进才能实现精确定位。这些问题的解决方案往往会损害速度、准确性或简单性。
在本文中,我们简化了基于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 和 SPPnet
基于区域的卷积网络方法(R-CNN)[9]通过使用深度转换网络对目标建议进行分类,获得了良好的目标检测精度。然而,R-CNN有明显的缺点:
- 训练是一个多阶段的管道。 R-CNN首先使用日志丢失对对象建议进行微调。然后,它使SVM适合ConvNet功能。这些支持向量机充当目标检测器,取代通过微调学习的softmax分类器。在第三个训练阶段,学习边界盒回归函数。
- 训练在空间和时间上都很昂贵。 对于支持向量机和边界盒回归器训练,从每幅图像中的每个目标建议中提取特征并写入磁盘。对于非常深的网络,如VGG16,此过程需要2.5 GPU天来处理VOC07 trainval集合的5k图像。这些功能需要数百GB的存储空间。
- 目标检测速度慢。 在测试时,从每个测试图像中的每个对象方案中提取特征。VGG16的检测需要47s/图像(在GPU上)。
R-CNN速度慢,因为它对每个对象建议执行ConvNet向前传递,而不共享计算。空间金字塔池网络(SPPnets)[11]通过共享计算加速R-CNN。SPPnet方法计算整个输入图像的卷积特征映射,然后使用从共享特征映射中提取的特征向量对每个目标方案进行分类。通过max将方案内的特征映射部分合并成一个固定大小的输出(例如,6×6),为方案提取特征。多个输出大小被合并,然后像空间金字塔池一样连接起来[15]。SPPnet在测试时将R-CNN加速10-100倍。由于快速的特征提取,训练时间也减少了3倍。
SPPnet也有明显的缺点。与R-CNN一样,训练是一个多阶段的流水线,包括提取特征、使用日志丢失对网络进行微调、训练支持向量机,最后拟合边界盒回归器。功能也会写入磁盘。但与R-CNN不同,在[11]中提出的微调算法不能更新空间金字塔池之前的卷积层。不出所料,这种限制(固定卷积层)限制了非常深网络的精度。
1.2 贡献
我们提出了一种新的训练算法,弥补了R-CNN和SPPnet的不足,同时提高了它们的速度和精度。我们称这种方法为快速R-CNN,因为它的训练和测试速度相对较快。快速R-CNN方法具有以下几个优点:
- 比R-CNN,SPPnet更高的检测质量(mAP)
- 训练是单阶段的,使用多任务损失
- 训练可以更新所有网络层
- 特征缓存不需要磁盘存储
快速的R-CNN是用Python和C++编写的(CAFE(13)),它可以在开源MIT许可下使用,https://github.com/rbgirshick/fast-rcnn。
2. Fast R-CNN 体系结构和训练
图1说明了快速R-CNN架构。一个快速的R-CNN网络将整个图像和一组对象建议作为输入。该网络首先用几个卷积(conv)和max池层处理整个图像,以生成conv特征映射。然后,对于每一个目标提议,感兴趣区域(RoI)池层从特征映射中提取一个固定长度的特征向量。每个特征向量被输入一系列完全连接的(fc)层,最后分为两个兄弟输出层:一个在K个对象类上生成softmax概率估计值,再加上一个一网打尽的“背景”类,另一个层为每个K个对象类输出四个实数。每组4个值对其中一个K类的精确边界框位置进行编码。
2.1 RoI池化层
RoI池层使用max-pooling将任何有效区域内的特征转换成具有固定空间范围H×W(例如7×7)的小特征映射,其中H和W是独立于任何特定RoI的层超参数。在本文中,RoI是一个矩形窗口,它是一个conv特征映射。每个RoI由一个四元组(r, c, h, w)定义,该元组指定其左上角(r, c)及其高度和宽度(h, w)。
RoI Max Pooling的工作原理是将h×wroi窗口划分为大小近似为h/h×w/w的子窗口的h×w网格,然后将每个子窗口中的值合并到相应的输出网格单元中。池独立地应用于每个要素映射通道,就像标准的最大池一样。RoI层只是SPPnets[11]中使用的空间金字塔池层的特例,其中只有一个金字塔层。我们使用[11]中给出的池化子窗口计算。
图1. 快速R-CNN架构。输入图像和多个感兴趣区域(roi)被输入到完全卷积网络中。每个感兴趣区域被汇集到一个固定大小的特征映射图中,然后通过全连通层(FCs)映射到一个特征向量。该网络每个RoI有两个输出向量:softmax概率和每类边界盒回归偏移。该体系结构是经过端到端的多任务丢失训练的
2.2 从预训练网络初始化
我们用三个预先训练过的ImageNet[4]网络进行实验,每个网络都有5个最大池层,5到13个conv层(有关网络详细信息,请参阅第4.1节)。当一个预先训练好的网络初始化一个快速的R-CNN网络时,它会经历三次转换。
首先,最后一个max pooling层被RoI池层代替,该层通过设置H和W与网络的第一个完全连接层兼容来配置(例如,对于VGG16,H=W=7)。
其次,网络的最后一个完全连接层和softmax(为1000向ImageNet分类而训练)被前面描述的两个同级层(完全连接层和softmax over K+1类别和类别特定的边界盒回归器)所取代。
第三,对网络进行修改以获取两个数据输入:图像列表和这些图像中的RoI列表。
2.3 微调用于检测
用反向传播方法训练所有网络权值是快速R-CNN的一个重要功能。首先,让我们解释一下为什么SPPnet无法更新空间金字塔池化层以下的权重。
根本原因是,当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播效率很低,这正是R-CNN和SPPnet网络的训练方式。效率低下的原因是每个RoI可能有一个非常大的接受野,通常跨越整个输入图像。由于整个训练过程都是大的,所以整个训练过程都必须经过。
我们提出了一种更有效的训练方法,利用训练过程中的特征共享。在快速R-CNN训练中,随机梯度下降(SGD)小批量分层采样,首先对N幅图像进行采样,然后对每个图像的R/nroi进行采样。关键的是,来自同一图像的roi在向前和向后的过程中共享计算和内存。使N变小减少了小批量计算。例如,当使用N=2和R=128时,所提出的训练方案比从128幅不同的图像中抽取一个感兴趣区域(即R-CNN和SPPnet策略)快64倍左右。
这种策略的一个问题是,由于同一幅图像的roi是相关的,因此可能导致训练收敛缓慢。这个问题似乎不是一个实际问题,我们在N=2和R=128时使用比R-CNN更少的SGD迭代来获得很好的结果。
除了分层采样外,Fast R-CNN还使用了一个优化阶段的简化训练过程,该阶段联合优化了softmax分类器和边界盒回归器,而不是在三个单独的阶段训练softmax分类器、SVM和回归器[9,11]。该过程的组成部分(损失、小批量采样策略、通过RoI池层的反向传播以及SGD超参数)如下所述。
多任务损失。 快速R-CNN网络有两个兄弟输出层。第一个输出一个离散的概率分布(每个RoI),p=(p0,…,pk),超过K+1类别。与往常一样,p是由softmax在完全连接层的K+1输出上计算的。第二个同级层为每个K个对象类输出边界盒回归偏移,用K索引。我们使用[9]中给出的tk的参数化,其中tk指定相对于对象建议的比例不变平移和日志空间高度/宽度偏移。
每一个RoI都是用一个标记为真实值的回归盒和一个标记为真实值的回归盒对每个目标进行训练:
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) , . . . . . . . . . . . . ( 1 ) L(p,u,t^u,v) = L_{cls} (p,u) + λ[u ≥ 1]L_{loc}(t^u,v),…………(1) L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v),…………(1)
其中, L c l s ( p , u ) = − log p u L_{cls}(p,u) = −\log p_u Lcls(p,u)=−logpu是真实类别 u u u的对数损失。
第二个任务损失 L l o c L{loc} Lloc是在u类的真边界盒回归目标的元组上定义的, v = ( v x , v y , v w , v h ) v=(v_x, v_y, v_w, v_h) v=(vx,vy,vw,vh)和预测的元组 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),同样针对 u u u类别。当u≥1时,Iverson括号指示符函数[u≥1]计算为1,否则为0。按照惯例,catch all后台类被标记为u=0。对于背景roi,没有基本真实边界框的概念,因此忽略了Lloc。我们使用回归框进行回归:
L l o c ( t u , v ) = ∑ i ∈ x , y , w , h s m o o t h L 1 ( t i u − v i ) , . . . . . . . . . . . . . ( 2 ) L_{loc}(t^u, v) =\sum_{i∈{x,y,w,h}}smooth_{L_1}(t^u_i−v_i),………….(2) Lloc(tu,v)=i∈x,y,w,h∑smoothL1(tiu−vi),………….(2)
其中,
s m o o t h L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e , . . . . . . . . . . . . . ( 3 ) smooth_{L_1}(x) =\begin{cases} 0.5x^2 & if |x| < 1 \\ |x|−0.5 & otherwise, \\ \end{cases}………….(3) smoothL1(x)={ 0.5x2∣x∣−0.5if∣x∣<1otherwise,.............(3)
与R-CNN和SPPnet中使用的L2损失相比,L1损失对异常值的敏感度较低。当回归目标是无界的时,带二语损失的训练可能需要仔细调整学习率,以防止梯度的爆炸式增长。公式3消除了这种敏感性。
等式1中的超参数λ控制着两个任务损失之间的平衡。我们将基本真理回归目标vi规范化为具有零均值和单位方差。所有实验均采用λ=1。
我们注意到\[6\]使用一个相关的损失来训练一个类不可知的对象建议网络。我们的分类系统和我们的分类系统不同。OverFeat\[19\]、R-CNN\[9\]和SPPnet\[11\]也训练分类器和边界盒定位器,但是这些方法使用分段训练,我们发现这对于快速R-CNN来说是次优的(第5.1节)。
**小批量取样。** 在微调过程中,每个SGD小批都是由N=2图像构造的,随机选择一致(正如通常的做法,我们实际上迭代数据集的排列)。我们使用的是小批量R=128,从每个图像中采样64个ROI。如\[9\]所述,我们从对象提案中获取25%的ROI,这些提案的联合(IoU)上的交点与地面真相边界框至少0.5重叠。这些ROI包括用前景对象类标记的示例,即u≥1。其余ROI是从以下\[11\]中具有最大基真理的目标提案中取样的\[0.1,0.5\]。这些是背景示例,并标记为u=0。0.1的下限似乎是硬示例挖掘的启发式\[8\]。训练过程中,图像水平翻转,概率为0.5。未使用其他数据增强。
**通过RoI池化层进行反向传播。** 反向传播通过RoI池层路由衍生品。为了清晰起见,我们假设每个小批量(N=1)只有一个图像,尽管N>1的扩展很简单,因为前向过程独立地处理所有图像。
让 x i ∈ R x_i ∈ R xi∈R成为第i个激活输入到RoI池化层,让 y r j y_{rj} yrj成为第R个ROI层的第j个输出。RoI池层计算KaTeX parse error: Expected ‘}‘, got ‘EOF’ at end of input: …rj}=x_{i∗(r, j),其中 i ∗ ( r , j ) = a r g m a x i ′ ∈ R ( r , j ) x i ′ i∗(r, j)=argmax_{i’∈R(r, j)}x_i’ i∗(r,j)=argmaxi′∈R(r,j)xi′。 R ( r , j ) R(r, j) R(r,j)是子窗口中输入的索引集,输出单元y_{rj} 最大池化。一个 x i x_i xi可以分配给几个不同的输出 y r j y_{rj} yrj。
ROI池化层的向后函数通过以下的ARGMAX开关计算每个输入变量席的损失函数的偏导数:
∂ L ∂ x i = ∑ r ∑ j [ i = i ∗ ( r , j ) ] ∂ L ∂ y r j \frac{\partial L}{\partial x_i}=\sum_r\sum_j[i=i*(r,j)]\frac{\partial L}{\partial y_{rj}} ∂xi∂L=r∑j∑[i=i∗(r,j)]∂yrj∂L
换句话说,对于每个小批量RoI r r r和每个池输出单元 y r j y_{rj} yrj,如果i是最大池化为 y r j y_{rj} yrj选择的argmax,则累加偏导数 ∂ L / ∂ y r j ∂L/∂y_{rj} ∂L/∂yrj。在反向传播中,偏导数 ∂ L / ∂ y r j ∂L/∂y_{rj} ∂L/∂yrj已经由RoI池化层顶部的层的向后函数计算。
SGD超参数。 用于softmax分类和边界盒回归的全连通层分别从标准偏差为0.01和0.001的零均值高斯分布初始化。偏差初始化为0。所有层对权重使用每层学习率1,对偏差使用2,全局学习率为0.001。当在VOC07或VOC12 trainval上进行培训时,我们运行SGD进行30k小批量迭代,然后将学习率降低到0.0001,然后再培训10k次迭代。当我们在更大的数据集上训练时,我们运行SGD进行更多的迭代,如后面所述。动量为0.9,参数衰减为0.0005(关于权重和偏差)。
2.4 尺度不变性
我们探索了两种实现尺度不变目标检测的方法:(1)通过“蛮力”学习和(2)使用图像金字塔。这些策略遵循[11]中的两种方法。在brute-force方法中,在训练和测试期间,每个图像都以预定义的像素大小进行处理。网络必须直接从训练数据中学习尺度不变的目标检测。
相比之下,多尺度方法通过图像金字塔为网络提供近似的尺度不变性。在测试时,图像金字塔被用来近似地缩放和规格化每个对象的提议。在多尺度训练中,我们在每次对图像进行采样时随机抽取一个金字塔尺度,作为数据增强的一种形式。由于GPU内存的限制,我们只对较小的网络进行多尺度训练。
3. Fast R-CNN检测
一旦一个快速的R-CNN网络被微调,检测就只相当于运行一个前向传递(假设对象建议是预先计算好的)。网络以图像(或图像金字塔,编码为图像列表)和R对象建议列表作为输入进行评分。在测试时,R通常在2000左右,尽管我们将考虑它更大(≈45k)的情况。当使用图像金字塔时,每个RoI被分配到比例,使得缩放的RoI在区域中最接近2242像素[11]。
对于每个测试RoI r r r,前向传递输出一类后验概率分布p和一组预测的相对于r的边界盒偏移量(K类中的每一类都得到自己的精确边界盒预测)。我们使用估计概率 P r ( c l a s s = k ∣ r ) ≜ p k Pr(class=k | r)\triangleq p_k Pr(class=k∣r)≜pk为每个对象类k分配一个检测置信度。然后,我们使用R-CNN[9]中的算法和设置对每个类独立地执行非最大值抑制。
3.1 截断奇异值分解以加快检测速度
对于全图像分类,与conv层相比,计算全连通层所花费的时间很小。相反,对于检测,要处理的roi的数量很大,并且近一半的前向传递时间用于计算完全连接的层(参见图2)。通过使用截断SVD压缩大的完全连接层,可以很容易地加快速度[5,23]。
在该技术中,由 u × v u×v u×v权重矩阵W参数化的层近似分解为
W ≈ U ∑ t V T . . . . . . . . . . . . . . . . . ( 5 ) W\approx U\sum_t V^T……………..(5) W≈Ut∑VT……………..(5)
使用SVD。在这种因式分解中,U是由W的第一个左奇异向量组成的 u × t u×t u×t矩阵, ∑ t ∑_t ∑t是包含W的前t个奇异值的 t × t t×t t×t对角矩阵,V是包含W的第一个t右奇异向量的 v × t v×t v×t矩阵。截断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 ∑_tV^T ∑tVT(无偏差),第二层使用U(原始偏差与W相关)。这种简单的压缩方法在RoI数目很大的情况下具有很好的加速效果。
4. 主要成果
三个主要结果支持了本文的贡献:
- 2010年和2012年VOC07最新地图
- 与R-CNN、SPPnet相比的快速训练和测试
- 对VGG16中的conv层进行微调可以改善mAP
4.1 实验启动
我们的实验使用了三个预先训练好的在线ImageNet模型。2第一个是R-CNN[9]的CaffeNet(基本上是AlexNet[14])。我们也可以把这个CaffeNet称为“small”。第二个网络是来自[3]的VGG_CNN_M_1024,其深度与S相同,但更宽。我们称这种网络模型为M,表示“中等”。最后一个网络是[20]中的非常深的VGG16模型。我们称之为模型试验,因为这一节称之为最大规模的模型。在本节中,所有实验均采用单尺度训练和测试(s=600;详见第5.2节)。
4.2 VOC 2010 和 VOC 2012 上的结果
在这些数据集上,我们将Fast R-CNN(简称FRCN)与来自公共排行榜的comp4(外部数据)轨道上的顶级方法进行比较(表2,表3)。对于NUS_NIN_c2000和BabyLearning方法,目前还没有相关的出版物,我们无法找到所用ConvNet架构的确切信息;它们是网络设计中网络的变体[17]。所有其他方法都是从同一个预先训练的VGG16网络初始化的。
Fast R-CNN在VOC12上获得了最高的结果,mAP为65.7%(额外数据为68.4%)。它也比其他方法快两个数量级,这些方法都是基于“慢”的R-CNN管道。在VOC10上,segdepm[25]实现了比Fast R-CNN更高的mAP(67.2%对66.1%)。segdepm是针对VOC12 train val plus分段注释进行训练的;它的目的是通过使用马尔可夫随机场来推理R-CNN检测和O2P[1]语义分割方法的分段来提高R-CNN的准确性。快速R-CNN可以替换成segdepm来代替R-CNN,这可能会产生更好的结果。当使用扩大的07++12训练集(见表2标题)时,Fast R-CNN的地图增加到68.8%,超过SegDeepm。
4.3 VOC 2007 上的结果
在VOC07上,我们比较了快速R-CNN与R-CNN和SPPnet。所有方法都从同一个预先训练的VGG16网络开始,并使用边界盒回归。VGG16 SPPnet结果由[11]的作者计算。SPPnet在训练和测试中使用五种量表。与SPPnet相比,Fast R-CNN的改进表明,尽管Fast R-CNN使用单一尺度的训练和测试,但对conv层进行微调可以显著提高mAP(从63.1%提高到66.9%)。R-CNN达到了66.0%的地图。作为次要的一点,SPPnet是在没有PASCAL标记为“困难”的例子的情况下训练的。删除这些例子将快速R-CNN映射提高到68.1%。所有其他的实验都使用“困难”的例子。
表1. VOC 2007测试检测平均精度(%)。所有方法都使用VGG16。训练集密钥:07:VOC07 trainval,07\diff:07,无“困难”示例,07+12:07和VOC12 trainval的联合。SPPnet结果由[11]的作者编写
表2. VOC 2010测试检测平均精度(%)。BabyLearning使用基于[17]的网络。所有其他方法都使用VGG16。训练集键:12:VOC12 trainval,属性:专有数据集,12+seg:12带分段注释,07++12:VOC07 trainval、VOC07 test和VOC12 trainval的联合
表3. VOC 2012测试检测平均精度(%)。BabyLearning和NUS_NIN_c2000使用基于[17]的网络。所有其他方法都使用VGG16。训练集密钥:见表2,未知
4.4 训练和测试时间
快速的培训和测试时间是我们的第二大成果。表4比较了Fast R-CNN、R-CNN和SPPnet在VOC07上的训练时间(小时)、测试速率(每幅图像秒数)和映射。对于VGG16,Fast R-CNN处理图像的速度比R-CNN快146倍,不截断SVD,处理速度213倍。培训时间减少9倍,从84小时减少到9.5小时。与SPPnet相比,快速R-CNN训练VGG16的速度比SPPnet快2.7倍(9.5小时vs.25.5小时),在没有截短SVD的情况下测试速度提高了7倍,或者使用它的速度提高了10倍。Fast R-CNN还消除了数百GB的磁盘存储,因为它不缓存功能。
表4. Fast R-CNN、R-CNN和SPPnet中相同模型的运行时比较。Fast R-CNN使用单标度模式。SPPnet使用[11]中规定的五个尺度。由[11]的作者提供的时间。时间是在Nvidia K40 GPU上测量的
截短SVD。 截断SVD可以减少30%以上的检测时间,mAP只有一个小的(0.3%的年龄点)下降,而且不需要在模型压缩后进行额外的微调。图2说明了如何使用VGG16的fc6层中的25088×4096矩阵的前1024个奇异值和来自4096×4096 fc7层的前256个奇异值来减少运行时,并且在mAP中几乎没有损失。进一步的加速是有可能的更小的下降地图,如果一个微调后再次压缩。
图2. 截断SVD前后VGG16的定时。在SVD之前,完全连接的层fc6和fc7占用了45%的时间
4.5 微调哪些层?
对于SPPnet论文[11]中考虑的深度较低的网络,仅对完全连接的层进行微调似乎就足以获得良好的精度。我们假设这个结果不适用于非常深的网络。为了验证微调conv层对VGG16的重要性,我们使用Fast R-CNN进行微调,但冻结13个conv层,以便只有完全连接的层学习。这种消融模拟单尺度SPPnet训练,使mAP从66.9%降低到61.4%(表5)。这个实验验证了我们的假设:通过RoI池层进行训练对于非常深的网络非常重要。
表5. 限制为VGG16微调哪些层的效果。微调≥fc6模拟SPPnet训练算法[11],但使用单一尺度。SPPnet L结果使用五个量表获得,速度成本显著(7倍)
这是否意味着所有的conv层都应该进行微调?简言之,没有。在较小的网络(S和M)中,我们发现conv1是通用的和任务无关的(众所周知的事实[14])。允许conv1学习,或者不学习,对mAP并没有任何有意义的影响。对于VGG16,我们发现只需要更新conv3_1及以上的层(13个conv层中的9个)。这一观察结果是务实的:(1)与从conv3 1中学习相比,从conv2_1更新会使训练速度减慢1.3倍(12.5小时vs.9.5小时);以及(2)从conv1_1更新时,会超过GPU内存。从conv2_1向上学习时,mAP的差异仅为+0.3分(表5,最后一列)。本文中的所有快速R-CNN结果使用VGG16微调层conv3_1和更高版本;所有实验都使用模型S和M微调层conv2和更高版本。
5. 设计评估
我们进行了实验来了解R-CNN与R-CNN和SPPnet相比有多快,以及评估设计决策。按照最佳实践,我们在PASCAL VOC07数据集上进行了这些实验。
5.1 多任务训练有帮助吗?
多任务训练非常方便,因为它避免了对连续训练任务的管道进行管理。但它也有可能改善结果,因为任务通过共享表示(ConvNet)相互影响[2]。多任务训练能提高Fast R-CNN的目标检测精度吗?
为了测试这个问题,我们训练只使用公式1中分类损失L cls的基线网络(即设置λ=0)。模型S、M和L的这些基线打印在表6中每组的第一列中。请注意,这些模型没有边界框回归。下一步(每组第二列),我们使用多任务损失(等式1,λ=1)训练的网络,但我们在测试时禁用边界盒回归。这将隔离网络的分类精度,并允许与基线网络进行苹果对苹果的比较。
表6. 多任务训练(每组第四列)比分段训练(每组第三列)改善mAP
在所有三个网络中,我们观察到多任务训练相对于单独的分类训练提高了纯粹的分类精度。改进范围从+0.8到+1.1个地图点,显示出多任务学习的一致积极效果。
最后,我们取基线模型(只训练分类损失),固定在边界盒回归层上,在保持所有其他网络参数不变的情况下,用L-loc对其进行训练。每组的第三列显示了这个阶段性训练方案的结果:mAP比第一列有所改善,但是阶段性训练在多任务训练下进行(每组第四列)。
5.2 尺度不变性:暴力还是精细?
我们比较了两种实现尺度不变目标检测的策略:暴力学习(单尺度)和图像金字塔(多尺度)。在这两种情况下,我们都将图像的比例s定义为其最短边的长度。
所有单尺度实验都使用s=600像素;对于某些图像,s可能小于600,因为我们将图像的最长边限制在1000像素,并保持图像的纵横比。在对这些值进行微调时,在VGPU内存中选择了这些值。较小的模型不受内存限制,可以从较大的s值中获益;但是,为每个模型优化s不是我们主要关心的问题。我们注意到PASCAL图像平均为384×473像素,因此单比例设置通常会将图像的采样率提高1.6倍。因此,RoI池层的平均有效步幅约为10像素。
在多尺度设置中,我们使用了文献[11]中指定的相同的五个尺度(s∈{480576688641200})来与SPPnet进行比较。然而,为了避免超过GPU内存,我们将最长边限制在2000像素。
表7显示了使用一个或五个比例尺进行训练和测试时的模型S和M。也许[11]中最令人惊讶的结果是单尺度检测的性能几乎和多尺度检测一样好。我们的研究结果证实了他们的结论:深层ConvNets善于直接学习尺度不变性。多比例尺方法只提供了少量的地图增加,但计算时间却很大(表7)。在VGG16(model L)的情况下,我们仅限于使用单一的按实现细节划分的比例。然而,它得到了66.9%的地图,略高于R-CNN[10]报告的66.0%,尽管R-CNN使用“无限”的比例,即每个提议都被扭曲到一个标准大小。
由于单尺度处理在速度和精度之间提供了最佳的折衷,特别是对于非常深的模型,本小节以外的所有实验都使用单尺度训练和s=600像素的测试。
表7. 多尺度vs.单尺度。SPPnet ZF(类似于模型S)的结果来自[11]。单一规模的大型网络提供了最佳的速度/精度折衷。(由于GPU内存限制,L无法在我们的实现中使用多尺度)
5.3 我们需要更多的训练数据吗?
一个好的目标检测器在提供更多的训练数据时应该得到改进。朱等。[24]发现DPM[8]mAP在只有几百到几千个培训示例之后就会饱和。在这里,我们用VOC12 TranVal集合增加了VOC07训练集,大约将图像数量增加了三倍,达到16.5k,以评估快速R-CNN。扩大训练集可以使VOC07测试的mAP从66.9%提高到70.0%(表1)。在这个数据集上进行训练时,我们使用60k次小批量迭代,而不是40k次。
我们对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%。
5.4 SVM优于Softmax吗?
Fast R-CNN使用在微调过程中学习的softmax分类器,而不是像R-CNN和SPPnet中那样训练one-vs-rest线性支持向量机。为了了解这种选择的影响,我们在快速R-CNN中实现了带有硬负挖掘的后hoc支持向量机训练。我们使用与R-CNN相同的训练算法和超参数。
表8. Fast R-CNN使用softmax和SVM的对比(VOC 2007 mAP)
表8显示,在所有三个网络中,softmax的性能略优于SVM,+0.1到+0.8个映射点。这种影响很小,但它表明,与以前的多阶段训练方法相比,“一次性”微调就足够了。我们注意到,softmax不同于one-vs-rest-svm,在获得RoI时引入了类之间的竞争。
5.5 更多的建议总是更好吗?
有两种类型的对象检测器:使用稀疏对象建议集的对象检测器(例如,选择性搜索[21])和使用密集集的对象检测器(例如DPM[8])。对稀疏提议进行分类是一种级联[22],其中提议机制首先拒绝大量的候选对象,而留给分类器的是一个小集合来评估。当应用于DPM检测时,这种级联提高了检测精度[21]。我们发现,建议分类器级联也提高了快速R-CNN的准确性。
使用选择性搜索的质量模式,我们从每幅图像扫描1k到10k个建议,每次重新训练和重新测试模型M。如果方案纯粹是作为计算的角色,增加每个图像的建议数量应该不会损害mAP。
图3. 各种方案的VOC07 测试 mAP 和 AR
图3的建议稍微增加了一点。这个实验表明,用更多的建议来淹没深层分类器对精度没有帮助,甚至有轻微的伤害。
如果不进行实际的实验,很难预测这个结果。测量对象建议质量的最新技术是平均召回率(AR)[12]。当每个图像使用固定数量的建议时,使用R-CNN的几种建议方法AR与mAP有很好的相关性。图3示出了AR(实心红线)与mAP的相关性不好,因为每个图像的建议数是不同的。AR必须小心使用;由于更多建议而导致的AR较高并不意味着mAP会增加。幸运的是,使用M型进行培训和测试所需时间不到2.5小时。因此,快速R-CNN能够有效、直接地评估对象建议映射,这比代理度量更可取。
我们还研究了快速R-CNN当使用密集生成的盒(超过比例,位置和纵横比),在大约45k盒/图像的速率。这个稠密的集合足够丰富,当每个选择的搜索框被最接近的(在IoU中)密集的框替换时,mAP只下降1个点(到57.7%,图3,蓝色三角形)。
密集框的统计信息与选择性搜索框的统计数据不同。从2k个选择性搜索框开始,在随机增加1000个密集盒样本的情况下测试mAP。对于每个实验,我们重新训练和测试模型M。当这些密集的框被添加时,mAP下降的幅度比添加更多选择性搜索框时更大,最终达到53.0%。
我们还训练和测试快速R-CNN只使用密集盒(45k/图像)。此设置生成52.9%(蓝色钻石)的贴图。最后,我们检查是否需要使用具有硬负挖掘的支持向量机来处理密集箱型分布。SVM表现更差:49.3%(蓝圈)。
5.6 MS COCO上的初步结果
我们将Fast R-CNN(VGG16)应用于MS-COCO数据集[18],以建立初步基线。我们在80k图像训练集上训练了240k次迭代,并使用evaluation服务器在“test dev”集上进行了评估。PASCAL风格的地图是35.9%;新的COCO风格的AP,平均也超过IoU阈值,是19.7%。
6. 结论
本文提出了快速R-CNN,一种对R-CNN和SPPnet的干净、快速的更新。除了报告最新的检测结果,我们还提供了详细的实验,我们希望能提供新的见解。特别值得注意的是,稀疏物体的建议似乎可以提高探测器的质量。在过去,这个问题的成本(在时间上)太高了,但随着Fast R-CNN的出现,这个问题变得实际了。当然,可能存在一些尚未被发现的技术,允许密集的盒子执行稀疏的提议。这种方法,如果发展起来,可能有助于进一步加速目标检测。
致谢
感谢Kaiming He, Larry Zitnick, 和 Piotr Dollár 的有益讨论和鼓励。
还没有评论,来说两句吧...