(二)目标检测Fast R-CNN网络

Fast R-CNN网络架构

0. 摘要

Fast R-CNN在前人工作的基础上使用深度卷积网络,可以更有效地分类物体推荐。相比之前的工作,Fast R-CNN进行了多项创新,在提高了检测精度的同时,也提高了训练和测试速度。Fast R-CNN训练了一个超深VGG16网络,训练时间比R-CNN快9倍,测试时间快213倍,在PASCAL VOC2012上达到了更高的mAP。相比SPPnet,Fast R-CNN训练快3倍,测试快10倍,并且更加准确。

1. 介绍

近来,深度卷积网络在图像分类和物体检测精度上进展显著。相比物体分类,物体定位更具挑战,需要更加复杂的方法。由于其复杂性,当前的方法都是多阶段流水线模型训练,缓慢而粗放。复杂度源于检测需要物体的精准位置信息,带来了两个基本挑战【提出了检测问题的两个基本挑战】
一、大量候选位置需要处理(“推荐”proposals)。
二、候选框的位置比较粗糙,必须进一步细化才能精准定位。对这些问题的解决包括速度、精度或简易性。
本文将梳理现代卷积网络物体检测器的训练流程[9][11]。提出一个单阶段训练算法,既能学习“对推荐框进行分类”,也能“精细空间位置”。【引入新的方法】
最终得到的方法可以训练一个深度检测网络(VGG16[20]),比R-CNN快9倍,比SPPnet快3倍。运行时,该检测网络每0.3s处理一张图片(不包括物体推荐的时间),而且在PASCAL VOC2012上的准确度达到新的高度,mAP66%(而R-CNN为62%)。【引入新的方法】

1.1 R-CNN和SPPnet

【很客观的比较了两种已有方法的优缺点】
基于区域的深度卷积网络RCNN[9]通过使用“深度卷积网络“来分类,在物体proposal上达到了出色的物体检测成绩。但其缺点十分明显:

  1. 需要多阶段流水线训练。 R-CNN需要先使用log损失在物体的proposal上调优卷积网络,然后,还要让SVMs去适应卷机网络的特征。这些SVMs取代了通过调优学到的softmax分类器,成为物体检测器。在第三阶段,还要进行约束框回归。
  2. 训练费时费空间。 对于SVM和约束框回归的训练,特征是从每张图片的每个物体proposal中抽取出来再写到硬盘的。对于非常深的网络,比如VGG16,对VOC07训练验证集这个过程需要消耗2.5GPU天。这些特征需要数百G的存储空间。
  3. 物体检测非常慢。 测试阶段,每张测试图像的每个物体proposal都要进行特征抽取。VGG16检测每张图像需要在GPU上耗费47s。

R-CNN如此之慢,就是因为在每个proposal上都是用卷积网络,没有共享计算。空间金字塔池化网络(SPPnets)则通过共享计算加速了R-CNN。SPPnet方法对整张输入图像只计算一次卷积特征图,然后对每个对象proposal,使用从共享特征图中抽取出来的特征向量,进行分类。对于每一个推荐,通过最大池化推荐框内的部分特征图,到一个固定尺寸(比如6×6)的输出,来抽取特征。多个输出尺寸被池化,然后再使用空间金字塔池化进行连接。SPPnet在测试阶段加速了R-CNN大概10到100倍。训练时间也缩减了3倍,因为特征的抽取快了很多。
SPPnet也有明显的缺点。像R-CNN一样,它也训练一个多阶段流水线涉及到特征抽取、使用log loss调优网络,训练SVMs,最后再进行约束框回归。特征还要写到硬盘。但不同于R-CNN的是,调优算法没法更新空间金字塔池化层前面的卷积层。不出所料,这个限制(固定的卷积层)限制了非常深的网络的精度。

1.2 贡献

我们提出一个全新的训练算法,可以解决R-CNN和SPPnet的这些缺点,还能提高速度和精度。因为其在训练和测试阶段都明显地快,所以我们称之为Fast R-CNN。Fast R-CNN方法有多个优点:

  1. 更高的检测精度(mAP)
  2. 使用多任务loss进行单阶段训练
  3. 训练可以更新所有层
  4. 不需要硬盘存储特征缓存
    Fast R-CNN用Python和C++(Caffe[13])写成,以开源MIT协议开放在 https://github.com/rbgirshick/fast-rcnn。

