目标检测是机器视觉的一个分支,在车辆检测、商品分拣等生活及工业领域都具有重要的应用和研究价值,其目的是从计算机层面检测出图像中所检测物体的名称和该物体的位置关系(主要指物体在图片中的所处位置和该物体的像素大小)。传统的目标检测算法主要是基于各种模板,通过提取特征点、生成特征数据、进行特征数据匹配或利用机器学习方法实现图像的识别与检测。2012 年,是目标检测史上具有划时代意义的一年,自此越来越多的科研工作者投身于深度学习方面的研究,研究出了一批批优秀的算法。是因为这一年 Hinton 等提出了 AlexNet卷积网络模型,在 ImageNet 上超出第二名 41%,相较于传统目标检测实现了跨越式的提升。
在深度学习未兴起之前,目标检测算法分为目标实例和目标类别两类:(1)目标实例检测,通过提取图像关键点、生成特征数据、进行数据匹配,检测出目标对象;(2)目标类别检测,通过机器学习方法对特征数据进行二分类或多分类,实现目标对象检测和识别。
对于目标实例检测,2004 年 Lowe 等提出了 SIFT[19]算法,该算法通过高斯模糊、高斯差分函数运算分别实现了尺度空间和极值检测,得到的关键点匹配度高、抗噪性强。但该算法在特征不明显的图像上无法提取有效特征点,而且算法复杂度高、运行速度慢。为了克服 SIFT 算法的弊端,Ke 等人后续提出了 PCA-SIFT算法。该算法通过运用 PCA 方法对算法中向量进行降维,匹配效率获得了提升。但降维带来的信息损失使算法的匹配效果相较于 SIFT 有所下降。2006 年,Bay H等人基于 SIFT 提出了 SURF[21]算法,通过 Hessian 矩阵,减小了计算量,检测速度获得了提升。对于目标类别检测,通常采取 AdaBoost[22]系列算法。Adaboost 算法,通过调整训练集样本权重将多个弱学习器组合为一个强学习器,实现目标特征数据的有效提取,完成检测识别。
传统的目标检测算法,主要是围绕如何有效实现人工提取图像特征点,生成子特征数据完成图像目标识别和在此基础上如何最大限度减少计算量,提高检测速度这两方面展开的研究。但人工提取特征的方式过于简单,无法应用训练好的模型在类似的目标上,在目标改变时,需要有针对性地再次重复特征提取过程,给科研人员带来了繁重的工作量。深度学习的出现给科研带来了另一个研究方向。计算机通过 CNN 进行卷积、非线性激活、池化等一系列操作,可自动提取图像特征,相较于人工提取的特征,计算机提取出来的特征更加丰富、表达性更强。同时后续的计算量也大大减少,模型的检测速度甚至可以实现实时预测。
随着近几年人工智能领域的飞速发展,在目标检测方面出现了很多优秀的算法。按照阶段数的不同,可以分为多阶段目标检测、两阶段目标检测(two-stage)和单阶段目标检测(one-stage)。多阶段目标检测中具有代表性的是 CascadeR-CNN算法;两阶段目标检测中具有代表性的是 R-CNN系列的算法;在单阶段目标检测中具有代表性的是 SSD、YOLO(You Only Look Once,简称 YOLO)系列、EfficientNet、RetinaNet、EfficientDet 等。目前目标检测研究以单阶段和两阶段目标检测算法为主。
two-stage 在某种意义上是传统目标检测算法的研究方式上的延伸,而one-stage 则是将目标检测看作是回归问题来解决。易知,two-stage 目标检测主要划分为两步:第一步是生成 Region Proposal,使用 CNN 提取特征;第二步是使用分类器分类并修正位置。2014 年,Ross Girshick 等提出了 R-CNN算法,该算法大幅度提高了目标检测的准确率,但由于 R-CNN 是对所有的候选区域进行特征提取和计算,导致了大量重复计算,降低了运算效率。因此,R-CNN 的实时性不强,并且非常占用存储资源。同年,何凯明等人提出了 SPP-Net有效地解决了 R-CNN重复计算的问题,但 R-CNN 占用存储空间过多的问题没有得到解决。2015 年,基于 SPP-Net 改进的 Fast R-CNN,提高了计算速度,同时解决了内存占用过多问题。Faster R-CNN针对 Selective Search 的问题,提出使用 RPN 进行边框训练,有效地提升了检测速度。但 Faster R-CNN 沿用了 ROI 检测子网络,在小目标的检测上效果还有待提升。同时受限于 two-stage 算法设计思路,Faster R-CNN 算法最快达 5FPS。
为了提升算法的时效性,学者提出了 one-stage 算法。直接将目标检测看作回归问題,无需选择候选区域及提取特征,通过对输入图像操作直接回归出目标位置和类别。YOLO系列算法正是基于此发展而来。YOLO 算法速度得到了提升,最高可迖 45FPS。同年,SSD算法提出了一种利用单一深度神经网络检测图像中目标的方法。融合了 FasterR-CNN 和 YOLO 的优点,在保证检测精度的同时,提升了检测速度。之后一年,YOLO 原作者在 YOLOv1(YOLO 系列算法第 1 个版本,简称 YOLOv1)基础上提出了 YOLOv2(YOLO 系列算法第 2 个版本,简称 YOLOv2)算法,主要解决了过拟合现像和预设先验框不合理,提高了检测速度和检测精度。翌年,YOLOv3(YOLO 系列算法第 3 个版本,简称 YOLOv3)基于 YOLOv2 进行了全面的升级,在保持高检测速度的前提下,重点增强了对小目标的检测识别。此后,YOLOv3 原作者因个人原因宣布退出 CV 领域,2020 年 4月,YOLOv4(YOLO 系列算法第 4 个版本,简称 YOLOv4)作者在 YOLOv3基础上,在 CSPNet 中增加了 SPP 和 PANet,实现了检测速度和检测精度的进一步提升。两个月后,YOLOv5(YOLO 系列算法第 5 个版本,简称 YOLOv5)在GitHub 上开放其源码,进一步在提升精确度的同时加快了速度。与 YOLOv4 不同的是,其同时推出了不同精确度和检测速度的 YOLOv5 版本,更有利于移动端的部署,是当前业界最优秀的目标检测算法。针对不同的应用场景,但是在调研中也发现每个算法都有其适用范围,没有不好的算法,只有更合适的场景。