Fast R-CNN
论文地址: https://arxiv.org/pdf/1504.08083
摘要
本文提出了一种用于目标检测的快速区域卷积网络方法(Fast R-CNN)。Fast R-CNN基于之前的工作,利用深度卷积网络高效地对目标候选区进行分类。与之前的工作相比,Fast R-CNN提出多个创新提升了训练和测试速度,同时提高了检测准确性。Fast R-CNN在训练VGG16时比R-CNN快9倍,在测试时快213倍,并在PASCAL VOC 2012上获得了更高的mAP。与SPPnet相比,Fast R-CNN训练VGG16快3倍,测试快10倍,且精度更高。Fast R-CNN使用Python和C++(采用Caffe)实现,并在开源MIT许可证下提供:https://github.com/rbgirshick/fast-rcnn。
1 引言
最近,深度卷积神经网络(ConvNets)显著提高了图像分类和目标检测的准确性。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,当前的方法(例如,[9, 11, 19, 25])采用多阶段流水线来训练模型,这种方法速度慢且不够优雅。
复杂性在于目标检测需要对物体进行精确定位,这带来了两个主要挑战。首先,需要处理大量候选目标位置(通常称为“候选框”)。其次,这些候选位置只能提供粗略的定位,需要进一步优化才能实现精确定位。为解决这些问题,通常需要在速度、精度或简化性上做出折衷。
本文简化了基于CNN的最先进目标检测器的训练过程,提出了一种单阶段训练算法,可以同时学习对候选物体进行分类并优化其空间位置。
该方法可以使非常深的检测网络(如VGG16)在训练时比R-CNN快9倍,比SPPnet快3倍。运行时,检测网络能够在0.3秒内处理图像(不包括候选框时间),并在PASCAL VOC 2012数据集上取得了最高精度,mAP为66%(相比R-CNN的62%)。
1.1. R-CNN和SPP-Net
基于候选框的卷积神经网络方法(R-CNN)通过使用深度卷积网络(ConvNet)对目标候选框进行分类,在目标检测任务上表现出色。然而,R-CNN存在一些显著的缺点:
1. 训练是多阶段流程:R-CNN首先使用log损失函数(主要用于分类)对作用于候选框的卷积神经网络进行微调训练。然后,它将支持向量机与卷积神经网络的特征进行拟合。这些SVM充当目标检测器,替代了通过微调学习的softmax分类器。在第三阶段,再学习边界框回归器。
2. 训练成本高:在空间和时间上都很昂贵。为了进行SVM和边界框回归器的训练,必须从每张图片中的每个候选框中提取特征并存储到磁盘中。对于像VGG16这样非常深的网络,在VOC07的5k张训练验证集上需要2.5个GPU天。这些特征数据需要占用数百GB的存储空间。
3. 目标检测速度慢:在测试时,需要从每个测试图像中的每个候选框中提取特征。使用VGG16进行检测时,每张图像处理时间为47秒(在GPU上)。
R-CNN速度慢的原因是它对每个候选框都执行了一次卷积网络的前向传递,没有共享计算。空间金字塔池化网络(SPPnets)通过共享计算加快了R-CNN的处理速度。SPPnet首先对整个输入图像计算一次卷积特征图,然后通过从共享的特征图中提取特征向量来分类每个候选框。SPPnet通过最大池化操作将候选框内的特征图部分池化成固定大小的输出(例如6×6),并将多级池化结果进行拼接,类似于空间金字塔池化。SPPnet在测试时可以将R-CNN加速10到100倍,同时由于提议特征提取更快,训练时间也减少了3倍。
然而,SPPnet也有明显的缺点。与R-CNN类似,训练仍然是一个多阶段的流程,包括特征提取、使用log损失函数对网络进行微调、训练SVM,以及最终拟合边界框回归器。此外,特征仍需写入磁盘。然而,不同于R-CNN,SPPnet中的微调算法无法更新空间金字塔池化之前的卷积层。所以,这种固定卷积层限制了