2. Fast R-CNN架构和训练

下图展示了Fast R-CNN的架构。一个Fast R-CNN网络将整张图片和一组对象proposal作为输入。网络首先使用卷积网络和最大池化处理整张图像产生卷积特征图。然后对每个对象proposal,一个RoI(Region of Interest)池化层从特征图中抽取出一个固定尺寸的特征向量。每个特征向量传递给后续一系列的全连接层(fc),这些全连接层,最终分裂成两个并行的输出层,一个用于产生K+1(1代表背景)类的softmax概率,一个针对每个对象类别输出四个实数值,每组实数值编码了对应类别的约束框bbx的位置。

【训练细节】
• 输入是224×224的固定大小图片;
• 经过5个卷积层+2个降采样层(分别跟在第一和第二个卷积层后面);
• 进入ROIPooling层(其输入是conv5层的输出和region proposal,region proposal个数大约为2000个);
• 再经过两个output都为4096维的全连接层;
• 分别经过output各为21和84维的全连接层(并列的,前者是分类输出,后者是回归输出);
• 最后接上两个损失层(分类是softmax,回归是smoothL1);

 

 

进一步提升速度和无法优化网络的问题】大神提出了端到端训练的Fast R-CNN网络 。该网络用ROI(Region Of Interest)池化,可以看作空间金字塔池化的简化版本,即使用了一种池化尺度。此外,该网络将候选框回归任务也通过CNN实现,在卷积层后面的全连接层分为两支,一支用于识别目标类别,一支用于预测回归框所在位置及长宽。值得注意的是,为了实现端到端的训练,Fast R-CNN放弃了SVM分类器,而是选择微调后网络自身的softmax分类器。这样一来,特征提取,目标分类、候选框回归三部分可以同时进行端到端(end-to-end)训练。 (基于VGG16的Fast RCNN算法在训练速度上比RCNN快了将近9倍,比SPPnet快大概3倍;测试速度比RCNN快了213倍,比SPPnet快了10倍。在VOC2012上的mAP在66%左右)

2.1 ROI Pooling

由于region proposal的尺度各不相同,而期望提取出来的特征向量维度相同,因此需要某种特殊的技术来做保证。ROIPooling的提出便是为了解决这一问题的。
Roi pooling层也是pooling层的一种,只是针对于ROI们的pooling操作而已
Roi pooling层的过程就是为了将proposal抠出来的过程,然后resize到统一的大小。
Roi pooling层的操作如下:
• 1、根据输入的image,将Roi映射到feature map对应的位置;
• 2、将映射后的区域划分为相同大小的sections(H×W大小的网格sections数量和输出的维度相同);
• 3、对每个section进行max pooling操作;即每一个网格对应一个输出值)
• 4、将所有输出值组合起来便形成固定大小的feature map
【经后面研究,ROIpooling对非常深的网络很重要,也是增加了更深的可能性】
放上一张大佬的博客截图解释ROI来镇楼(如果侵权请联系小编就删):

 

2.2 训练样本

【从预训练网络中初始化】
我们实验了三个预训练ImageNet[4]网络,每个都有5个最大池化层,5-13个卷积层(见4.1节)。当用一个预训练的网络初始化一个Fast R-CNN网络需要经历三个转换。
一、最后的最大池化层要替换成RoI池化层,配置的参数H和W要与网络的第一个全连接层相适应(eg,对于VGG16来说,就是H=W=7)。
二、网络的最后一个卷积层和softmax(1000路ImageNet分类)层要替换成两个并行的层。一个是全连接层并输出K+1路的softmax,一个是类别相关的约束框回归器。
三、网络修改为接受两个数据输入:一组图像和一组这些图像的RoI。
【训练过程】
训练过程中每个mini-batch包含2张图像和128个region proposal(即ROI,64个ROI/张),其中大约25%的ROI和ground truth的IOU值大于0.5(即正样本),且只通过随机水平翻转进行数据增强。
Fast R-CNN在训练时通过共享训练使效率更高,比如每个mini-batch的训练样本来自N=2张输入图片,为了获取R=128个学习样本,需要从每张图片中采样R/N=64个ROI.由于对于同一张图片的不同ROI之间在前向传播和反向传播时是共享计算、共享内存的,因此相比于128个来自128个图片的ROI,网络有64倍的速度提升。

