综述:目标检测二十年(机翻版)(未完

原文地址

20年来的目标检测:一项调查

  • 摘要
  • 关键词
  • 一 介绍
  • 二 目标检测二十年
    • A.一个目标检测的路线图
      • 1)里程碑:传统探测器
        • Viola Jones探测器
        • HOG检测器
        • 基于可变形零件的模型(DPM)
      • 2)里程碑:基于CNN的两阶段探测器
        • RCNN
        • SPPNet
        • Fast RCNN
        • Faster RCNN
        • 特征金字塔网络(FPN)
      • 3)里程碑:基于CNN的单阶段探测器
        • 您只看一次(YOLO)
        • 中心网络
        • DETR
    • B.对象检测数据集和度量标准
      • 1)数据集
        • 帕斯卡VOC
        • ILSVRC
        • MS-COCO
        • 开放图像
      • 2)度量标准
    • C. 目标检测中的技术发展
      • 1)多尺度检测的技术演变
          • 特征金字塔+滑动窗口
          • 用object proposal进行检测
          • 深度回归和无锚定检测
          • 多参考/分辨率检测
      • 2)上下文启动的技术演变
        • 使用本地上下文进行检测
        • 具有全局上下文的检测
        • 上下文交互式
      • 3)硬负向挖掘的技术演变
        • 引导
        • 基于检测器的深度学习的HNM
      • 4)损失函数的技术演变
        • 分类损失
        • 本地化损失

摘要

目标检测作为计算机视觉中最基本、最具挑战性的问题之一,近年来受到了广泛的关注。在过去的二十年里,我们已经看到了物体检测的快速技术发展及其对整个计算机视觉领域的深远影响。如果我们把今天的目标检测技术看作是一场由深度学习驱动的革命,那么回到20世纪90年代,我们就会看到早期计算机视觉的巧妙思维和长期视角设计。本文从技术发展的角度(从20世纪90年代到2022年),广泛地回顾了这一快速发展的研究领域。本文涵盖了许多主题,包括历史上的里程碑检测器、检测数据集、度量标准、检测系统的基本构建块、加速技术和最近最先进的检测方法。

关键词

目标检测,计算机视觉,深度学习,卷积神经网络,技术进化。

一 介绍

目标检测是一项重要的计算机视觉任务,它处理检测数字图像中某一类别(如人、动物或汽车)的视觉对象的实例。目标检测的目标是开发计算模型和技术,以提供计算机视觉应用程序所需的最基本的知识之一:什么物体,在哪里?目标检测的两个最重要的指标是准确性(包括分类精度和定位精度)和速度。
目标检测是许多其他计算机视觉任务的基础,如实例分割[1–4]、图像字幕[5–7]、目标跟踪[8]等。近年来,随着深度学习技术[9]的快速发展,极大地促进了目标检测的发展,取得了显著的突破,推动其成为前所未有的关注的研究热点。目标检测目前已广泛应用于许多现实应用,如自动驾驶、机器人视觉、视频监控等。图1显示了在过去的20年里,与“目标检测”相关的出版物数量越来越多。
图1:1998年至2021年,目标检测领域的出版物数量不断增加。(数据来自谷歌学者高级搜索:在线标题:“目标检测”或“检测对象”。)
图1:1998年至2021年,目标检测领域的出版物数量不断增加。(数据来自谷歌学者高级搜索:在线标题:“目标检测”或“检测对象”。)
由于不同的检测任务有完全不同的目标和约束条件,它们之间的困难可能会有所不同。除了其他计算机视觉任务中常见的挑战,如不同视点下的物体、照明和类内变化,物体检测的挑战包括但不限于以下方面:物体旋转和尺度变化(如小物体)、精确的物体定位、密集和遮挡的物体检测、检测速度等。在第四部分,我们将对这些主题进行更详细的分析。
本调查旨在为新手提供一个从多个角度对对象检测技术的完整掌握,重点是其演变。其主要特点有三个方面:对技术发展的全面回顾,对关键技术和近期技术现状的深入探索,以及对检测加速技术的全面分析。主要线索集中在过去、现在和未来,辅以目标检测中的一些其他必要组件,如数据集、度量和加速技术。站在技术高速公路上,本调查旨在展示相关技术的演变,让读者掌握基本概念,找到潜在的未来方向,而忽略了他们的技术细节。
本文的其余部分组织如下。在第二节中,我们回顾了目标探测的20年的演变。在第三节中,我们回顾了物体检测中的加速技术。第四节回顾了最近三年的最先进的检测方法。在第五节中,我们总结了本文,并对进一步的研究方向进行了深入的分析。

二 目标检测二十年

在本节中,我们将从多个视图回顾对象检测的历史,包括里程碑检测器、数据集、指标和关键技术的演变。
在这里插入图片描述
图2:目标检测的路线图。此图中的里程碑检测器: VJ Det.[10, 11], HOG Det.[12], DPM [13– 15], RCNN [16], SPPNet [17], Fast RCNN [18], Faster RCNN [19], YOLO [20–22], SSD [23], FPN [24], Retina-Net [25], CornerNet [26], CenterNet [27], DETR [28].

A.一个目标检测的路线图

在过去的20年里,人们普遍认为目标检测的进展一般经历了两个历史时期:“传统的目标检测期(2014年以前)”和“基于深度学习的检测期(2014年以后)”,如图2所示。下面,我们将总结这一时期的里程碑检测器,以出现时间和性能作为突出背后驾驶技术的主要线索,如图3所示。
在这里插入图片描述
3: 在VOC07、VOC12和MS-COCO数据集上的目标检测的精度的提高。图中的检测器: DPM-v1 [13], DPM-v5 [37], RCNN [16], SPPNet [17], Fast RCNN [18], Faster RCNN [19], SSD [23], FPN [24], RetinaNet [25], RefineDet [38], TridentNet [39] CenterNet [40], FCOS [41], HTC [42], YOLOv4 [22], Deformable DETR [43], Swin Transformer [44].

1)里程碑:传统探测器

如果我们把今天的物体检测技术看作是一场由深度学习驱动的革命,那么早在20世纪90年代,我们就会看到早期计算机视觉的巧妙设计和长期视角。大多数早期的目标检测算法都是基于手工制作的特征而构建的。由于当时缺乏有效的图像表示,人们必须设计复杂的特征表示和各种加速技能。

Viola Jones探测器

2001年,P.中奥拉和M.琼斯首次在没有任何约束的情况下(如肤色分割)的实时检测[10,11]。运行在700MHz的奔腾III CPU上,在相当的检测精度下,该探测器比其他算法快几十倍甚至数百倍。VJ探测器遵循一种最直接的检测方法,即滑动窗口:通过图像中所有可能的位置和比例,看看是否有任何窗口包含一张人脸。虽然这看起来是一个非常简单的过程,但它背后的计算远远超出了它当时的计算机的能力。VJ探测器通过结合三种重要技术:“积分图像”、“特征选择”、“检测级联”和“检测级联”(第三节介绍),大大提高了检测速度。

HOG检测器

2005年,N. Dalal和B. Triggs提出了定向梯度直方图(HOG)特征描述符[12]。HOG可以被认为是对尺度不变特征变换[29,30]和形状上下文[31]的重要改进。为了平衡特征不变性(包括平移、尺度、照明等)和非线性,将HOG描述符设计为在a上进行计算密集的均匀间隔的单元格网格,并使用重叠的局部对比度归一化(在“块”上)。虽然HOG可以用于检测各种对象类,但它的主要动机是由行人检测的问题。为了检测不同大小的对象,HOG检测器会多次重新缩放输入的图像,同时保持检测窗口的大小不变。多年来,HOG探测器一直是许多对象探测器[13,14,32]和各种计算机视觉应用的重要基础。

基于可变形零件的模型(DPM)

DPM作为VOC-07、-08和-09检测挑战的获胜者,是传统目标检测方法的缩影。DPM最初是由P.费尔森兹沃布[13]在2008年提出的HOG探测器的扩展。它遵循“分治治之”的检测哲学,训练可以简单地看作是学习分解对象的正确方法,推理可以看作是对不同对象部分的检测集合。例如,检测“汽车”的问题可以分解为对其窗口、车身和车轮的检测。这部分的工作,a.k.a.“星形模型”,由P.费尔岑斯茨瓦尔布等人,[13]介绍。后来,R.格希克进一步将恒星模型扩展到混合模型的“混合模型”,以处理现实世界中更显著变化的物体,并做了一系列其他改进[14,15,33,34]。
虽然今天的目标探测器在检测精度方面已经远远超过了DPM,但其中许多探测器仍深受其有价值的见解的影响,如混合模型、硬负挖掘、边界盒回归、上下文启动等。2010年,P.费尔森斯兹瓦尔布和R.吉希克被帕斯卡·VOC授予“终身成就”称号。

2)里程碑:基于CNN的两阶段探测器

