目标检测的发展历程可以分为3个阶段:

  1.传统的目标检测方法

   传统的目标检测方法通常可以分为三个阶段:首先在给定的图像上选择一些候选区域,然后对这些区域进行特征提取,最后使用训练的分类器进行分类,其中人工提取特征的好坏直接影响到分类及检测的准确性,由于实际图像受光照及背景影响较大,人工特征提取往往存在一定局限性.

   传统的目标检测算法中比较好的模型为DFM,其将物体视为由多个物件组成,用物件间的关系来描述物体,可看作为HOG+SVM的扩展,很好的继承了两者的优点,同时在人脸检测,行人检测等任务上取得了不错的效果.

  • SIFT

   Paper: SUMMARY: DISTINCTIVE IMAGE FEATURES FROM SCALE-INVARIANT KEYPOINTS

   SIFT算法于1999年被David Lowe提出,并于2004年进行了补充和完善,此后广泛应用于目标识别,自动导航,图像拼接,三维建模,手势识别,视频跟踪等.

   SIFT全称Scale-Invariant Featuure Transform,即对图像的尺度和旋转能够保持不变性,同时对于亮度变化具有很强的鲁棒性,对于噪声和视角的微小变化也能保持一定的稳定性.

   SIFT算法可以分为4个阶段[1]:

1).尺度空间极值检测:该阶段是在图像的全部尺度和全部位置上进行搜索,并通过应用高斯差分函数可以有效地识别出尺度不变性和旋转不变性的潜在特征点来; 
  2).特征点的定位:在每个候选特征点上,一个精细的模型被拟合出来用于确定特性点的位置和尺度。而特征点的最后选取依赖的是它们的稳定程度; 
  3).方向角度的确定:基于图像的局部梯度方向,为每个特性点分配一个或多个方向角度。所有后续的操作都是相对于所确定下来的特征点的角度、尺度和位置的基础上进行的,因此特征点具有这些角度、尺度和位置的不变性; 
  4).特征点的描述符:在所选定的尺度空间内,测量特征点邻域区域的局部图像梯度,将这些梯度转换成一种允许局部较大程度的形状变形和亮度变化的描述符形式。
  • SURF

   Paper: SURF:Speeded Up Robust Features 

   SURF算法于2006年被Herbert Bay等人提出,并于2008年进行了完善,该算法的部分灵感来自于SIFT算法,具有重复性高的检测器和可区分性好的描述特点外,还有很强的鲁棒性以及更高的执行速度.

   SURF全称Speeded Up Robust Features,在保证正确性的前提下进行了简化和近似,并且多次运用积分图像的概念,因此在效率上比SIFT快3倍以上.

   SURF算法可以分为几个阶段[2]:   

特征点检测
   1).基于Hessian矩阵的特征点检测
   2).尺度空间表示
   3).特征点定位
  特征点描述
   1).方向角度分配
   2).基于Haar小波的特征点描述符
  • FAST

     Paper: Machine learning for high-speed corner detection

   FAST

1).在图像中任选一点p,假定其像素(亮度)值为 Ip.
  2).以3为半径画圆,覆盖p点周围的16个像素.
  3).设定阈值t,如果这周围的16个像素中有连续的n个像素的像素值都小于Ip−t或者有连续的n个像素都大于Ip+t,那么这个点就被判断为角点。在OpenCV的实现中n取值为12(16个像素周长的 3/4),也称
  4).一种更加快的改进是:首先检测p点周围的四个点,即1,5,9,12四个点中是否有三个点满足超过Ip+t,如果不满足,则直接跳过,如果满足,则继续使用前面的算法,全部判断16个点中是否有12个满足条件.

   FAST的特点是:

1).在速度上要比其他算法速度快很多
  2).受图像噪声以及设定的阈值影响很大
  3).FAST不产生多尺度特征而且FAST特征点没有方向信息,这样就会失去旋转不变性
  4).存在的缺点:可能大部分检测出来的点彼此相邻,需要使用非极大值抑制方法
  • ORB

   Paper: ORB: An efficient alternative to SIFT or SURF

   ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法,由Ethan Rublee,Vincent Rabaud,Kurt Konolige及Gary R.Bradski提出.

   ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上作了改进和优化,ORB运行速度是SIFT的100倍,是SURF的10倍.

   ORB算法分为两部分,分别是特征点提取和特征点描述,特征提取由FAST算法发展而来,特征点描述根据BRIEF算法改进而来.