2.3 损失函数

我们知道Fast RCNN有两个输出,将多损失融合(分类损失和回归损失融合),【分类采用log loss(即对真实分类的概率取负log,分类输出K+1维),回归的loss和R-CNN基本一样。】

 

 


  • 多任务Loss:在此之前,不同的任务还是要训练不同的网络,从这里开始意识到卷积网络的特征提取的特性,从而用不同的损失函数来训练同一个网络的不同分支
    如何定义不同的任务也是很大的问题,不仅是分类、回归不同,差别很大的分类也是。

2.4 改进全连接层

 

由于卷积层计算针对的是一整张图片,而全连接层需要对每一个region proposal都作用一次,所以全连接层的计算占网络计算的将近一半(如下图)。作者采用SVD来简化全连接层计算。

2.5 训练整体架构总结

 

2.6 测试

2.6.1测试整体架构总结

 

一旦一个Fast R-CNN调优好,检测就是运行一次前向传播(假设物体推荐已经事先计算好了!)。网络对输入的图像(或者一个图像金字塔,编码成一系列图像)和R个对象推荐的列表进行打分。尽管我们一直分析更大的类别数量(≈ 45k),但测试阶段R一般都是2000左右。使用图像金字塔时,每个RoI都赋值给一个能让RoI接近2242像素的尺度[11]。
对于每个测试RoI r,前向传播输出类的后验概率分布p和一个预测的约束框相对r的偏移值(对于每个类别K都有一个偏移量预测)。我们针对每个类别k对r赋予一个检测置信值,预估概率Pr(class=k|r)= p_k,然后使用对每个类别,分别应用R-CNN[9]中使用的非最大值抑制算法。

3. 思考ing

3.1 改进

• 对于整张图像先提取了泛化特征,这样减少了大量的计算量
• ROIPooling的提出,巧妙的解决了尺度放缩的问题
• 回归一同放进网络训练,用softmax代替SVM分类器,更加简单高效

3.2 不足

region proposal的提取仍然采用selective search,整个检测流程时间大多消耗在这上面(生成region proposal大约2~3s,而特征提取+分类只需要0.32s),之后的Faster RCNN的改进之一便是此点。

3.3 结果

(1) VOC07,2010和2012上最高水平的mAP
(2) 相比R-CNN,SPPnet更加快速的训练和测试时间
(3) VGG16上调优的卷积层提高了mAP
实验环境:
我们的实验使用三个预训练好的ImageNet模型,都可以在网上获取到。第一个是来自R-CNN的CaffeNet(本质是一个AlexNet[14])。我们用S指代这个模型,表示“small”。第二个网络是VGG_CNN_M_1024[3],和S有同样的深度,但更宽,称为M,代表“Medium”。最后一个是非常深的VGG16模型[20]。既然这个模型是最大的,我们称为L。本节中所有的实验都是单一尺度训练和测试(s=600)。

3.4 mAP

FRCN相比其他算法表现更好,且注意到,VOC12由于数据集更大而使得模型效果提高很多。(这一角度也说明了数据对于当前深度学习的重要性不容忽视!)
【数据量增加 模型的准确率提高 二者存在一定关系】

3.5 速度【训练和测试时间】

快速的训练和测试是我们的第二个主要成果。
Fast R-CNN还不需要数百GB的磁盘存储,因为它不缓存特征。

 

4.设计评价分析

我们设计了一些实验来理解Fast R-CNN,并评价这些设计决定。按照最佳实践,这些实验在VOC07数据集上进行。

4.1 多任务训练有帮助吗?【当然】

多任务训练很方便,因为它避免了管理顺序训练的任务的管道。但它也有可能改善结果,因为任务通过共享表示(ConvNet)相互影响[2]。多任务训练是否可以提高fast R-CNN中的物体检测精度?



