目录
0、摘要
1、引言
2、背景
2.1、问题描述
2.2、目标检测中的关键挑战
3、数据集以及评价指标
3.1 数据集
1)PASCAL VOC 07/12
2)ILSVRC
3)MS-COCO
4)Open Image
3.2、指标
4、backbone架构(骨干架构)
4.1、AlexNet
4.2、VGG
4.3、GoogleNet/Inception
4.4、ResNet
4.5、ResNeXt
4.6、CSPNet
4.7、EfficientNet
5、目标检测器
5.1 传统检测方法
1)Viola-Jones
2)HOG
3)DPM
5.2、两阶段检测器
1)R-CNN
2)SPP-Net
3)Fast R-CNN
4)Faster R-CNN
5)FPN
6)R-FCN
7)Mask R-CNN
8)DetectoRS
5.3、一阶段检测器
1)YOLO
2)SSD
3) YOLOv2 与YOLO9000
4)RetinaNet
5)YOLOv3
6)CenterNet
7)EfficientDet
8)YOLOv4
9)Swin Transformer
6、轻量网络
6.1、SqueezeNet
6.2、MobileNet
6.3、ShuffleNet
6.4、MobileNetv2
6.5、PeleeNet
6.6、ShuffleNetv2
6.7、MnasNet
6.8、MobileNetv3
6.9、Once-For-All (OFA)
7、结果对比
8、未来趋势
9、总结
目标检测是这样一种任务:在图像或者视频中,找到目标位置并进行分类。近年来,由于其广泛应用而引起了重视。这篇文章综述了近年来基于深度学习的目标检测的最新进展,提供了基准数据集和评估指标的简要概述,还提供了在识别任务中使用的一些突出的骨干网络。同时,也提供了一些当代用于边缘设备的轻量分类网络。最后,在多个评价指标上对比了这些架构的性能。
目标检测对于人类来说,是一项非常简单的任务,就连几个月大的婴儿都能识别出一些常见目标。然而,直到十年之前,让机器学会目标检测仍是一个艰巨的任务。目标检测需要识别并定位视野中某个目标(如:汽车、行人、路标等)的所有实例,其与其他的类似任务,如分类、分割、运动估计、场景理解等,一同构成了计算机视觉领域的基础问题。
早期的目标检测模型是通过集成一系列手工设计的特征提取器(如:Viola-Jones、HOG等)来构造的,这些模型的特点是:速度慢、精度低、跨域性能差。重新崛起的CNNs和深度学习图像分类改变了视觉领域的格局。在2012ImageNet大规模视觉识别挑战赛(ILSVRC)上出现的AlexNet,启发了后续关于CNNs的一些列研究。如今,目标检测的应用范围已经涵盖了从自动驾驶、身份检测到安全及医疗等领域。近年来,随着新的工具及技术的发展,目标检测的应用呈指数级增长。
这篇综述全面回顾了基于DeepLearning的目标检测器以及轻量分类网络。现有的其他综述虽然也很全面,但是缺少一些最新技术。本篇综述的主要贡献如下:
1)深入分类了两类目标检测器:单阶段检测器和两阶段检测器,并从历史的角度审视了这些方法的演变;
2)给出了关于标志性backbone架构和轻量模型的详细评估,这是现有综述所不具备的。
本文系统回顾了各种目标检测架构及其对应技术,如图1所示:
如图1,剩下章节的内容安排如下:
第2节:讨论目标检测的问题定义及其挑战;
第3节:列出各种基准数据集以及评价指标;
第4节:研究现代目标探测器中几个具有里程碑意义的backbone;
第5节:分3个子章节,每个子章节研究不同种类的目标检测器;
第6节:对一种特殊的目标检测分类——轻量网络进行分析;
第7节:轻量网络的对比分析;
第8节:目标检测的未来发展趋势;
第9节:全文总结。
目标检测是目标分类的自然扩展,后者的目的仅仅是对图像中的目标进行识别。目标检测的目的是检测出图像中所有实例的类别(预定义好的),并用一个轴对齐的矩形框大致给出实例的位置。检测器应当能够识别出所有实例,并画出包围实例的边框(bounding box)。它通常被视为一个监督学习问题。现代的目标检测模型可以使用大量标记图像进行训练,并在各种标准基准上进行评估。
在过去的十年里,计算机视觉已经取得了很大的进步,但是它仍然有一些重大的挑战需要克服。在实际应用中面临的一些关键挑战有:
类内变化:自然场景中,统一对象的不同实例之间出现类内变化是非常常见的。这些变化的原因是多种多样的,如:遮挡、光照、姿态、视角等。这些不受约束的外在因素会对目标的外观产生剧烈变化。可以预见的是,目标可能会有非刚性形变或旋转、缩放、模糊等变化,且一些目标可能在环境中不显著,导致其提取变得困难。
类别数量:可用的目标种类绝对数量(过少)是一个需要解决的挑战。其需要高质量的标注数据,而这通常难以获取。使用更少的样本训练检测器是一个待研究的问题。
效率:如今的模型需要大量的计算资源来生成准确的检测结果,但在移动或边缘设备上,更为关键的是计算效率。
目标检测器使用多种指标来评价检测器的性能,如:FPS、precision、recall,以及最常用的mAP。precision由IoU(交并比)推导出来,后者的定义是预测边框和GT之间的交并比。
backbone是目标检测器中的重要组成部分,输入图像的特征就是通过其进行提取的。这里讨论几种经典的backbone架构。
检测器分为两类:两阶段检测器、一阶段检测器。
下面有对传统的检测方法的简单介绍。对于一个网络,如果有一个单独的模块用于生成region proposals(区域候选框),那么该网络就成为两阶段检测器。这种二阶段检测器,在第一阶段找到一定数量的候选proposals,然后在第二阶段对每个proposals进行定位和分类。一阶段检测器直接进行分类和定位,使用预定义的不同比例和长宽比的boxes/points来定位目标,在实时性和更简单的设计方面优于两阶段检测器。
2001年提出,主要用于人脸检测。
它结合了类似Haar特征、积分图像、Adaboost和级联分类器等多种技术。
第一步在输入图像上滑动窗口搜索Haar类特征,使用积分图像进行计算。
然后,使用一个训练有素的Adaboost找到每个Haar特征的分类器,并将它们级联。
Viola-Jones算法仍然用于小型设备,因为它的高效和快速。
Dalal 和Triggs于2005年提出了Histogram of Oriented Gradients (HOG)特征描述器,用于目标检测的特征提取。与其他探测器相比,HOG是一个改进版,它提取梯度及其边缘方向来创建一个特征表。图像被划分成网格,然后使用特征表为网格中的每个单元创建直方图。为感兴趣的区域生成HOG特征,并将其输入线性SVM分类器进行检测。其提出是作为行人检测检测器的,不过它可以被训练来检测各种其他类。
Deformable Parts Model (DPM)由Felzenszwalb等人引入,是2009年Pascal VOC挑战赛的冠军。它利用目标的个别”部分“进行检测,准确率高于HOG。它遵循分而治之的哲学;在推理期间,对象的各个部分被单独检测,它们的一个可能的排列被标记为检测结果。例如,人体可以被认为是头、胳膊、腿和躯干等部分的集合。一个模型将被指定捕捉整个图像中的一个部分,并对所有这些部分重复这个过程。然后,另一个模型移除那些不可能的组合,以生成最终检测。基于DPM的模型是深度学习时代之前最成功的算法之一。
Region-based Convolutional Neural Network(R-CNN),是R-CNN系列的第一篇文章,其证明了CNNs可以极大地提高性能。R-CNN使用一个类别不可知的region proposals CNNs模块将检测转化为分类和定位问题。对于减去均值后的输入图像,首先通过region proposals模块,生成2000个候选对象。这个模块使用选择性搜索(SS)找到图像中有较高概率属于一个对象的部分。然后,这些候选项被warped(缩放)并通过CNN网络传播,CNN为每个proposals提取4096维的特征向量。Girshick等人使用AlexNet作为检测器的backbone。然后,特征向量被送入训练好的、指定类别的SVM获取置信度得分。接着,使用非极大值抑制(NMS)基于IoU和类别对得分区域进行过滤。一旦类别被确认,算法就会使用训练好的边界框回归器来预测其边框,也即预测四个参数:xyhw。
R-CNN有着一个复杂的多阶段训练过程:第一阶段,使用大量分类数据集预训练CNN;第二阶段,是使用特定域的图像(减均值、warped的proposals)针对检测进行微调,并把CNN模型的分类层替换为N+1-way的分类器(N为类别数);最后,为每一类训练一个线性SVM以及边框回归器。
R-CNN在目标检测领域引起了一个新的浪潮,不过它很慢(每张图像47秒),且时空复杂度都很高。它有复杂的训练过程,即使在一些计算是共享的情况下,也要花几天时间在小数据集上训练。
He等人提出使用金字塔池化(SPP)层来处理任意尺寸、任意长宽比的图片。他们意识到,仅全连接层需要固定大小的输入。SPP-net在region proposal 模块之前,只是平移了CNN的卷积层,增加了pooling层,使得网络不依赖于size/aspect ratio(尺寸/长宽比),减少了计算量。生成候选窗口的算法仍是选择性搜索(SS)。feature maps(特征图)是通过ZF-5网络的卷积层从输入图像提取的。然后,候选窗口被映射到特征映射上,这些特征映射随后被金字塔池化层的空间bins转化为固定长度的表示。最后,将得到的向量送入全连接层,然后使用SVM分类器预测类别和得分。类似于R-CNN,SPP-Net也有一个边框回归的后处理层来改善定位精度。其同样使用多阶段训练过程,除了微调以外,其他步骤只在全连接层上进行。
SPP-Net在相似精度的前提下,比R-CNN快很多,它还可以处理任意尺寸、比例的图像,因此,也避免了由于输入形变导致的目标变形。然而,由于其架构类似于R-CNN,它也有R-CNN的缺点,像多阶段训练,昂贵的计算和训练时间。
R-CNN和SPP-Net的一个主要缺点是需要多阶段分别训练。Fast R-CNN通过创建一个单一的端到端可训练的系统来解决这个问题。网络将一幅图像被送入一些列卷积层,同时目标的proposals也映射到获取的feature maps上。Girshick利用ROI-Pooling层替代了SPP-net中的金字塔结构的Pooling,其后接上两个全连接层,然后分了N+1类的softmax层和一个同样具有一个全连接的边框回归层。该模型还将边框回归器的损失函数从L2改为smooth L1以提高性能,同时引入多任务损失来训练网络。
作者还使用了先进的改进的预训练模型作为backbone。采用随机梯度下降法(SGD)和mini-batch为2对该网络进行单步训练,这有助于网络更快地收敛,因为反向传播在两个图像的roi之间共享计算。
Fast R-CNN主要是作为速度的改进而引入的(是R-CNN的146倍),而准确性的提高则是次要的。
尽管Fast R-CNN逐渐接近实时目标检测,但它的区域建议生成仍然慢了一个数量级(每幅图像2秒相比于每幅图像0.2秒)。Ren等人提出了一个完全卷积网络作为区域建议网络(RPN),该网络接受任意输入图像并输出一组候选窗口。每个这样的窗口都有一个相关的对象评分,它决定了一个对象出现的可能性。RPN引入了Anchor的概念,它使用多个不同长宽比的边界框,并在它们之上回归来定位对象。输入的图像首先经过CNN得到一组feature maps。它们被转发到RPN, RPN生成边界框及其分类。被选择的proposals随后映射回前面CNN层所提取的feature maps上,并最终送入全连接层,来进行分类和边框回归。Faster R-CNN实际上就是使用RPN所谓region proposals模块的Fast R-CNN。
训练Faster R-CNN更为复杂,因为两个模型之间存在执行不同的任务的共享层。首先,RPN在ImageNet数据集上进行预训练,在PASCAL VOC数据集上进行微调。然后,使用第一步的RPN得到的region proposals来训练一个Fast R-CNN。到此为止,网络还没有共享卷积层。现在,我们固定了检测器的卷积层,并微调了RPN。最后,Fast R-CNN从更新后的RPN进行微调。
Faster R-CNN比以前的SOTA提高了超过3%的检测精度,并将推理时间减少了一个数量级。它修正了慢速的region proposals过程,并以每秒5帧的速度运行。CNN在region proposals的另一个优势是,它可以学习产生更好的提案,从而提高准确性。
在提升小目标检测效果时,在多个级别上使用图像金字塔来获取特征金字塔(特征化的图像金字塔)是一种常用的手段。虽然它提高了检测器的平均精度,但推理时间的增加也是很多的。Lin等人提出了该特征金字塔网络(FPN),它采用自上而下的横向连接架构,在不同的尺度上构建高层次的语义特征。FPN有两条路径,一条是由卷积神经网络(ConvNet)在多个尺度上计算特征层次的自底向上路径,另一条是自上而下的路径,它将粗特征图从较高层次上采样为高分辨率特征。这些路径通过1x1卷积运算进行横向连接,以增强特征中的语义信息。这里采用FPN作为Faster R-CNN的RPN,以ResNet-101为backbone。
FPN可以在所有尺度上提供高级语义,降低了检测的错误率。它成为了未来检测模型的标准构建块,提高了整体的准确性。它也促进了洽谈改进的网络,如PANet、NAS-FPN、EfficientNet等网络的发展。
Dai等人提出基于区域的全卷积神经网络(R-FCN),共享了网络中几乎所有的计算,不像之前的两阶段检测器那样每个proposals都使用了资源密集型技术。他们反对使用完全连接的层,而是使用了卷积层。然而,卷积网络的深层是平移不变的,这使得它们在定位任务中不起作用。作者建议使用位置敏感评分图来补救。这些敏感的评分maps编码了相关的空间信息,并稍后汇集,以确定准确的定位。R-FCN通过将ROI分为k*k个网格,并计算每个cell的得分,然后这些得分求均值,用于预测目标类别。R-FCN检测器是四个卷积网络的组合:输入图像首先经过ResNet-101来获取feature maps;中间输出(Conv4)送入RPN以确定ROI proposals,最后的输出进一步送入一个卷积层进行处理,并送入分类器和回归器。分类层通过结合生成的位置敏感map和RoI proposals来生成预测,而回归网络输出边框的细节。R-FCN采用与Faster-RCNN类似的4步训练方式,同时使用组合交叉熵和边框回归损失。同时,在训练过程中也使用了在线难例挖掘(OHEM)。
Dai等人提出了一种新的方法来解决卷积神经网络中的平移不变性问题。R-FCN将Faster R-CNN和FCN结合起来,实现快速、更准确的检测器。尽管它的准确率没有提高多少,但它比同类产品的速度快2.5-20倍。
Mask R-CNN在Faster R-CNN基础上进行了扩展,通过增加一个分支来并行进行像素级目标实例分割。该分支是一个应用于RoI上的全连接网络,对每个像素进行分割,整体代价很小。它使用类似于Faster R-CNN的架构进行目标proposals提取,不过增加了一个与分类、回归head并行的mask head。一个主要的区别是使用了RoIAlign层,而不是RoIPool层,以避免由于空间量化造成的像素级错位。为了更好的准确性和速度,作者选择了带有特征金字塔网络(FPN)的ResNeXt-101作为其主干。原先Faster R-CNN中的损失函数更新为了mask loss,就像FPN中那样,它使用了5个anchor、3种长宽比。Mask R-CNN的整体训练与faster R-CNN相似。
Mask R-CNN的性能比现有的SOTA一阶段模型架构更好,增加了一个额外的实例分割功能,但增加的开销很小。该算法训练简单、灵活,在关键点检测、人体姿态估计等应用中具有很好的通用性。然而,它仍然低于实时性能(>30 fps)。
许多当代的两阶段探测器采用的是多看多想的机制,即先计算对象proposals,然后提取特征来检测对象。DetectoRS在网络的宏观和微观层面都使用了该机制。在宏观层面,其提出了递归特征金字塔(RFP),这是由多个特征金字塔(FPN)堆叠而成、且带有从FPN的自顶向下层级到自底向上层之间的额外反馈连接。FPN的输出经过空洞空间金字塔池化层(ASPP)处理,然后送入下一个FPN层。然后,通过一个融合模块创建一个注意力map,将不同模块的FPN的输出联合起来。在微观层面,Qiao等人提出了可切换的Atrous卷积(SAC),以调节卷积的扩张率。利用具有5x5滤波器和1x1卷积的平均池化层作为交换函数来决定atrous卷积[55]的速率,帮助backbone动态检测各种尺度的目标。他们还把SAC放在两个全局上下文模块之间,因为这有助于实现更稳定的切换。递归特征金字塔和可切换Atrous两种技术的结合卷积产生检测器。作者将上述带有混合任务级联(HTC)的技术作为baseline,并和ResNext-101骨干结合起来。
DetectoRS结合了多个系统,以提高探测器的性能,并设置了最先进的两级探测器。其RFP和SAC模块具有很好的通用性,可用于其它检测模型。但是,由于它只能处理数据,不适合实时检测(每秒4帧)。
近年来,一个新的研究分支已经形成,旨在为物联网中常见的资源受限环境设计小型而高效的网络。这一趋势也渗透到强大的目标检测器的设计中,我们可以看到,虽然大量的目标检测器能够实现很好的准确性和实时推理,但是这些模型大部分需要过多的计算资源,因此不能部署在边缘设备上。
过去许多不同的方法都显示出令人兴奋的结果。利用高效组件和压缩技术,如剪枝,量化、哈希等提高了深度学习模型的效率。利用训练好的大网络来训练更小的模型,称为蒸馏,也显示了有趣的结果。然而,在本节中,我们将探讨一些在边缘设备上实现高性能的高效神经网络设计的典型例子。列表如下所示:
在过去的十年中,目标检测取得了巨大的进展。该算法在一些垂直领域已经达到了人类水平的精度,但仍有许多令人兴奋的挑战需要解决。在本节中,我们将讨论目标检测领域中的一些开放性问题。
AutoML:采用神经结构自动搜索(NAS)确定目标探测器的特性已经成为一个比较热的研究领域。前面章节已经展示了一些通过NAS设计的检测器,不过其仍处于初级阶段,算法的搜索是一个复杂且资源密集型的过程。
Lightweight detectors: 虽然轻量网络能够达到与成熟分类网络相当的性能,展示了 其巨大潜力,不过在检测精度上,仍然低于50%。随着越来越多的设备上机器学习的应用上市,对小型、高效和同样精确也高的模型的需求将会增加。
Weakly supervised/few shot detection: 大多SOTA目标检测模型都是在数以百万计的标注数据上训练的,这些数据费时费力难以扩展。在弱监督数据(也即:图像级的标注)上进行训练,将大大降低成本。
Domain transfer: 域转移是指在一个独立但相关的目标任务上使用一个在特定源任务的标注图像上训练的模型。它鼓励重用训练过的模型,减少对大型数据集可用性的依赖,以实现高精度。
3D object detection: 3D目标检测是自动驾驶中尤为关键的问题。即使模型已经达到了很高的准确性,但任何低于人类水平性能的应用都将带来安全问题。
Object detection in video: 目标检测器是为独立图像的推理而设计的,这缺乏了多帧图像间的相关性。使用多帧图像间的时空关系进行目标识别是一个开放性问题。
尽管在过去的十年中,目标检测已经取得了很大的进步,但最好的检测器在性能上仍远未达到饱和。随着其应用程序在现实世界中的增加,对可部署在移动和嵌入式系统上的轻量级模型的需求将呈指数级增长。人们对这个领域越来越感兴趣,但它仍然是一个公开的挑战。在本文中,我们展示了两阶段、一阶段检测器是如何一步步发展并超越前期研究的。两阶段检测器通常更为准确,不过它们的速度更慢、难以满足类似自动驾驶这样的实时应用。然而,在过去几年里,一阶段检测器的发展改变了这个情况,其可以达到与前者等同的性能,而速度更快。正如图10所示,Swin Transformer是迄今为止最精确的检测器。随着目前检测器在精度上出现的正向趋势,我们对更准确、更快的检测器抱有很高的希望。