作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处


目录

回顾古典目标检测的发展史

传统目标检测和基于深度学习的目标检测

传统目标检测方法

基于Haar特征的Viola-Jones + Adaboost + 滑动窗口的人脸检测;

HOG+SVM的行人检测

DPM物体检测

深度学习目标检测方法

Two-stage

One-stage

其他(RefineDet)

目标检测方法对比

传统方法VS深度学习

单节段VS双阶段

基于深度学习常用网络的对比

当下基于深度学习的目标检测概述

目标检测中的关键挑战

1.类内变化:

2.类别数量:

3.效率:

常用于目标检测任务的数据集

PASCAL VOC 07/12

ILSVRC

MS-COCO

Open Image

数据倾斜/偏差问题

模型的评价指标

backbone架构

目标检测器

回顾传统、古典的检测器:

双阶段检测网络和概述

单节段检测器和其概述

常用的单双阶段检测网络对比

轻量网络

SqueezeNet

MobileNet

ShuffleNet

MobileNetv2

PeleeNet

ShuffleNetv2

MnasNet

MobileNetv3

Once-For-All (OFA)

目标检测现在的挑战

AutoML:

Lightweight detectors:

Weakly supervised/few shot detection:

Domain transfer:

3D object detection:

Object detection in video:

总结


回顾古典目标检测的发展史

https://blog.csdn.net/RayChiu757374816/article/details/121359002

传统目标检测和基于深度学习的目标检测

用于目标检测的方法通常分为基于机器学习的方法(传统目标检测方法)或基于深度学习的方法(深度学习目标检测方法),目标检测方法经历了从传统目标检测方法到深度学习目标检测方法的变迁:

传统目标检测方法

        对于基于机器学习的方法,需要先提取Haar、SIFT、HOG特征,然后使用诸如支持向量机(SVM)的技术进行分类,具体场景有:

基于Haar特征的Viola-Jones + Adaboost + 滑动窗口的人脸检测;

HOG+SVM的行人检测

DPM物体检测

深度学习目标检测方法

        对于基于深度学习的方法,无需定义特征即可进行端到端目标检测,通常基于卷积神经网络(CNN)。基于深度学习的目标检测方法可分为 One-stage 和 Two-stage 两类,还有继承这两种类方法优点的 RefineDet 算法。

Two-stage

基于 Two-stage 的目标检测算法主要通过一个卷积神经网络来完成目标检测过程,其提取的是 CNN 卷积特征,在训练网络时,其主要训练两个部分,第一步是训练 RPN 网络,第二步是训练目标区域检测的网络。

即先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类。网络的准确度高、速度相对 One-stage 慢。典型算法有:

  • R-CNN,Fast R-CNN,Faster R-CNN:R-CNN系列算法的发展历程_RayChiu757374816的博客-CSDN博客

One-stage

基于 One-stage 的目标检测算法直接通过主干网络给出类别和位置信息,没有使用RPN网路。这样的算法速度更快,但是精度相对Two-stage目标检测网络了略低。典型算法有:

  • SSD(Single Shot MultiBox Detector)系列
  • YOLO系列 :yolo系列网络算法的演变过程_RayChiu757374816的博客-CSDN博客
  • RetinaNet

其他(RefineDet)

RefineDet (Single-Shot Refinement Neural Network for Object Detection)  是基于SSD算法的改进。继承了两种方法(例如,单一阶段设计方法,两阶段设计方法)的优点,并克服了它们的缺点。

目标检测方法对比

传统方法VS深度学习

基于机器学习的方法和基于深度学习的方法的算法流程如图所示,传统目标检测方法需要手动设计特征,通过滑动窗口获取候选框,再使用传统分类器进行目标区域判定,整个训练过程分成多个步骤。而深度学习目标检测方法则通过机器学习特征,通过更高效的 Proposal 或直接回归的方式获取候选目标,它的准确度和实时性更好。

关于目标检测算法的研究现在基本都是基于深度学习的,传统的目标检测算法已经很少用到了,深度学习目标检测方法更适合工程化, 具体对比如下:

单节段VS双阶段

基于深度学习常用网络的对比

当下基于深度学习的目标检测概述

参考:2021深度学习目标检测综述_AI数据工厂-CSDN博客

目标检测是目标分类的自然扩展,后者的目的仅仅是对图像中的目标进行识别。目标检测的目的是检测出图像中所有实例的类别(预定义好的),并用一个轴对齐的矩形框大致给出实例的位置。检测器应当能够识别出所有实例,并画出包围实例的边框(bounding box)。它通常被视为一个监督学习问题。现代的目标检测模型可以使用大量标记图像进行训练,并在各种标准基准上进行评估。

目标检测中的关键挑战

在过去的十年里,计算机视觉已经取得了很大的进步,但是它仍然有一些重大的挑战需要克服。在实际应用中面临的一些关键挑战有:

1.类内变化:

自然场景中,统一对象的不同实例之间出现类内变化是非常常见的。这些变化的原因是多种多样的,如:遮挡、光照、姿态、视角等。这些不受约束的外在因素会对目标的外观产生剧烈变化。可以预见的是,目标可能会有非刚性形变或旋转、缩放、模糊等变化,且一些目标可能在环境中不显著,导致其提取变得困难。

2.类别数量:

可用的目标种类绝对数量(过少)是一个需要解决的挑战。其需要高质量的标注数据,而这通常难以获取。使用更少的样本训练检测器是一个待研究的问题。

3.效率:

如今的模型需要大量的计算资源来生成准确的检测结果,但在移动或边缘设备上,更为关键的是计算效率。

常用于目标检测任务的数据集

PASCAL VOC 07/12

Pascal Visual Object Classes(VOC)挑战赛是一个持续了多年的、为了促进视觉感知的比赛。其起始于2005,对四个目标类别进行分类和检测,不过VOC的两个版本主要用作基准测试集。VOC2007有5K个训练图像以及超过12K的标注目标;VOC2012将训练图像增加到11K,并拥有超过27K个标注目标,目标类别也扩展到了20类,同时也增加了语义分割、动作识别的任务。Pascal VOC引入了mAP@0.5IoU作为评价指标,来评估模型性能。图3展示了Pascal VOC数据集中各个类别图像数量的分布情况:

ILSVRC

ImageNet Large Scale Visual Recognition Challenge (ILSVRC),是2010~2017期间的年度挑战赛,如今其已经成为了评估模型性能的基准集。数据集的规模扩展到了包含了1000个类别、超过100万个图像,其中精选了200个类别、超500K个图像被用于目标检测。该目标检测数据集包含了来自ImageNet、Flikr在內的多种数据源。ILSVRC还放宽了IoU的限制,以将小目标检测纳入其中。图4展示了ImageNet数据集中不同类别的图像数量分布情况:

MS-COCO

The Microsoft Common Objects in Context(MS-COCO),是目前最具挑战的数据集之一。其包含了自然环境中发现的、四岁儿童可以轻易识别的共91种常见目标。MS-COCO字2015年提出,自此其热度只增不减。其包含了超过200万个实例,且平均每张图像中有3.5个类别、7.7个实例,也包含了多种视角的图像。MS-COCO引入了更为严格的方法来评价检测器,不像VOC和ILSVCR,COCO在IoU从0.5到0.95的范围内没隔0.5计算一次mAP,然后平均这十个mAP,得到AP。除此之外,它还将AP分别用于小型、中型和大型对象,以在不同的尺度上比较性能。图5展示了MS-COCO数据集中不同类别的图像数量的分布情况:

Open Image

谷歌的Open Images数据集由920万张图像组成,使用图像级标签、对象边界框和分割掩码等进行标注。它于2017年推出,并已进行6次更新。对于目标检测,Open Images有1600万个包围框,包含190万张图像上的600个类别,这使它成为最大的目标定位数据集。它的创作者格外小心地选择了有趣、复杂和多样的图像,每张图像有8.3个对象类别。对Pascal VOC中引入的AP做了一些更改,比如忽略未注释的类,需要检测类和子类等。其每类的图像数量分布情况如图6所示:

数据倾斜/偏差问题

通过上边的几种数据集可以发现不同类别的图片数量差别很大,上述四种数据集中,有三种(Pascal VOC、MS-COCO、Open Image)数据集中,除了前五类,后面类的图片数量显著下降。比如图3所展示的,有13775张图像被标注为“person”、2829张被标注为“car”,剩下的18个类别的图像数量几乎直线下降,直到“绵羊”类只有55张图像。类似地,对于MS-COCO数据集,类“person”有262465张图像,其次最频繁的类“car”有43867张图像,这种下降趋势一直持续到只有198张图片“吹风机”。类似的现象在Open Images 也存在,其中“Man”最常见,有378077张图片,“Paper Cutter”只有3张图片。这清楚地表示了数据集中的一种倾斜,并且必然会在任何目标检测模型的训练过程中产生一种偏差。因此,在这些倾斜数据集上训练的目标检测模型,对于训练数据中图像数量较多的类,几乎可以表现出更好的检测性能。虽然这个问题仍然存在,但在ImageNet数据集中稍微不那么明显,从图4中可以看出,使用频率最高的类别考拉有2469张图片,使用频率最低的类别cart有624张图片。然而,这导致了ImageNet中另一个引人关注的点:该数据集中出现频率最高的类(考拉、键盘)并非是现实世界中最常见的目标(人、车、交通标志等)。

模型的评价指标

详见:https://raychiu.blog.csdn.net/article/details/121907614

backbone架构

backbone是目标检测器中的重要组成部分,输入图像的特征就是通过其进行提取的,具体就是我们上次讨论的那些经典网络:

经典CNN卷积神经网络发展史_RayChiu757374816的博客-CSDN博客

目标检测器

回顾传统、古典的检测器:

1.Viola-Jones检测器