随着手工制作特征的性能达到饱和,目标检测的研究在2010年之后达到了稳定水平。2012年,世界见证了卷积神经网络[35]的重生。由于深度卷积网络能够学习图像的鲁棒性和高级特征表示,一个自然的问题出现了:我们能将其引入目标检测吗?R.吉尔希克等人带头打破了僵局,2014年,通过提出具有CNN特色的区域(RCNN)[16,36]。从那时起,物体探测开始以前所未有的速度发展。在深度学习时代有两组探测器:“两级探测器”和“一级探测器”,前者将检测框架为“粗-细”过程,而后者将其框架为“一步完成”。

RCNN

RCNN背后的想法很简单:它从通过选择性搜索[45]提取一组对象建议(对象候选框)开始。然后,每个提议被重新调整到一个固定大小的图像,并输入在ImageNet(比如AlexNet [35])上预先训练的CNN模型来提取特征。最后,使用线性SVM分类器来预测每个区域内的对象的存在,并识别对象类别。RCNN对VOC07的性能显著提高,平均平均精度(mAP)从33.7%(DPM-v5 [46])大幅提高到58.5%。虽然RCNN取得了很大的进展,但它的缺点很明显:对大量重叠提案的冗余特征计算(2000个图像超过2000盒)导致极慢的检测速度(GPU每幅图像14秒)。同年晚些时候,SPPNet [17]被提出,并解决了这个问题。

SPPNet

2014年,K. He等人提出了空间金字塔池网络(SPPNet)[17]。以前的CNN模型需要一个固定大小的输入,例如,一个用于AlexNet [35]的224x224的图像。SPPNet的主要贡献是引入了一个空间金字塔池化(SPP)层,它使CNN能够生成一个固定长度的表示,而不考虑图像/感兴趣区域的大小,而不需要重新缩放它。当使用SPPNet进行目标检测时,只能从整个图像中计算一次特征映射,然后生成任意区域的固定长度表示来训练检测器,避免了重复计算卷积的特性。SPPNet比R-CNN快20倍以上,而不牺牲任何检测精度(VOC07 mAP=59.2%)。虽然SPPNet有效地提高了检测速度,但它仍然有一些缺点:首先,训练仍然是多阶段的,其次,SPPNet只对其完全连接的层进行微调,而只是忽略了之前的所有层。第二年晚些时候,Fast RCNN [18]被提出并解决了这些问题。

Fast RCNN

2015年,R. Girshick提出了Fast RCNN探测器[18],这是对R-CNN和SPPNet [16,17]的进一步改进。Fast RCNN使我们能够在相同的网络配置下同时训练一个检测器和一个边界盒回归器。在VOC07数据集上,Fast RCNN将mAP从58.5%(RCNN)提高到70.0%,同时检测速度比R-CNN快200倍以上。虽然Fast-RCNN成功地集成了R-CNN和SPPNet的优势,但其检测速度仍受到方案检测的限制(详见第II-C1节)。然后,一个问题自然会出现了:“我们能用CNN模型生成对象建议吗?”后来,更快的R-CNN [19]回答了这个问题。

Faster RCNN

2015年,S. Ren等人在Fast RCNN之后不久提出了更快的RCNN探测器[19,47]。Faster RCNN是第一个近实时深度学习探测器(COCO mAP@.5=42.7%,VOC07 mAP=73.2%,17fps与ZF-Net [48])。Faster-RCNN的主要贡献是引入了区域提案网络(RPN),从而实现了几乎免费的区域提案。从R-CNN到Faster RCNN,目标检测系统的大多数个体块,如提案检测、特征提取、边界盒回归等,已经逐步集成到一个统一的端到端学习框架中。虽然更快的RCNN突破了Fast RCNN的速度瓶颈,但在后续的检测阶段仍然存在计算冗余。后来,人们提出了各种改进方案,包括RFCN [49]和Light head RCNN [50]。(详见第三节。)

特征金字塔网络(FPN)

2017年,t.y.。Lin等人提出了FPN [24]。在FPN之前,大多数基于深度学习的探测器只在网络顶层的特征图上进行检测。虽然CNN更深层的特征有利于类别识别,但它不利于对象的定位。为此,在FPN中开发了一个具有横向连接的自顶向下体系结构,用于构建所有尺度上的高级语义。由于CNN通过其正向传播自然地形成了一个特征金字塔,因此FPN在检测各种尺度的物体方面显示出了巨大的进步。在一个基本的更快的R-CNN系统中使用FPN,它在COCO数据集上实现了最先进的单模型检测结果,无需附加(COCO mAP@.5=59.1%)。FPN现在已经成为许多最新探测器的基本组成部分。

3)里程碑:基于CNN的单阶段探测器

