Fast R-CNN

摘要

本文提出了一个快速基于区域的卷积神经网络方法,用于目标检测。Fast R-CNN在已有工作的基础上进行了创新,提高了训练和测试时间,同事也提高了检测精度。Fast R-CNN训练非常深的VGG16网络比R-CNN快9倍,测试时间快了213倍,在PASCAL VOC上获得更高的mAP。

简介

相比于图像分类,目标检测更具有挑战性,需要更加复杂的方法去解决,由于其复杂性,当前的方法采用多级流水线的方式训练模型,既慢且精度不高。
目标检测的复杂性是由于需要对目标进行准确的定位,这就产生了两个挑战。第一,大量的候选区域的位置需要进行处理;第二,这些候选区域只提供了粗略的定位,其必须被精细化以实现精确定位。这些问题的解决办法经常会影响网络的速度、精度或简单性。
在本文中,我们简化了最先进的基于卷积网络的目标检测器的训练过程。我们提出一个单阶段训练算法,联合学习候选框分类和修正他们的空间位置。

1.R-CNN和SPPnet
R-CNN的不足:
1.训练是一个多级流水线过程。先在候选区上利用损失函数微调卷积网络,然后再把卷积网络学到的特征送入SVM进行分类,最后学习检测框回归。
2.训练耗费时间和空间。
3.目标检测慢。
SSPnet:
与R-CNN不同的是,SSPnet共享计算。SPPnet5计算整个输入图像的卷积特征图,然后使用从共享特征图提取的特征向量来对每个候选框进行分类。通过最大池化将候选框内的特征图转化为固定大小的输出来提取针对候选框的特征。多个输出被池化,然后连接成空间金字塔池。
SSPnet也有一些不足。像R-CNN一样,SSPnet训练阶段也是多级流水线,涉及特征提取、微调网络、训练SVMs分类器,最后拟合检测框回归。但与R-CNN不同,已提出的微调算法不能更新在空间金字塔池之前的卷积层。这种限制(固定的卷积层)限制了深层网络的精度。

2.贡献
1.比R-CNN,SPPnet更高的检测精度
2.训练是使用多损失的单阶段过程
3.训练可以更新所有网络层
4.对特征缓存没有磁盘空间要求

Fast R-CNN架构和训练