Viola-Jones检测器于2001年提出,主要用于人脸检测,是一个精确而强大的探测器。它结合了类似Haar特征、积分图像、Adaboost和级联分类器等多种技术。第一步是通过在输入图像上滑动窗口搜索haar类特征,并使用积分图像进行计算。然后,它使用一个训练有素的Adaboost找到每个haar特征的分类器,并将它们级联。Viola-Jones算法仍然用于小型设备,因为它非常高效和快速。

2.HOG
        Dalal 和Triggs于2005年提出了Histogram of Oriented Gradients (HOG)特征描述器,用于目标检测的特征提取。与其他探测器相比,HOG是一个改进版,它提取梯度及其边缘方向来创建一个特征表。图像被划分为网格,然后使用特征表为网格中的每个单元创建直方图。为感兴趣的区域生成HOG特征,并将其输入线性SVM分类器进行检测。其提出是作为行人检测检测器的,不过它可以被训练来检测各种其他类。
3.DPM
        Deformable Parts Model (DPM)由Felzenszwalb等人引入,是2009年Pascal VOC挑战赛的冠军。它利用目标的个别“部分”进行检测,准确率高于HOG。它遵循分而治之的哲学;在推理期间,对象的各个部分被单独检测,它们的一个可能的排列被标记为检测结果。例如,人体可以被认为是头、胳膊、腿和躯干等部分的集合。一个模型将被指定捕捉整个图像中的一个部分,并对所有这些部分重复这个过程。然后,另一个模型移除那些不可能的组合,以生成最终检测。基于DPM的模型是深度学习时代之前最成功的算法之一。

双阶段检测网络和概述

1)R-CNN

Region-based Convolutional Neural Network (R-CNN),是R-CNN系列的第一篇文章,其证明了CNNs可以极大地提高性能。R-CNN使用一个类别不可知的region proposals CNNs模块将检测转化为分类和定位问题。减去均值后的输入图像,首先通过区域提议模块,生成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秒),且时空复杂度都很高。它有复杂的训练过程,即使在一些计算是共享的情况下,也要花几天时间在小数据集上训练。

2)SPP-Net

He等人提出使用空间金字塔池化(SPP)层来处理任意尺寸、任意长宽比的图片。他们意识到,仅全连接层需要固定大小的输入。SPP-net在region proposal module之前,只是平移了CNN的卷积层,增加了pooling层,使得网络不依赖于size/aspect ratio,减少了计算量。生成候选窗口的算法仍是选择性搜索(SS)。feature maps是通过ZF-5网络的卷积层从输入图像提取的。然后,候选窗口被映射到特征映射上,这些特征映射随后被金字塔池化层的空间bins转换为固定长度的表示。最后将得到的向量送入全连接层,然后使用SVM分类器预测类别和得分。类似于R-CNN,SPP-Net也有一个边框回归的后处理层来改善定位精度。其同样使用多阶段训练过程,除了微调以外,其他步骤只在全连接层上进行。

SPP-Net在相似精度的前提下,比R-CNN快很多,它还可以处理任意尺寸、比例的图像,因此,也避免了由于输入形变导致的目标变形。然而,由于其架构类似于R-CNN,它也有R-CNN的缺点,像多阶段训练,昂贵的计算和训练时间。

3)Fast R-CNN

R-CNN和SPP-Net的一个主要缺点是需要多阶段分别训练。Fast-RCNN通过创建一个单一的端到端可训练的系统来解决这个问题。网络将一幅图像被送入一些列卷积层,同时目标的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倍),而准确性的提高则是次要的。

4)Faster R-CNN

尽管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的另一个优势是,它可以学习产生更好的提案,从而提高准确性。

5)FPN

在提升小目标检测效果时,在多个级别上使用图像金字塔来获取特征金字塔(特征化的图像金字塔)是一种常用的手段。虽然它提高了检测器的平均精度,但推理时间的增加也是很多的。Lin等人提出了该特征金字塔网络(FPN),它采用自上而下的横向连接架构,在不同的尺度上构建高层次的语义特征。FPN有两条路径,一条是由卷积神经网络(ConvNet)在多个尺度上计算特征层次的自底向上路径,另一条是自上而下的路径,它将粗特征图从较高层次上采样为高分辨率特征。这些路径通过1x1卷积运算进行横向连接,以增强特征中的语义信息。这里采用FPN作为Faster R-CNN的RPN,以ResNet-101为backbone。

FPN可以在所有尺度上提供高级语义,降低了检测的错误率。它成为了未来检测模型的标准构建块,提高了整体的准确性。它也促进了洽谈改进的网络,如PANet、NAS-FPN、EfficientNet等网络的发展。

6)R-FCN

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倍。

7)MaskR-CNN

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)。

8)DetectoRS

许多当代的两阶段探测器采用的是多看多想的机制,即先计算对象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帧)。

单节段检测器和其概述

1)YOLO

两阶段检测器将检测视为一个分类问题:需要一个模块枚举一些由网络分类为前景或背景的候选框。然而,YOLO将检测问题进行了重构,视其为一个回归问题,直接预测图像像素作为目标及其边界框属性。在YOLO中,输入图像被划分为S*S的网格,目标中心点所在的cell负责该目标的检测。一个网格cell预测多个边框,每个预测数组包括五个元素:边框的中心点(x, y)、边框的宽高w/h、置信度得分。