这些基线用于模型S,M和L
• 第一列,【仅采用分类训练,测试也没有回归】。为了测试这个问题,我们训练了仅使用分类损失Lcls的基线网络,在公式1(即设定λ= 0)。这些模型没有边界框回归量。
• 第二列,【采用论文中的分类+回归训练,测试没有回归】我们采用经过多任务损失训练的网络(公式1,λ= 1),但我们在测试时禁用了边界框回归。这隔离了网络的分类准确性,并允许与基线网络进行一对一的比较。
在所有三个网络中,我们观察到相对于单独的分类训练,多任务训练提高了纯分类准确性。改进范围从+0:8到+1:1 mAP点,显示了多任务学习的一致积极效果。
【列2battle列1:多任务训练可以提高分类任务的准确性】
第三列,【采用分段训练,测试没有回归】我们采用基线模型(仅使用分类损失进行训练),在边界框回归层上进行处理,并使用Lloc训练它们,同时保持所有其他网络参数冻结。mAP比第一列有所改进,但阶段性训练的表现不如多任务训练(每组第四列)。
第四列【采用论文中的分类+回归训练,测试有回归】
【列4 battle 列3:阶段性训练不如多任务训练】

4.2 尺度不变性:蛮力或技巧?【蛮力】

我们比较了实现尺度不变物体检测的两种策略:
蛮力学习(单一尺度)和图像金字塔(多尺度)。
在任何一种情况下,我们都将图像的比例s定义为其最短边的长度。所有单尺度实验都使用s = 600像素;对于某些图像,s可能小于600,因为我们将最长的图像侧限制为1000像素并保持图像的纵横比。选择这些值使得VGG16在微调期间适合GPU内存。较小的模型不受内存限制,可以从较大的s值中受益;但是,为每个模型优化s不是我们主要关注的问题。
我们注意到PASCAL图像平均为384×473像素,因此单尺度设置通常将图像上采样1.6倍。因此,RoI汇集层的平均有效步幅≈10个像素。
在多尺度设置中,我们使用[11]中指定的相同的五个尺度(s 2 f480; 576; 688; 864; 1200g)以便于与SPPnet进行比较。但是,我们将最长边设为2000像素,以避免超过GPU内存。

 

表7显示了使用一个或五个尺度进行训练和测试时的模型S和M.也许[11]中最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的研究结果证实了他们的结果:深度卷积网络擅长直接学习规模不变性。多尺度方法在计算时间内以较大的成本,提供了mAP的小幅增加(表7)。在VGG16(型号L)的情况下,我们使用单一比例受限于GPU的限制。然而,它实现了66.9%的mAP,略高于R-CNN报告的66.0%[10],尽管R-CNN使用“无限”尺度,因为每个提案都被扭曲到规范尺寸。
由于单尺度处理提供了速度和精度之间的最佳折衷,特别是对于非常深的模型,本小节之外的所有实验都使用单尺度训练和s = 600像素的测试。
【虽然SPP可以提升精度1%,但是速度和精度的battle之中,作者选择了速度快且精度还不错的但尺度检测 也为之后多尺度问题的解决发下伏笔??】

4.3我们需要更多的培训数据吗?【需要】

【此时观点,越多的训练数据越好】
当提供更多训练数据时,良好的物体探测器应该得到改善。Zhu等人 [24]发现DPM [8]的 mAP仅在几百到几千个训练样例后到达饱和。在这里,我们使用VOC12 train-val set增加VOC07 train-val set,图像数量增加3倍至16.5k,以评估Fast R-CNN。训练集将VOC07测试的mAP从66.9%提高到70.0%(表1)。对此数据集进行培训时,我们使用60k小批量迭代而不是40k。
我们对VOC10和2012进行了类似的实验,为此我们从VOC07 train-val,test和VOC12 train-val的联合构建了21.5k图像的数据集。在对该数据集进行训练时,我们使用100k SGD迭代并将学习率降低0:1×每40k次迭代(而不是每次30k)。对于VOC10和2012,mAP分别从66.1%提高到68.8%,从65.7%提高到68.4%。

4.4 SVM的表现优于softmax吗?【NOPE】

Fast R-CNN使用在微调期间学习的softmax分类器,而不是像在R-CNN和SPPnet中那样训练一对多线性SVM。为了理解这一选择的影响,我们在Fast R-CNN中采用难负例挖掘实现了SVM训练。我们使用R-CNN中相同的训练算法和超参数。

 

