Fast R-CNN理解

背景

继2014年的RCNN之后,Ross B. Girshick(rbg)在15年推出Fast RCNN,同样使用最大规模的网络。Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC 2007上的准确率相差无几,约在66%-67%之间。主要存在三个创新点:

  1. 可以训练ROI Pooling层以前的参数,即全部参数。

  2. 在全连接层之间加入SVD分解,网络提速。

  3. Loss由两部分构成,其一将svm替换成softmax,进行类别判断;其二,将回归器添加到网络中,每一类别训练一个回归器。

基础知识

核心1:计算最终的loss函数时,其中位置偏移损失是如何计算的?(对于如何得到建议看“候选框回归”笔记)

Fast R-CNN理解
Fast R-CNN理解

核心2:计算最终的loss函数时,其中分类损失是如何计算的?

Fast R-CNN理解

核心3:ROI Pooling层,下面分为测试和训练两部分说明。

测试部分

roi_pool层将每个候选区域均匀分成M×N块,对每块进行max
pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层,但是此时需要针对每一个候选框手动计算小格的尺寸。

Fast R-CNN理解

训练部分

(该部分解决了SPP无法调整前面卷积层权重的问题,可以在微调阶段对整个网络参数进行微调。未懂,待续)

核心4:全连接层加速(SVD分解,这里我们不考虑偏向b的情况下,实际可以稍微提升速度)

由于对于每一个roi的feature map都需要进行全连接层,所以现在fc层耗费时间快赶上conv层,下图为训练各部分所需时间:

Fast R-CNN理解

Fast R-CNN理解
Fast R-CNN理解
Fast R-CNN理解

整体流程

训练流程

步骤一:网络预训练

数据:一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别标签。一千万图像,1000类(用于预训练)。

Fast R-CNN理解

网络结构如下:

Fast R-CNN理解

步骤二:提取候选框

对原图进行SS算法,提取候选区域,记取位置

步骤三:微调网络(重点)。

训练数据:

在调优训练时,每一个mini-batch中首先加入N张完整图片,输入网络提取整体特征;而后在ROI Pooling层加入从N张图片中选取的R个候选框(实际选择N=2,R=128)。其中R个候选框选取如下:

Fast R-CNN理解

网络结构:

首先对于已训练好的网络添加ROI Pooling层、loss分为两个并行结构(一个为类别损失,一个为位置损失),更改后网络结构如下:

Fast R-CNN理解

Fast R-CNN理解
Fast R-CNN理解
Fast R-CNN理解
Fast R-CNN理解
Fast R-CNN理解

测试流程

  1. 对原图提取候选框

  2. 输入原图,进行卷积

  3. 在ROI Pooling层,输入前面的feature map和候选框

  4. 得到候选框的类别和位置微调量,得到预测框

  5. 进行nms

总结

Fast RCNN将RCNN众多步骤整合在一起,不仅大大提高了检测速度,也提高了检测准确率。其中,对整张图像卷积而不是对每个region proposal卷积、ROI Pooling、分类和回归都放在网络一起训练的multi-task loss是算法的三个核心。另外还有SVD分解等是加速的小贡献,数据集的增加时mAP提高的小贡献。

现在这种multi-task合并的训练方法较多,并且可以进行多尺度训练。

当然Fast RCNN的主要缺点在于region proposal的提取使用selective search,目标检测时间大多消耗在这上面(提region proposal 2~3s,而提特征分类只需0.32s),这也是后续Faster RCNN的改进方向之一。

训练和测试图如下:

Fast R-CNN理解