大多数两阶段检测器遵循一个从粗到细的处理范式。粗检测则努力提高回忆能力,而精细检测则在粗检测的基础上细化定位,并更加重视辨别能力。它们可以很容易地获得一个高精度,没有任何铃声和哨子,但很少用于工程由于速度差,复杂程度巨大。相反,一阶段检测器可以在一步推理中检索所有对象。它们深受具有实时和易部署功能的移动设备的欢迎,但在检测密集和小的物体时,它们的性能明显受到影响。

您只看一次(YOLO)

YOLO是由R. Joseph等人在2015年提出的。它是深度学习时代[20]的第一个单阶段探测器。YOLO的速度非常快:YOLO的快速版本使用VOC07 mAP=52.7%的运行速度为155fps,而增强版本使用VOC07 mAP=63.4%的运行速度为45fps。YOLO遵循一个完全不同于两阶段探测器的范式:将单一的神经网络应用于整个图像。该网络将图像划分为多个区域,并同时预测每个区域的边界框和概率。尽管YOLO提高了很大的检测速度,但与两级探测器相比,定位精度有所下降,特别是对于一些小物体。YOLO的后续版本[21,22,51]和后者提出的SSD [23]更加关注了这个问题。最近,YOLOv4团队的后续工作YOLOv7 [52]已经被提出。通过引入优化的结构,如动态标签分配和模型结构重新参数化,它在速度和精度(范围从5 FPS到160 FPS)方面优于大多数现有的对象检测器。

中心网络

X. Zhou等人在2019年提出了中心网[40]。它还遵循一个基于关键点的检测范式,但消除了昂贵的后处理,如基于组的关键点分配(在网络Net[26],极端Net[53]等)和NMS,从而产生了一个完全的端到端检测网络。CenterNet将一个对象视为单个点(对象的中心),并根据参考中心点回归了它的所有属性(如大小、方向、位置、姿态等)。该模型简单、优雅,可以将三维目标检测、人体姿态估计、光流学习、深度估计等任务集成到一个单一的框架中。尽管使用了这样一个简洁的检测概念,CenterNet也可以实现比较检测结果(COCO mAP@.5=61.1%)。

DETR

近年来,Transfomer已经深刻地影响了整个深度学习领域,特别是计算机视觉领域。为了克服CNN的局限性,获得一个全局尺度的接受域,变压器放弃了传统的卷积算子,转而单独进行注意计算。2020年,N. Carion等人提出了DETR [28],他们将目标检测视为一个数据集的预测问题,并提出了一个带有变压器的端到端检测网络。到目前为止,目标检测已经进入了一个新时代,不使用锚盒或锚点就可以检测到目标。后来,X. Zhu等人提出了可变形的DETR [43],以解决DETR的长收敛时间和检测小物体的性能有限的问题。它在MSCOCO数据集(COCO mAP@.5=71.9%)上实现了最先进的性能。

B.对象检测数据集和度量标准

1)数据集

构建更小偏差的更大的数据集对于开发先进的检测算法至关重要。在过去的10年里,已经发布了许多著名的检测数据集,包括帕斯卡VOC挑战[54,55](如VOC2007,VOC2012),ImageNet大规模视觉识别挑战(如ILSVRC2014)[56],MS-COCO检测挑战[57],开放图像数据集[58,59],对象365[60]等。这些数据集的统计数据见表i。图4显示了这些数据集的一些图像示例。图3显示了2008年至2021年对VOC07、VOC12和MS-COCO数据集的检测精度的提高。
在这里插入图片描述
图4:(a)pascal-VOC07、(b) ILSVRC、(\c) MS-COCO和(d)开放图像中的一些示例图像和注释。
在这里插入图片描述
表一:一些已知的对象检测数据集及其统计数据。

帕斯卡VOC

帕斯卡视觉对象类(VOC)挑战1(从2005年到2012年)[54,55]是早期计算机视觉社区中最重要的竞赛之一。两种版本的pascal-VOC主要用于目标检测: VOC07和VOC12,前者由5k tr.图像+ 12k注释对象组成,后者由11k tr.图像+ 27k带注释的对象组成。在这两个数据集中有20个类是生活中常见的,如“人”、“猫”、“自行车”、“沙发”等。

ILSVRC

ImageNet大规模视觉识别挑战(ILSVRC)2 [56]推动了通用目标检测的技术水平。ILSVRC从2010年到2017年每年组织一次。它包含了一个使用ImageNet图像[61]的检测挑战。ILSVRC检测数据集包含200类视觉对象。其图像/对象实例的数量比VOC大两个数量级。

MS-COCO

MS-COCO3 [57]是目前最具挑战性的目标检测数据集之一。基于MS-COCO数据集的年度竞赛自2015年开始举行。它的对象类别数量比ILSVRC少,但是有更多的对象实例。例如,MS-COCO-17包含了来自80个类别的164k个图像和897k个注释对象。与VOC和ILSVRC相比,MS-COCO最大的进展是除了边界框注释外,每个对象都进一步使用每个实例分割进行标记,以帮助精确定位。此外,MS-COCO包含更多的小物体(其面积小于图像的1%)和位置更密集的物体。就像当时的ImageNet一样,MS-COCO已经成为目标检测社区事实上的标准。

开放图像

2018年,开放图像检测(OID)挑战4[62],紧随MS-COCO,但以前所未有的规模。在开放图像中有两个任务: 1)标准目标检测,2)视觉关系检测,用来检测特定关系中的成对对象。对于标准检测任务,数据集由1910k个图像和600个对象类别上的15440k个注释边界框组成。

2)度量标准

我们如何评估探测器的准确性?这个问题在不同的时间可能会有不同的答案。在早期的检测研究中,目前还没有被广泛接受的检测精度评价指标。例如,在行人检测[12]的早期研究中,通常使用“每个窗口的错过率与假阳性(FPPW)”作为衡量指标。然而,每个窗口的测量可能有缺陷,不能预测完整的图像性能[63]。2009年,加州理工学院行人检测基准被引入[63,64],此后,评估指标从FPPW转变为假阳性图像(FPPI)。
近年来,最常用的检测评价是“平均精度(AP)”,它最初是在VOC2007中引入的。AP定义为不同召回率下的平均检测精度,通常在特定类别的方式。所有类别的平均AP(mAP)通常被用作性能的最终指标。为了测量目标定位精度,使用预测盒和地面真实值之间的IoU来验证它是否大于一个预定义的阈值,例如,0.5。如果是,该对象将被标识为“检测”,否则为“遗漏”。0.5-IoU的mAP已经成为目标检测的实际度量标准。
2014年以后,由于MS-COCO数据集的引入,研究者开始更加关注目标定位的准确性。MS-COCO AP不是使用固定的IoU阈值,而是在0.5到0.95之间的多个IoU阈值上平均,这鼓励了更精确的对象定位,可能对一些现实世界的应用非常重要(例如,想象有一个机器人试图抓住扳手)。

C. 目标检测中的技术发展

在本节中,我们将介绍检测系统的一些重要构建块及其技术演变。首先,我们描述了模型设计上的多尺度和上下文启动,然后是训练过程中的样本选择策略和损失函数的设计,最后是推理中的非最大抑制。图表和文本中的时间戳由论文的出版时间提供。图中所示的进化顺序主要是为了帮助读者理解,并且可能存在时间重叠。

1)多尺度检测的技术演变

“不同尺寸”和“不同长宽比”物体的多尺度检测是目标检测的主要技术挑战之一。在过去的20年里,多尺度检测经历了多个历史时期,如图5所示。
在这里插入图片描述
图5:目标检测中多尺度检测技术的演变。此图中的检测器: VJ Det。[10], HOG Det.[12],DPM [13],范例SVM [32],超过了[65],RCNN [16],SPPNet [17],Fast RCNN [18],更快的RCNN [19],DNN Det。[66],YOLO [20],SSD [23],统一的Det。[67], FPN [24], RetinaNet [25], RefineDet [38], Cascade R-CNN [68], Swin Transformer [44], FCOS [41], YOLOv4 [22], CornerNet [26], CenterNet [40], Reppoints [69], DETR [28].

特征金字塔+滑动窗口

在VJ检测器之后,研究人员开始更加关注一种更直观的检测方法,即通过构建“特征金字塔+滑动窗口”。从2004年开始,基于这一范式建立了许多里程碑探测器,包括HOG探测器、DPM等。它们经常在图像上滑动一个固定大小的检测窗口,很少注意“不同的长宽比”。为了检测外观更复杂的物体,R. Girshick等人开始在特征金字塔之外寻找更好的解决方案。“混合模型”[15]是当时的一个解决方案,即为不同长宽比的对象训练多个检测器。除此之外,基于范例的检测[32,70]提供了另一个解决方案,通过为每个对象实例(范例)训练单个模型。

用object proposal进行检测

对象建议是指一组可能包含任何对象的与类无关的引用框。使用目标建议进行检测有助于避免跨图像的穷举滑动窗口搜索。我们建议读者参考以下论文以获得关于这个主题的全面评论[71,72]。早期时间的建议检测方法遵循了一个自下而上的检测哲学[73,74]。2014年以后,随着深度CNN在视觉识别领域的普及,自上而下、基于学习的方法,在这个问题[19,75,76]中开始显示出更多的优势。现在,随着单级探测器的上升,提议探测探测器逐渐消失。

深度回归和无锚定检测

近年来,随着GPU计算能力的提高,多尺度检测变得越来越简单和暴力。利用深度回归来解决多尺度问题的想法变得很简单,即基于深度学习特征[20,66]直接预测边界框的坐标。2018年以后,研究人员开始从关键点检测的角度来思考目标检测问题。这些方法通常遵循两种思想:一种是基于组的方法,它检测关键点(角、中心或代表点),然后进行目标分组[26,53,69,77];另一种是无组方法,它将一个对象视为一个/多个点,然后回归对象属性(大小、比率等)。在参考点[40,41]下。

多参考/分辨率检测

多参考检测是目前多尺度检测[19,22,23,41,47,51]最常用的方法。多引用检测[19,22,23,41,47,51]的主要思想是首先定义一组引用(a.k.a.锚点,包括盒子和点)在一个图像的每个位置,然后根据这些参考文献预测检测盒子。另一种流行的技术是多分辨率检测[23,24,44,67,68],即通过在网络的不同层上检测不同尺度的对象。多参考和多分辨率检测现在已经成为最先进的目标检测系统的两个基本组成部分。

2)上下文启动的技术演变

视觉对象通常被嵌入到与周围环境相关的典型上下文中。我们的大脑利用物体和环境之间的联系来促进视觉感知和认知[96]。上下文启动长期以来一直被用于提高检测能力。图6显示了目标检测中上下文启动的演变。

使用本地上下文进行检测

局部上下文是指要检测的区域内的视觉信息。人们早就承认,当地的环境是有帮助的改进对象检测。在21世纪初,Sinha和托拉尔巴[78]发现,包含局部背景区域,如面部边界轮廓,大大提高了人脸检测性能。Dalal和Triggs还发现,加入少量的背景信息可以提高行人检测[12]的准确性。最近的基于深度学习的检测器也可以通过简单地扩大网络的接受域或物体建议的大小,在局部环境下得到改进[79-84,97]。

具有全局上下文的检测

全局上下文利用场景配置作为对象检测的附加信息源。对于早期的检测器,集成全局上下文的一种常见方法是集成包含场景的元素的统计摘要,比如Gist [96]。对于最近的探测器,有两种方法来集成全局上下文。第一种方法是利用深度卷积、扩张卷积、可变形卷积、池化操作[39,87,88]来接收一个较大的接受域(甚至比输入图像更大)。但现在,研究人员已经探索了应用基于注意力的机制(非局部、变压器等)的潜力。为了达到一个完美的接受域,并取得了巨大的成功,[28,89]。第二种方法是将全局上下文看作是一种序列信息,并利用递归神经网络[86,98]进行学习。

上下文交互式

上下文交互式是指在视觉元素之间传递的约束和依赖关系。最近的一些研究表明,现代探测器可以通过考虑上下文交互作用来改进。最近的一些改进可以分为两类,第一类是探索单个对象[15,85,90,92,93,95]之间的关系,第二类是探索对象和场景[91,94]之间的依赖关系。

3)硬负向挖掘的技术演变

对检测器的训练本质上是一个不平衡的学习问题。在基于滑动窗口的探测器的情况下,背景和物体之间的不平衡可能会极端地达到107 :1 [71]。在这种情况下,使用所有的背景将对培训有害,因为大量的简单的负面因素将压倒学习过程。硬负向挖掘(HNM)旨在克服这一问题。HNM的技术演变情况如图7所示。

引导

目标检测中的引导是指一组训练技术,其中训练从一小部分背景样本开始,然后迭代地添加新的误分类样本。在早期的检测器中,引导程序通常被用于减少在数百万个背景[10,99,100]上的训练计算。后来,它成为了DPM和HOG检测器[12,13]中解决数据不平衡问题的标准技术。

基于检测器的深度学习的HNM

在深度学习时代,由于计算能力的提高,在2014-2016年的[16–20]期间,引导程序在目标检测中很快被丢弃。为了缓解训练过程中的数据不平衡问题,像更快的RCNN和YOLO这样的检测器只是简单地平衡了正窗口和负窗口之间的权重。然而,研究人员后来注意到,这并不能完全解决不平衡的问题[25]。为此,在2016年[23,38,101,102]之后,将引导程序重新引入目标检测。另一种改进是通过重塑标准的交叉熵损失来设计新的损失函数[25],这样将更多地关注困难的、错误分类的例子[25]。

