论文笔记:Fast R-CNN

Fast R-CNN

概要

这篇文章基于《Rich feature hierarchies for accurate object detection and semantic》中提出的目标检测方法R-CNN,提出了一种改进方法,即Fast R-CNN。该方法相比R-CNN在训练和测试速度以及目标检测精确度上都有较大提升。使用VGG16网络时训练速度是R-CNN的9倍,测试速度213倍。

R-CNN的缺陷

R-CNN在一下几个方面具有明显的不足:

  1. R-CNN的训练分为多个阶段,首先对CNN网络进行训练提取特征,然后训练用作分类器的支持向量机(SVM),最后还要训练框回归器。
  2. R-CNN的训练过程十分消耗时间和空间。对于SVM和框回归训练,需要对每张图的每一个候选框提取特征。这一过程若使用VGG16网络需要耗费2.5个GPU日才能计算完VOC07数据集的所有图像,同时需要存储的特征值还会占用数百GB空间。
  3. R-CNN的目标检测速度较慢,使用VGG16和一个GPU进行检测每张图像需要耗时47秒。

R-CNN速度较慢的原因是每一个候选框都需要经过CNN网络进行计算,这一步骤耗费了大量时间。一个改进方法SPPnet(《Spatial pyramid pooling in deep convolutional networks for visual recognition》)提出通过将这一部分计算共享的方法提升检测速度。它直接对整个输入图像使用CNN网络计算特征图,然后在检测每个候选区域时从共享特征图中取对应的部分特征,并通过最大值池化的方法转变成几个固定大小,再通过空间金字塔池化得到最后的结果。SPPnet可以使测试速度加快10至100倍,训练速度加快3倍。

但SPPnet依然具有R-CNN多阶段训练和特征占据空间大的弊端,同时训练时在空间金字塔池化的过程中并不会更新CNN的参数,导致限制了深层神经网络的效果。

Fast R-CNN

针对R-CNN和SPPnet的缺陷,作者提出了Fast R-CNN 方法,在解决上述问题的同时进一步提升了速度和精确度。Fast R-CNN的训练过程只有一个阶段,所有网络层参数都会得到更新,并且无需额外的空间存储特征值。

Fast-RCNN结构如下:

论文笔记:Fast R-CNN

首先CNN网络接收整张图像作为输入,得到特征图,随后对每一个候选区域从特征图中使用感兴趣区域(RoI)池化层提取出固定长度的特征值。提取的特征值再经过数个全连接层,最后得到两个输出层:各类的softmax概率和框位置回归值。

RoI池化层

RoI池化层的作用是使用最大值池化的方法从整体特征图中的一个感兴趣区域提取出一个固定大小的小特征图。设长方形的RoI大小为h*w,需要的小特征图大小为H*W,则在整体特征图上将RoI划分为大小h/H*w/W的子区域,每一个子区域用最大值池化映射到输出的一个位置。RoI池化层实际上是SPPnet中空间金字塔池化的一个单层特例。

训练

作者尝试将三种不同的CNN网络应用到Fast R-CNN中,这些网络都包含5个最大值池化层和5至13个卷积层。在将预训练的网络应用到Fast R-CNN中时需要做几个改动:

  1. 最后一个最大值池化层替换成RoI池化层,其输出大小H*W由网络的第一个全连接层大小决定,如VGG16设定为7*7。
  2. 网络的最后一个全连接层和softmax层替换成两部分,一部分经过softmax后为各类的分类器,另一部分为特定类的框位置回归器。
  3. 网络的输入层修改为接收两个输入,即图像和RoI。

相较于R-CNN和SPPnet,Fast R-CNN的一大优势是使用特征共享的方式将训练合并到了一个阶段,直接训练最终所需要的结果,即softmax分类器和框位置回归器。其训练的损失函数为两者结合:

论文笔记:Fast R-CNN

其中p为预测的各类和背景的概率,u为真实类,tu为预测的框位置回归值,v为真实的回归值,另外,

论文笔记:Fast R-CNN

表示真实类u的log损失,作为分类器的损失,

论文笔记:Fast R-CNN

论文笔记:Fast R-CNN

作为回归器的损失。λ为调节两者权重的参数,实验中均取1,[μ>=1]为在μ>=1时取1,否则取0,用于在分类为背景时忽略回归器的损失。

训练时的每个mini-batch取两张图像,各64个RoI,其中25%的RoI与真实框至少有0.5的重合度(IoU),作为正类,其他则取重合度为0.1至0.5的作为背景类。

训练完成后的网络就可以直接输入待检测图像和RoI,得到各类的概率和框位置回归,随后和R-CNN一样对每一类进行非极大值抑制(NMS)消除重复的框,得到最终结果。

实验结果

在精确度方面,VOC2012数据集上的结果:

论文笔记:Fast R-CNN

在耗时方面,Fast R-CNN与R-CNN和SPPnet的比较:

论文笔记:Fast R-CNN

其中S、M、L分别表示使用Alexnet、VGG_CNN_M_1024、VGG16网络。另外,作者还通过实验发现调整训练时对于VGG16训练从conv3_1层开始的参数,另外两个网络训练从conv2层开始的参数,效果最佳。