表8显示,对于所有三个网络,softmax略微优于SVM,+ 0.1至+0.8 mAP点。这种影响很小,但它表明,与以前的多阶段训练方法相比,“一次性”微调就足够了。我们注意到softmax与一对多SVM不同,在对RoI进行评分时引入了类之间的竞争。

4.5更多proposal总是更好吗?【慎重 适量加还凑合 无脑加GG】

存在(广泛地)两种类型的对象检测器:使用sparse set的对象proposal(稀疏集合,例如,选择性搜索[21])和使用dense set(密集集合,例如,DPM [8])的对象检测器。对稀疏proposal进行分类是一种级联[22],其中proposal机制首先拒绝大量候选者离开分类器,以用小的数据集进行评估。【此处认为 SS就是进行了筛选后,dense之类的就很多很密集无筛选】当应用于DPM检测时,该级联提高了检测精度[21]。我们发现proposal分类器级联也提高了Fast R-CNN精度的证据。【SS可以提高fast rcnn】
使用选择性搜索(SS)的质量模式,每次重新训练和重新测试模型M时,每个图像扫描1k到10k个proposal。如果proposal服务于纯粹的计算角色,增加每个图像的proposal数量不应该损害mAP。[proposal 服务于之后的分类,数量增加不应该损害精度]
随着proposal数量的增加,我们发现mAP上升然后略有下降(图3,蓝色实线)。这个实验表明,用更多的proposal淹没深度分类器并没有帮助,甚至有点伤害准确性。【太多的推荐并无卵用】
如果没有实际运行实验,这个结果很难预测。 一种最新评估:对象proposal质量的技术是 平均召回(AR)[12]。当每个图像所用固定数量的proposal时,AR与使用R-CNN的若干proposal方法的mAP很好地相关。图3示出了AR(实线红线)与mAP不完全相关,因为每个图像的proposal数量是变化的。AR必须小心使用;由于更多proposal,AR越高,并不意味着mAP会增加。幸运的是,使用M模型进行培训和测试的时间不到2.5小时。因此,快速R-CNN能够有效,直接地评估对象提议mAP,这比代理度量更好。
当使用密集生成的候选框(超过比例,位置和纵横比)时,我们还研究了Fast R-CNN,速率约为45k框/图像。这个密集的集合足够丰富,当每个选择性搜索框被其最接近的(在IoU)密集框中替换时,mAP仅下降1个点(到57.7%,图3,蓝色三角形)。
密集框的统计信息与选择搜索框的统计信息不同。从2k选择性搜索框SS开始,我们在添加随机样本1000×{2; 4; 6; 8; 10; 32; 45}测试mAP。对于每个实验,我们重新训练并重新测试模型M.当添加这些密集框时,mAP衰减比添加更多选择性搜索框时更强烈,最终达到53.0%。
【无脑随机添加密集框Map衰减快】
我们还使用密集框(45k /图像)训练和测试Fast R-CNN。此设置产生的mAP为52.9%(蓝色菱形)。最后,我们检查是否需要具有难负例挖掘的SVM来应对密集框分布。 SVM更糟糕:49.3%(蓝色圆圈)。【不咋地】

 

4.6初步的MS COCO结果

我们将Fast R-CNN(带有VGG16)应用于MS COCO数据集[18]以建立初步baseline。我们对240k迭代的80k图像训练集进行了训练,并使用评估服务器在“test-dev”集上进行评估。
PASCAL式mAP为35.9%;新的COCO式AP,其平均超过IoU门槛,为19.7%。

5.结论

本文提示了Fast R-CNN,一个清晰快速的R-CNN和SPPnet的升级版。除了报告了最赞的检测结果,我们还做了一些实验,希望提供更多的见解。尤其注意的是稀少的proposal似乎能提高检测器的质量。过去研究这个问题在时间上过于昂贵,但Fast R-CNN上变得可行。当然,也许会有未发现的密集框技术可以和稀疏推荐效果一样好。如果这种方法被开发出来,也许会进一步提升对象检测的表现。
【密集 vs 稀疏 论文conclusion在此结束 也就是告诉读者们,大佬开始想着Proposal的问题了,也在思考新的解决方案。而后的faster rcnn的解决方案也近似是密集的一种方式】

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值