YOLO的灵感来自于用于图像分类的GoogLeNet模型,该模型使用了更小的卷积网络的级联模块。其在ImageNet数据上进行预训练,直到模型达到较高的精度,然后通过添加随机初始化卷积和全连通层对模型进行修正。训练时,每个网络的cell只预测一个类,印着这样可以更好的收敛,不过在推理时,可以预测多个类。采用了多任务损失,即所有预测部件的组合损失,对模型进行优化。非最大抑制(NMS)删除特定类的多重检测。

YOLO在精度和速度上都远远超过了它的当代单级实时模型。然而,它也有明显的缺点。对小的或聚类对象的定位精度和每个单元的对象数量限制是其主要缺点。这些问题在YOLO的后续版本中得到了修复。

2)SSD

Single Shot MultiBox Detector (SSD)是第一个与同时代的两级探测器如Faster R-CNN的准确性相匹配同时还能保持实时速度的一阶段检测器。SSD是在VGG-16上构建的,带有额外的辅助结构以提高性能。这些辅助卷积层添加到模型的末端,在尺寸上逐渐减小。当图像特征不太粗糙时,SSD会在前面的层中检测到较小的物体,而更深的层负责默认尺寸的框和宽高比。

在训练期间,SSD对每个GT box和具有最好jaccard 重叠度的box相匹配,然后类似Multibox训练相应的网络。同时,也使用了困难负样本挖掘以及大量的数据增强。类似与DPM,SSD也利用了利用定位和置信度损失的加权和来训练模型。最终输出通过非最大抑制获得。

尽管SSD比YOLO和faster R-CNN等最先进的网络更快更准确,但它在探测小物体方面有困难。这个问题后来通过使用更好的主干架构(如ResNet)和其他小补丁解决了。

3) YOLOv2 与YOLO9000

YOLOv2是对YOLO的改进,在速度和准确性之间提供了一个简单的权衡;而YOLO9000模型可以实时预测9000个对象类。这两者将YOLO中的backbone从GoogleNet替换为DarkNet-19。它结合了许多令人印象深刻的技术,如BN提高收敛性,联合训练分类和检测系统用于提高检测类别数,移除全连接以提高检测速度,使用聚类得到的anchor来改善recall并提供先验知识。Redmon等人也利用WordNet将分级结构的分类和检测数据集结合起来。即使当下词没有被正确分类,这个WordTree也可以用来预测一个更高的条件概率的上下词,从而提高了整体的性能。

YOLOv2在选择模型的速度和精度方面提供了更好的灵活性,新的架构具有更少的参数。正如文章的标题所暗示的那样“better, faster and stronger”。

4)RetinaNet

鉴于单级和两级探测器的精度差异,Lin等人认为单级探测器滞后的原因是“极端的前景-背景类不平衡”。他们提出了一个改造的交叉熵损失,称为Focal Loss作为解决不平衡的手段,通过其中的参数来降低简单样本对loss的贡献度。作者通过一个简单的单级探测器(RetinaNet)证明了它的有效性,通过对输入图像的位置、比例和纵横比进行密集采样来预测目标。该算法使用由特征金字塔网络(FPN)扩充的ResNet作为骨干网络,两个相似的子网络分别进行分类和回归。FPN的每一层都被传递到子网中,使其能够检测出不同规模的目标。分类子网预测每个位置的对象得分,而边框回归子网将每个锚点的偏移量回归到GT。两个子网都是小的FCN,并在各个网络之间共享参数。与之前大多网络不同,作者使用了一个与类别无关的边界框回归变器,发现它们等效。

RetinaNet训练简单,收敛快速,且容易实现。它在精度和运行时间方面都优于两级探测器。RetinaNet还通过引入新的损失函数来推进目标探测器优化的方法。

5)YOLOv3

与以前的YOLO版本相比,YOLOv3进行了“增量改进”。Redmon 等人用一个更大的Darknet-53网络代替了原来的特征提取器。他们还整合了各种技术,如数据增强、多尺度训练、批标准化等;分类器层的Softmax被逻辑分类器取代。

尽管YOLOv3比YOLOv2快,但它与之前的版本相比没有任何突破性的变化,它的精度甚至还不如一年前的SOTA检测器。

6)CenterNet

Zhou等人采用了一种非常不同的方法:将对象建模为点,而不是传统的边界框表示。CenterNet将对象预测为包围框中心的单个点。输入图像通过FCN生成heatmap,heatmap的峰值对应被检测物体的中心。它使用ImageNet预训练的Hourglass-101作为特征提取网络,有3个head:点目标中心点的heatmap头、目标尺寸wh头、目标中心点偏移头。在训练时,三个头的多任务损失被反向传播到特征提取器中。在推理过程中,利用偏移头的输出来确定对象点,最终生成一个方框。由于预测是点,而不是结果,这里不需要使用非最大抑制(NMS)进行后处理。

