深度卷积神经网络(ConvNets)显著提高了图像分类和目标检测任务的准确率。和图像分类相比目标检测又更具有挑战性,这主要是两方面的原因。首先,大量候选目标的位置数据需要被处理。其次,这些候选目标提供的位置数据比较粗糙,需要进一步精调。对这些问题的解决方案通常需要权衡速度、准确率和简便性。在这篇论文中我们提出一个单阶段的训练算法,能将候选区域的分类和定位进行结合。
R-CNN和SPPnet
R-CNN之所以慢是因为它要对每个候选区域在ConvNet中独立地进行前向传播而不能共享计算。SPPnet提出先对整张图片进行一次卷积计算,得到整张图片的卷积特征,然后依据每个候选框在原始图片中的位置,在卷积特征图中提取对应区域的卷积特征图。通过共享计算的方式大大提高了R-CNN的速度。SPPnet同样也有着明显的缺点,和R-CNN一样,SPPnet的训练是一个多阶段的管道,包括特征提取,使用log loss对网络进行微调,训练SVMs和最后进行边框回归。
提出了个新的训练算法能够弥补R-CNN和SPPnet的缺陷,同时提高速度和准确度。我们将其称之为Fast R-CNN,因为它相对在训练和测试时更快。Fast R-CNN有以下几个特点:
1、比R-CNN和SPPnet更高的检测质量(mAP);
2、是一个单级的训练,使用一个多任务损失(multi-task loss);
3、训练过程中能更新所有网络层;
4、不需要磁盘存储特征。
下图描述Fast R-CNN的结构。Fast R-CNN使用一整张图和一组候选区域作为输入。
1、网络首先使用若干卷积和最大池化层对整张图像进行训练以产生卷积特征图。
2、然后,对于每个候选区域由RoI(region of interest)池化层从特征图中提取出固定长度的特征向量。
3、每个特征向量输入一系列全连接层,最终分成两路送入并行的两个输出层:一个用于分类(K个目标物体类别再加上一个背景类),计算每一个RoI的概率分布(对于K+1个类的softmax概率估计)。另一个进行边框回归输出K个类的真实的位置坐标。
训练的过程可以归纳为以面的框图:
#可见Fast R-CNN解决了候选区域特征提取共享计算的问题,但是没有解决selective search进行候选框选择时计算慢的问题。RoI
在訪篇论文中,RoI是位于卷积特征图中的一个矩形框,它用一个四元组(r,c,h,w)来表示。(r,c)表示左上角的坐标,(h,w)表示高和宽。RoI max pooling将每个h x w的候选区域均分成H x W的子网格,每个网格大小相当于h/H x w/W。然后对每个网格进行最大池化(max pooling),这样就将特征图(feature map)上大小不一的候选区域转变为了大小统一的特征向量,再送入到下一层。 尽管ROI Pooling可以看做是针对ROI区域的特征图的池化操作,但因为不是固定尺寸的输入,因此每次的池化网格大小得手动计算。
我们尝试了3种预训练的Image-Net网络,每种网络包含5个最大池化层和5~12个卷积层。用一个预训练的网络对Fast R-CNN进行初始化需要执行3次转化。
首先,用RoI池化层取代最后一层的最大池化层,为了和网络的第一层全连接层兼容,RoI池化层设置为H x W。
其次,用之前提到的两个并行的层(a fullly connected layer and softmx over K+1 categories and category-specific bounding-box regressors)取代网络最后一层全连接层和softmax(用于训练1000路ImageNet分类)。
再次,网络修改为接收两类输入数据:图像和图像中的RoI区域。
使用反向传播算法训练所有网络权重是Fast R-CNN的一个重要特点。
Fast R-CNN有两个并行的输出层,第一个输出对于每个RoI的K+1个分类的离散概念分布:
p是通过对全连接层的K+1个输出通过softmax计算得来的。第二个输出边框回归的偏置:
每个要训练的RoI,由u标注它的真实类别,v标注它的边框。我们使用一个多任务损失(multi-task loss)L来联合训练每个RoI的分类和边框回归: