在之前分析了目标检测中的一些基本的概念,接下来就是针对目标定位的一些经典的paper进行阅读分析。由于个人水平有限,如果文章有错误,还恳请各位指出,万分感谢~
本文主要针对object detection中的几篇经典论文进行分析。对于object detection,现在主要解决的方向有两种:
- 把它当做是一个分类问题,也就是通过使用滑窗检测器来进行定位一个物体的位置;
- 把它定位问题当做是一个回归问题,也就是通过网络输出bounding box的坐标以及bounding box之中的物体的label;
针对第一类的paper主要有R-CNN、Fast R-CNN以及Faster R-CNN等;而针对第二类paper主要有YOLO、YOLO-v2、YOLO-v3等。
R-CNN
R-CNN是将深度学习引入到物体检测的开山之作,这篇paper主要有两个创新的地方:
- 经典的目标检测的方法都是采用的滑窗的方法去检测图像中所有的区域,而R-CNN先提取候选区域,再从这些候选区域中来检测是否有物体;
- 经典的算法提取的人工设定的特征(Haar,HOG等)。而R-CNN是通过首先在一个较大的分类数据集ImageNet上进行预训练,然后通过迁移学习的思想,使用一个较小的识别库来进行最后的fine-tuning;
这两个创新点在当时解决了物体检测这个领域的痛点,也就是算法的检测速度和训练集的匮乏。
算法的主要流程:
- 通过select search方法,在图片中选取出约2000个候选区域;
- 通过CNN网络在这些候选区域中提取特征向量;
- 使用SVM分类器来对从候选区域提取出的特征向量进行分类;
- 最后使用回归对边界进行精修;
fast-RCNN
在Ross Girshick提出了RCNN之后不到一年,他又提出了Fast RCNN,新的模型相比于RCNN,结构更加紧凑,大幅度的提升了训练速度和预测速度。
Fast-RCNN主要针对RCNN中存在的几点不足来进行改进:
- RCNN训练速度慢:RCNN提取了约2000个候选区域来提取特征计算,在训练一张图片时,这2000个候选区域有大量重复的地方,在我们对这2000个候选区域提取特征时,会有大量重复的位置去计算特征;
- RCNN预测速度慢:同第一点,在进行计算时会有大量的冗余计算;
- RCNN训练需要大量的物理空间:因为RCNN在预测类别时,需要先对2000个候选区域提取特征,然后将这2000个候选区域特征保存起来,再使用svm分类器去分类。
- RCNN训练是多阶段,无法在预测时通过反向传播更新权重;
作者根据这几个主要的不足点对RCNN进行了如下几项改进:
- 在对图片的特征提取的过程中,不再是每一次对单个的候选区域进行提取特征,而是一次将整张图片传进网络中计算,这样共享计算可以避免许多冗余的计算过程;
- fast-RCNN不再使用svm来进行分类,而是采用神经网络来进行预测类别以及bounding box,是一个端到端的网络;
网络的整体结构如下图所示:
主要通过一个深度卷积神经网络来提取图片的特征,提取完之后,会对Roi区域做一个最大池化,Roi池化层主要是要输出一个固定大小的feature-map,具体操作方法如下图所示
对一张图片中的候选区域,对应到卷积之后的feature-map中,固定了Roi池化输出的大小后,这里假设是9*9的话,那么对Roi区域平均划分成9个大小相近的区域,对这9个区域内的特征,取最大值作为输出。
在Roi池化层输出之后,经过两次全连接后一个经过一个全连接输出当前区域的类别,另一个全连接输出bounding box坐标。