Fast RCNN

Fast RCNN
Abstract
本文提出了一种快速基于区域的卷积网络目标检测方法(Fast RCNN)。Fast RCNN基于之前使用深度卷积网络来更好的进行候选目标区域分类的工作基础之上。和之前的工作相比,Fast RCNN提供了几种创新来提高训练和测试的速度并提升了检测的准确性。Fast RCNN训练VGG16的速度要比RCNN快9倍,在测试时的快213倍,并在PASCAL VOC上实现了更高的mAP。和SPPnet相比,Fast RCNN训练VGG16的速度快上3倍,测试时快10倍并且更加准确。Fast RCNN由python 和C++实现,并且已经开源。
Introduction
近来,深度卷积网络已经显著提升了图像分类和目标检测的准确性。和图像分类相比,目标检测是一个更具有挑战性的工作,需要更复杂的方法解决。由于其复杂性,当前的模型训练方法一般是多阶段,并且十分缓慢且精度不高。
复杂性的上升是由于检测需要对物体的位置进行准确的定位,这就有两个首要的问题。其一,许多候选的物体位置需要被处理。其二,这些候选区域只提供粗略的位置并且必须被修正来提供更加精确的定位。解决这些问题的方法通常需要牺牲,速度,准确性和模型的简单性。
在本文中,我们依次展示了当前最先进的基于卷积网络的目标检测器的训练过程。我们提出了一个单阶段训练方法,联合学习候选区域分类以及修正空间定位的精度。
这种方法训练VGG16的速度比RCNN快9倍,比SPPnet快3倍。在运行时,每张图片仅需要耗费0.3s,在PASCAL VOC 2012 上实现最高的准确率为66%。
R-CNN and SPPnet
RCNN通过使用深度卷积神经网络来分类目标候选区域实现了极好的目标检测准确性。不过,它也有一些显著的缺陷。1.训练是一个多阶段的过程。R-CNN首先在目标候选框上使用log损失来微调神经网络。之后,用卷积网络学习到的特征来调整SVM。这些SVM分类器的作用是目标检测器,代替了通过微调学习到的softmax分类器。在第三个训练阶段,学习到了bounding-box回归器。2.训练十分的耗费空间和时间。对于SVM以及bounding box回归器的训练来说,会从每张图片的每一个候选区域中提取特征并写入到磁盘中。使用很深的网络,例如VGG16,这个过程大约5000个图像在单个GPU上要花费2.5天。这些特征需要数百G的存储空间。3.目标检测的速度很慢。在测试时。特征会从每张图片上的每个候选区域中提取。在一块GPU上检测一张图片需要花费47s。
RCNN很慢是因为它对每一个候选区域进行卷积网络前传,而不进行计算共享。空间金字塔池化网络(SPPnets)被提出出来通过计算共享来对RCNN进行加速。SPPnet网络对每一个完整的图像计算卷积特征图,之后使用从共享的特征图中提取出来的特征向量来对每一个候选区域进行分类。特征通过最大池化候选区域中特征图部分而被提取出来并转化为固定大小。多个输出被池化,之后连接成最大金字塔。SPPnet在测试时可以将RCNN加速到10到100倍。训练的时间也因为更快的特征提取而被减少了三倍。
不过,SPPnet也有一些显著的缺陷。就像RCNN一样,训练过程是一个多阶段的流水线,包含了特征提取,使用log损失来对网络进行微调,训练SVMs,以及最后的bounding box 回归器的拟合。特征也会被写入到磁盘当中。但是不像RCNN,微调算法不能更新空间金字塔之前的卷积层。不难预料,这种限制使得对于很深的网络来说,其准确性受到了限制。
Contribution
我们提出了一种新的算法,很好的解决了RCNN以及SPPnet中存在的问题,并且提高了准确性以及速度。Fast RCNN有以下几个优点。1、map值高于RCNN以及SPPnet。2、训练过程使用多任务loss,只有一个阶段。3、训练可以更新所有的网络层。4、不需要存储提取出来的特征。