1.Fast R-CNN架构如下图所示:
在这里插入图片描述
Fast R-CNN网络将整个图片和一系列候选区作为输入。网络首先使用若干卷积层和最大池化层对整个图片进行处理,产生卷积特征图。然后,RoI池化层对每个候选区从特征图中提取固定长度的向量,每个特征向量送入后续一系列完全连接层,最后的完全连接层分成两个平行输出层:一个输出在K个物体类和一个背景类上的softmax概率估计,一个输出K类中的每一类别的四个实数值。每组4个值表示一个类别的修正后的检测框位置。
2.RoI池化层
RoI池化层使用最大池化将任意有效感兴趣区的特征转换成一个小的特征图,它是固定长宽的H×W,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中使用的空间金字塔池层的特殊情况,其只有一个金字塔层。
3.从预训练网络初始化
我们实验了三个预训练的ImageNet网络,每个网络有五个最大池化层和五到十三个卷积层。当预训练网络初始化fast R-CNN网络时,其经历三个变换。
首先,最后的最大池化层由RoI池层代替,其将H和W设置为与网络的第一个全连接层兼容的配置(例如,对于VGG16,H=W=7)。
然后,网络的最后一个全连接层和Softmax(其被训练用于1000类ImageNet分类)被替换为前面描述的两个同级层(全连接层和K+1个类别的Softmax以及类别特定的检测框回归)。
最后,网络被修改为采用两个数据输入:图像的列表和这些图像中的RoI的列表。
4.微调
用反向传播训练所有网络权重是Fast R-CNN的重要能力。首先,让我们阐明为什么SPPnet无法更新低于空间金字塔池化层的权重。
根本原因是当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播是非常低效的,这正是训练R-CNN和SPPnet网络的方法。低效的部分是因为每个RoI可能具有非常大的感受野,通常跨越整个输入图像。由于正向传播必须处理整个感受野,训练输入很大(通常是整个图像)。
我们提出了一种更有效的训练方法,利用训练期间的特征共享。在Fast RCNN网络训练中,随机梯度下降(SGD)的小批量是被分层采样的,首先采样N个图像,然后从每个图像采样R/N个 RoI。关键的是,来自同一图像的RoI在向前和向后传播中共享计算和内存。减小N,就减少了小批量的计算。例如,当N=2和R=128时,得到的训练方案比从128幅不同的图采样一个RoI(即R-CNN和SPPnet的策略)快64倍。
这个策略的一个令人担心的问题是它可能导致训练收敛变慢,因为来自相同图像的RoI是相关的。这个问题似乎在实际情况下并不存在,当N=2和R=128时,我们使用比R-CNN更少的SGD迭代就获得了良好的结果。
除了分层采样,Fast R-CNN使用了一个精细的训练过程,在微调阶段联合优化Softmax分类器和检测框回归,而不是分别在三个独立的阶段训练softmax分类器,SVM和回归器。
5.多任务损失
Fast R-CNN网络具有两个同级输出层。 第一个输出在K+1个类别上的离散概率分布(每个RoI),p=(p0,…,pK)。 通常,通过全连接层的K+1个输出上的Softmax来计算p。第二个输出层输出检测框回归偏移,tk=(tkx,tky,tkw,tkh),对于由k索引的K个类别中的每一个。 我们使用3中给出的tktk的参数化,其中tk指定相对于候选框的尺度不变转换和对数空间高度/宽度移位。
6.小批量采样。
在微调期间,每个SGD的小批量由N=个图像构成,均匀地随机选择(如通常的做法,我们实际上迭代数据集的排列)。 我们使用大小为R=128的小批量,从每个图像采样64个RoI。 如在3中,我们从候选框中获取25%的RoI,这些候选框与检测框真值的IoU至少为0.5。 这些RoI只包括用前景对象类标记的样本,即u≥1。 剩余的RoI从候选框中采样,该候选框与检测框真值的最大IoU在区间[0.1,0.5)。 这些是背景样本,并用u=0标记。0.1的阈值下限似乎充当难负样本重训练的启发式算法。 在训练期间,图像以概率0.5水平翻转。不使用其他数据增强。
7.通过RoI池化层反向传播
反向传播通过RoI池化层。简单起见,我们假设每个小批量只有一张图片,因为前向传播是独立地处理每张图片,能很直接地扩展到N>1张图片。
x i x_i xi为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 X i ′ ∈ R ( r , j ) x i ′ i^*(r,j)=argmaxX_{i^{'}∈R(r,j)}x_{i^{'}} i(r,j)=argmaxXiR(r,j)xi,R(r,j)是输出单元 y r j y_{rj} yrj最大池化的子窗口中的输入的索引集合。单个 x i x_i xi可以被分配给几个不同的输出 y r j y_{rj} yrj
RoI池化层的反向传播函数通过如下argmax switches计算每个输入变量 x i x_i xi的损失函数的偏导数:
∂ L ∂ x i = ∑ r ∑ j [ i = i ∗ ( r , j ) ] ∂ L ∂ y r j \frac{∂L}{∂x_{i}}=\displaystyle\sum_{r}\displaystyle\sum_{j}[i=i^*(r,j)]\frac{∂L}{∂y_{rj}} xiL=rj[i=i(r,j)]yrjL
换句话说,对于每个小批量RoI r和对于每个池化输出单元 y r j y_{rj} yrj,如果i是 y r j y_{rj} yrj通过最大池化选择的argmax,则将这个偏导数 ∂ L ∂ y r j \frac{∂L}{∂y_{rj}} yrjL积累下来。在反向传播中, ∂ L ∂ y r j \frac{∂L}{∂y_{rj}} yrjL已经通过RoI池化层的最上面一层的反向传播函数计算了。
8.SGD超参数
用于Softmax分类和检测框回归的全连接层的权重分别使用具有方差0.01和0.001的零均值高斯分布初始化。偏置初始化为0。所有层的权重学习率为1倍的全局学习率,偏置为2倍的全局学习率,全局学习率为0.001。
9.尺度不变性
我们探索两种实现尺度不变对象检测的方法:(1)通过“brute force”学习和(2)通过使用图像金字塔。 在“brute force”方法中,在训练和测试期间以预定义的像素大小处理每个图像。网络必须直接从训练数据学习尺度不变性目标检测。
相反,多尺度方法通过图像金字塔向网络提供近似尺度不变性。 在测试时,图像金字塔用于大致缩放、规范化每个候选框。 在多尺度训练期间,我们在每次图像采样时随机采样金字塔尺度,作为数据增强的形式。由于GPU内存限制,我们只对较小的网络进行多尺度训练。

