Faster R-CNN

Fast R-CNN是一种基于VGG-16的高效目标检测模型,相较于R-CNN和SPPnet,它在速度和准确度上都有显著提升。本文介绍了Fast R-CNN的结构、训练过程及其实验结果,展示了其在PASCAL VOC2012数据集上达到66% mAP的卓越性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Abstract

Fast R-CNN主要是基于VGG-16而训练的, 训练和测试比R-CNN和SPPnet要快很多.

1. Introduction

基于目标检测问题的复杂性, 当前模型训练都很慢而且也不优美. 而造成复杂性的原因主要有两点:一是需要处理大量的候选目标区域(也就是proposals). 二是这些候选区域仅仅提供一个粗略的定位, 需要通过改善获得精准定位. 为了解决这两问题, 一般就在速度, 精准度, 简单性上面妥协了.

本文PASCAL VOC 2012 mAP = 66%(R-CNN = 62%)

1.1. R-CNN and SPPnet

R-CNN的缺点:

需要事先提取多个候选区域对应的图像。这一行为会占用大量的磁盘空间. 针对传统的CNN来说,输入的map需要时固定尺寸的,而归一化过程中对图片产生的形变会导致图片大小改变,这对CNN的特征提取有致命的坏处. 每个region proposal都需要进入CNN网络计算。进而会导致过多次的重复的相同的特征提取,这一举动会导致大大的计算浪费.

SPPNet通过proposals的公共计算所以速度比R-CNN快, SPPNet对于整个图像计算卷积特征映射, 然后使用从共享特征图中提取的特征向量对每个对象进行分类. 通过将提案内部的要素图部分最大池化为固定大小的输出,为proposal提取要素. 多个输出是池化的, 作为空间金字塔池连接起来.

sppnet也有明显的缺点。像r-cnn一样,训练是多级的,它包括提取特征,记录损失对网络进行微调,训练svms,并最终固定边界框回归器。特征也被写入磁盘。但与rcnn不同,文[11]中提出的微调算法不能更新空间金字塔池之前的卷积层。毫无疑问,这种限制(固定的卷积层)限制了非常深的网络的精度。

1.2. Contributions

本文的优点:

1. mAP更高

2. single-stage训练, multi-task损失.

3. 训练可以更新所有网络层

4. 不需要磁盘存储特征缓存

2. Fast R-CNN的结构和训练过程

Fast R-CNN输入固定大小的图像和目标proposals集合(通过selective search得到). 固定大小的图像通过一个CNN生成卷积特征图, 然后根据之前RoI(region of interest)框选择出对应的区域(既可以理解为将feature map映射回原图像). 对于每个区域提取固定长度的特征向量, 分别喂给两个FC层, 第一个通过softmax输出每个类别的概率. 第二个对于每一个类别都输出四个值, 代表边界框(xmin, ymin, xmax, ymax).

2.1. The RoI pooling layer

ROI是指的在SS(selective search)完成后得到的“候选框”在特征图上的映射, 它位于RoI Pooling之前.

RoI池化层使用最大池化将任何有效感兴趣区域内的特征转换为具有固定空间范围H×W的小特征映射,其中H和W是独立于任何特定RoI层的超参数.

RoI是一个矩形窗口, 每个RoI通过四个值定义(r, c, h, w), 其中(r, c)代表左上角, h,w代表高宽.

RoI max pooling通过将h x w RoI窗口划分为大约h/H X w/W大小的子窗口的HXW网格, 然后将每个窗口的值最大池化到相应的输出网络单元中.

(也就是说每个RoI大小为hXw像素, 用HXW的网格分割这个RoI, 显然每个网格中有h/H X w/W个像素, 这也就是子窗口, 对于每一个子窗口进行一个MaxPooling得到一个最大值. 最后一个hXw的RoI就会映射到一个HXW像素的输出窗口)

2.2. Initializing from pre-trained networks

用了三个预训练ImageNet网络, 5个max-pooling和5到30个conv层. 用预训练初始化Fast R-CNN需要三个转变:

1. RoI取代最后的max pooling, H和W要与第一个FC层相匹配.

2. 输出从1000分类转变到之上描述的形式

3. 网络采取两个数据输入: 一个图片list(图像金字塔) 和 这些图片里的一个RoI list

2.3. Fine-tuning for detection

首先,让我们阐明为什么sppnet无法更新空间金字塔池层以下的权重。

其根本原因是当每个训练样本(即ROI)来自不同的图像时,通过spp层的反向传播效率很低,这正是r-cnn和sppnet网络训练的方式。低效率源于这样一个事实:每个ROI可能有一个非常大的接受野,通常跨越整个输入图像。由于前传必须处理整个接收场,训练输入量很大(通常是整个图像)。

本文训练期间特征共享. SGD mini-batches 分层采样. 首先采样N个图像, 然后通过从每个图像采样R/N RoI. 来自相同图像的RoI在前向和后向传递中共享计算和存储器。制作N个小批量计算。例如,当使用N = 2且R = 128时,所提出的训练方案比从128个不同图像采样一个RoI(即,R-CNN和SPPnet策略)快大约64倍。

对该策略的一个担忧是它可能导致缓慢的训练收敛,因为来自相同图像的RoI是相关的。这个问题似乎不是一个实际问题,本文使用比R-CNN更少的SGD迭代,使用N = 2和R = 128获得了良好的结果。

除了分层采样之外,Fast R-CNN还使用简化的训练过程和一个微调阶段,共同优化softmax分类器和边界框回归器,而不是在三个不同的阶段训练softmax分类器,SVM和回归器[9,11]。该过程的组件(损失,小批量采样策略,通过RoI池化层的反向传播和SGD超参数)描述如下。

Multi-task loss.

每一个RoI被标记一个真实的类别u和一个真实边界框回归目标v. 使用一个多任务损失L对每个标记的roi进行分类和边界框回归的联合训练:

Lcls(p,u)=-logPu 是真实类u的log损失.

Lloc是第二个任务损失,  对于类别u, v =(Vx,Vy,Vw,Vh).

预测元组是:

The Iverson bracket indicator function[u ≥ 1] evaluates to 1 when u ≥ 1 and 0 otherwise.

边界框回归损失:(背景时Lloc被忽略. )

L1损失比L2对极端值不敏感. 当目标无限时, 训练L2需要仔细调整学习率来防止梯度爆炸.

Mini-batch sampling.

微调的时候, SGD mini-batch = 2, R = 128, so 每一个图片64个RoI.从IOU的目标proposals中获取25%的ROI与至少0.5的真实边界框重叠.

Back-propagation through RoI pooling layers.

Xi: 第i个对于RoI pooling 层的输入, Yrj: 第r个RoI的第J层输出.

R(r,j)是输出单元Yrj max pooling所在子窗口中输入的索引集。可以将单个Xi分配给多个不同的输出Yrj。

对于每一个输入Xi的导数.

SGD hyper-parameters.

0均值高斯初始化FC层权重, 所有层权重使用的学习率为1, 偏差为2, 全局学习率0.001. 30kmini-batch的迭代后, 学习率降低到0.0001, 并进行另外10k次迭代训练.  momentum=0.9, parameter decay = 0.0005.

2.4. Scale invariance

两种方式获取尺度不变目标检测: (1)"brute force"学习. (2)图像金字塔.

在"brute force"方法中,在训练和测试期间以预定义的像素大小处理每个图像。 网络必须直接从训练数据中学习尺度不变对象检测。 相反,多尺度方法通过图像金字塔向网络提供近似尺度不变性。

3. Fast R-CNN detection

(ROI是指的在SS(selective search)完成后得到的“候选框”在特征图上的映射)

一旦Fast R-CNN是微调好了, 那么对于检测来说无异于前向传播. 首先以一个图片(或者一个图像金字塔, 编码为一个图像list)和一串R(大约2000)个目标proposal作为CNN的输入得到分数. 当使用图像金字塔时,每个RoI被分配给比例,使得缩放的RoI接近224^2像素.

