论文翻译与理解:Fast R-CNN

本博客会参考其他博客上的资料,如有侵权,请联系删除。

摘要

      本文提出了一种快速的基于区域的卷积网络方法(Fast R-CNN)用于物体检测。Fast R-CNN建立在先前的工作基础上,以使用深度卷积网络有效地对区域建议进行分类。与之前的工作相比,Fast R-CNN采用了几项创新来提高训练和测试速度,同时提高了检测精度。Fast R-CNN训练非常深的VGG16网络比R-CNN快9倍,在测试时快213倍,并在PASCAL VOC 2012上实现更高的mAP。与SPPnet相比,Fast R-CNN训练VGG16 快了3倍,测试速度快10倍,并且更准确。Fast R-CNN在Python和C ++(caffe)中实现。https://github.com/rbgirshick/fast-rcnn.

1、介绍

       最近,深度卷积网络显着改善了图像分类和物体检测的准确性。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,当前的方法训练是分层的多任务训练,速度比较慢。
       复杂性的产生是因为检测需要对象的准确定位,从而产生两个主要挑战。首先,必须处理许多候选目标位置(通常称为“建议框”)。其次,这些候选框仅提供粗略的位置,必须对其进行细化以实现精确定位。
       在本文中,我们简化了最先进的基于ConvNet的目标检测的训练过程[R-CNN, SPP-net]。我们提出了一种一步训练算法,该算法共同学习对目标建议进行分类并改进其空间位置。

        由此产生的方法可以训练一个非常深的检测网络(VGG16 )比R-CNN 快9倍,比SPP快3倍。在运行时,检测网络以0.3s(不包括目标建议时间)处理图像,同时在PASCAL VOC 2012上实现最高精度,mAP为66%(对于R-CNN为62%)

1.1、R-CNN和SPPnet

      基于区域的卷积网络方法(RCNN)通过使用深度卷积对目标建议框进行分类,实现了出色的目标检测精度。然而,R-CNN有明显的缺点:

1、训练是一个多阶段的过程。 R-CNN首先使用log loss对目标建议进行网络微调。然后,它用卷积特征拟合SVM。这些SVM充当目标检测器,取代了通过微调学习的softmax分类器。在第三个训练阶段,学习边界框回归量(BBR)。
2、训练昂贵。对于SVM和边界框回归训练,从每个图像中的每个区域建议中提取特征并将其写入磁盘。对于非常深的网络,例如VGG16,这个过程需要2.5个GPU整整一天才能获得VOC07训练集的5k图像。这些特征需要数百G的存储空间。
3、物体检测很慢。在测试时,从每个测试图像中的每个区域建议框中提取特征。使用VGG16进行检测一张图需要47秒(在GPU上)。

     R-CNN很慢,因为它为每个区域建议框执行ConvNet前向传递,而不共享计算。空间金字塔池化网络(SPPnets)通过共享计算来加速R-CNN。SPPnet方法计算整个输入图像的卷积特征图,然后从共享特征图中提取的特征向量对每个区域建议进行分类。对于一个区域建议,特征通过最大池化区域内的特征图的部分被提取到固定大小的输出。多个输出连接在一起。SPPnet在测试时将R-CNN加速10到100倍。由于更快的区域特征提取,训练时间也减少了3倍。

     SPPnet也有明显的缺点。与R-CNN一样,训练是一个多阶段过程,涉及提取特征,使用log loss微调网络,训练SVM,最后拟合边界框回归。特征也被写入磁盘。但与R-CNN不同,SPP中提出的微调算法无法更新空间金字塔池之前的卷积层。不出所料地,这种限制(固定卷积层)限制了深度网络的准确性。

1.2、贡献

       我们提出了一种新的训练算法,它可以弥补R-CNN和SPPnet的缺点,同时提高它们的速度和准确性。我们称这种方法为Fast R-CNN,因为它训练和测试的速度相对较快。 Fast RCNN方法有几个优点:

  1. 与R-CNN 、SPP相比,mAP更高
  2. 训练一步到位,使用多任务损失
  3. 训练可以更新网络所有层
  4. 特征缓存不需要磁盘存储

2、 Fast RCNN结构与训练

     图1展示了Fast R-CNN结构。FastR-CNN网络将整个图像和一组区域建议作为输入。网络首先使用几个卷积(conv)和最大池化层处理整个图像,以产生特征图。然后,对于每个区域建议,感兴趣区域(RoI)池化层从卷积得到的完整特征图中提取固定长度的特征向量。
每个特征向量被送到一系列全连接层,最终分支到两个子输出层:一个产生对K类对象的softmax概率估计加上一个“背景”类,另一个层对K类的每一个输出四个真实数字。这组数字表示了回归框的位置。

2.1 、RoI 池化层

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

      RoI max pooling通过将h,w的 RoI窗口划分为H*W子网格窗口工作,然后将每个子窗口中的值最大池化到相应的输出网格单元中。池化独立应用于每个特征图通道,如标准最大池化中所示。 RoI层只是SPPnets 中使用的空间金字塔池层的特例,在这里只有一个金字塔层。我们使用SPP中给出的池化子窗口方法来计算。

Fast R-CNN 结构

 

对上图网络结构的一些理解 :

输入的是一张完整的图像和图像上的多个感兴趣区域(RoIs)的坐标(选择性搜索)。首先使用深度卷积网络提取整张图片特征,然后通过输入的RoI坐标映射得到感兴趣区域的特征图,RoI max pooling将特征图池化得到固定大小(H×W)的新的小特征图,其中H W是超参数。然后通过FCs得到特征向量。该特征向量最终送到两个子网络,一个得到该RoI的概率,另一个得到RoI修正的回归框位置。

 

2.2、从预训练的网络初始化

       我们试验了三个预先训练过的ImageNet 网络,每个网络有五个池化层和五到十三个卷积层。当预训练的网络初始化Fast R-CNN网络时,它经历三次变换。
       首先,最后一个最大池化层由RoI池化层替换,该池化层通过将H和W设置为与网络的第一个全连接层相兼容来配置(例如,对于VGG16,H = W = 7)。其次,网络的最后一个全连接层和softmax(经过1000类ImageNet分类训练)被前面描述的两个子层替换(全连接层和K+1 类的softmax和边界框回归)。第三,修改网络以获取两个数据输入:图像列表和那些图像中的RoI列表。

2.3、用于目标检测的微调

      使用反向传播训练所有网络权重是Fast R-CNN的重要功能。首先,让我们阐明为什么SPPnet无法更新空间金字塔池化层前卷积的权重。
根本原因是,当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播非常低效,这正是R-CNN和SPPnet网络的训练方式。效率低下的原因在于每个RoI可能具有非常大的感受野,通常跨越整个输入图像。由于前向传播必须处理整个感受野,因此训练输入很大(通常是整个图像)。在R-CNN和SPPnet中,由于每个RoI是在所有区域中随机采样的,每次训练都要计算和储存对应图片的特征图,训练代价大。
      我们提出了一种更有效的训练方法,利用训练期间的特征共享。在Fast RCNN训练中,随机梯度下降(SGD) minibatches被分级地采样,首先通过采样N个图像然后通过采样每个图像的R 个RoI。
      重要的是,来自相同图像的RoI在前向和反向传递中共享计算和存储器。N小则减少minibatch计算。例如,当使用N = 2且R = 128时,所提出的训练方案比从128个不同图像采样一个RoI(R-CNN和SPPnet策略)快大约64倍。
       对该策略的一个担忧是它可能导致训练收敛缓慢,因为来自相同图像的RoI是相关的。这个问题似乎不是一个实际问题,我们使用N = 2和R = 128时比R-CNN的SGD迭代更少。
       除了分层采样之外,Fast R-CNN还使用简化的训练过程和一个微调阶段,共同优化softmax分类器和边界框回归,而不是在三个不同的阶段训练softmax分类器,SVM和回归器。该过程的部分(损失,小批量采样策略,通过RoI池化层的反向传播和SGD超参数)如下所述。

