Fast R-CNN

来源:互联网 发布:nginx访问日志格式 编辑:程序博客网 时间:2024/06/15 09:20

摘要:

本文提出了一种用于目标检测的基于快速区域的卷积网络方法(Fast R-CNN)。快速R-CNN建立在以前的工作上,以使用深卷积网络有效地分类对象提案。与以前的工作相比,Fast R-CNN采用多项创新技术来提高训练和测试速度,同时提高检测精度。fast R-CNN训练 VGG-16时比R-CNN快9倍,在测试时快213倍,在PASCAL VOC 2012上实现更高的mAP。与SPPnet相比,fast R-CNN训练VGG16 快3倍,测试快10倍,而且更准确。快速R-CNN在Python和C ++(使用Caffe)中实现,可以通过https://github.com/rbgirshick/fast-rcnn的开源MIT许可证获得。

1.简介:

最近,深度ConvNets [14,16]显着提高了图像分类[14]和目标检测[9,19]的准确性。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的解决方法。由于这种复杂性,目前的方法(例如,[9,11,19,25])在多级管道中训练的模型不仅缓慢而且不是很合理。

出现复杂性是因为检测需要对象的精确定位,从而产生两个主要挑战。首先,必须处理许多候选对象位置(通常称为“提案”)。第二,这些候选人只提供粗略的定位,必须进行细化才能实现精确的定位。这些问题的解决方案通常会影响速度,准确性或简单性。

在本文中,我们简化了最先进的基于ConvNet的对象检测器的训练过程[9,11]。我们提出了一种单阶段训练算法,它们共同学习对对象建议进行分类并优化其空间位置。

此方法可以训练很深的检测网络(VGG16),训练速度比R-cnn快9倍,比sppnet快3倍。在运行时,检测网络处理每张图片为0.3s(不包括对象建议时间),同时实现PASCAL VOC 2012 [7]的mAP为66%(vs 于R-CNN为62%)。

1.1 R-cnn 和Sppnet

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

1.训练是一个多阶段管道。R-CNN首先使用log 损失来对ConvNet进行对象建议。然后,它适用于ConvNet功能的SVM。这些支持向量机作为目标检测器,代替通过微调学习的softmax分类器。在第三训练阶段,采用边界回归。


2.训练在空间和时间上是昂贵的。 对于SVM和边界盒回归训练,从每个图像中的每个对象提案中提取特征并写入磁盘。对于非常深入的网络,例如VGG16,这个过程对于VOC 07列车的5k图像需要2.5个GPU天。这些功能需要数百GB的存储空间。


3.检测很慢。 在测试时,从每个测试图像中的每个对象提议中提取特征。使用VGG16进行检测需要47s /图像(在GPU上)。

R-CNN是缓慢的,因为它为每个对象提议执行ConvNet前向传播,而不共享计算。SPPnets提出通过共享计算来加速R-CNN。SPPnet方法计算整个输入图像的卷积特征图,然后使用从共享特征图提取的特征向量对每个对象提议进行分类。通过将建议中的特征图的部分最大化为固定大小的输出(例如,6×6)来为提案获取特征。多个输出大小合并,然后连接在空间金字塔池化中[15]。SPPnet在测试时将R-CNN加速10到100倍。由于更快的提案特征提取,训练时间也减少了3倍。

SPPnet也有显着的缺点像R-CNN一样,训练是一个多阶段的管道,涉及提取特征,微调log 损失网络,训练SVM,并最终拟合边界回归。特征写入磁盘。但与R-CNN不同,[11]中提出的微调算法无法更新空间金字塔池化之前的卷积层。毫无疑问,这种限制(固定卷积层)限制了非常深的网络的准确性。

1.2 贡献

我们提出了一种修正R-CNN和SPPnet的缺点的新的训练算法,同时提高了其速度和准确性。我们称之为Fast R-CNN方法,因为它训练和测试相对较快。fast RCNN方法有几个优点:
1.比R-CNN SPPnet检测质量高(mAP)
2.培训是单阶段,使用multi-task 损失
3.训练可以更新所有网络层
4.不需要磁盘来缓存特征
快速R-CNN是用Python和C ++编写的(Caffe [13]),可以通过https://github.com/rbgirshick/fast-rcnn的开源MIT许可证获得。

