Fast R-CNN学习总结

  Fast R-CNN是R-CNN的改良版,同时也吸取了SPP-net中的方法。在此做一下总结。

  论文中讲到在训练阶段,训练一个深度目标检测网络(VGG16),训练速度要比R-CNN快9倍左右,比SPP-net快3倍左右。在测试阶段,处理一张图片需要0.3s。在PASCAL VOC 2012数据库上的mAP也达到了66%,比R-CNN高两个百分点。

  

  提出背景

  这个方法提出的背景是,R-CNN和SPP-net在目标检测方面还有一些不足。不足表现在一下几点:

  1、训练分为多个阶段,首先要微调ConvNet,用来提取特征,然后处理proposal,计算得到的ConvNet特征,使用线性SVM进行分类,最后用bounding box进行回归;

  2、训练时间和空间开销大。每一张图像上有大量proposal,还要对每个proposal提取特征,并存到磁盘中;

  3、测试阶段速度太慢。要对每张图片上的大量proposal提取特征,然后根据提取的特征进行检测。

  创新点

  Fast R-CNN的创新点在于:

  1、相较于R-CNN和SPP-net,检测结果精确度更高;

  2、训练只有一个阶段,将多任务的loss结合在一起;

  3、在训练时,可更新所有的层;

  4、不需要在硬盘中存储特征。

  Fast R-CNN的框架

  1、我们还是需要使用selective search算法在图像中提取2k个左右的候选框;

  2、然后将图像和候选框(即RoIs)信息输入网络中,并在最后的卷积层上对每个RoI求映射关系,并使用RoI pooling layer来将对应的特征统一到相同的大小;

  3、最终网络有两个输出,也对应两个loss,一个使用softmax进行分类,另一个进行bounding box回归。

  

  其中的RoI pooling layer是借鉴了SPP-net的方法,只是只有一级“金字塔”,将特征划分为H×W的网格,对每个网格进行max-pooling,提取特征。论文中H=W=7。

  

  Fast R-CNN的训练

  我们要对网络进行修改,使用RoI pooling layer替换最后的pooling层(即全连接层之前的pooling层),使用 两个姊妹层替代最后的全连接层和softmax层。两个姊妹层,其中一个是全连接+softmax,用作分类任务;另一个是用于bounding box回归的任务。

  在训练阶段,每一个mini-batch中首先加入N张完整图片,而后加入从N张图片中选取的R个候选框。这R个候选框可以复用N张图片前5个阶段的网络特征。实际选择N=2, R=128。N张完整的图像以50%的概率进行水平翻转,R个候选框的构成如下: 

类别比例方式
前景 25% 与某个真值重叠在[0.5,1]的候选框
背景 75% 与真值重叠的最大值在[0.1,0.5)的候选框

  

  多任务loss

  每个RoI都对应着一个ground-truth class 和一个ground-truth bounding box regression target 

  表示K+1个类别各自对应的概率,p由softmax层计算得到。我们将分类任务的loss定义为:

  ground-truth bounding box regression target ,bounding box任务的预测结果对应正确的类别。因为我们进行bounding box回归时,不考虑背景,所以时,bounding box回归没有对应的loss,而当时,对应的loss为:

其中

 所以,最终的loss为:

  RoI pooling层的反向传播

  是RoI pooling层输入中的一个节点(可以理解为一个像素),是对应第r个RoI的第j个输出(也可以理解为一个像素),那么RoI pooling层所做的操作为
,其中是池化得到的小网格区域,由于不同的RoI会可能会包含同样的像素,所以一个可能对应多个最终loss关于 的偏导数为:

原文地址:https://www.cnblogs.com/Peyton-Li/p/8528651.html