多任务损失。

首先,每个RoI经过softmax计算最后输出离散的概率分布,共K个类别+1个背景。每个还输出了bbx回归偏移量。

每个训练的RoI的标签有真实的类别u和真实的边界框的位置v。我们使用多任务损失共同训练分类和bbx的回归。

其中类别损失用的是对数损失函数。第二个位置损失是对于u个真实类别来说的,背景的话u=0 即没有位置损失,其他情况只有当u大于等于1时,\lambda为1,其他情况为0.v是真实的边界框,t^{u}为预测位置信息。损失函数用平滑的L1损失。

论文中说使用L1损失对离群点更加鲁棒,与R-CNN和SPP使用的L2相比,相对不敏感,不易出现梯度爆炸的情况。

小批量采样。

在微调阶段,每次SGD训练有N=2张图像组成。我们使用从每张采样64个RoI,共128个RoI的mini-batch。与R-CNN相似,

我们25%的Roi要用与真实bb至少0.5的IOU的区域建议,这些具有类别标签。剩余的是在【0.1,0.5】之间IOU的RoI,这是背景,u=0

在训练时期,还使用了0.5概率对图像水平翻转,没有使用其他数据增强的方法。

SGD超参数。

用于softmax分类和边界框回归的全连接层分别从具有0.01和0.001的标准差零均值高斯分布初始化。偏差初始化为0。每层权重学习率为1,偏差学习率为2,全局学习率为0.001。在训练VOC07或VOC12 trainval时,我们运行SGD进行30k小批量迭代,然后将学习率降低到0.0001并进行另外10k次迭代训练。当我们在更大的数据集上训练时,我们运行SGD更多迭代,如稍后所述。使用0.9的动量和0.0005的参数衰减。

2.4、尺度不变形

       我们探索了实现尺度不变对象检测的两种方法:(1)通过直接学习,即直接对不同尺度大小的图片训练和测试(2)使用图像金字塔。这两策略遵循SPP中的两种方法。在第一种方法中,在训练和测试期间以预定义的像素大小处理每个图像。网络必须直接从训练数据中学习尺度不变性。
      相反地,第二种方法通过图像金字塔为网络提供近似的尺度不变性。在测试时,图像金字塔用于近似地对每个区域建议进行尺度标准化。在多尺度训练期间,我们在每次采样图像后随机采样金字塔尺,作为数据增强的一种形式。由于GPU内存限制,我们仅试验了针对较小网络的多尺度训练。SPP中也尝试了上面这两种方法,不过spp采用的是第二种,本文实验用的是第一种,速度要加快不少

3、Fast R-CNN检测

       一旦对Fast R-CNN网络进行微调,检测就会比前向传递快更多(假设区域建议是预先计算的)。网络将图像(或图像金字塔,编码为图像列表)和R区域建议列表作为输入。在测试时,R通常在2000左右,尽管我们会考虑它更大的情况(≈45k)。当使用图像金字塔时,每个RoI被调整,使得最接近224*224像素。
        对于每个测试RoI r,前向传递输出概率分布p和一组相对于r的预测边界框偏移量(每个K类获得其自己的边界框预测)。我们使用后验概率p为每个r估计每K类的检测置信度。然后,我们使用R-CNN的算法和设置,为每个类独立地执行非最大抑制。

3.1 SVD加快检测速度

       对于整个图像分类,与conv层相比,计算全连接层所花费的时间较少。相反,检测时要处理的RoI的数量很大,并且将近一半的时间用于计算完全连接的层(参见图2)。


通过SVD压缩它们可以很容易地节省时间。
使用SVD,由u×v权重矩阵W参数化的层近似地分解为 。该方法可以将参数的计算量从uv变为t(u+v)。如果t比min(u,v)还要小很多,加速就很有意义。实验中说map降了0.3%,但是速度提升了30%。

 

 

 

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值