Fast R-CNN学习笔记

来源:互联网 发布:淘宝app购买记录怎么查 编辑:程序博客网 时间:2024/05/16 10:10

Fast R-CNN学习笔记

文章来源:Girshick R. Fast r-cnn[C]//Proceedings of the IEEE InternationalConference on Computer Vision. 2015: 1440-1448.

1.算法提出的背景

目前deep ConvNets显著提高了图像分类和目标识别的精度,和图像分类相比,目标检测需要更多复杂的方法去解决,是更有挑战性的问题。由于检测需要目标精确的位置,这就带来了两个重要的困难:首先,大量的候选目标区域(被称为“proposals”)要处理;其次,这些候选只是简单地提供了大致的位置,还需要进一步精确。解决这些问题的方法常常会导致速度、精度和简易性的下降。

Fast R-CNN在训练一个深检测网络(VGG16)上,比R-CNN9倍,比SPPnet3倍。

R-CNN的缺点:

1)训练是多阶段进行的。R-CNN首先使用log损失在目标提议方面对ConvNet进行了微调;然后调整SVMs适合于ConvNet特性,这些SVMs作为目标检测器,替换了通过惩罚协调学习的softmax分类器;第三个训练阶段,学得一个bounding-box回归

2)训练在时间和空间上花费较大。对于SVMbounding-box回归训练,要从每张图片的每个中object proposal中提取特征,这既费时又费力。

3)目标检测很慢。在测试时间,要从每张测试图片的每个object proposal中提取特征,很耗时。

R-CNN很慢的原因在于它对于每个object proposal都进行了ConvNet的前向传播,而没有共享计算。

Spatial pyramidpooling networks (SPPnets)是通过共享计算来加速R-CNNSPPnets方法对整个输入图像都计算一个卷积特征映射,然后使用从共享特征映射中提取的特征向量来对object proposal进行分类。通过最大池化proposal内的部分特征映射到一个固定大小的输出,来为proposal提取特征。池化得到多种输出大小,然后串联作为空间扩展池。在测试时间上,SPPnetR-CNN加速了10100倍,在训练时间上也因更快的提案特征提取减少了3倍。SPPnet也有很多不足:首先,和R-CNN一样是多阶段传递过程,包括特征提取、使用log损失对网络进行惩罚协调、训练SVMs和适应bounding-box回归。特征也被写入内存。但与R-CNN不同的是,惩罚协调算法不能更新卷积层。

2.算法的介绍

FastR-CNN虽然也有R-CNNSPPnet的缺点但在速度和精度上有所提升。Fast R-CNN有以下优点:(1)更高的检测质量(mAP);(2)通过使用多任务损失,使得训练是单阶段的;(3)训练可以更新所有网络层;(4)对于特征缓存不需要磁盘存储。

Fast R-CNN的结构


输入图像和多个RoIregion of interest)输入到完全卷积网络中,每个RoI被池化到固定大小的feature map,然后被FCsfully connectedfc)映射为一个feature vector,每个RoI在网络中有两个输出向量:softmaxprobabilitieper-classbounding-box regression offsets。这个结构带有多任务损失下,收尾相连地进行训练使用。

bounding-box regression是用来对窗口进行微调,从而提高最终检测精度的回归器,它的详解可参考以下链接:

http://weibo.com/5847253963/DpPCJ9J6b?type=repost&sudaref=www.baidu.com#_rnd1461372285277

1RoI池化层

RoI化层使用最大池将任何一个有效的RoI的特性转变为一个H × W的固定空间范围的小的featuremap,其中HW是与任何一个RoI相独立的层超参数。本文中的每个RoI是一个矩形窗口,用一个四元组(r,c, h, w)来表示,其中(r, c)定义了矩形的左上角,(h, w)定义了高度和宽度。

RoI最大池将h × wRoI窗口分成H × W的网格,每个子窗口的大小近似为h/H × w/W,然后最大池化每个子窗口的值到相应的输出网格单元。池化是独立地应用到每个feature map通道的,RoI池化层就是SPPnetsspatial pyramid pooling layer的特例,只不过SPPnets的只有一个增长级别。

2)从前期训练网络中初始化

文中对三个前期训练的ImageNet网络进行了实验,每个都有五个最大池化层和5-13个卷积层,当一个前期训练的网络初始化一个Fast R-CNN网络,它会经历三次转换。

首先,最后一个最大池化层会被一个RoI层代替,要将它配置为HW,从而与网络中第一个fc相匹配。

其次,网络的最后一个fcsoftmax要用之前描述的两个并列的层替代。(文章有点没看懂)

最后,这个网络通过两个输入进行更新:一个图像列表和这些图像中的RoI列表。

3)检测的惩罚调整

使用后向传播训练网络权重是Fast R-CNN一个重要特性。文章利用训练中的特征共享提出了一个更高效的训练方法。在Fast R-CNN训练中,随机梯度的最小批是分层采样的,首先采样N个图像,然后从每个图像中采样R/NRoIs。并且,从相同图片中得到的RoIs共享前向和后向传播中的计算和内存。当减小N时可以减少最小批的计算。

这种方法可能带来的问题是使得训练收敛得变慢,因为从相同图片中得到的RoIs是相关联的,然而这在实践的过程中并没有出现问题。

对于分层采样,Fast R-CNN使用了一个流水线型的训练过程,其中有个惩罚调整的阶段能同时优化softmax分类器和bounding-box regressors,而不是把softmax分类器、SVMsbounding-box regressors的训练分为三个不同的阶段。整个过程涉及到的元素有the loss,mini-batch sampling strategy, back-propagation through RoI pooling layersSGD hyper-parameters

任务损失:

Fast R-CNN有两个并行输出层,一个输出K+1个类的概率分布pp是通过一个softmax计算的,第二个输出是bounding-box regression offset,它定义了一种测量不变的转换和log空间中高度和宽度的调整量。

在同时训练分类器和bounding-box regression时的损失定义为:



第二项是针对类ubounding-boxregression目标的元祖



相比与L2损失,L1对边缘会更加不敏感。当使用L2损失进行训练时要注意设置好学习的速率,从而防止过大的变化。


4)规模不变形

这里采用两种方法来实现规模不变的目标检测:1)通过“bruteforce” learning2)通过使用影像金字塔。在“brute force” learning中,每个图像在训练和测试的处理过程之前就定义好了像素大小。相反,多范围的方法通过影像金字塔使网络近似实现了范围不变。测试时间中,影像金字塔对每个object proposal进行近似的范围标准化。


0 0
原创粉丝点击