4)损失函数的技术演变

损失函数衡量了模型与数据的匹配程度(即,预测与真实标签的偏差)。计算损失可以得到模型权值的梯度,随后可以通过反向传播进行更新,以更好地适应数据。分类损失和定位损失构成了对目标检测问题的监督,看到等式 1.损失函数的一般形式可以写成如下:
在这里插入图片描述
其中t和t∗是预测的和地面真实的边界框的位置,p和p∗是它们的类别概率。IoU{a,a∗}是参考盒/点a及其地面真实值a∗之间的IoU。η是一个IoU的阈值,比如说,0.5。如果锚盒/点与任何对象不匹配,则其定位损失不计入最终损失。

分类损失

分类损失用于评估预测类别与实际类别的差异,这在YOLOv1 [20]和YOLOvYOLOv2[51]中没有进行彻底的调查。后来,CE损失(交叉熵)通常使用[21,23,47]。l2损失是欧几里得空间中的一种度量,而CE损失可以测量分布差异(称为可能性的一种形式)。分类预测是一种概率,因此CE损失优于L2损失,其误分类成本更大,梯度消失效应更小。为了提高分类效率,提出了标签平滑来提高模型泛化能力,解决噪声标签[103,104]的过置信问题,设计焦点损失来解决分类难度[25]的差异问题。

本地化损失

定位损失用于优化位置和尺寸偏差。L2损失在早期研究[16,20,51]中普遍存在,但受异常值的影响较大,容易发生梯度爆炸。结合L1损失和L2损失的好处,研究人员提出了平滑L1损失[18],如下公式所示,
在这里插入图片描述
其中,x为目标值与预测值之间的差值。在计算误差时,上述损失将表示边界框的四个数字(x、y、w、h)作为自变量,但它们之间存在相关性。此外,利用IoU来确定预测盒是否对应于评价中的实际地面真实盒。相等的平滑L1值将有完全不同的IoU值,因此引入IoU损失[105]如下:
在这里插入图片描述

随后,一些算法改进了IoU损失。GIoU(广义IoU)[106]改进了IoU损失不能优化非重叠边界框的情况,即IoU = 0。根据距离-iou[107],一个成功的检测回归损失应满足三个几何度量:重叠面积、中心点距离和长径比。因此,基于IoU损失和G-IoU损失,将DIoU(距离IoU)定义为预测的中心点与地面真实值之间的距离,而CIoU(完整的IoU)[107]在DIoU的基础上考虑了长径比差。
看到9/22 歇一歇再写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/162220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学会Bitmap内存管理,你的App内存还会暴增吗?

相信伙伴们在日常的开发中,一定对图片加载有所涉猎,而且对于图片加载现有的第三方库也很多,例如Glide、coil等,使用这些三方库我们好像就没有啥担忧的,他们内部的内存管理和缓存策略做的很好,但是一旦在某些…

浅谈C++重载、重写、重定义