Architecture and training
图1展示了Fast RCNN的结构。Fast RCNN网络将一整张图片以及一系列目标候选区域作为输入。网络首先用几个卷积层来对整张图片进行处理,之后使用一个最大池化层来产生卷积特征图。对于每一个候选框,ROI池化层从特征图中抽取固定大小的特征向量。每个向量被喂到一系列的池化层中,之后产生两个同级的向量层:其中一个输出K个类别加一个背景类别的概率估计,另一个为K个类别中每一个类别输出4个真实值。每一组值都是对某一个类别回归框位置的修正。
The RoI pooling layer
RoI池化层使用最大池化来将roi区域中有价值的特征转化为一个小的特征图,固定的大小为H*W。H和W是这一层的超参,独立于任何的RoI之外。在本文之中,RoI是卷积特征图中的一个矩形窗口。每一个RoI都是有四个值确定的。
RoI最大池化通过将窗口分成一系列的子窗口,并得出大约的面积。然后对每一个子窗口输出进行最大池化,将输出合并到相应的输出单元之中。同标准的最大池化一样,池化操作是对每一个特征图通道单独作用的。
Initiaizing from pre-trained networks
用了三个预训练的ImageNet网络进行预训练,每个网络有5个最大池化层以及5到13个卷积层。当预训练网络初始化一个Fast RCNN网络时,会进行三个变体。
首先,最后一个最大池化层会被ROI池化层所代替。
其次,网络的最后一个全连接层和softmax层会被之前描述过的两个同级层所代替。
第三,网络被修正成两个输入,一系列图片,以及这些图片上的一系列ROI。
Fine-tuning for detection
对于Fast RCNN来说,用反向传播算法计算所有的网络权重是十分重要的能力。首先,先阐述一下,为什么sPPnet无法更新位于空间金字塔下面的层的权重。
根本原因是,当训练样本来自于不同的图片时SPP的反向传播算法是十分低效率的。(why?如果都来自于一张图片是否就高效?)这也正是RCNN以及SPPnet的训练方式。这种低效率的原因是每个ROI的感受野太大了,有时候甚至包括了整个图片。由于正向传播算法必须处理整个感受野,训练的输入经常很大。
我们提出了一种效率更高的方式,即在训练过程中特征共享。Fast RCNN中的SGD的批量的采样是分层的,先采图片,再对每个图片采样ROI。ROI来自于同一个图片,可以减少正向以及反向的计算和存储。当我们使得图片的数量减少时,就可以使得mini-batch的计算减少。
这种想法,有可能会因为ROI之间的相关性使得训练收敛变慢,不过实际使用时这个问题并没有发生。
为了分层采样,Fast RCNN采用了流水线的训练过程,使用了一个微调联合优化了一个softmax分类器和bounding box回归器,而不是在三个阶段,分别训练一个softmax分类器。SVM以及回归器。

Multi-task loss
Fast RCNN有两个同级的输出层。第一个输出K+1上的类别概率,这是通过全连接层上的softmax实现的。第二个输出bounding box回归的偏移量。、
每一个训练的ROI的label 包含了类别和框。我们用一个多任务的loss来联合训练分类和bounding box回归。Loss如下:

对于背景ROI没有bounding box,因此它的第二个loss也就自动忽略了。对于bounding box回归的loss的具体展开如下。

其中L1是比较鲁棒的,对于异常点不是十分敏感,与之相比RCNN以及SPPnet中的L2就相对敏感。当回归的目标无界的时候,,带有L2损失的训练需要更仔细的微调学习率来防止梯度爆炸。
等式1中的超参控制着两个loss的平衡。
Mini-batch sampling
在微调阶段,每个SGD小批量是由2张图片构成的。Batch的size是128,每张图片上采样64个ROI。我们从候选框中选择25%的ROI,这些的IoU至少是0.5。这些ROI包含了被标记为前景物体的目标类别。剩余的ROI从其他的IOU在0.1-0.5之间的选,这些是背景样本。(The lower threshold of 0.1 appears to act as a heuristic for hard example mining ???)训练过程中,图片有50%的可能性会发生水平反转。不需要进行其他的数据增强。
Back-propagation through RoI pooling layers。
反向传播经过RoI池化层。为了清楚起见,我们假设每一个batch只有一张图片。结论是有扩展性的,因为传播对每一张图片都是独立的。

SGD hyper-parameters
用于Softmax分类和检测框回归的全连接层的权重分别使用具有方差0.01和0.001的零均值高斯分布初始化。偏置初始化为0。所有层的权重学习率为1倍的全局学习率,偏置为2倍的全局学习率,全局学习率为0.001。 当对VOC07或VOC12 trainval训练时,我们运行SGD进行30k次小批量迭代,然后将学习率降低到0.0001,再训练1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值