Fast R-CNN

Fast R-CNN是对R-CNN算法的改进,采用了一些创新措施来提高训练和测试速度,同时提高检测准确率。Fast R-CNN训练VGG16网络比R-CNN快9倍,测试速度快213倍,并在PASCAL VOC上得到更高的精度。与SPPnet相比,Fast R-CNN训练VGG16网络比它快3倍,测试速度快10倍,并且更准确。

Introduction

R-CNN有以下缺点:

  • 训练分为多个步骤:R-CNN首先需要微调CNN,然后使用SVM对CNN提取的特征进行分类,最后还要训练一个bounding-box的回归器。
  • 训练过程的空间和时间代价高:对于SVM和bounding-box回归器的训练,需要保存每幅图像的每个proposal的特征。
  • 目标检测速度慢:采用VGG16测试一张图片需要47s(在GPU上)。

R-CNN检测速度慢的原因在于使用CNN对每个proposal进行前向运算时没有共享计算。SPPnet采用了共享计算来加速R-CNN,即对输入图像只进行一次前向运算,然后从最后共享的feature map中提取出每个proposal的特征向量进行分类。SPPnet在测试阶段比R-CNN快了10-100倍。由于更快的特征提取,所以训练时间也减少了近3倍。SPPnet也有明显的缺点,和R-CNN一样,训练过程也分为多个步骤,也需要保存中间的特征。

Fast R-CNN

下图是Fast R-CNN的框架,步骤如下:

  • 第一步,将这个完整的图片经过若干卷积层与max pooling层,得到一个feature map。
  • 第二步,用selective search算法从这完整的图片中提取出object proposals,即RoI。
  • 第三步,根据映射关系,可以得到每个object proposal对应的feature map。
  • 第四步,将第三步得到的feature map经过RoI pooling layer得到固定大小的feature map(变小了)。
  • 第五步,经过2层全连接层(fc),得到固定大小的RoI特征向量。
  • 第六步,特征向量经由各自的FC层,得到两个输出向量:第一个是分类,使用softmax,第二个是每一类的bounding box回归。

简要流程图如下:

Reference

  1. Fast R-CNN
  2. Caffe源码实现
  3. Fast R-CNN笔记
  4. 【目标检测】Fast RCNN算法详解