CenterNet乜有利用这些年来目标检测的常用套路,而是提出了一个新颖的视角。它比之前的方法更准确,推理时间更短。它具有较高的精度,可用于三维目标检测、关键点估计、姿态、实例分割、方向检测等多种任务。不过在做不同任务时,需要不同的骨干架构,因为一般架构与其他探测器工作良好,性能较差,反之亦然。

7)EfficientDet

EfficientDet构建了具有更高精度和效率的可扩展检测器的思想,引入了有效的多尺度特征、BiFPN和模型缩放。BiFPN是一种具有可学习权值的双向特征金字塔网络,用于不同尺度下输入特征的交叉连接,它在NAS-FPN的基础上,通过删除一个输入节点,增加一个额外的横向连接,改进了需要大量训练和复杂网络的NAS-FPN,这消除了低效节点,增强了高级特征融合。与现有的探测器不同的是,它可以根据更大、更深的骨干网络或堆叠FPN层进行放大,EfficientDet引入了一个复合系数,可用于“联合放大骨干网络、BiFPN网络、类/盒网络和分辨率的所有维度”。EfficientDet利用EfficientNet作为backbone,该backbone是一种具有多个BiFPN的堆叠的特征提取网络,最终BiFPN层的每个输出被发送到类和边框预测网络。该模型使用SGD优化器和同步BN进行训练,并使用swish激活,而不是标准的ReLU激活,后者可区分,效率更高,性能更好。

EfficientDet比以前的检测器具有更好的效率和准确性,同时体积更小,计算成本更低。它易于扩展,可以很好地应用于其他任务,并且是当前单阶段对象检测的SOTA模型。

8)YOLOv4

YOLOv4结合了许多有效的idea,设计了一种可以在现有系统中工作快速且容易训练的目标检测器。它利用“bag of freebies”方法,只增加训练时间,而不影响推理时间。YOLOv4利用数据增强技术,正则化方法,类标签平滑,CIoU-loss , Cross mini-Batch Normalization (CmBN),自我对抗训练,余弦退火学习率调度等技巧来提高训练。网络中还加入了只影响推理时间的方法,称为“Bag of Specials”,包括Mish激活[、Cross-stage partial connections (CSP)、SPP-Block、PAN路径聚合块、多输入加权残差连接(MiWRC)等,还使用了遗传算法进行超参搜索。其使用在ImageNet上预训练的CSPNetDarkNet-53作为backbone,以SPP和PAN块作为neck,以YOLOv3的head为head。

目前大多数检测算法都需要多个gpu来训练模型,但YOLOv4可以在单个gpu上轻松训练。它的速度是EfficientDet的两倍,却具有类似的性能,达到了SOTA。

9)Swin Transformer

Transformer从一开始就在自然语言处理(NLP)领域产生了深远的影响。它在语言模型中的应用,如BERT(Bidirectional Encoder Representation from Transformers),GPT(Generative Pre-trained Transformer),T5(Text-To-Text Transfer Transformer)等,推动了这一领域的技术进步。transformer[75]使用注意模型来建立序列元素之间的依赖关系,并且可以比其他顺序架构关注更长的上下文。在自然语言处理中的成功引起了人们对其在计算机视觉中的应用的兴趣。而cnn一直是CV的支柱,不过其有一些固有的缺点,如缺乏全局上下文的重要性,固定的训练后权重等。

Swin Transformer旨在为计算机视觉任务提供基于Transformer的backbone,它将输入图像分割成多个不重叠的patch,并将其转换为token。然后将大量Swin Transformer块应用于4个阶段的patch,每个后续阶段减少patch的数量,以保持分层表示。Swin Transformer块由局部多头自注意(MSA)模块组成,在连续块中基于交替移位的patch窗口。在局部自注意中,计算复杂度与图像大小成线性关系,而移动窗口可以实现跨窗口连接。作者还显示了移动的Windows如何在开销很小的情况下提高检测精度。

Transformers提供了一个不同于CNN的范式,不过其在CV领域的应用仍处于初级阶段,它在这些任务中取代卷积的潜力是非常大的。 Swin Transformer在MS-COCO上达到了新的SOTA,不过其参数量相比CNN模型更高。

常用的单双阶段检测网络对比

 

轻量网络

近年来,一个新的研究分支已经形成,旨在为物联网中常见的资源受限环境设计小型而高效的网络。这一趋势也渗透到强大的目标检测器的设计中,我们可以看到,虽然大量的目标检测器能够实现很好的准确性和实时推理,但是这些模型大部分需要过多的计算资源,因此不能部署在边缘设备上。

过去,许多不同的方法都显示出令人兴奋的结果。利用高效组件和压缩技术,如剪枝,量化、哈希等提高了深度学习模型的效率。利用训练好的大网络来训练更小的模型,称为蒸馏,也显示了有趣的结果。然而,在本节中,我们将探讨一些在边缘设备上实现高性能的高效神经网络设计的典型例子。列表如下所示:

SqueezeNet

