Fast R-CNN

Fast R-CNN

Abstract 

为目标检测提出了新的 Fast R-CNN方法,相比于之前的方法,Fast R-CNN进行了一些改变在增加检测精度的同时,提高了训练和测试的速度。Fast R-CNN在训练VGG16network时,训练速度是R-CNN的9倍,是SPPnet的3倍;在测试时,测试速度是R-CNN的213倍,是SPPnet的10倍。并且相对于这两种方法,Fast R-CNN在PASCAL VOC 2012 上有更高的精度。

1. Introduction  

因为检测需要精确定位目标,导致了这个问题的复杂性,所以要解决两个主要的问题,

  1、大量的目标候选区需要处理。

  2、候选区只是初略定位,还需进一步进行精确定位。

为了解决上述的两个问题,一般要对速度、精确度和简单这三个方面让步。

本文简化了最新水平的基于卷积神经网络的目标检测器的训练过程,提出了一种联合了目标分类和空间检测的单阶段的训练算法。使用这种方法训练网络,比R-CNN快9倍,比SSPnet快3倍。仅用0.3s处理一张图片,在PASCAL VOC 2012 上mAP值达到了66%。

1.1. R-CNN and SPPnet

R-CNN虽然在目标检测的进度上达到了很高的水平,但是它也有明显的缺点:

  1、训练过程是多阶段进行的。

  2、训练花费了大量的时间和空间。

  3、目标检测的速度很慢。

R-CNN速度慢的原因是为每个目标候选区执行卷积网络的前向传递,而不是用共享计算。SPPnets也是使用共享计算来加速R-CNN。SPPnet的方法是,计算在整个输入图中计算一个卷积特征图,进而用从共享的特征图中提取的特征向量来对每个目标候选区进行分类。通过最大池化proposal内的部分特征映射到一个固定大小的输出来为proposal提取特征。池化得到的多个输出结果再串联起来作为空间金字塔池。

同样,SPPnet也有它的缺点,它同R-CNN一样,训练也是多阶段的。同RCNN不一样的是,微调算法不能更新卷积层。

1.2. Contributions

Fast R-CNN修复了R-CNN和SPPnet的问题。

  1、相比于R-CNN和SPPnet,Fast R-CNN有更高的检测质量

  2、训练过程时单阶段的,使用了多任务的loss函数

  3、训练能更新所有的网络层

  4、不需要用磁盘存储特征缓存

2. Fast R-CNN architecture and training  

Fast R-CNN网络接收一整张图片和一组目标proposals集合,网络线用几个卷积层和max pooling层处理整张图片,来生成一个卷积特征图。然后,RoI pooling层从每个目标proposal的特征图中提取一个特定长度的特征向量。每个特征向量被送给全连接层,最后分成两个输出结果,一个是在k+1个类上的softmax 估计,另一个是对每个目标类输出4个数值,然后用这4个数值去优化目标的位置。

2.1. The RoI pooling layer

RoI pooling层使用max pooling将任何有效的RoI包含的特征转化为一个在H*W的固定空间中的小的特征图,其中H和W是独立于任何一个特殊的RoI超参数。在本文,每个RoI都是一个矩形窗口。RoI被定义为一个四元组。

Roi max pooling将h*w的RoI窗口分成H*W的网格,每个子窗口的大小接近于 h/H*w/W,进而max pooling每个子窗口的值到对应的输出网格单元。在标准max pooling上,pooling操作被单独应用到每个特征图通道上。RoI层是对空间金字塔池化层的简化。

2.2. Initializing from pre-trained networks 

使用3个预训练的ImageNet网络,每个包含5个max pooling层和5-13个卷积层。当一个预训练的网络初始化为Fast R-CNN网络时,要进行一下3步转化。

  1、使用RoI pooling层代替最后一个max pooling层。

  2、网络的最后一个fc层和softmax被替换为两个并列的层代替。

  3、网络改良使用图像列表和在这些图像上的RoI列表。

2.3. Fine-tuning for detection

使用后向传播训练所有的网络权重是Fast R-CNN的一个重要能力。

提出了一个更有效的训练方法,在训练时采用特征共享。在Fast R-CNN训练中,SGD mini-batches是分层采样的,首先在N张图片上采样,进而从每个图片上取 R/N个RoIs。重要的是,在前向传播和后向传播时,来自同一图片的RoIs能够共享计算和内存。使N变小能够减小mini-batch的计算。

这个策略可能导致训练收敛变慢,因为来自同一图片的RoIs是相关的。但是我们使用N = 2/R=128时,用少量的SGD迭代,这一问题并没有出现。

除了分层采样之外,Fast R-CNN使用简化了的训练过程,在一个微调阶段联合了优化了的softmax分类器和bounding box回归。不像R-CNN的多阶段过程。

Multi-task loss. 

softmax classifier 对于每个RoI,在K+1个种类上输出一个离散的概率分布。

bounding-box regressors ,对于每个类别,输出 bounding-box regression 的坐标。

然后展示了两个loss的定义。在regressors这里,选用了对离群值不敏感的L1 loss而不是L2 loss。当回归目标无边界时,用L2 loss训练需要小心调整学习率,来防止梯度爆炸。

Mini-batch sampling. 

设定N = 2、R=128,每张图片取64个RoIs。其中25%的样本为正样本,也就是IoU的重叠值超过0.5.这些样本包括实例标记前景对象类,即U≥1。剩下的为负样本,也就是IoU的重叠值在[0.1,0.5)的区间内。负样本被标记u = 0;也使用了hard example mining技术。训练过程中,0.5的概率对图像进行水平翻转,没有使用其他的数据增强技术。

Back-propagation through RoI pooling layers. 

反向传播参考了几篇博客的说明,还是没太明白。

2.4. Scale invariance

  1、brute forece 在训练和测试时,直接将图片处理成预定大小

  2、使用图像金字塔  多规模方法,由图像金字塔提供大体的规模不变给网络。由于GPU内存的限制,只在较小的网络上使用多规模训练。

3. Fast R-CNN detection

3.1. Truncated SVD for faster detection

使用SVD分解能将参数从uv 减少到u+v。当RoIs的数量较大时,用这种方法能有效的加速。

能将检测时间减少30%,伴随较小的mAP减少。

5. Design evaluation 

5.1. Does multi-task training help?

在所有三个网络,我们观察到,多任务培训相对于单独的训练提高了纯粹的分类精度。改善了mAP大概0.8-1.1个点,呈现多任务学习积极的作用。

5.2. Scale invariance: to brute force or finesse?

由于单一规模处理提供了速度和精确度之间的最佳折衷,特别是对于非常深的模型,本节以外的所有实验都使用单一规模的训练和测试。

5.3. Do we need more training data?

在表格1中进行了展示,训练的数据量越多,最后的效果越好。

5.4. Do SVMs outperform softmax?

实验的到的结果是使用softmax要由于SVM。

5.5. Are more proposals always better?

 候选区域增多并不是一直能带来好的效果,甚至随着候选区域的增多,还会使最后的精度降低。

原文地址:https://www.cnblogs.com/ya-cpp/p/7593207.html