对于每一个测试RoI r, 前向输出一个后验概率分布P和一组相对于r的预测边界盒偏移量(每个k类都有自己的精化边界盒预测) . 对每一个类k使用评估概率

然后对每一个类使用最大抑制.

3.1. truncated SVD for faster detection(SVD(奇异值分解)加快检测速度)

对于全图像分类,与conv层相比,计算完全连接层所花费的时间较少。相反,为了检测,要处理的RoI的数量很大,并且将近一半的正向通过时间用于计算完全连接的层(参见图2)。 通过截断的SVD压缩它们可以很容易地加速大的完全连接层[5,23].

在该技术中,由u×v权重矩阵W参数化的层使用SVD近似地分解为:

U是包含W的前t个左奇异向量的uXt的矩阵. Σt是包含W的前t个奇异值的×t对角矩阵. V是包含W的前t个右奇异向量的vXt的矩阵.截断的SVD将参数计数从uv减少到t(u + v),如果t远小于min(u,v),则减少显著。为了压缩网络,对应于W的单个完全连接层被两个完全连接的层代替,它们之间没有非线性.这些层中的第一层使用权重矩阵ΣtV^T(并且没有偏差),第二层使用U(具有与W相关联的原始偏差).当RoI数量很大时,这种简单的压缩方法可以提供良好的加速。

4. Main results

三项主要成果支持了本文件的贡献:

1. State-of-the-art mAP on VOC07, 2010, and 2012

2. Fast training and testing compared to R-CNN, SPPnet

3. Fine-tuning conv layers in VGG16 improves mAP

4.1. Experimental setup

三个预训练模型(CaffeNet, VGG CNN M 1024, VGG 16):

https://github.com/BVLC/caffe/wiki/Model-Zoo

4.2/3. VOC 2007, 2010 and 2012 results

4.4. Training and testing time

Truncated SVD.

损失0.3%的mAP, 不需要在模型压缩后微调, Truncated SVD减少30%的决策时间.

4.5. Which layers to fine-tune?

通过RoI pooling层进行训练对于非常深的网是很重要的

但这不意味着对于每一层conv进行微调. 具体看论文.

5.Design evaluation

these experiments on the PASCAL VOC07 dataset.

5.1. Does multi-task training help?

多任务训练(每组第四列)比分段训练(每组第三列)提高地图。

multi-task避免了按顺序进行的训练任务, 也有改善结果的潜力,因为任务通过共享表示(ConvNet)相互影响。

设置λ = 0. 在所有三个网络中,我们观察到相对于单独的分类训练,多任务训练提高了纯分类准确性。改进范围从+0.8到+1.1 mAP点,显示了多任务学习的一致积极效果。最后,我们采用基线模型(仅使用分类丢失进行训练),在边界框回归层上进行处理,并使用Lloc训练它们,同时保持所有其他网络参数冻结。每组中的第三列显示了此阶段性培训方案的结果:mAP比第一列有所改进,但阶段性培训的表现不如多任务培训(每组第四列)。

5.2. Scale invariance: to brute force or finesse?

蛮力学习(单一尺度)和图像金字塔(多尺度)区别:

在任何一种情况下,我们都将图像的比例s定义为其最短边的长度. 所有单尺度实验都使用s = 600像素;对于某些图像,s可能小于600,因为我们将最长的图像侧限制为1000像素并保持图像的纵横比。我们注意到PASCAL图像平均为384×473像素,因此单尺度设置通常将图像上采样1.6倍。因此,RoI汇集层的平均有效步幅≈10个像素. 在多尺度设置中,我们使用[11]中指定的相同的五个尺度(s∈{480,576,688,864,1200})来促进与SPPnet的比较。表7显示了使用一个或五个刻度进行训练和测试时的模型S和M.也许[11]中最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的研究结果证实了他们的结果:深度ConvNets擅长直接学习规模不变性。多尺度方法在计算时间内以较大的成本提供了mAP的小幅增加(表7)。在VGG16(型号L)的情况下,我们仅限于通过实施细节使用单一比例。然而,它实现了66.9%的mAP,略高于R-CNN报告的66.0%[10],尽管R CNN使用“无限”尺度,因为每个提案都被扭曲为规范尺寸。由于单尺度处理提供了速度和精度之间的最佳折衷,特别是对于非常深的模型,本小节之外的所有实验都使用单尺度训练和s = 600像素的测试。