cnn领域的最新进展主要集中在提高基准数据集的最新精度上,这导致了模型尺寸及其参数的爆炸式增长。但在2016年,Iandola等人提出了一个更小、更智能的网络,称为SqueezeNet,它在保持性能的同时减少了参数。他们采用了三种主要的设计策略,即使用更小的滤波器,将输入通道的数量减少后作为3x3滤波器的输入,以及在网络中更靠后的位置放置下采样层。前两种策略在保持准确性的同时减少了参数的数量,第三种策略增加了网络的准确性。SqueezeNet的构建块称为fire模块,它由两层组成:squeeze层和expand层,每个层都有一个ReLU激活。squeeze层由多个1*1滤波器组成,expand层由一个1*1、3*3混合滤波器组成,从而限制了输入通道的数量。SqueezeNet架构由8个Fire模块穿插在卷积层中间而组成。受ResNet启发,带有残差块的SqueezeNet也被提出,相比普通模型提高了准确率。作者还对深度压缩进行了实验,相比AlexNet,模型尺寸压缩了510倍。SqueezeNet为提高神经网络体系结构的硬件效率提供了一个很好的候选方案。

MobileNet

MobileNet摆脱了传统小型模型的方法,如收缩、剪枝、量化或压缩,取而代之的是使用高效的网络架构。该网络使用深度可分离卷积,将传统卷积分解为depthwise卷积和1*1的pointwise卷积。一个标准卷积在所有通道上进行卷积,并一次性合并;而深度可分离卷积对输入的每个通道使用不同的卷积核,然后使用pointwise卷积进行合并。这种特征过滤和组合的分离降低了计算成本和模型规模。MobileNet由28个独立的卷积层组成,每个层随后是批处理标准化和ReLU激活功能。Howard等人还引入了两个模型收缩超参数:宽度倍增器和分辨率倍增器,以进一步提高模型的速度和缩小模型的尺寸。宽度倍增器通过减少输入和输出通道来均匀地操纵网络的宽度,而分辨率倍增器影响输入图像的大小及其在整个网络中的表示。MobileNet达到了一些成熟模型的准确率,但模型尺寸只是其数倍之小。Howard等人还展示了它如何在各种应用中进行推广,比如人脸属性、地理定位和目标检测。然而,它像VGG一样过于简单和线性,因此没有太多的通道来实现梯度流,不过在此模型的后期迭代中也得以解决。

ShuffleNet

2017年,Zhang等人提出了ShuffleNet,这是一种专门为移动设备设计的计算效率极高的神经网络架构。他们认识到,许多高效的网络随着规模的缩小而变得不那么有效,并声称这是由昂贵的1x1卷积造成的。结合信道打乱,他们提出了利用分组卷积来克服其信息流有限的缺点。ShuffleNet主要包括一个标准的卷积,然后是分成三个阶段的ShuffleNet单元。ShuffleNet单元类似于ResNet块,在3x3层使用深度卷积,并将1x1层替换为逐点分组卷积,且在深度卷积层之前有一个通道打乱的操作。ShuffleNet的计算代价可通过两个超参数管理: 组数控制连接稀疏度、缩放因子操纵模型大小。随着组数的增大,错误率会随着每个组的输入通道的减少而饱和,因此可能会降低表示能力。ShuffleNet表现优于当代模且具有相当小的模型尺寸,不过由于ShuffleNet唯一的改进是通道shuffle,因此模型的推理速度没有任何改善。

MobileNetv2

基于MobileNetv1,Sandler等人于2018提出了MobileNetv2——引入了具有线性瓶颈的反向残差这种新颖的模块,从而降低了计算复杂度并提高了精度。该模块将输入的低维表示扩展为高维,通过深度卷积进行过滤,然后将其投影回低维,不像常见的残差块先压缩、再卷积、最后展开。MobileNetv2包含一个卷积层,随后是19个残差bottleneck块,随后是两个卷积层。只有当stride为1时,残差bottleneck块才有shortcut连接。对于更高的步幅,由于尺寸的差异,不使用shortcut。他们还使用ReLU6作为非线性函数,而不是简单的ReLU,以限制计算。针对目标检测,作者使用MobileNetv2作为backbone,设计了一款SDD,称之为SSDLite,声称拥有比原始SSD少8倍的参数,同时实现具有竞争力的精度。它可以很好地泛化到其他数据集,且易于实现,因此受到社区的好评。

PeleeNet

现有的轻量级深度学习模型严重依赖深度可分离卷积,缺乏有效的实现。Wang等人提出了一种基于传统卷积的新型高效结构,名为PeleeNet,使用了计算守恒技术。PeleeNet的核心是DenseNet,但参考了许多其他模型的灵感。它引入两路dense层、bottleneck中的动态通道个数、过渡层压缩和传统的后激活,以降低计算成本和提高速度。两路dense层有助于获得不同尺度的接受域,使其更容易识别较大的物体。为了减少信息损失,使用了一个stem块。他们还放弃了DenseNet中使用的压缩因子,因为它损害了特征表达式并降低了准确性。PeleeNet包含了一个stem块、四个阶段的修改后的dense和转化层,以及最后的分类层。作者还提出了一种实时目标检测系统,称为Pelee,它是基于PeleeNet和SSD的变种。与移动设备和边缘设备上的当代检测器相比,它的性能是有所提升的,这表明简单的设计选择可以在整体性能上产生巨大的差异。

