Fast R-CNN

Fast R-CNN

By Ross Girshick

1. Contributions

1.1 Motivation

Drawbacks of R-CNN

  1. 训练是多步骤进行的。R-CNN首先需要finetune网络,接着需要用到SVM,最后还要进行bounding-box regression;这样多步骤的比较麻烦。
  2. 训练的空间和时间开销比较大。
  3. 目标检测速度慢。一般一张图片的检测需要47秒,而且还是用GPU。

Drawbacks of SPP-net

  1. 训练过程同样是多步骤的。这点跟R-CNN一样。
  2. 训练时也要把提取的特征写到硬盘上,空间开销大。
  3. 无法对卷积层进行finetuning,因此也在一定程度上进行了accuracy。

General

总的来说,存在的比较突出的问题,一个就是multi-stage pipeline的训练比较繁琐;其次需要考虑到大量的proposals;然后,由于proposals的框选一般比较粗略,因此仍需要做bounding-box regression。所以我们提出的方案需要兼顾speed, accuracy, or simplicity。

1.2 Contributions

因此,作者提出了Fast R-CNN,其主要贡献在于:

  1. 训练是使用multi-task loss,所以single-stage的;
  2. 训练过程中的特征不需要额外的存储空间;
  3. 训练过程可以更新整个网络;
  4. 比R-CNN和SPP-net都有更好的检测效果。

2. Architecture

2.1 The RoI pooling layer

这个是根据SPP-net的改动。在SPP-net中,其作者是用了3个不同尺度的pooling层,来获得固定尺寸的feature map。而Fast R-CNN中,作者只使用了一个该原理的pooling层;其具体实现原理,包括如果确定pooling窗口和步长的大小,以及如何从image的proposals获取相应位置在$conv_5$中的feature map,应该都是与SPP-net中的一样的。

2.2 Model

关于网络模型,作者使用了VGG16。使用方法其实与之前两个方法是一样的,就是把最后一个卷积层后的普通pooling层换成RoI pooling layer,把最后一个全连接层换成sibling output layers,其中一个分支输出预测的分类结果,另一个分支输出对于每个类别的regression值。

2.3 Loss Function

该模型把最后的FC层替换为了两个sibling layers。

第一个分支对每个RoI,输出一个关于$K+1$个类别的离散概率分布$p=(p_0, …,p_K)$,其中,额外一个类别是background类。当然,$p$是输出层的softmax计算得到的。

第二个分支也是对每个RoI,对$K$类的每个类别,输出bounding-box regression offsets,$t^k = (t_x^k, t_h^k, t_w^k, t_h^k)$。注:所以我觉得这里应该是输出$4K$个值。

总的来说,第一个分支就是做分类;第二个分支对相应类别做回归。具体参看论文。

3. Training/Test

3.1 Mini-batch sampling

作者在训练的时候,每次取2张图片,每张取64个RoIs;其中每张取16个正样本,48个负样本。IoU大于0.5的为正样本,0.1至0.5之间的为负样本。

3.2 Truncated SVD

这里没细看。

4. Discussion

这篇文章其实作者还讨论了很多的点,但都没细看。之后有需要再看。