2D: 传统目标检测算法综述

一. 目标检测的发展历程

1. 2001年,V-J检测器诞生,主要用于人脸的检测;
2. 2006年,HOG + SVM的方法出现,主要用于行人的检测;
3. 2008年,rgb大神(记住这个人,后面的R-CNN系列检测算法也是出自他之手)研究出了著名的DPM算法,在深度学习方法成熟之前的很长一段时间里,就是这个算法一直在目标检测中发挥作用;

以上算法是属于传统目标检测的算法,都是基于图像处理和计算机视觉的!

------------------------------------------------------------------分割线------------------------------------------------

到了2012年CNN的崛起,开始了深度学习和计算机视觉结合的旅程!

4. 2013年,出现了Overfeat;
5. 2014年,rgb大神提出了大名鼎鼎的R-CNN检测算法,开始了two-stage的旅程;
6. 2014年,SPPNet诞生;
7. 2015年,R-CNN的快速版Fast RCNN 和 Faster RCNN,以及yolo,yolo的到来标志着one-stage检测算法的开启;
8. 2016年,大家都爱的SSD到来;
9. 2017-2018年,Pyramid Networks,还有Retina-Net。 

二. 什么是目标检测?

  1. 目标检测就是找出图像中所有感兴趣的目标,识别他们的类别和位置。
    (1)什么是类别?
    类别就是一个分类的标签,即感兴趣的目标属于什么种类,猫,狗,羊等。
    (2)什么是位置?
    位置用矩形框表示,目标检测的位置信息一般有两种格式(以图片左上角为原点(0, 0)):

        极坐标表示:(xmin, ymin, xmax, ymax)
                              xmin,ymin: 矩形框的左上角坐标
                              xmax,ymax: 矩形框的右下角坐标
                              
        中心点坐标:(x_center, y_center, w, h)
                              x_center, y_center: 目标检测框的中心点坐标
                              w, h: 目标检测框的宽、高
    
  2. 目标检测的输出是一个列表,其中的每一项都会给出检出目标的类别和位置。类别就是一个分类的标签,而位置用矩形框表示。
    (1)比较:
    分类的输出是一个类别标签。对单分类来说,它就是一个整数,表示属于某一个类别;对多分类而言,它就是一个向量。

三. 什么是传统目标检测?

  1. 传统目标检测和深度学习目标检测的区别:
    传统目标检测:很多任务不是一次性就可以解决,需要多个步骤;
    深度学习目标检测:很多任务都采用end-to-end方案,即输入一张图,输出最终想要的结果。算法细节和学习过程全部交给了神经网络。

  2. 完成一个目标检测任务一般分为三个步骤:
    第一步选择检测窗口;
    第二步提取图像特征;
    第三部设计分类器。
    如下图所示:
    在这里插入图片描述

四. V-J人脸检测算法

  1. 候选框选取:
    V-J框架使用的就是最简单的滑动窗口法(穷举窗口扫描),它的训练尺度是24*24的滑动窗口。

  2. Haar特征提取:
    关于Haar特征,通俗点讲就是白色像素点于黑色像素点的差分,即value = 白 - 黑,是一种纹理特征。
    (1)V-J算法特征提取矩形框图:
    包括三种特征,分为两矩形特征、三矩形特征、对角特征。如下图所示:
    2D: 传统目标检测算法综述_第1张图片

    (2)使用积分图加速计算特征:
    积分图的特点就是,该图像中的任何一点,等于位于该点左上角的所有像素之和,这可以被看成是一种积分,因此称之为积分图。

    (3)计算方块内的像素和:
    为了理解如何计算任意矩形内的像素值,我们画出四个区域A、B、C、D,并且图中有四个位置分别为1、2、3、4。如下图所示:2D: 传统目标检测算法综述_第2张图片
    我们要计算D区域内部的像素和该怎么计算?

    记位置4的左上的所有像素为rectsum(4),那么D位置的像素之和就是rectsum(1)+rectsum(4)−rectsum(2)−rectsum(3)。
    
    我们前面提到有三种类型的Haar特征。其中二矩形特征需要6次查找积分图中的值,而三矩形特征需要8次查找积分图中的值,而对角的特征需要9次。
    
  3. 训练人脸分类器:
    V-J采用的是Adaboost算法,原理如下:
    a. 初始化样本的权重w, 权重之和为1;
    b. 训练弱分类器;
    c. 更新样本权重;
    d. 重复步骤b
    e. 最后结合多个弱分类器的结果进行投票。
    将多个弱分类器组合成一个强分类器,这就是AdaBoost方法的核心理念。

五. HOG + SVM行人检测算法

六. DPM检测算法

七. NMS算法

全名叫非极大值抑制算法,该算法的主要目的是为了消除检测得到的多余框,找到目标物体的最佳位置。
该算法具体的步骤如下:

  1. 假定有6个带置信率的region proposals,并预设一个IOU的阈值如0.7。
  2. 按置信率大小对6个框排序: 0.95, 0.9, 0.9, 0.8, 0.7, 0.7。
  3. 设定置信率为0.95的region proposals为一个物体框;
  4. 在剩下5个region proposals中,去掉与0.95物体框IOU大于0.7的。
  5. 重复2~4的步骤,直到没有region proposals为止。
  6. 每次获取到的最大置信率的region proposals就是我们筛选出来的目标。

参考文献:https://blog.csdn.net/leeyisong/article/details/96422963

你可能感兴趣的:(#,二维目标检测,自动驾驶,深度学习,tensorflow,pytorch,机器学习)