Fast R-CNN检测

一旦对Fast R-CNN网络进行微调,检测只比运行正向传播更多(假设候选区是预先计算的),网络将图像(或图像金字塔,编码为图像列表)和一系列的R个候选框作为输入。在测试的时候,R通常在2000左右,虽然我们会考虑某些更大情况(大概45k)。当使用图像金字塔时,每个RoI被缩放,使其最接近224个像素。
对于每一个测试RoI r,前向传播输出喉炎概率分布p和相对于r的预测的检测框偏移值集合(K个类别中的每一个获得其自己的精细检测框预测),我们使用估计概率 P r ( c l a s s = k ∣ r ) = p k P_r(class=k|r)=p_k Pr(class=kr)=pk为每个对象类别k分配检测置信度r,然后用来自R-CNN的算法和设置对每个类别分别进行非极大值抑制。
1.使用截断的SVD进行更快的检测
对整个图片进行分类时,相对于卷积层来说,花费在全连接层的时间
较少。相反,为了检测要进行处理的RoIs的数目花销很大,几乎一半的前向传播时间是花在了计算全连接层上。大的全连接层通过用截断的SVD进行压缩很容加速。
在这种技术中,层的u×v权重矩阵W通过SVD被近似分解为 W ≈ U ∑ t V T W≈U\sum_{t} V^T WUtVT,在这种分解中,U是一个u×t的矩阵,包括W的前t个左奇异向量, ∑ t \sum_{t} t是t×t对角矩阵,其包含W的前t个奇异值,并且V是v×t矩阵,包括W的前t个右奇异向量。截断SVD将参数数量从uv减少到t(u+v)个,如果t远小于min(u,v),则很有意义。 为了压缩网络,对应于W的单全连接层由两个全连接层替代,在它们之间没有非线性。这些层中的第一层使用权重矩阵 ∑ t V T \sum_{t}V^T tVT(没有偏置),并且第二层使用U(其中原始偏差与W相关联)。当RoI的数量大时,这种简单的压缩方法给出起到很好的加速。

设计评估

1.多任务训练是否有帮助?
多任务训练很方便,因为它可以避免管理顺序训练任务的流水线。但它也有可能改善结果,因为任务之间通过共享特征。
为了验证多任务训练是否能提高目标检测的精度,我们训练只使用分类损失的基准网络,这些基准是表6中S、M、L模型每组的第一列。注意这些模型没有检测框回归。每组的第二列,我们采用多任务损失训练网络,但是在测试的时候没有检测框回归。这就隔离了网络的分类精度,并且允许与基准网络进行一对一的比较。
在这里插入图片描述
从观察的三个网络可以得出,多任务训练相对于单独的分类训练提高了纯分类的精度,mAP提高的分数从0.8到1.1不等,显示了多任务训练一致的积极效果。
最后,采用基准网络模型(只使用了分类损失训练),加上检测框回归层,使用 L l o c L_loc Lloc训练他们,同时保持其他参数冻结。每组的第三列显示了这种逐级训练的结果:mAP相对于第一列改进了,但逐级训练表现不如多任务训练(每组第四列)。

