在计算机视觉众多的技术领域中,目标检测(Object Detection)也是一项非常基础的任务,图像分割、物体追踪、关键点检测等通常都要依赖于目标检测。在目标检测时,由于每张图像中物体的数量、大小及姿态各有不同,也就是非结构化的输出,这是与图像分类非常不同的一点,并且物体时常会有遮挡截断,所以物体检测技术也极富挑战性,从诞生以来始终是研究学者最为关注的焦点领域之一。

 

目标检测的应用范围很广,如人脸,智慧城市,自动驾驶等等。

 

在利用深度学习做物体检测之前,传统算法对于目标检测通常分为3个阶段:区域选取、特征提取和体征分类。

 

区域选取:首先选取图像中可能出现物体的位置,由于物体位置、大小都不固定,因此传统算法通常使用滑动窗口(Sliding Windows)算法,但这种算法会存在大量的冗余框,并且计算复杂度高。

 

特征提取:在得到物体位置后,通常使用人工精心设计的提取器进行特征提取,如SIFT和HOG等。由于提取器包含的参数较少,并且人工设计的鲁棒性较低,因此特征提取的质量并不高。

 

特征分类:最后,对上一步得到的特征进行分类,通常使用如SVM、AdaBoost的分类器。

 

到后面深度学习方法

 

Anchor Box是学习目标检测过程中最重要且最难理解的一个概念。这个概念最初是在Faster R-CNN中提出,此后在SSD、YOLOv2、YOLOv3等优秀的目标识别模型中得到了广泛的应用。

 

Anchor Box跟传统目标检测中使用的“Sliding Windows”差不多,只不过并不是固定死的,在输入图像中采样的时候,每个黑色方框代表图像特征提取过程中某个特征图上的特征,以每一个box为中心生成多个大小和宽高比不同的bounding box,这些边界框就是Anchor Box。

 

对于不同的任务,需要检测的目标也是不同的,相应Anchor的选取大小也是不一样的,比如对于自动驾驶任务中,需要检测车辆,Anchor的大小就可以选取的大一些,而对于昆虫检测任务,Anchor的大小就得选取的小一些。所以Anchor的大小是非常重要的,我们可以在训练前通过在训练集中使用K-Means聚类算法来得到适合训练集的Anchor。