ShuffleNetv2

2018年,马宁宁等人在ShuffleNetv2中提出了一套设计高效网络架构的综合指南,他们主张使用速度或延迟等直接指标来衡量计算复杂度,而不是使用FLOPs等间接指标。ShuffleNetv2建立在四个指导原则上:1)输入和输出通道的宽度相等以最小化内存访问成本,2)根据目标平台和任务仔细选择组卷积,3)多路径结构以效率为代价获得更高的精度,4)像add和ReLU这样的元素操作在计算上是不可忽略的。根据上述原则,他们设计了一个新的构建块,通过通道分离层将输入分成两部分,然后是三个卷积层,这些卷积层与残差连接concat起来并通过一个通道shuffle层。对于下采样模型,去掉了通道分离,且残差连接带有深度可分离卷积层。在两个卷积层之间插入这些块的集合就产生了ShuffleNetv2。作者还对更大的模型(50/162层)进行了实验,获得了更高的精度,但FLOPs增加很少。ShuffleNetv2在计算复杂度方面也优于其他SOTA模型。

MnasNet

随着各种边缘设备对精确、快速和低延迟模型的需求不断增加,设计这样的神经网络比以往任何时候都更具挑战性。在2018年, Tan等人提出了基于自动神经结构搜索(NAS)方法设计的Mnasnet。他们将搜索问题定义为以高精度和低延迟为目标的多目标优化。它还对搜索空间进行因式分解,将CNN划分为独特的块,然后分别搜索这些块中的操作和连接,从而减少了搜索空间。这也允许每个块有一个独特的设计,不像早期的模型堆叠相同的块。作者使用基于rnn的强化学习代理作为控制器和训练器来测量准确性以及移动设备上的延时。每个采样的模型都在一个任务上进行训练,以获得其准确性,并在实际设备上运行以测试延迟,这用来获取软奖励目标和进行控制器更新。该过程一直重复,直到达到最大迭代次数或者得到一个更优的候选项。其由16个不同的块组成,有一些带有残差连接。MnasNet的速度几乎是MobileNetv2的两倍,且准确率更高。然而,与其他基于强化学习的神经结构搜索模型一样,MnasNet的搜索时间需要海量的计算资源。

MobileNetv3

MobileNetv3的核心与创建MnasNet的方法相同,只是做了一些修改。一种平台感知的自动神经体系结构搜索是通过NetAdapt在一个分解的层次搜索空间中执行的,它在多次迭代中删除了网络中未充分利用的组件。一旦获得架构方案,它就会对通道进行调整,对权重进行初始化,然后对其进行微调,以改进目标指标。该模型被进一步修改,以删除体系结构中一些计算昂贵的层,并获得额外的延迟优化。Howard等人认为,架构中的滤波器通常是彼此的镜像,即使去掉一半的滤波器也能保持准确性,这样可以减少计算量。MobileNetv3使用了一种混合的ReLU和hard swish作为激活核,后者主要在模型后面使用。hard swish和swish没有明显区别,不过前者在保留精度的同时计算成本更低。对于不同的资源使用用例,作者提出了两种模型:MobileNetv3-Large 和 MobileNetv3-Small。 MobileNetv3-Large由15个bottleneck块组成,而 MobileNetv3-Small由11个bottleneck块组成。其构建块也包含了squeeze和excitation层。类似于MobileNetV2,这些模型在SSDLite中充当特征检测器,比早期的模型快35%,同时实现更高的mAP。

Once-For-All (OFA)

在过去的几年中,神经体系结构搜索(NAS)的体系结构设计已经产生了很多SOTA,但是,由于样本模型训练,它们的计算成本很高。Cai等提出了一种新的解耦模型训练阶段和神经结构搜索阶段的方法。该模型只训练一次,可以根据需求从中提取子网络。OFA (Once-for-all)网络在深度、宽度、核大小和维数这四个重要维度上为子网络的选择提供了灵活性。由于它们嵌套在OFA网络中,干扰训练,因此引入了渐进收缩。首先,将所有参数设为最大值,训练最大的网络。随后,通过逐步减小内核大小、深度和宽度等参数维度,对网络进行微调。对于弹性核,在大核的中心使用小核。当中心被共享时,将使用一个内核转换矩阵来维持性能。为了改变深度,仅用大网络的前几层,后面的层将跳过。弹性宽度则利用了一个通道排序操作,重新分配通道,且在较小的模型中使用最重要的核。OFA在ImageNet中,以80%的top-1准确率达到了SOTA,并因其将GPU训练时间降低了好几个数量级,在低功耗CV挑战赛(LPCVC)中取得第四的成绩。它展示了为各种硬件需求设计轻量级模型的新范式。

目标检测现在的挑战

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是迄今为止最精确的检测器。随着目前检测器在精度上出现的正向趋势,我们对更准确、更快的检测器抱有很高的希望。