2.fast r-cnn 的结构和训练

图1 fast R-CNN架构。fast R-CNN网络将整个图像和一组目标提案作为输入。网络首先使用多个卷积(conv)和最大池层处理整个图像,以产生卷积特征图。然后,对于每个目标提案的感兴趣区域,通过池化层提取固定长度的特征向量。每个特征向量被送到全连接层,其最终分支到两个兄弟输出层中:一个在K个目标类上加上一个全部“背景”类的softmax概率估计,另一个输出目标的K类的4个实数每组4个值编码一个K类的精确的边界框位置。

2.1 Roi的池化层

RoI池化层使用最大池化将任何有效感兴趣区域内的特征转换为H×W(例如,7×7)的固定空间范围的小特征图,其中H和W是层超参数独立于任何特定的RoI。在本文中,RoI是眷及特征图上的矩形窗口。每个RoI由四元组(r,c,h, w)定义,指定其左上角(r, c)及其高度和宽度(h,w)。

通过将h×w RoI窗口划分为大小为h/H×w /W的子窗口的H×W网格,然后通过最大池化获取每个子窗口的值输出到相应的网格单元采用如标准的最大池化一样的池化,对每个特征通道进行独立的池化RoI层仅仅是SPPnets [11]中使用的空间金字塔池层的特殊情况,其中只有一个金字塔级别。我们利用池化子窗口计算。

2.2 用预训练网络进行初始化

我们尝试了三个预先训练的ImageNet [4]网络,每个网络具有五个最大池层和五到十三个圈基层(参见第4.1节了解网络细节)。当预训练好的网络初始化fast R-CNN网络时经历三次转变。

首先,通过将H和W设置为与网络的第一个全连接层兼容(例如,VGG16的H = W = 7)来配置的RoI池化层替换最后的最大池化层。

第二,网络上一个全连接层和softmax(被训练用于1000路ImageNet分类)被替换为前面描述的两个兄弟层(K + 1类别的全连接层和softmax以及类别特定边框回归器

第三,修改网络以获取两个数据输入:图像列表和这些图像中的RoI列表。


2.3 fine-tuning 用来检测

使用反向传播训练所有网络权重是Fast R-CNN的重要功能。首先,我们来阐明为什么SPPnet无法在空间金字塔池化层下面更新权重。

根本原因是,当训练来自不同图像的每个训练样本时(即RoI),通过SPP层的反向传播是非常低效的,这正是如何训练R-CNN和SPPnet网络的。低效率源自于每个RoI可能具有非常大的感受野的事实,通常跨越整个输入图像。由于前进传播必须处理整个感受野,所以训练输入很大(通常是整个图像)。

我们提出了一种更有效的训练方法,在训练时使用特征共享。在快速RCNN训练中,随机梯度下降(SGD)小批量分层采样,首先通过采样N个图像,然后通过从每个图像采样R / N RoIs。从相同的图像中,RoIs在前向和后向传递中共享计算和存储器。使用N个能够减少计算量。例如,当使用N = 2和R = 128时,所提出的训练方案比从128个不同图像(即R-CNN和SPPnet策略)的采样一个RoI快大约64倍。

对这一策略的一个担忧是,由于来自同一图像的RoIs相关,可能导致训练收敛缓慢。这个问题似乎不是一个实际的问题,我们使用比R-cnn更少的SGD迭代获得N = 2和R = 128可以达到很好的效果。

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

多任务loss

fast R-CNN网络有两个兄弟输出层。第一个输出在K + 1个类别上输出离散概率分布(每个RoI)p =(p0,...,pK)。像往常一样,p通过全连接层的K + 1个输出上的softmax计算第二个兄弟层为k个对象类中的每一个输出边界框回归偏移,,由k索引。 我们使用[9]中给出的t_k的参数化,其中t_k指定相对于对象提议的缩放不变转换和对数空间高/宽移位。






原创粉丝点击