C重载、重写、重定义 重载、重写、重定义对比一、重载(overload)二、重写 / 覆盖(override)三、重定义 / 隐藏(redefining) * 为什么在虚函数中不能使用 static 关键字?动态绑定(Dyn…

【项目设计】网络版五子棋游戏

文章目录 一、项目介绍1. 项目简介2. 开发环境3. 核心技术4. 开发阶段 二、环境搭建1. 安装 wget 工具2. 更换 yum 源3. 安装 lrzsz 传输工具4. 安装⾼版本 gcc/g 编译器5. 安装 gdb 调试器6. 安装分布式版本控制工具 git7. 安装 cmake8. 安装 boost 库9. 安装 Jsoncpp 库10. 安…

C语言实现冒泡排序(超详细)

排序算法 - 冒泡排序 什么是冒泡排序?冒泡排序有啥用呢?冒泡排序的实现代码讲解冒泡排序的总结 什么是冒泡排序? 冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,如果它们的顺序…

详谈动态规划问题并解最大子数组和

今天刷力扣又学会了一种算法----动态规划,经过我查阅不少资料后,这些我总结的分享给大家 动态规划是什么? 动态规划(Dynamic Programming)是一种求解最优化问题的数学方法,它通常用于解决具有重叠子问题和…

802.11-2020协议学习__专题__TxTime-Calculation__HR/DSSS

802.11-2020协议学习__专题__TxTime-Calculation__HR/DSSS 16.2.2 PPDU format16.2.2.1 General16.2.2.2 Long PPDU format16.2.2.3 Short PPDU format 16.3.4 HR/DSSS TXTIME calculation PREV: TBD NEXT: TBD 16.2.2 PPDU format 16.2.2.1 General 定…

快速集成Skywalking 9(Windows系统、JavaAgent、Logback)

目录 一、Skywalking简介二、下载Skywalking服务端三、安装Skywalking服务端3.1 解压安装包3.2 启动Skywalking 四、关于Skywalking服务端更多配置五、Java应用集成skywalking-agent.jar5.1 下载SkyWalking Java Agent5.2 集成JavaAgent5.3 Logback集成Skywalking5.4 集成效果 …

Java Fasn 带您谈谈——开源、闭源

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…

Python —— Mock接口测试

前言 今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试。 什么是mock? 测试桩,模拟被测对象的返回,用于测试 通常意义的mock指的就是mock server, 模拟服务端返回的接口数据,用于前端开发,第三方接口联调 为什么…

特征缩放和转换以及自定义Transformers(Machine Learning 研习之九)

特征缩放和转换 您需要应用于数据的最重要的转换之一是功能扩展。除了少数例外,机器学习算法在输入数值属性具有非常不同的尺度时表现不佳。住房数据就是这种情况:房间总数约为6至39320间,而收入中位数仅为0至15间。如果没有任何缩放,大多数…

anaconda安装依赖报错ERROR: Cannot unpack file C:\Users\33659\AppData\Loca...|问题记录

执行命令: # 安装matplotlib依赖 pip install matplotlib-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com出现问题: ERROR: Cannot unpack file C:\Users\33659\AppData\Local\Temp\pip-unpack-0au_blfq\simple (downloa…

Redis面经

Redis使用场景 1、缓存: 缓存三兄弟(穿透、击穿、雪崩) 、双写一致、持久化、数据过期策略,数据淘汰策略 2、分布式锁 setnx、redisson 3、消息队列 4、延迟队列 何种数据类型(list、zset) 缓存三兄弟 缓存穿透 缓存穿透…

【RH850芯片】RH850U2A芯片平台Spinlock的底层实现

目录 前言 正文 1.RH850U2A上的原子操作 1.1 Link 1.2 Link generation 1.3 Success in storing 1.4 Failure in storing 1.5 Condition for successful storing 1.6 Loss of the link 1.7 示例代码 2.Spinlock代码分析 2.1 尝试获取Spinlock 2.2 释放Spinlock …

Web前端—移动Web第二天(空间转换、动画、综合案例:全名出游)

版本说明 当前版本号[20231118]。 版本修改说明20231118初版 目录 文章目录 版本说明目录移动 Web 第二天01-空间转换空间转换简介平移视距旋转左手法则rotate3d-了解立体呈现案例-3d导航缩放 02-动画动画实现步骤animation复合属性animation拆分写法案例-走马灯精灵动画多组…

一款带数字传输信号的OVP芯片

基本概述 今天给大家介绍的一款芯片是OVP,相比于传统的OVP芯片来说,这款芯片新增了数字信号控制,可以进行10Mbps的一个通信,通过外部的GPIO口进行控制,达到输入与输出信号的产生。 YHM2009这款OVP芯片具有较低的导通…

图像分类(一) 全面解读复现AlexNet

解读 论文原文:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf Abstract-摘要 翻译 我们训练了一个庞大的深层卷积神经网络,将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分为1000个不…

如何实现一个下班倒计时程序

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 Hello伙伴们,好几天不见啦。最近也是晚上打球太累,加上一直在研究mybatis的多租户问题&…

LM(大模型)应用开发利器之LangChain,带你走进AI世界

原文:LLM(大模型)应用开发利器之LangChain,带你走进AI世界 - 简书 LangChain组件图 LangChain 是什么 首先 LangChain 是一个框架,这个框架是用来让开发者进行 LLMs (大语言模型)应用开发的。…

【Unity】单例模式及游戏声音管理类应用

【Unity】单例模式及游戏声音管理类应用 描述 在日常游戏项目开发中,单例模式是一种常用的设计模式,它允许在应用程序的生命周期中只创建一个对象实例,并提供对该实例的全局访问点。通过使用单例模式,可以提高代码的可维护性和可…

【18年扬大真题】定义一个类Student记录学生计算机课程的成绩。要求使用静态成员变量或静态成员函数计算全班学生计算机课程的总成绩和平均成绩

【18年扬大真题】 定义一个类Student记录学生计算机课程的成绩。要求使用静态成员变量或静态成员函数计算全班学生计算机课程的总成绩和平均成绩 #include<stdio.h> #define n 5;//假设5个学生 typedef struct {char name[10];float score; }stu;int main() {printf(&qu…