【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】

目标检测综述(二:古典方法对比现代方式以及目标检测算法相关概述)相关推荐

  1. 3D目标检测(二)—— 直接处理点云的3D目标检测网络VoteNet、H3DNet

    前言 上次介绍了基于Point-Based方法处理点云的模块,3D目标检测(一)-- 基于Point-Based方法的PointNet点云处理系列,其中相关的模块则是构成本次要介绍的,直接在点云的基础 ...

  2. HALCON之焊点检测(二):基于形态学的基础焊点检测方法

    我们来看一下焊点检测的基础算法,这种方法基于halcon的形态学算法. 其基本流程为: 阈值分割->填充region->选择region 下面是实验图片 下面为halcon程序: read ...

  3. CVPR 2021 | 视觉目标检测大模型GAIA:面向行业的视觉物体检测一站式解决方案

    作者丨常清 编辑丨机器之心 中国科学院自动化研究所智能感知与计算研究中心联合华为等企业提出面向行业的视觉物体检测一站式解决方案 GAIA. 在深度学习与大数据的浪潮下,视觉目标检测在各个基准数据集上已 ...

  4. 节点图一般的比例_基于图的异常检测(二):LOCKINFER

    论文:Inferring lockstep behavior from connectivity pattern in large graphs 作者:Meng Jiang,Peng Cui 来源:P ...

  5. 【论文翻译 假新闻检测综述 HICSS 2019】Can Machines Learn to Detect Fake News? A Survey Focused on Social Media

    论文题目:Can Machines Learn to Detect Fake News? A Survey Focused on Social Media 论文来源:HICSS 2019,Procee ...

  6. 怎么用软件测试内存条是否好坏,内存如何检测?Win7检测内存条好坏的方法

    内存是计算机的重要组成部分,计算机所有程序的运行都需要在内存中运行,所以内存的性能就显得尤为的重要.如果内存不稳定,电脑可能就会出现死机.蓝屏等各种故障.那么,内存要如何检测呢?别着急,下面小编给大家 ...

  7. sata接口测试软件,如何查看电脑是否支持USB 3.0?Hwinfo32检测SATA端口的方法

    Hwinfo32检测SATA端口有很多效用,其中我们查看该SATA是否支持USB 3.0就是一个判断,更多的信息是为了了解SATA目前已经可使用的和在使用的端口情况,具体方法可以查看下文中的方法进行判 ...

  8. 检测到目标服务器启用了trace方法_CVPR2019目标检测方法进展综述

    原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的. 其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明 ...

  9. 收藏 | 3D目标检测综述:从数据集到2D和3D方法

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  10. 3D目标检测综述:从数据集到2D和3D方法

    本文经机器之心(almosthuman2014)授权转载,禁止二次转载. 作者:Yilin Wang, Jiayi Ye 机器之心编译 编辑:Panda 目标检测一直是计算机视觉领域中一大难题.近日, ...

最新文章

  1. java监听器用法(二):窗口监听器
  2. 新加坡科技设计大学(SUTD)招收计算机视觉方向全奖PhD学生
  3. 年度调薪一般涨多少_又到年底,HR 你拿什么标准来调薪?
  4. IT从业者的迷思与求解之道——座谈会实录摘选
  5. linux 如何赋值目录,Linux文件系统之目录的建立
  6. [剑指offer]面试题第[44]题[JAVA][数字序列中某一位的数字][找规律]
  7. 【jquery】find() 方法,filter()方法和children()方法
  8. 什么样的架构师才是真正的架构师?
  9. qt5调用python脚本 两次失败_Qt5调用Python脚本中的函数
  10. U盘安装服务器2008系统蓝屏,U盘安装系统造成蓝屏如何解决
  11. python语言入门-Python语言十分钟快速入门
  12. Oracle 函数进阶、分组排序、列转行、cast 类型转换、dbms_random 生成随机数、sys_guid
  13. C的|、||、、、异或、~、!运算
  14. 【GOF】三种工厂模式~
  15. JAVA泛型-泛型方法的定义和使用
  16. 持久化内存挑战PERSISTENT MEMORY CHALLENGES
  17. Tkinter 学习笔记
  18. 事业单位考试计算机专业知识题库,计算机考试题库:计算机考试模拟练习题(201)...
  19. 来看一位淘宝卖家是如何精确的运作微信营销的
  20. cmd 命令如何装逼 滚动屏幕

热门文章

  1. vue3中tsx的基本语法使用
  2. vue前端开发微信支付和支付宝支付
  3. Linux C 函数参考(日期时间) 作者: 出处:hur.cn 更新时间: 2007年01月29日
  4. 龙妈苟活还是凉凉,预测算法哪家准?
  5. linux 内核函数 filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR 简介
  6. 007-aven-assembly-plugin和maven-jar-plugin打包,java启动命令
  7. 钉钉企业应用网关接入(保姆级教程)
  8. RestTemplate源码剖析:Encode
  9. 开发人员常说的CLI是什么
  10. 了解云桌面,看这一篇文章就够了