1).oFAST特征提取
    由FAST算法改进而来,在使用FAST算法提取特征点之后,给定一个特征点反向,以实现特征点的旋转不变性
  2).rBRIEF特征描述
    rBRIEF是在BRIEF特征描述的基础上加入旋转因子改进的

  2.以R-CNN为代表的结合region proposal和CNN分类的目标检测框架

   目标检测通常可以看作一个分类任务和回归任务,即解决物体属于"哪一类"以及"在哪里"的问题,通常的思路是:

1).搭建一个识别图像的神经网络,例如以AlexNet,VGGNet以及GoogLeNet为baseline并进一步fine-tune
  2).在调试好的神经网络的尾部展开(加上"分类头"和"回归头"),成为classification+regression模式
  3).regression部门使用欧式距离计算损失,使用SGD进行训练
  4).在预测阶段将2个头接上
  • R-CNN

   Paper: Rich feature hierarchies for accurate object detection and semantic segmentation

1).输入测试图像; 
  2).利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
  3).将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征;
  4).将每个Region Proposal提取的CNN特征输入到SVM进行分类; 
  5).对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标.

   缺陷

1).训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器;
  2).训练耗时,占用磁盘空间大;5000张图像产生几百G的特征文件;
  3).速度慢:使用GPU,VGG16模型处理一张图像需要47s;
  4).测试速度慢:每个候选区域需要运行整个前向CNN计算;
  5).SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新.
  • SPP-Net

   Paper: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

  • Fast R-CNN

   Paper: Fast R-CNN

1).输入测试图像;
  2).利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);
  3).将整张图片输入CNN,进行特征提取;
  4).把建议窗口映射到CNN的最后一层卷积feature map上;
  5).通过RoI pooling层使每个建议窗口生成固定尺寸的feature map;
  6).利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

   相比R-CNN的改进

1).测试速度:
    R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.
    Fast R-CNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.

  2).训练速度:
    R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.
    Fast R-CNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.

  3).训练空间:
    R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.
    Fast R-CNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.
  • Faster R-CNN

   Paper: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

1).输入测试图像;
  2).将整张图片输入CNN,进行特征提取;
  3).用RPN生成建议窗口(proposals),每张图片生成300个建议窗口;
  4).把建议窗口映射到CNN的最后一层卷积feature map上;
  5).通过RoI pooling层使每个RoI生成固定尺寸的feature map;
  6).利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

   相比Fast R-CNN的改进

1).建议框的产生
    Faster R-CNN创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,使得建议框数目从原有的约2000个减少为300个,且建议框的质量也有本质的提高.
  • R-FCN

   Paper: R-FCN: Object Detection via Region-based Fully Convolutional Networks

  • Mask R-CNN

   Paper: Mask R-CNN

  3.以YOLO为代表的将目标检测转换为端到端的目标检测框架

  • YOLO

   Website: https://pjreddie.com/darknet/yolov1/

   Paper: You Only Look Once: Unified, Real-Time Object Detection

  • YOLO v2

   Website: https://pjreddie.com/darknet/yolov2/

   Paper: YOLO9000: Better, Faster, Stronger

  • YOLO v3

   Website: https://pjreddie.com/darknet/yolo/

   Paper: YOLOv3: An Incremental Improvement

   Code: https://github.com/pjreddie/darknet

  • SSD

   Paper: SSD: Single Shot MultiBox Detector

 

  • 参考文献
1.Opencv2.4.9源码分析——SIFT
  2.Opencv2.4.9源码分析——SURF
  3.Opencv2.4.9源码分析——FAST
  4.ORB_关于对噪声、尺度、旋转的改进
  5.OPENCV特征点提取算法对比
  6.基于深度学习的目标检测学习总结
  7.faster-rcnn原理及相应概念解释
  8.YOLOv3:An Incremental Improvement全文翻译
  9.YOLOv3: 训练自己的数据
  10.基于深度学习的目标检测