Object Detection(二)Fast R-CNN

本篇是Object Detection系列第二篇 Fast R-CNN

在上一篇blog中,介绍了R-CNN,最后提到了R-CNN的几个缺点,其中最显著的速度问题,因为要进行上千次的CNN前向运算,导致整个模型的运行速度过慢。
下面笔者就来介绍下R-CNN的改进版,Fast R-CNN.


虽然在Fast RCNN之前有提出过SPPnet算法来解决RCNN中重复卷积的问题,但是SPPnet依然存在和RCNN一样的一些缺点比如:训练步骤过多,需要训练SVM分类器,需要额外的回归器,特征也是保存在磁盘上。因此Fast R-CNN相当于全面改进了原有的这两个算法,不仅训练步骤减少了,也不需要额外将特征保存在磁盘上。

基于VGG16的Fast R-CNN算法在训练速度上比RCNN快了将近9倍,比SPPnet快大概3倍;测试速度比RCNN快了213倍,比SPPnet快了10倍。在VOC2012上的mAP在66%左右。


Fast R-CNN

先来看看Fast R-CNN的结构


Object Detection(二)Fast R-CNN_第1张图片

首先,还是采用selective search提取候选框,然后使用一个神经网络提取整张图片的特征,再通过一个 RoI Pooling Layer在特诊图上提取出每一个候选框的特征,再使用两个全连接层分别进行分类和bbox修正。
Fast R-CNN 跟 R-CNN 的主要不同在于下面四点:

  1. 用来提取特征的卷积网络是作用在整个图像上,而不是各个候选框上。而且这个卷积网络通常会参与训练,即更新权重。
  2. 选择性搜索是作用在卷积网络的输出上,而不是原始图像上。
  3. 在 R-CNN 里,我们将形状各异的候选框变形到同样的形状来进行特征提取。Fast R-CNN 则新引入了兴趣区域池化层(Region of Interest Pooling,简称 RoI 池化层)来对每个候选框提取同样大小的输出以便输入之后的网络。
  4. 在物体分类时,Fast R-CNN 不再使用多个 SVM,而是像之前图像分类那样使用 Softmax 回归来进行多类预测。

下面我们再介绍下ROI的工作细节

RoI Pooling

Fast R-CNN 中提出的 RoI 池化层跟我们之前介绍过的池化层有显著的不同。在池化层中,我们通过设置池化窗口、填充和步幅来控制输出大小,而 RoI 池化层里我们直接设置每个区域的输出大小。例如设置 n×m,那么对每一个区域我们得到 n×m 形状输出。具体来说,我们将每个区域在高和宽上分别均匀划分 n 和 m 块,如果划分边界不是整数则定点化到最近的整数。然后对于每一个划分区域,我们输出其最大元素值。

我们在 4×4 的输入上选取了左上角的 3×3 区域作为兴趣区域,经过 2×2 的 RoI 池化层后得到一个 2×2 的输出,其中每个输出元素需要的输入均由同色标注。


Object Detection(二)Fast R-CNN_第2张图片

Multi-task Loss

Fast R-CNN有两个输出结果,目标的类别和bbox的修正值,所以loss也由两部分组成


下面是回归loss,其中t^u表示预测的结果,u表示类别。v表示真实的结果,即bounding box regression target。


Object Detection(二)Fast R-CNN_第3张图片

[u≥1] 表示当 u≥1 时该式子值为1,其余为0.这个式子保证了在算loss时忽略掉所有的background(background 的类别为0)


小结

Fast R-CNN将R-CNN众多步骤整合在一起,不仅大大提高了检测速度,也提高了检测准确率。其中,对整张图像卷积而不是对每个region proposal卷积,ROI Pooling,分类和回归都放在网络一起训练的multi-task loss是算法的三个核心。
Fast R-CNN的主要缺点在于region proposal的提取使用selective search,目标检测时间大多消耗在这上面(提region proposal 2~3s,而提特征分类只需0.32s),这也是后续Faster R-CNN的改进方向之一。


更多细节请参考论文地址
下一篇将介绍在Fast R-CNN的继续改进版 Faster R-CNN

你可能感兴趣的:(Object Detection(二)Fast R-CNN)