关于目标检测,目前可以分为一阶段和两阶段方法,一阶段方法主要是SSD和YOLO系列,两阶段方法包括R-CNN、SPP-net,Fast R-CNN、Faster R-CNN等。本文将重点对两阶段方法的演变过程做一些简单的总结,对于这些方法的实现细节介绍不在本文范围之内,感兴趣的同学可以参考末尾的参考文献部分。
一、R-CNN
传统目标检测方法 比较重要的开篇之作之一。个人认为其突破性在于:
- 引入了候选区域概念,没有采用滑动窗口技术(候选区域的概念在早前可能已经存在);
- 引入CNN对候选区域进行特征提取;
- 采用了大量标注数据上的监督预训练模型 + 领域数据微调预训练模型的范式;
关于第3点,在后来改进的模型中,几乎都能看到该范式的影子。
缺点也很明显,为了提取每个候选区域的特征,在输入图像上重复进行了多次卷积计算,在性能上大打折扣,检测每张图像的耗时平均1~2秒左右。
二、SPP-net
改善了R-CNN模型中不能共享卷积计算的问题,同时引入了一些新的特性(SPP池化)。关于该模型的介绍,可参考本人另外一篇博文 。
三、Fast R-CNN
- 单一训练阶段,而非上述方法的多各训练阶段(CNN特征提取阶段、分类阶段、回归阶段);
- 特征提取阶段没有磁盘存储需求;
- 提出了Region Of Interrst(ROI)层的概念,本质是单一层次的SPP池化层;
- 将分类损失和回归损失集中于单一损失函数,即multi-task损失,并加入L1正则,对噪音更具鲁棒性;
- 对全连接层,采用SVD进行了压缩,参数有效减少;
在实验部分,作者发现使用单一尺度的数据进行训练和测试就可以满足基本的需求,多尺度反而收效甚微。
四、Faster R-CNN
现有的方法在生成候选区域时均采用了一些耗时比较高的算法,如Selective Search、EdgeBox等,在候选区域生成上,该方法可以说是对之前所有方法的一个颠覆。其改进之处在于:
- 采用RPN网络自动提取候选区域,摈弃了现有的候选区域生成算法,速度快的主要原因;
- 实现了RPN网络与Fast-R-CNN共享卷积特征计算;
- 训练和测试基于单一尺度;
RPN层的实现本质是滑动窗口,但在每个不同的滑动窗口位置上又附带了多个不同尺寸和宽高比的anchor,以便于检测不同形态的物体,如人(比较高),自行车(比较长),卡车(又长又大),原始论文采用了9个anchor。由于这个方法,Faster-R-CNN模型可以在单一尺度的图像上进行训练和测试。
五、参考文献
[1]. Selective Search for Object Recognition
[2]. Edge Boxes: Locating Object Proposals from Edges
[3]. Fast R-CNN
[4]. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
[5]. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
[6]. 《Rich feature hierarchies for Accurate Object Detection and Segmentation》(未找到paper链接)