目标检测作为计算机视觉领域中最根本也是最具有挑战性的问题之一,近年来受到社会各界的广泛研究与探索。作为计算机视觉领域的一项重要任务,目标检测通常需要完成的是:提供数字图像中某类视觉对象(如人类、动物或汽车)的具体位置。此外,目标检测也是许多其他任务(例如:实例分割、图像描述生成、目标追踪等)的重要环节。
从应用的角度来看,目标检测可以分为两个研究主题:一般场景下的目标检测和特定类别的目标检测。两者的区别是:前者类似于模拟人类的视觉和认知,主要意图是探索在统一框架下检测出不同类别物体的方法;而后者是指在特定的应用场景下的检测,如人脸检测、行人检测、车辆检测等任务。近年来,深度学习技术的飞速发展给目标检测带来了显著的突破。目标检测目前已经被广泛地应用于许多现实世界的场景中,如自动驾驶、机器人视觉、视频监控等。
过去的 20 年,目标检测的发展历程大致经历了两个历史时期:传统的目标检测时期(2014 年以前)和基于深度学习的检测时期(2014 年以后)。传统的目标检测算法可以概括为以下几个步骤:首先,采取滑动窗口的方式遍历整张图像,产生一定数量的候选框;其次,提取候选框的特征;最后,利用支持向量机(SVM)等分类方法对提取到的特征进行分类,进而得到结果。由于当时缺乏有效的图像表示,人们只能设计复杂的特征表示,并通过各种加速技能来充分利用有限的计算资源。该时期主要的检测方法有:
(1)Viola Jones 检测器:Viola Jones 检测器由三个核心步骤组成,即 Haar特征和积分图、Adaboost 分类器以及级联分类器。
(2)HOG 检测器:HOG 检测器利用了方向梯度直方图(HOG)特征描述子,通过计算和统计局部区域的梯度方向直方图来构建特征。HOG 特征与 SVM 分类器算法的结合,在行人检测任务中应用广泛且效果显著。然而,HOG 检测器的缺点是始终需要保持检测窗口的大小不变,如果待检测目标的大小不一,那么 HOG检测器需要多次缩放输入图像。
(3)基于部件的可变形模型(DPM):DPM 所遵循的思想是“分而治之”,训练过程中学习的是如何将目标物体进行正确地分解,而推理时则是将不同的部件组合到一起。比如说,检测“汽车”问题可以分解为检测“车窗”、“车身”和“车轮”等。
早期的目标检测任务提取特征时,主要的方式是人工提取,具有一定的局限性,手工特征的性能也趋于饱和。2012 年起,卷积神经网络的广泛应用使得目标检测也开启了新的征程。2014 年 R. Girshick 等人提出的 R-CNN算法横空出世,目标检测开始以前所未有的速度快速发展。深度学习时代,目标检测算法根据检测思想的不同通常可以分为两大类别:两阶段(two-stage)检测和一阶段(one-stage)检测。
两阶段检测算法基于提议的候选框,是一个“由粗到细”的过程。首先产生区域候选框,其次提取每个候选框的特征,最后产生位置框并预测对应的类别,特点是精度高但速度慢。最早期的 R-CNN 算法利用“选择性搜索”方法产生候选框、卷积神经网络提取特征、支持向量机分类器进行分类和预测。虽然 R-CNN 算法具有一定的开创性,但生成的候选框大量重叠,存在计算冗余的问题。2014 年,He 等人提出 SPPNet算法,利用空间金字塔池化层对不同尺度的特征图进行池化并生成固定长度的特征表示,减少反复缩放图像对检测结果造成的影响。然而,SPPNet的缺点是:模型的训练仍然是分多步的;SPPNet 很难对 SPP 层之前的网络进行参数微调,导致效率降低。2015 年,R. Girshick 等人提出 Fast R-CNN算法,对 R-CNN 与 SPPNet 算法做出进一步改进,提出感兴趣区域池化层(ROI),使得检测的速度和精度大大提升。不久后,Ren 等人提出 Faster R-CNN算法,实现了端到端地训练,用 RPN 网络代替选择性搜索,大大减少了训练和测试的时间。
一阶段检测算法基于边界框的回归,是一个“一步到位”的过程。一阶段检测网络在产生候选框的同时进行分类和边界框回归,特点是速度快但精度稍逊。2016年,Redmon 等人提出了 YOLOv1[9]算法,该算法将图像分割成 S×S 个网格,基于每个网格对应的包围框直接预测类别概率和回归位置信息。同年,Liu 等人提出SSD 算法,该算法借鉴 YOLO 算法的思想,并利用多尺度特征图进行预测。2017年,Redmon 等人提出 YOLOv2算法,用 DarkNet-19 对 YOLOv1 的网络结构进行了修改。2018 年,Redmon 等人提出 YOLOv3[11]算法,改进之处是:YOLOv3 借鉴 FPN 结构,进行了多尺度预测;借鉴 ResNet网络结构,将 DarkNet-19 改进为DarkNet-53。研究者们对算法不断地改进,使得检测的性能不断提高。
此外,基于关键点(anchor-free)进行的目标检测是近期一个比较新颖的研究方向。主流的目标检测算法,比如两阶段的 R-CNN 算法和一阶段的 SSD 算法,基本上都是基于边界框(anchor-based)完成的。基于边界框的设计思想存在一些问题:许多目标的形状是不规则的,边界框可能会包含一些非目标的区域,对检测造成干扰;边界框的数量、大小和宽高比等超参数的设置需要根据数据集的不同而调整;边界框的庞大数量可能导致正、负样本的不平衡问题,导致检测的性能不佳。2018 年,Law H 等人提出 CornerNet,将目标检测问题转换为关键点检测问题。CornerNet 使用单个卷积神经网络,预测目标的左上角和右下角两个关键点,进而得到预测框。CornerNet 关注的是目标的边缘,而对于目标来说,最具有辨识度的信息应该在目标的内部。因此,2019 年 Duan K 等人提出 CenterNet,增加了对中心点的检测,通过中心点的位置再回归目标的其他属性。