5.3. Do we need more training data?

融合了VOC12和VOC07的训练集, 最后的结果显著改善.

5.4. Do SVMs outperform softmax?

为了理解这个选择的影响, 本文实现了在R-CNN中基于hard miing 的 post-hoc SVN 训练.

显示了在R-CNN中的效果, 但是Fast R-CNN效果不好.

5.5. Are more proposals always better?

存在(广泛地)两种类型的对象检测器:使用稀疏对象提议集(例如,选择性搜索[21])和使用密集集(例如,DPM [8])的对象检测器。对稀疏提议进行分类是一种级联,其中提议机制首先拒绝大量候选者,使分类器具有一小部分进行评估。当应用于DPM检测时,该级联提高了检测精度。我们发现提案分类器级联也提高了快速R-CNN精度的证据。

Using selective search’s quality mode, 我们每张图像从1k扫描到10k个提议,每次重新训练并重新测试模型M.如果提案服务于纯粹的计算角色,那么增加每个图像的提案数量不应该损害mAP

随着提案数量的增加,我们发现mAP上升然后略有下降(图3,蓝色实线)。这个实验表明,用更多的建议淹没深度分类器并没有帮助,甚至有点伤害准确性。

如果没有实际运行实验,这个结果很难预测。The state-of-the-art for measuring object proposal quality is Average Recall (AR) [12]. 当使用每个图像的固定数量的提议时,AR与使用R-CNN的若干提议方法的mAP很好地相关。图3示出了AR(实线红线)与mAP不完全相关,因为每个图像的提议数量是变化的。AR必须小心使用;更高的AR由于更多提案并不意味着mAP会增加。幸运的是,使用M型进行培训和测试的时间不到2.5小时。因此,快速R-CNN能够有效,直接地评估对象提议mAP,这比代理度量更好.

当使用密集生成的盒子(超过比例,位置和纵横比)时,我们还研究了快速R-CNN,速率约为45k盒/图像。这个密集的集合足够丰富,当每个选择性搜索框被其最接近的(在IoU)密集框中替换时,mAP仅下降1个点(到57.7%,图3,蓝色三角形)。密集框的统计信息与选择搜索框的统计信息不同。 从2k选择性搜索框开始,我们在添加1000×{2,4,6,8,10,32,45}密集框的随机样本时测试mAP。对于每个实验,我们重新训练并重新测试模型M.当添加这些密集框时,mAP比添加更多选择性搜索框时更强烈,最终达到53.0%。

我们还使用密集盒(45k /图像)训练和测试快速R-CNN。此设置产生的mAP为52.9(蓝色菱形).

Finally, we check if SVMs with hard negative mining are needed to cope with the dense box distribution.SVM更糟糕:49.3%(蓝色圆圈)。

5.6. Preliminary MS COCO results

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

6. Conclusion

本文提出了快速R-CNN,一种干净,快速的R-CNN和SPPnet更新。 除了报告最先进的检测结果外,我们还提供了详细的实验,希望能够提供新的见解。 特别值得注意的是,稀疏对象提议似乎可以提高检测器质量。 这个问题在过去进行探测时成本太高(在当时),但对于快速R-CNN变得切实可行。 当然,可能存在尚未发现的技术,这些技术允许密集的框执行以及稀疏的提议。 如果开发出这样的方法,可以帮助进一步加速物体检测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TWSF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值