精读fast RCNN

fast rcnn:主要是在rcnn的基础上用cnn模型更高效地对object proposals分类。主要的创新点在于:精度更高,训练和测试速度更快。

Introduction:

    • 目标检测比分类更复杂,主要体现在检测要求对目标的精确定位。主要有两个挑战。一是必须处理许多候选目标框(也叫proposals),二是这些proposals只是一个粗略的位置,必须refined,以得到更准确的定位。
    • 在本论文中,我们精简了基于cnn目标检测器的训练过程。提出了一个单阶段的训练算法,可以联合学习对目标候选框分类和精炼位置。
    • 本文提出的方法可以训练更深的网络(vgg16),比rcnn 快9倍,比sppnet快3倍。在测试阶段,处理一张图片需要0.3s(不包括计算proposal的时间),在voc2012上的map为66%(rcnn为62%)。
    • RCNN缺点分析:
      1. 训练是一个多阶段的流程。首先用log loss finetune ConvNet在proposals上,然后在ConvNet输出的特征上你和svms(这些svms用作目标检测器,替代了从convnet上出来的sofmax分类器),最后,训练bounding-box回归器。
      2. 训练在时间和空间上都很昂贵。对于svm和box回归其的训练,都要求把cnn网络出来的特征保存到内存中。对于比较深的神经网络,这个过程很耗内存。
      3. 目标检测速度慢。在测试时,需要从每张测试图片中提取所有proposals的特征。用vgg16在gpu上需要47s。
    • rcnn之所有慢,是因为它在一张图片上反复提取特征,而没有共享计算。sppnet解决了这个问题。sppnet对整张图片算了一个特征,然后对每一个proposals从整体特征中提出一个特征向量来做分类。具体的提取特征向量的方法,是通过在特征向量的对应proposal的位置用最大池化,得到一个固定尺寸的输出。并且通过使用多个输出尺寸然后cat来得到一个空间金字塔的池化。sppnet在测试阶段rcnn的基础上快了10到100倍,训练时间缩短了3倍。
    • sppnet也有一些显著的缺点。训练过程基本与rcnn一致。另外,sppnet提出的微调cnn的算法不能更新spatial pyramid pooling层之前的卷积层。也就是要求卷积权重是固定的,这一点限制了使用深层网络进一步提高精度。

算法架构和训练

 

 

 

??最后的两个回归器,如何联合。对于一个proposal,通过softmax预测属于哪一类,通过bbox_regressor调整位置。最后对应的gt通过iou来确定,通过确定对应的gt来确定label。那么对于一个proposal来说,softmax输出是(C+1),bbox regressor输出是4C(为啥是4C而不是4呢,因为不同的类别的regressor不同,在rcnn中还专门针对每一类都训练了一个regressor)。

ROI pooling layer: 假设输出的固定尺寸的特征图尺寸是H x W(为超参数)。ROI代表整张卷积图的一个矩形窗口,用(r, c, h, w)来表示,(r,c)表示左上角坐标。该层进行max pool操作即可, stride=(h/H, w/W)。该处理方式为sppnet的一个特例。

训练过程:可以通过反向传播更新所有的网络权重是fast rcnn的一项重要功能。首先,我们来阐明下为什么sppnet不能更新所有权重。根源是当训练样本来自不同的图片时,权值通过spp层反向传播非常低效。每一个roi有一个很大的感受野,通常跨越整个图像。由于前向通道必须处理整个感受野,训练输入很大,经常是整个图片。针对这个问题,我们提出了一种充分利用特征共享的更高效的训练方法。随机梯度下降的minbatch是分层次采样得到:首先采样N张图片,然后从每张图片采样R/N个roi。来自同一张图片的roi在前向和反向通道共享计算和内存。由于来自同一张图片的rois具有相关性,因此可能会导致收敛很慢。事实上在训练时并不存在这个问题,我们令N=2,R=128时,用了比rcnn更少的迭代次数就达到了好的效果。

此外,还采用了联合优化softmax分类器和bbox回归器进行单阶段的微调。

每一个训练的roi,用一个真实的类别u,和一个真实的gt bbx回归目标v标记。我们用一个多任务的loss在每一个打了标签的roi上联合训练分类和bbox回归。

 

 

 

 

  • L1 loss比RCNN中用的L2 loss鲁棒,对异常值没有那么敏感。用L2 loss训练时,在回归目标没有约束的条件下,必须小心选择学习率,以防梯度爆炸。公式3消除了这种敏感性。
  • 公式1中的λ,并将gt的回归目标vi,正则化成均值为0,方差为1。

mini-batch sampling:

每个batch使用2张图片,并从每张图片中选择64个rois。

我们选择了与gt的iou >= 0.5的proposals中的25%作为正样本,其余的rois选择与gt的iou在[0.1,0.5)的proposals,作为负样本。图片以0.5的概率被水平翻转,再无使用别的数据增强手段。

通过roi pooling层反向传播:

 

对于每一个mini-batch 中的roi r ,和每一个pooling的输出单元y(rj), 如果i是y(rj)通过最大池化选择的最大值,就累加其对L的偏导数。

尺度不变性:

我们通过两种方式来达到尺度不变的目标检测。一是通过暴力学习,即直接将图片wrap到某个固定尺寸进行训练和测试,二是使用图片金字塔,在训练阶段,我们每次随机采样一个金字塔的scale,作为一个数据曾广的方式。

检测:

在权重训练好后,检测无非就是对图片和proposals进行前向运算。对于每一个test roi r, 前向网络输出一个类别的后验概率p和一组预测的相对r的offsets(K个类别中每一个类别都会得到自己的微调后的bbox),Pr(class = k | r)=pk 。然后对每一个类别使用rcnn中的非极大值抑制。

结果分析:

  • 微调哪些层?实验发现,对于深的网络,不微调,map会下降。但是也不需要微调所有层,微调的层越多,训练越慢。
  • multi-loss的作用:最明显的作用就是改变了之前多阶段训练的流程。另外这种方式也提高了精度。可能是由于分类和定位两个任务互相影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值