2.尺度不变性:暴力或精细?
我们比较两个实现尺度不变性目标检测策略:暴力学习(单尺度)和图像金字塔(多尺度)。在任一情况下,我们将图像的尺度s定义为其最短边的长度。
所有单尺度实验使用s=600像素,对于一些图像,s可以小于600,因为我们保持横纵比缩放图像,并限制其最长边为1000像素。选择这些值使得VGG16在微调期间不至于GPU内存不足。较小的模型占用显存更少,所以可受益于较大的s值。然而,每个模型的优化不是我们的主要的关注点。我们注意到PASCAL图像平均是384×473像素的,因此单尺度设置通常以1.6倍的倍数上采样图像。因此,RoI池化层的平均有效步长约为10像素。
在多尺度设置中,我们使用指定的五个尺度(s∈{480,576,688,864,1200})以方便与SPPnet进行比较。但是,我们以2000像素为上限,以避免GPU内存不足。
表7显示了当使用一个或五个尺度进行训练和测试时的模型S和M。也许最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的研究结果能证明他们的结果:深度卷积网络擅长直接学习尺度不变性。多尺度方法消耗大量的计算时间仅带来了很小的mAP增加(表7)。在VGG16(模型L)的情况下,我们受限于实施细节仅能使用单个尺度。然而,它得到了66.9%的mAP,略高于R-CNN的66.0%19,尽管R-CNN在每个候选区域被缩放为规范大小,在意义上使用了“无限”尺度。
由于单尺度处理提供速度和精度之间的最佳折衷,特别是对于非常深的模型,本小节以外的所有实验使用s=600像素进行单尺度训练和测试。
在这里插入图片描述
3.是否需要更多的训练数据?
当提供更多的训练数据时,好的目标检测器应该会得到改善。 Zhu等人20发现DPM的mAP在只有几百到千个训练样本的时候就饱和了。在这里我们增加VOC07 trainval训练集与VOC12 trainval训练集,大约增加到三倍的图像,数量达到16.5k,以评估Fast R-CNN。扩大训练集提高了VOC07测试的mAP,从66.9%到70.0%。 当对这个数据集进行训练时,我们使用60k次小批量迭代而不是40k。
我们对VOC10和2012进行类似的实验,我们用VOC07 trainval,test和VOC12 trainval构造了21.5k图像的数据集。当训练这个数据集时,我们使用100k次SGD迭代和每40k次迭代(而不是每30k次)降低学习率10倍。对于VOC10和2012,mAP分别从66.1%提高到68.8%和从65.7%提高到68.4%。
4.SVMs是否比softmax性能更好?
Fast R-CNN在微调期间使用softmax分类器学习,而不是如在R-CNN和SPPnet中训练线性SVM。为了理解这种选择的影响,我们在Fast R-CNN中实施了具有难负采样重训练的SVM训练。我们使用与R-CNN中相同的训练算法和超参数。
在这里插入图片描述
对于所有三个网络,Softmax略优于SVM,mAP分别提高了0.1和0.8个点。这种效应很小,但是它表明与先前的多级训练方法相比,“一次性”微调是足够的。我们注意到,Softmax,不像SVM那样,在分类RoI时引入类之间的竞争。
5.是否越多的候选区越好?
存在(广义地)两种类型的目标检测器:使用候选区域的稀疏集合(例如,选择性搜索)和使用密集集合(例如DPM)。分类稀疏候选区是级联的一种类型,其中候选区机制首先拒绝大量候选者,让分类器来评估留下的小集合。当应用于DPM检测时,该级联提高了检测精度。我们发现提案分类器级联也提高了Fast R-CNN的精度。
使用选择性搜索的质量模式,我们扫描每个图像1k到10k个候选框,每次重新训练和重新测试模型M.如果候选框纯粹扮演计算的角色,增加每个图像的候选框数量不应该损害mAP。
在这里插入图片描述
我们发现mAP先上升,然后随着候选区域计数增加而略微下降(图3,实蓝线)。这个实验表明,用更多的候选区域没有帮助,甚至稍微有点伤害准确性。
如果不实际运行实验,这个结果很难预测。用于测量候选区域质量的最先进的技术是平均召回率(AR)。当对每个图像使用固定数量的候选区域时,AR与使用R-CNN的几种候选区域方法良好地相关。图3显示当每个图像的候选区域数量变化时,AR(实红线)与mAP不相关,因此AR必须小心使用,更多的候选区产生更高的AP,但并不意味着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%。
我们在只使用密集框(45k/图像)时还训练和测试了Fast R-CNN。此设置的mAP为52.9%(蓝色菱形)。最后,我们检查是否需要使用难样本重训练的SVM来处理密集框分布。 SVM做得更糟:49.3%(蓝色圆圈)。

结论

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值