2.1 目标检测Two-stage算法
目标检测是很多任务的基础,如人脸识别需要人脸检测,OCR (Optical Character Recognition,光学字符识别)需要先对文本行进行检测,这些都是目标检测的范畴。
目标检测算法可以分为两类:一类是Two-stage算法,需要先产生候选框,然后对候选框进行分类,这类算法主要是R-CNN系列(R-CNN、Fast R-CNN、Faster R-CNN)算法,该类算法的精度高一些,但是速度慢一些;另一类是One-stage算法,最具代表性的就是YOLO系列算法和SSD算法,该类算法直接使用CNN预测输入图像的类别与位置,速度较快,但是精度会低一些,本节先介绍Two-stage算法,第2.2节介绍One-stage算法。
2.1.1 R-CNN算法
R-CNN是第一个将深度学习引入目标检测领域的算法,该算法的创新点在于使用CNN作为目标检测的特征提取器,定位检测目标;另外 R-CNN 使用模型预训练解决标注的训练数据不足的问题。在PASCAL VOC 2012数据集上,R-CNN将目标检测的精度提高了很多。R-CNN的算法框架如图2.1所示。
图2.1
R-CNN的基本流程如下:
(1)获取输入图像;
(2)提取约2000个自上而下的候选区域;
(3)使用CNN提取每个候选区域的特征,输出特征向量;
(4)使用SVM对每个候选区域进行分类。
论文作者列举了较多的候选区域生成的算法,R-CNN选用的是 Selective Search方法。
特征提取网络使用的是5个卷积层和2个全连接层,对于提取的候选区域,需要将其大小调整为固定大小227×227,然后送入CNN。
在测试时也是使用Selective Search方法,从输入图像中提取约2000个候选区域,然后送入CNN中计算特征。每个类都有一个为该类训练的SVM,将提取的特征送入SVM中进行分类。对于给定图像中所有的得分区域,应用非极大值抑制(NMS)。
模型训练是先在ILSVRC-2012分类数据集上进行预训练模型,预训练模型技巧在以后的模型训练中常被用到。
图2.2所示为R-CNN与其他算法在PASCAL VOC 2010数据集上的对比结果。
图2.2
由图2.2可以看出,R-CNN的检测结果远胜于当时其他算法的检测结果,自此深度学习的方法开始被广泛用于目标检测领域。
如果想深入了解 R-CNN,可以参考论文 Rich Feature Hierarchies for Accurate Object Detection and Semantic SegmentationTech Report(v5)。
2.1.2 Fast R-CNN算法
R-CNN在当时的效果非常显著,但是其算法设计还是有一些缺陷的,最显著的问题就是算法分为多个流程,提取候选区域会产生大量的冗余,使算法运行速度很慢。Fast R-CNN算法做了一些创新,不仅极大地提高了运行速度,还提升了精度。
Fast R-CNN的流程如图2.3所示。
图2.3
由图2.3可以看出,Fast R-CNN将整张输入图像送入卷积网络,而不是对每个候选框(Region Proposal)进行卷积,这样减少了重复计算,极大地提高了运行速度。因为Fast R-CNN最后使用了全连接层,所以使用RoI pooling进行特征图的尺寸变换。Fast R-CNN将边框回归和网络一起训练,分类任务使用softmax分类器。
改进后的网络与R-CNN和SPPNet相比有更高的精度,只有一个训练阶段且使用多任务损失,训练过程可以更新所有的网络层,不需要在本地缓存特征。
SPPNet 是目标检测领域非常重要的一个网络,由何恺明于2015年提出,相较于 R-CNN,SPPNet的影响力稍逊,故此处不再详述。感兴趣的用户可以参考论文Spatial Pyramid Poolingin Deep Convolutional Networks for Visual Recognition进行学习。
Fast R-CNN 在速度和精度上都有很大的提升。图2.4所示为 Fast R-CNN 与其他算法在PASCAL VOC 2012数据集上的对比结果。
图2.4
如果想深入了解Fast R-CNN算法,可以参考论文Fast R-CNN。
2.1.3 Faster R-CNN算法
Fast R-CNN的速度虽然较R-CNN有所提高,但是离实时的要求还有很大的差距,其候选框的提取依旧使用Selective Search方法,这个过程耗时很长。Faster R-CNN将特征提取、生成候选区域、Bounding Box回归和分类都融合到一个网络中,极大地提升了性能。
Faster R-CNN的网络架构如图2.5所示。
图2.5
由图2.5可以看出,整个网络分为四大部分。
(1)卷积层:卷积层用于提取输入图像特征图,输出给RPN(Region Proposal Network)和RoI pooling层。
(2)RPN:RPN用于生成候选区域,取代之前算法的Selective Search方法。
(3)RoI pooling层:该层用于处理输入的特征图和RPN生成的候选框,处理后送入全连接网络进行分类。
(4)分类器:对结果分类并进行Bounding Box回归。
卷积层可以使用VGG-16等作为特征提取网络。VGG网络在1.4.2节有介绍。
Faster R-CNN最大的改变就是使用RPN产生候选框,代替Selective Search这种手动的方法。RPN可以输入任意大小的图像,输出一系列的矩形框,每个矩形框还有一个对象得分。
RPN的框架如图2.6所示。
图2.6
RPN在卷积层的特征图上使用滑动窗口产生一系列的矩形框(anchor boxes),这些矩形框具有不同的尺寸和长宽比。如图2.6所示,在每个位置上产生k个矩形框,论文作者使用了3个尺度和3种不同的比率,每个位置可以产生9个矩形框,即k=9,这种设计达到了多尺度检测的目的。
因为每个矩形框会分为positive和negative,所以有2个得分,每个矩形框会有一个位置偏移量,因此RPN的cls层输出2k个得分,而reg层输出4k个坐标。另外,在RPN训练时,由于产生的矩形框很多,所以论文作者按照一定的规则随机选取其中的256个矩形框用于训练。
使用RPN在PASCAL VOC 2007数据集上的测试效果如图2.7所示。
图2.7
图2.7所示为该论文作者的几个尝试,使用RPN+VGG而不使用共享特征的mAP为68.5%,使用RPN+VGG且使用共享特征的mAP为69.9%,这说明了共享特征的重要性。另外,该论文作者还展示了在VOC 2007、VOC 2012及COCO数据集上训练对结果的影响,发现数据集的扩充对结果影响较大。
如果想深入了解Faster R-CNN算法,可以参考论文FasterR-CNN:Towards Real-Time Object Detection with Region Proposal Networks。