当前位置: 首页 > news >正文

Object Detection in 20 Years: A Survey(2019.5)


文章目录

  • Abstract
  • 1. Introduction
    • 1.1. Difference from other related reviews
    • 1.2. Difficulties and Challenges in Object Detection
  • 2. OBJECT DETECTION IN 20 YEARS
    • 2.1. 目标检测路线图
      • 2.1.1. 里程碑:传统探测器(粗略了解)
      • 2.1.2. 里程碑:基于CNN的两级检测器
      • 2.1.3. 里程碑:基于CNN的一级检测器
    • 2.2. 目标检测数据集和指标(度量)
      • 2.2.1. Metrics
    • 2.3. 目标检测的技术演变
      • 2.3.1. Early Time’s Dark Knowledge
      • 2.3.2. 多尺度检测技术演变
      • 2.3.3. Technical Evolution of Bounding Box Regression
      • 2.3.4. Technical Evolution of Context Priming
      • 2.3.5. Technical Evolution of Non-Maximum Suppression
      • 2.3.6. Technical Evolution of Hard Negative Mining
  • 3. SPEED-UP OF DETECTION
    • 3.1 Feature Map Shared Computation
      • 3.1.1. 空间计算冗余和加速
      • 3.1.2. 扩展计算冗余和加速
    • 3.2. 分类器的提速
    • 3.3. 级联检测
    • 3.4. 网络剪枝和量化
      • 3.4.1. 网络剪枝
      • 3.4.2. Network Quantification
      • 3.4.3. Network Distillation
    • 3.5. 轻量级网络设计
      • 3.5.1. 分解卷积
      • 3.5.2. 群卷积
      • 3.5.3. 深度可分离卷积
      • 3.5.4. 瓶颈设计
      • 3.5.5. 神经结构搜索
    • 3.6. 数值加速
      • 3.6.1. Speed Up with Integral Image
      • 3.6.2. Speed Up in Frequency Domain
      • 3.6.3. 矢量量化
      • 3.6.4. Reduced Rank Approximation(约秩近似)
  • 4. 目标检测的最新进展
    • 4.1. Detection with Better Engines(实际是backbone)
      • 4.1.1. AlexNet 2012
      • 4.1.2. VGG 2014
      • 4.1.3. GoogLeNet 2014
      • 4.1.4. ResNet 2015
      • 4.1.5. DenseNet 2017
      • 4.1.6. SENet 2018
    • 4.2 Detection with Better Features
      • 4.2.1. Why Feature Fusion is Important?
      • 4.2.2. 不同方式的特征融合
      • 4.2.3. 学习具有大感受野的高分辨率特征
    • 4.3. Beyond Sliding Window
    • 4.4. 定位改进
      • 4.4.1. Bounding Box Refinement
      • 4.4.2. Improving Loss Functions for Accurate Localization
    • 4.5. 分割学习
      • 4.5.1. Why Segmentation Improves Detection?
      • 4.5.2. How Segmentation Improves Detection?
    • 4.6. 旋转和尺度变化的鲁棒检测
      • 4.6.1. Rotation Robust Detection
      • 4.6.2. 尺度鲁棒性检测
    • 4.7. Training from Scratch(从零开始训练)
    • 4.8. 对抗训练
    • 4.9. 弱监督目标检测
  • 5. Applications
    • 5.1. Pedestrian Detection
      • 5.1.1. Difficulties and Challenges
      • 5.1.2. 文献综述
    • 5.2. Face Detection
      • 5.2.1. Difficulties and Challenges
      • 5.2.2. 文献综述
    • 5.3. Text Detection
      • 5.3.1. Difficulties and Challenges
      • 5.3.2. 文献综述
    • 5.4. 交通标志和红绿灯检测
      • 5.4.1. Difficulties and Challenges
      • 5.4.2. 文献综述
    • 5.5. 遥感目标检测
      • 5.5.1. Difficulties and Challenges
      • 5.5.2. 文献综述
  • 6. CONCLUSION AND FUTURE DIRECTIONS

原文链接

Abstract

目标检测作为计算机视觉中最基本、最具挑战性的问题之一,近年来受到了广泛的关注。它在过去二十年的发展可以看作是计算机视觉历史的一个缩影。如果我们把今天的目标检测看作是深度学习力量下的技术美学,那么将时钟拨回20年,我们将见证冷兵器时代的智慧。本文从技术发展的角度广泛回顾了400多篇关于目标检测的论文,时间跨度超过四分之一世纪(从20世纪90年代到2019年)
本文涵盖了许多主题,包括历史上的里程碑检测器,检测数据集,度量,检测系统的基本构建块,加速技术以及最新的检测方法。本文还回顾了一些重要的检测应用,如行人检测、人脸检测、文本检测等,并深入分析了它们面临的挑战以及近年来的技术改进

1. Introduction

目标检测是一项重要的计算机视觉任务,它处理检测数字图像中某类视觉对象(如人类、动物或汽车)的实例。目标检测的目的是开发计算模型和技术,以提供计算机视觉应用所需的最基本信息之一:什么目标在哪里?
作为计算机视觉的基本问题之一,目标检测是许多其他计算机视觉任务的基础,如实例分割[1-4]、图像字幕[5-7]、目标跟踪[8]等。从应用的角度来看,物体检测可以分为“一般物体检测”和“检测应用”两个研究课题,前者旨在探索在统一框架下对不同类型物体的检测方法,以模拟人类的视觉和认知,后者是指特定应用场景下的检测,如行人检测、人脸检测、文本检测等.近年来,深度学习技术的快速发展[9]为目标检测带来了新鲜血液,取得了显著的突破,并将其推向了一个前所未有的研究热点。目前,目标检测已广泛应用于许多现实应用中,如自动驾驶、机器人视觉、视频监控等。图1显示了过去二十年中与“目标检测”相关的出版物数量的增长

1.1. Difference from other related reviews

近年来发表了许多关于一般目标检测的综述[24-28]。本文与上述综述的主要区别如下:

  1. 从技术发展的角度进行全面回顾:本文广泛回顾了四分之一世纪(从20世纪90年代到2019年)的目标检测发展史上的400多篇论文。大多数以前的综述只关注一个短的历史时期或一些特定的检测任务,而没有考虑整个生命周期的技术演变。站在历史的高速公路上,不仅可以帮助读者建立一个完整的知识层次,而且有助于找到这个快速发展的领域的未来方向。
  2. 对关键技术和最新动态的深入探讨:经过多年的发展,目前最先进的目标检测系统已经集成了“多尺度检测”、“困难负样本挖掘”、“边界盒回归”等大量技术。然而,以前的综述缺乏基本的分析来帮助读者理解这些复杂技术的本质,例如,“它们从哪里来,它们是如何进化的?”“每组方法的优缺点是什么?”本文针对读者的上述担忧进行了深入的分析。
  3. 检测加速技术的综合分析:目标检测的加速一直是一个关键但具有挑战性的任务。本文从“检测流水线”(如级联检测、特征图共享计算)、“检测骨干”(如网络压缩、轻量级网络设计)和“数值计算”(如积分图像、矢量量化)等多个层面,对20年来的目标检测提速技术进行了广泛的回顾。以前的综述很少涉及这个主题

1.2. Difficulties and Challenges in Object Detection

尽管人们总是问“目标检测的困难和挑战是什么?”,实际上,这个问题并不容易回答,甚至可能被过度概括。由于不同的检测任务具有完全不同的目标和约束条件,因此它们的难度可能会有所不同。除了在其他计算机视觉任务中常见的一些挑战,如不同视点下的物体、光照、类内变化等,物体检测的挑战还包括但不限于:物体旋转和尺度变化(如小物体)、准确的物体定位、密集和遮挡的物体检测、检测速度等
本文的其余部分组织如下。在第二节中,我们回顾了20年来目标检测的发展历程。第3节将介绍目标检测中的一些加速技术。第4节总结了近三年来一些最先进的检测方法。一些重要的检测应用将在第5节进行审查。第六部分对本文进行总结,并对进一步的研究方向进行了分析。

2. OBJECT DETECTION IN 20 YEARS

在本节中,我们将从多个方面回顾目标检测的历史,包括里程碑检测器,目标检测数据集,度量和关键技术的发展。

2.1. 目标检测路线图

在过去的二十年里,人们普遍认为,目标检测的进展大致经历了两个历史时期:“传统目标检测时期(2014年之前)”和“基于深度学习的检测时期(2014年之后)”,如图2所示

2.1.1. 里程碑:传统探测器(粗略了解)

如果我们把今天的目标检测看作是深度学习力量下的技术美学,那么将时钟拨回20年,我们将见证“冷兵器时代的智慧”。大多数早期的目标检测算法都是基于手工特征构建的。由于当时缺乏有效的图像表示,人们只能设计复杂的特征表示,各种提速技巧用尽有限的计算资源
VJ detector(人脸检测):
采用最直接的探测方式,遍历图像中所有可能的位置,看是否有任何窗口包含人脸
包含三个重要技术:积分图像、特征选择和级联检测
HOG detector:(行人检测)
对当时尺度不变特征变换和上下文变化的重要改进
DPM:(HOG的扩展)
divide and conquer(分而治之)
将星型模型扩展为混合模型
传统目标检测方法的巅峰
尽管今天的目标检测器在检测精度上已经远远超过了DPM,但其中很多仍然深受其宝贵见解的影响,如混合模型、困难负样本挖掘、边界盒回归等

2.1.2. 里程碑:基于CNN的两级检测器

随着手工特征的性能趋于饱和,目标检测在2010年之后进入平稳期。R. Girshick说:“……2010-2012年期间进展缓慢,通过构建集成系统和采用成功方法的微小变体获得了少量收益”[38]。2012年,世界见证了卷积神经网络的重生(AlexNet)[40]。由于深度卷积网络能够学习图像的鲁棒性和高级特征表示,一个自然的问题是我们是否可以将其用于目标检测?R. Girshick等人在2014年率先提出了带有CNN特征的区域(RCNN)用于目标检测,从而打破了这种死锁[16,41]。从那时起,目标检测开始以前所未有的速度发展
在深度学习时代,目标检测可以分为两种类型:“两阶段检测”和“一阶段检测”,前者将检测定义为“从粗到细”的过程,后者将检测定义为“一步完成”
• R-CNN(2014)
RCNN背后的思想很简单:它首先通过选择性搜索提取一组对象建议(对象候选框)[42]。然后将每个提案重新缩放为固定大小的图像,并将其输入在ImageNet(例如AlexNet[40])上训练的CNN模型中以提取特征。最后,使用线性支持向量机分类器预测每个区域内物体的存在并识别物体类别。RCNN在VOC07上的性能显著提升,平均平均精度(mAP)从33.7% (DPM-v5[43])大幅提高到58.5%
尽管RCNN已经取得了很大的进步,但它的缺点也很明显:在大量重叠的候选框(来自一张图像的2000多个盒子)上进行冗余的特征计算导致检测速度极慢(使用GPU时每张图像14秒)。同年晚些时候,SPPNet[17]被提出并克服了这个问题
• SPPNet(2014)
2014年,K. He等人提出了空间金字塔池网络(SPPNet)[17]。以前的CNN模型需要固定大小的输入,例如,AlexNet的224x224图像[40]。SPPNet的主要贡献是引入了空间金字塔池(SPP)层,它使CNN能够生成固定长度的表示,而不需要重新缩放图像/区域的大小。当使用SPPNet进行目标检测时,只需从整个图像中计算一次特征映射,然后就可以生成任意区域的固定长度表示来训练检测器,从而避免了重复计算卷积特征。SPPNet比R-CNN快20倍以上,而不牺牲任何检测精度(VOC07 mAP=59.2%)
虽然SPPNet有效地提高了检测速度,但仍然存在一些缺点:一是训练仍然是多阶段的,二是SPPNet只对其全连接层进行微调,而忽略了之前的所有层。第二年晚些时候,Fast RCNN[18]被提出并解决了这些问题
• Fast RCNN(2015)
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的优点,但其检测速度仍然受到提案检测的限制(详见2.3.2节)。那么,一个问题自然出现了:“我们可以用CNN模型生成对象提案吗?”后来,Faster R-CNN[19]回答了这个问题
• Faster RCNN(2015)
2015年,S. Ren等人在Fast RCNN之后不久提出了Faster RCNN检测器[19,44]。Faster RCNN是第一个端到端,也是第一个接近实时的深度学习检测器(COCO mAP@.5=42.7%, COCO mAP@[.5,.95]=21.9%, VOC07 mAP=73.2%, VOC12 mAP=70.4%, 17fps with ZF- Net[45])。Faster-RCNN的主要贡献是引入了区域生成网络(RPN),使几乎没有成本的区域提议成为可能。从R-CNN到Faster RCNN,目标检测系统的大多数独立块,如提案检测、特征提取、边界盒回归等,已经逐渐集成到一个统一的端到端学习框架中
尽管Faster RCNN突破了Fast RCNN的速度瓶颈,但在后续检测阶段仍然存在计算冗余。后来,人们提出了各种改进方法,包括RFCN[46]和Light head RCNN[47]
• Feature Pyramid Networks(2017)
2017年,T-Y。Lin等人在Faster RCNN的基础上提出了特征金字塔网络(Feature Pyramid Networks, FPN)[22]。在FPN之前,大多数基于深度学习的检测器只在网络的顶层运行检测。虽然CNN的深层特征有利于类别识别,但不利于对象的定位。为此,FPN开发了一种具有横向连接的自顶向下架构,用于在所有尺度上构建高级语义。由于CNN通过前向传播自然形成特征金字塔,因此FPN在检测各种尺度的物体方面显示出很大的进步。在基本的Faster R-CNN系统中使用FPN,它在MSCOCO数据集上实现了最先进的单模型检测结果,没有花哨的花哨(COCO mAP@.5=59.1%, COCO mAP@[。5, .95] = 36.2%)。FPN现在已经成为许多最新探测器的基本组成部分。

2.1.3. 里程碑:基于CNN的一级检测器

• You Only Look Once (YOLO)(2015)
YOLO由R. Joseph等人于2015年提出。YOLO的速度非常快:快速版的YOLO运行速度为155fps, VOC07 mAP=52.7%,而增强版的速度为45fps, VOC07 mAP=63.4%, VOC12 mAP=57.9%。YOLO是You Only Look Once的缩写。从它的名字可以看出,作者完全抛弃了之前“候选框检测+验证”的检测范式。相反,它遵循一种完全不同的理念:将单个神经网络应用于完整的图像该网络将图像划分为多个区域,并同时预测每个区域的边界框和概率。后来,R. Joseph在YOLO的基础上进行了一系列改进,提出了YOLO的v2和v3版本[48,49],进一步提高了检测精度,同时保持了很高的检测速度
YOLO虽然大大提高了检测速度,但与两级检测器相比,定位精度有所下降,特别是对于一些较小的目标。YOLO的后续版本[48,49]和后来提出的SSD[21]更加关注了这个问题

• Single Shot MultiBox Detector (SSD)(2015)
SSD[21]由W. Liu等人于2015年提出。SSD的主要贡献是引入了多参考点和多分辨率检测技术(将在2.3.2节中介绍),显著提高了单级探测器的检测精度,特别是对一些小物体的检测精度。SSD在检测速度和精度方面都有优势(VOC07 mAP=76.8%, VOC12 mAP=74.9%, COCO mAP@.5=46.5%, mAP@[.5,.95]=26.8%,快速版本运行速度为59fps)。SSD与之前的检测器的主要区别在于前者在网络的不同层上检测5个不同尺度的对象,而后者只在其顶层运行检测

• RetinaNet(2017)
尽管速度快、简单,一级探测器的精度多年来一直落后于二级探测器。T.-Y。Lin等人在2017年发现了背后的原因并提出了RetinaNet[23]。他们声称,在训练密集探测器时遇到的极端前景-背景类不平衡是主要原因。为此,在RetinaNet中引入了一个新的损失函数,名为“焦点损失”,通过重塑标准交叉熵损失,使检测器在训练过程中更多地关注难分类的错误示例。焦损使一阶段检测器达到相当的精度的两级探测器,同时保持非常高的检测速度。(COCO mAP@.5=59.1%, mAP@[.]5、.95]= 39.1%)

2.2. 目标检测数据集和指标(度量)

构建更大的数据集和更少的偏差对于开发先进的计算机视觉算法至关重要。在目标检测方面,在过去的10年中已经发布了许多知名的数据集和基准测试,包括PASCAL VOC挑战[50,51](如VOC2007, VOC2012), ImageNet大规模视觉识别挑战(如ILSVRC2014) [52], MS-COCO检测挑战[53]等数据集。这些数据集的统计结果见表1。图4显示了这些数据集的一些图像示例。图3显示了2008 - 2018年VOC07、VOC12和MS-COCO数据集检测精度的提升情况。


• Pascal VOC
PASCAL Visual Object Classes (VOC) Challenges 1(从2005年到2012年)[50,51]是早期计算机视觉社区中最重要的竞赛之一。在PASCAL VOC中有多个任务,包括图像分类、目标检测、语义分割和动作检测。Pascal-VOC在目标检测中使用最多的有两个版本:VOC07和VOC12,前者由5k张tr图像+ 12k个标注对象组成,后者由11k张tr图像+ 27k个标注对象组成在这两个数据集中标注了生活中常见的20类对象(Person: Person;动物:鸟、猫、牛、狗、马、羊;交通工具:飞机、自行车、轮船、公共汽车、汽车、摩托车、火车;室内:瓶子、椅子、餐桌、盆栽、沙发、电视/显示器)。近年来,随着ILSVRC和MS-COCO(即将引入)等大型数据集的发布,VOC逐渐过时,现在已成为大多数新探测器的测试平台。
• ILSVRC
ImageNet大规模视觉识别挑战赛(ILSVRC) 2[52]推动了通用目标检测技术的发展。ILSVRC从2010年到2017年每年举办一次。它包含使用ImageNet图像的检测挑战[57]。ILSVRC检测数据集包含200类视觉对象。图像/对象实例的数量比VOC大两个数量级。例如,ILSVRC-14包含517k张图像和534k个带注释的对象
• MS-COCO
MS-COCO 3[53]是目前最具挑战性的目标检测数据集。基于MS-COCO数据集的年度竞赛自2015年开始举办。它的对象类别数量比ILSVRC少,但对象实例数量更多。例如,MS-COCO-17包含来自80个类别的164k图像和897k注释对象。与VOC和ILSVRC相比,MS-COCO最大的进步在于,除了边界框标注之外,MS-COCO还使用逐实例分割对每个对象进行标记,以帮助精确定位。此外,MS-COCO比VOC和ILSVRC包含更多的小物体(其面积小于图像的1%)和更密集的物体。这些特点使得
MS- COCO中的对象分布更接近于现实世界中的对象分布
。就像当时的ImageNet一样,MS-COCO已经成为对象检测社区事实上的标准。
• Open Images
2018年,继MS-COCO之后,以前所未有的规模引入了开放图像检测(Open image -ages Detection, OID)挑战4[58]。
Open Images有两个任务:1)标准对象检测,2)视觉关系检测,即检测特定关系中的成对对象。对于目标检测任务,数据集由1,910k张图像组成,在600个对象类别上有15,440k个带注释的边界框
• Datasets of Other Detection Tasks
除了一般的目标检测,在过去的20年里,检测在特定领域的应用也蓬勃发展,如行人检测、人脸检测、文字检测、交通标志/灯光检测、遥感目标检测等。表2-6列出了这些检测任务的一些常用数据集




2.2.1. Metrics

我们如何评估目标检测器的有效性?这个问题甚至可能在不同的时间有不同的答案
在早期的检测界,对检测性能没有一个被广泛接受的评价标准。例如,在行人检测的早期研究中[12],通常使用“miss rate vs. false positive per-window (FPPW)”作为度量标准。然而,在某些情况下,单窗口测量(FPPW)可能存在缺陷,无法预测完整图像的性能[59]。2009年,加州理工学院创建了行人检测基准[59,60],从那时起,评估指标从每窗口(FPPW)变为每图像误报(FPPI)。
近年来,最常用的目标检测评价是“平均精度(AP)”,最早是在VOC2007中引入的。AP定义为不同召回下的平均检测精度,通常以特定类别的方式进行评估。为了比较所有对象类别的性能,通常使用所有对象类别的平均AP (mAP)作为性能的最终度量。为了测量目标定位精度,使用Intersection over Union (IoU)来检查预测框和地面真值框之间的IoU是否大于预定义的阈值,例如0.5。如果是,则标识为“检测成功”,否则标识为“未检测到”。基于0.5 IoU的mAP随后成为多年来对象检测问题的事实上的度量标准。
2014年以后,由于MS-COCO数据集的普及,研究人员开始更加关注边界框位置的准确性MS-COCO AP没有使用固定的IoU阈值,而是在0.5(粗略定位)和0.95(完美定位)之间对多个IoU阈值进行平均。度量的这种变化鼓励了更精确的对象定位,并且对于一些实际应用可能非常重要(例如,想象有一只机械手臂试图抓住扳手)
最近,在Open Images数据集中有一些进一步的发展,例如,通过考虑盒组和非穷举的图像级分类层次结构。一些研究人员还提出了一些替代指标,例如“本地化召回精度”[94]。尽管最近发生了一些变化,但基于VOC/ coco的mAP仍然是最常用的目标检测评估指标。

2.3. 目标检测的技术演变

2.3.1. Early Time’s Dark Knowledge

早期的目标检测(2000年以前)并没有像滑动窗口检测那样遵循统一的检测理念。当时的检测器通常是基于低级和中级视觉设计的,如下所示。
• Components, shapes and edges
“成分识别”作为一种重要的认知理论[98],长期以来一直是图像识别和目标检测的核心思想[13,99,100]。一些早期的研究者将目标检测定义为对目标组件、形状和轮廓之间的相似性进行测量,包括距离变换[101]、形状上下文[35]和Edgelet[102]等。尽管最初的结果很有希望,但在更复杂的检测问题上,情况并不好。因此,基于机器学习的检测方法开始蓬勃发展。

基于机器学习的检测经历了多个时期,包括外观统计模型(1998年之前)、小波特征表示(1998-2005)和基于梯度的表示(2005-2012)。

  • 建立目标的统计模型,如图5 (a)所示的Eigenfaces[95,106],是目标检测历史上第一波基于学习的方法。1991年,M. Turk等人利用特征脸分解实现了实验室环境下的实时人脸检测[95]。与当时基于规则或基于模板的方法相比[107,108],统计模型通过从数据中学习特定任务的知识,更好地提供了对对象外观的整体描述。
  • 自2000年以来,小波特征变换开始主导视觉识别和目标检测。这组方法的本质是通过将图像从像素转换为一组小波系数来学习。在这些方法中,Haar小波由于计算效率高,被广泛应用于许多目标检测任务中,如一般目标检测[29]、人脸检测[10,11,109]、行人检测[30,31]等。图5 (d)显示了一组由VJ检测器[10,11]学习到的人脸Haar小波基。

• Early time’s CNN for object detection
使用CNN检测物体的历史可以追溯到20世纪90年代[96],Y. LeCun等人在当时做出了很大的贡献。由于计算资源的限制,当时的CNN模型比现在的小得多,也浅得多。尽管如此,在早期基于CNN的检测模型中,计算效率仍然被认为是一个棘手的问题。Y. LeCun等人进行了“共享权值复制神经网络”[96]和“空间位移网络”[97]等一系列改进,通过扩展卷积网络的每一层以覆盖整个输入图像来减少计算量,如图5 (b)-©所示。这样,只需要对网络进行一次前向传播,就可以提取出整个图像中任意位置的特征。这可以被认为是当今全卷积网络(FCN)的原型[110,111],FCN是在近20年后提出的。CNN也被应用于其他任务,如当时的人脸检测[112,113]和手部跟踪[114]。

2.3.2. 多尺度检测技术演变

“不同尺寸”和“不同长宽比”目标的多尺度检测是目标检测的主要技术难题之一。近20年来,多尺度检测经历了“特征金字塔与滑动窗(2014年以前)”、“目标提案检测(2010-2015年)”、“深度回归(2013-2016年)”、“多参考检测(2015年以后)”、“多分辨率检测(2016年以后)”等多个历史时期,如图6所示。
• Feature pyramids + sliding windows (before 2014)
随着VJ探测器之后计算能力的提高,研究者开始关注通过构建“特征金字塔+滑动窗口”的直观检测方式
早期的检测模型,如VJ检测器和HOG检测器,是专门设计用于检测具有“固定长宽比”的物体(例如,人脸和直立的行人),方法是简单地构建特征金字塔并在其上滑动固定大小的检测窗口。当时还没有考虑到“各种纵横比”的检测。为了检测像PASCAL VOC中那样具有更复杂外观的对象,R. Girshick等人开始在特征金字塔之外寻求更好的解决方案。“混合模型”[15]是当时最好的解决方案之一,通过训练多个模型来检测不同长宽比的物体。除此之外,基于样本的检测[36,115]通过为训练集的每个对象实例(样本)训练单个模型提供了另一种解决方案
随着现代数据集中(如MS-COCO)的对象越来越多样化,混合模型或基于样本的方法不可避免地导致检测模型更加杂化。那么问题自然出现了:是否存在统一的多尺度方法来检测不同长宽比的物体?“对象提案”(待介绍)的引入回答了这个问题。

• Detection with object proposals (2010-2015)
对象建议指的是一组与类无关的候选框,它们可能包含任何对象。2010年首次应用于目标检测[116]。使用目标建议进行检测有助于避免在图像上进行穷举滑动窗口搜索。
目标建议检测算法需要满足以下三个要求:1)高召回率;2)高定位精度;3)在前两个要求的基础上,提高精度,减少处理时间。现代的提议检测方法可以分为三类:1)分割分组方法[42,117 - 119],2)窗口评分方法[116,120-122],3)基于神经网络的方法[123-128]。我们建议读者参阅以下论文,以全面回顾这些方法[129,130]。
早期的提案检测方法遵循自下而上的检测理念[116,120],深受视觉显著性检测的影响。后来,研究人员开始转向低层次视觉(如边缘检测)和更细致的手工技能,以提高候选框的定位[42,117 - 119,122,131]。2014年以后,随着深度CNN在视觉识别中的普及,自顶向下、基于学习的方法开始在该问题上显示出更多的优势[19,121,123,124]。此后,对象提议检测从自下而上的视觉演变为“过度拟合到一组特定的对象类”,检测器和提议生成器之间的区别变得模糊
随着“目标建议”彻底改变了滑动窗口检测,并迅速主导了基于深度学习的检测器,2014-2015年,许多研究人员开始提出以下问题**:目标建议在检测中的主要作用是什么?是为了提高准确性,还是为了加快检测速度?为了回答这个问题,一些研究人员试图削弱提案的作用[133],或者简单地对CNN特征进行滑动窗口检测[134-138],但都没有获得令人满意的结果。在单阶段检测器和“深度回归”技术(即将介绍)的兴起之后,提议检测很快就淡出了人们的视线。
• Deep regression (2013-2016)
近年来,随着GPU计算能力的不断提高,人们处理多尺度检测的方式变得越来越直接和暴力。使用深度回归解决多尺度问题的思路非常简单,即基于深度学习特征直接预测边界框的坐标[20,104]。该方法的优点是易于实现,但缺点是定位可能不够准确,特别是对于一些小对象。“多参考检测”(即将引入)解决了这一问题。
• Multi-reference/-resolution detection (after 2015)
多参考检测是目前最流行的多尺度目标检测框架[19,21,44,48]。其主要思想是在图像的不同位置预先定义一组具有不同尺寸和宽高比的参考框(又称锚盒),然后根据这些参考来预测检测框
每个预定义锚盒的典型损失包括两个部分:1)分类识别的交叉熵损失和2)目标定位的L1/L2回归损失。损失函数的一般形式为:
其中t和t∗是预测和真边界框的位置,p和p∗是它们的类别概率。IOU {a,a *}是锚点a与其基础真理a *之间的借据。η是IOU阈值,例如0.5。如果一个锚不覆盖任何对象,它的局部化损失不计入最终损失。
过去两年另一种流行的技术是
多分辨率检测[21,22,55,105],即通过在网络的不同层检测不同尺度的对象**。由于CNN在前向传播过程中自然形成一个特征金字塔,因此更容易在较深的层中检测到较大的物体,在较浅的层中检测到较小的物体。多参考和多分辨率检测已经成为当前目标检测系统的两个基本组成部分

2.3.3. Technical Evolution of Bounding Box Regression

边界盒(Bounding Box, BB)回归是目标检测中的一项重要技术。它的目的是在初始建议或锚框的基础上细化预测边界框的位置。近20年来,BB回归的演进经历了“无BB回归(2008年以前)”、“从BB到BB(2008- 2013)”、“从特征到BB(2013年以后)”三个历史时期。图7显示了边界盒回归的演化过程
• Without BB regression (before 2008)
VJ检测器、HOG检测器等早期检测方法大多不使用BB回归,通常直接考虑滑动窗口作为检测结果。为了获得物体的精确位置,研究人员别无选择,只能建造非常密集的金字塔,并在每个位置上密集地滑动探测器。
• From BB to BB (2008-2013)
首次将BB回归引入目标检测系统是在DPM中[15]。当时的BB回归通常作为后处理块,因此它是可选的。由于PASCAL VOC的目标是预测每个对象的单个边界框,DPM生成最终检测的最简单方法应该是直接使用其根过滤器位置。后来,R. Girshick等人提出了一种更复杂的基于对象假设完全配置的边界盒预测方法,并将此过程表述为线性最小二乘回归问题[15]。该方法在PASCAL准则下的检测效果有了显著的提高
• From features to BB (after 2013)
在2015年引入Faster RCNN之后,BB回归不再作为单独的后处理块,而是与检测器集成并以端到端方式进行训练。同时,BB回归已经发展到直接基于CNN特征预测BB。为了获得更稳健的预测,通常采用smooth-L1函数[19],

作为它们的回归损失,它们比DPM中使用的最小二乘损失对异常值的鲁棒性更强。一些研究人员还选择对坐标进行归一化,以获得更稳健的结果

2.3.4. Technical Evolution of Context Priming

视觉对象通常与周围环境嵌入在一个典型的上下文中。我们的大脑利用物体和环境之间的联系来促进视觉感知和认知[160]。长期以来,语境启动一直被用来提高检测能力。在其进化史上有三种常见的方法:1)局部上下文检测,2)全局上下文检测,以及3)上下文交互,如图8所示。
• Detection with local context
局部上下文是指被检测对象周围区域的视觉信息。人们早就认识到,局部环境有助于提高目标检测。在21世纪初,Sinha和Torralba[139]发现,包含局部上下文区域(如面部边界轮廓)大大提高了人脸检测性能。Dalal和Triggs也发现,加入少量背景信息可以提高行人检测的准确性[12]。最近基于深度学习的检测器也可以通过简单地扩大网络的接受域或对象提议的大小来改进局部上下文
• Detection with global context
全局上下文利用场景配置作为对象检测的附加信息源。对于早期的目标探测器,整合全局上下文的一种常用方法是整合构成场景的元素的统计摘要,如Gist[160]。对于现代基于深度学习的检测器,有两种方法来整合全局上下文。第一种方法是利用大接受场(甚至大于输入图像)[20]或CNN特征的全局池化操作[147]。第二种方法是把全局环境看作一种连续的信息,用递归神经网络来学习它
• Context interactive
上下文交互是指通过视觉元素的交互来传递的信息,例如约束和依赖关系.对于大多数对象检测器,对象实例是单独检测和识别的,而不利用它们之间的关系。最近的一些研究表明,可以通过考虑上下文交互来改进现代目标检测器。最近的一些改进可以分为两类,第一类是探索单个对象之间的关系[15,146,150,152,162],第二类是探索对象和场景之间依赖关系的建模

2.3.5. Technical Evolution of Non-Maximum Suppression

非最大抑制(NMS)是目标检测中的一组重要技术。由于相邻窗口通常具有相似的检测分数,因此本文采用非最大抑制作为后处理步骤,去除重复的边界框,得到最终的检测结果。在早期的目标检测中,并不总是集成NMS[30]。这是因为当时目标检测系统的期望输出并不完全清楚。在过去的20年里,NMS逐渐发展为以下三组方法:1)贪婪选择,2)边界框聚合,3)向NMS学习,如图9所示

• Greedy selection
贪心选择是一种老式但最流行的对象检测NMS方法。这个过程背后的想法简单而直观:对于一组重叠检测,选择具有最大检测分数的边界框,而根据预定义的重叠阈值(例如,0.5)删除其相邻框。上述处理以贪婪的方式迭代执行。虽然贪婪选择现在已经成为NMS事实上的方法,但它仍有一定的改进空间,如图11所示。首先,得分最高的盒子可能不是最合适的。其次,它可能会抑制附近的物体。最后,它不能抑制误报。近年来,尽管最近进行了一些手动修改以提高其性能158,159,163,但据我们所知,贪婪选择仍然是当今目标检测的最强基线
• BB aggregation
BB聚合是另一组用于NMS的技术[10,103,156,157],其思想是将多个重叠的边界框组合或聚类成一个最终检测。这种方法的优点是充分考虑了对象关系及其空间布局。有一些著名的探测器使用这种方法,如VJ探测器[10]和Overfeat
• Learning to NMS
最近备受关注的一组NMS改进是向NMS学习[136,146,154,155]。这组方法的主要思想是
将NMS视为一个过滤器,用于重新对所有原始检测进行评分,并以端到端方式将NMS作为网络的一部分进行训练
。与传统的手工制作的NMS方法相比,这些方法在改善遮挡和密集目标检测方面显示出有希望的结果。

2.3.6. Technical Evolution of Hard Negative Mining

目标检测器的训练本质上是一个不平衡数据学习问题。在基于滑动窗口的检测器的情况下,背景和对象之间的不平衡可能极端到每个对象对应10^4 ~ 10 5个背景窗口。
现代检测数据集需要预测物体长宽比,进一步将不平衡比提高到10^6 ~ 10 7[129]。在这种情况下,使用所有的背景数据对训练是有害的,因为大量简单的否定会淹没学习过程。困难负样本挖掘(HNM)旨在解决训练过程中数据不平衡的问题。HNM在目标检测中的技术演进如图10所示。
Bootstrap
目标检测中的Bootstrap是指从一小部分背景样本开始训练,然后在训练过程中迭代地添加新的错误分类背景的一组训练技术。在早期的目标检测器中,最初引入bootstrap是为了减少数百万个背景样本的训练计算[10,29,164]。后来,它成为DPM和HOG检测器中解决数据不平衡问题的标准训练技术[12,13]
• HNM in deep learning based detectors
在深度学习时代,由于计算能力的提高,2014-2016年间,bootstrap在目标检测中被短暂抛弃。为了缓解训练过程中的数据不平衡问题,像Faster和YOLO这样的检测器只是在正窗和负窗之间平衡权重
然而,研究者后来发现,weight-balancing并不能完全解决数据不平衡问题[23]。为此,在2016年之后,bootstrap被重新引入到基于深度学习的检测器中[21,165 - 168]。例如,在SSD[21]和OHEM[166]中,只有很小一部分样本(损失值最大的样本)的梯度会反向传播。在RefineDet[55]中,设计了一个“锚细化模块”来过滤容易的否定。另一种改进是设计新的损失函数[23,169,170],通过重塑标准交叉熵损失,使其更多地关注难分类、错误分类的例子[23]

3. SPEED-UP OF DETECTION

目标检测的加速一直是一个重要但具有挑战性的问题。在过去的20年里,目标检测界已经开发出了复杂的加速技术。这些技术大致可以分为**“检测流水线加速”、“检测引擎加速”和“数值计算加速”**三个层次的组,如图12所示。

3.1 Feature Map Shared Computation

在目标检测器的不同计算阶段中,特征提取通常占计算量的主导地位。对于基于滑动窗口的检测器,计算冗余从位置和尺度两个方面入手,其中位置冗余是由相邻窗口之间的重叠引起的,而尺度冗余是由相邻尺度之间的特征相关性引起的

3.1.1. 空间计算冗余和加速

减少空间计算冗余最常用的思路是特征图共享计算,即在对整幅图像滑动窗口之前只计算一次特征图。传统探测器的“图像金字塔”可以看作是“特征金字塔”。例如,为了加快HOG行人检测器的速度,研究人员通常会将整个输入图像的“HOG地图”进行累积,如图13所示。
然而,这种方法的缺点也很明显,即特征图分辨率(该特征图上滑动窗口的最小步长)将受到单元格大小的限制。如果一个小物体位于两个单元之间,它可以被所有检测窗口忽略。解决这个问题的一种方法是构建一个积分特征金字塔
特征映射共享计算的思想也被广泛应用于基于卷积的检测器中。一些相关的研究可以追溯到20世纪90年代[96,97]。近年来大多数基于CNN的检测器,如SPPNet[17]、Fast-RCNN[18]、Faster-RCNN[19],都采用了类似的思路,实现了数十倍甚至数百倍的加速

3.1.2. 扩展计算冗余和加速

为了减少尺度计算冗余,最成功的方法是直接对特征进行缩放,而不是对图像进行缩放,这种方法首次应用于VJ检测器[10]。然而,由于模糊效果,这种方法不能直接应用于hog类特征。针对这一问题,P. Dollár等人通过广泛的统计分析发现HOG相邻尺度与整体信道特征之间存在很强的(对数线性)相关性[171]。这种相关性可以通过近似相邻尺度的特征映射来加速特征金字塔的计算[172]。此外,构建“检测器金字塔”是避免尺度计算冗余的另一种方法,即通过简单地在一个特征图上滑动多个检测器来检测不同尺度的目标,而不是重新缩放图像或特征

3.2. 分类器的提速

传统的基于滑动窗口的检测器,如HOG检测器和DPM检测器,由于其计算复杂度较低,更倾向于使用线性分类器而不是非线性分类器。核支持向量机等非线性分类器的检测精度较高,但计算量较大。传统核方法作为一种标准的非参数方法,没有固定的计算复杂度。当我们有一个非常大的训练集时,检测速度会变得非常慢。
在目标检测中,有许多方法可以加快核分类器的速度,其中最常用的是“模型近似”[30,174]。由于经典核支持向量机的决策边界只能由一小部分训练样本(支持向量)决定,因此推理阶段的计算复杂度与支持向量的数量成正比:O(N sv)。reduce Set Vectors[30]是核支持向量机的一种近似方法,其目的是根据少量的合成向量获得等效的决策边界。另一种加速核支持向量机在目标检测中的方法是将其决策边界近似为分段线性形式,从而实现恒定的推理时间[174]。采用稀疏编码方法也可以加快核方法的速度

3.3. 级联检测

级联检测是一种常用的目标检测技术[10,176]。它采用了一种由粗到精的检测理念:用简单的计算过滤掉大多数简单的背景窗口,然后用复杂的窗口处理那些更困难的窗口。VJ检波器是级联检波器的代表。在此之后,许多后续的经典目标检测器,如HOG检测器和DPM都使用该技术进行了加速
近年来,级联检测也被应用到基于深度学习的检测器中,特别是对于“大场景中的小物体”的检测任务,如人脸检测[179,180],行人检测[165,177,181]等。除了算法加速之外,级联检测还被用于解决其他问题,例如提高对硬样例的检测[182-184],整合上下文信息[143,185],提高定位精度

3.4. 网络剪枝和量化

“网络修剪”和“网络量化”是两种常用的加速CNN模型的技术,前者是指对网络结构或权值进行修剪以减小其大小,后者是指减少激活码长或权值。

3.4.1. 网络剪枝

“网络修剪”的研究最早可以追溯到20世纪80年代。当时,Y. LeCun等人提出了一种称为“最优脑损伤”的方法来压缩多层感知器网络的参数[186]。在这种方法中,通过对网络的二阶导数来近似网络的损失函数,从而去掉一些不重要的权重。基于这一思路,近年来的网络剪枝方法通常采用迭代的训练剪枝过程,即在每一阶段的训练后只去除一小部分不重要的权值,并重复这些操作[187]。由于传统的网络修剪只是简单地去除不重要的权值,这可能导致卷积滤波器中出现一些稀疏的连通性模式,因此不能直接用于压缩CNN模型。这个问题的一个简单解决方案是去除整个过滤器,而不是独立的权重

3.4.2. Network Quantification

最近关于网络量化的工作主要集中在网络二值化上,其目的是通过量化其激活或权重到二进制变量(例如,0/1)来加速网络,以便将浮点运算转换为AND, or, NOT逻辑运算。网络二值化可以显著加快计算速度,减少网络存储,从而更容易在移动设备上部署。上述思想的一种可能实现是用最小二乘法用二进制变量近似卷积[190]。通过使用多个二进制卷积的线性组合可以获得更精确的近似[191]。此外,一些研究人员进一步开发了用于二值化计算的GPU加速库,获得了更显著的加速结果

3.4.3. Network Distillation

网络蒸馏是一种将大网络(“教师网络”)的知识压缩到小网络(“学生网络”)中的通用框架[193,194]。最近,这一思想已被用于加速目标检测[195,196]。这种想法的一种直接方法是使用教师网来指导(轻量级)学生网的训练,以便后者可以用于加快检测[195]。另一种方法是对候选区域进行变换,使学生网和教师网之间的特征距离最小。这种方法使检测模型的速度提高了2倍,同时达到了相当的精度

3.5. 轻量级网络设计

最后一组加速基于CNN的检测器的方法是直接设计一个轻量级网络,而不是使用现成的检测引擎。长期以来,研究人员一直在探索网络的正确配置,以便在有限的时间成本下获得准确性。除了一些一般的设计原则,如“更少的通道和更多的层”[197],近年来提出了一些其他的方法:1)分解卷积,2)群卷积,3)深度可分离卷积,4)瓶颈设计,5)神经结构搜索

3.5.1. 分解卷积

分解卷积是构建轻量级CNN模型的最简单和最直接的方法。有两组分解方法
第一组方法是将一个大的卷积滤波器在空间维度上分解为一组小的卷积滤波器[47,147,198],如图14 (b)所示。例如,可以将一个7x7滤波器分解为三个3x3滤波器,它们共享相同的接受场,但后者效率更高。另一个例子是将k×k过滤器分解为k×1过滤器和1×k过滤器[198,199],这对于非常大的过滤器(例如15x15[199])可能更有效。这个想法最近被用于目标检测
第二组方法是在通道维度上将一大组卷积分解为两个小组[201,202],如图14 ©所示。例如,可以用d个滤波器近似卷积层,用d’ 滤波器+一个非线性激活+另外d个滤波器(d’ < d)。在这种情况下,原始层的复杂度O(dk^2 c)可以降低到O(d’k2c) + O(dd’)

3.5.2. 群卷积

群卷积的目的是通过将特征通道分成许多不同的组,然后在每一组上独立进行卷积来减少卷积层中的参数数量[189,203],如图14 (d)所示。如果我们将特征通道平均分成m组,在不改变其他配置的情况下,理论上卷积的计算复杂度将降低到原来的1/m

3.5.3. 深度可分离卷积

如图14 (e)所示,深度可分离卷积是最近流行的一种构建轻量级卷积网络的方法[204]。当组数与通道数相等时,它可以看作是群卷积的一种特殊情况
假设我们有一个包含d个滤波器和c个通道的特征映射的卷积层。每个过滤器的大小是k × k。对于深度可分离卷积,每个k×k×c过滤器首先被分割成c片,每个片的大小为k×k×1,然后使用过滤器的每个切片在每个通道中单独执行卷积。最后,使用多个1x1滤波器进行维度转换,以便最终输出应该有d个通道。通过使用深度可分卷积,可以将计算复杂度从O(dk 2c)降低到O(ck 2) + O(dc)。这个想法最近被应用于物体检测和细粒度分类[205-207]

3.5.4. 瓶颈设计

与前几层相比,神经网络中的瓶颈层包含的节点较少。它可以用于学习具有降维的输入的有效数据编码,这在深度自编码器中已被广泛使用[208]。近年来,瓶颈设计被广泛用于设计轻量级网络[47,209 - 212]。在这些方法中,一种常见的方法是压缩检测器的输入层,从检测管道的最开始就减少计算量[209-211]。另一种方法是压缩检测引擎的输出,使特征映射更薄,从而使其在后续检测阶段更高效

3.5.5. 神经结构搜索

最近,人们对通过神经架构搜索(NAS)自动设计网络架构而不是严重依赖专家经验和知识产生了浓厚的兴趣。NAS已应用于大规模图像分类[213,214]、目标检测[215]和图像分割[216]任务。最近,NAS在设计轻量级网络方面也显示出有希望的结果,在搜索过程中同时考虑了对预测精度和计算复杂性的约束[217,218]

3.6. 数值加速

目标检测中常用的四种重要的数值加速方法:1)积分图像加速,2)频域加速,3)矢量量化,4)降秩近似

3.6.1. Speed Up with Integral Image

积分图像是图像处理中的一种重要方法。它有助于快速计算图像子区域的和。积分图像的本质是信号处理中卷积的积分-微分可分性:
如果dg(x)/dx是一个稀疏信号,那么卷积可以通过这个方程的右边部分加速。尽管VJ探测器[10]以积分图像加速而闻名,但在其诞生之前,积分图像已经被用于加速CNN模型[219],并实现了10倍以上的加速。
除了上面的例子,积分图像还可以用来加速物体检测中更一般的特征,如颜色直方图、梯度直方图[171,177,220,221]等。一个典型的例子是通过计算积分HOG映射来加速HOG[177,220]。与传统的积分图像中累积像素值不同,积分HOG地图在图像中累积梯度方向,如图15所示
由于单元格的直方图可以看作是某一区域内梯度向量的和,因此利用积分图像可以计算任意位置和大小的矩形区域内的直方图,而计算开销是恒定的。积分HOG地图已用于行人检测,并且在不损失任何精度的情况下实现了数十倍的加速度[177]
后来在2009年,P. Dollár等人提出了一种新的图像特征,称为积分通道特征(Integral Channel Features, ICF),它可以被认为是积分图像特征的一种更一般的情况,并已成功用于行人检测[171]。在接近实时的检测速度下,ICF在其时期实现了最先进的检测精度

3.6.2. Speed Up in Frequency Domain

卷积是目标检测中一种重要的数值运算。由于线性检测器的检测可以看作是特征映射和检测器权重之间的窗口内积,因此该过程可以通过卷积来实现。
卷积可以通过很多方式加速,其中傅里叶变换是一个非常实用的选择特别是对于加速那些大型滤波器频域加速卷积的理论基础是信号处理中的卷积定理,即在适当的条件下,两个信号的卷积的傅里叶变换是它们的傅里叶空间中的点积:

式中F为傅里叶变换,F−1为傅里叶反变换,I和W为输入图像和滤波器,*是卷积运算, ⊙是逐点积

上述计算可以通过使用快速傅立叶变换(FFT)和快速反傅立叶变换(IFFT)来加速。现在,FFT和IFFT已经被频繁地用于加速CNN模型[222-225]和一些经典的线性目标检测器[226],这使得检测速度提高了一个数量级以上。图16显示了在频域加速线性对象检测器(例如HOG和DPM)的标准流水线

3.6.3. 矢量量化

矢量量化(VQ)是信号处理中的一种经典量化方法,其目的是通过一组小的原型向量来近似一组大数据的分布。它可以用于数据压缩和加速目标检测中的内积运算[227,228]。例如,使用VQ,可以将HOG直方图分组并量化为一组原型直方图向量。然后在检测阶段,特征向量和检测权值之间的内部生成可以通过查表操作来实现。由于在此过程中没有浮点乘法和除法,DPM和样例SVM检测器的速度可以提高一个数量级[227]。

3.6.4. Reduced Rank Approximation(约秩近似)

在深度网络中,全连接层的计算本质上是两个矩阵的乘法。当参数矩阵W∈R u×v较大时,检测器的计算负担较大。例如,在Fast RCNN检测器[18]中,近一半的前向传递时间用于计算完全连接层。约秩近似是一种加速矩阵多重运算的方法。它的目的是对矩阵W进行低秩分解
其中,U是由W的前t个左奇异向量组成的U ×t矩阵,Σ t是包含W的前t个奇异值的t×t对角矩阵,V是由W的前t个右奇异向量组成的V ×t矩阵。上述过程,也称为截断SVD,将参数计数从uv减少到t(u + v),如果t比min(u,v)小得多,这可能是重要的。截断的SVD被用于加速Fast RCNN检测器[18],达到了x2的加速。

4. 目标检测的最新进展

4.1. Detection with Better Engines(实际是backbone)

近年来,深度CNN在许多计算机视觉任务中发挥了核心作用。由于检测器的准确性在很大程度上取决于其特征提取网络,因此在本文中,我们将骨干网络(例如ResNet和VGG)称为检测器的“引擎”。图17显示了三种著名的检测系统:Faster RCNN[19]、R-FCN[46]和SSD[21]在不同引擎选择下的检测精度[27]。关于这一主题的更多细节,我们建议读者参考以下调查[229]。

4.1.1. AlexNet 2012

AlexNet[40]是一个八层深度网络,是第一个CNN模型,它开启了计算机视觉领域的深度学习革命。众所周知,AlexNet在2012年ImageNet LSVRC-2012竞赛中以巨大的优势赢得了冠军[15.3% VS 26.2%(第二名)错误率]。截至2019年2月,Alexnet的论文被引用了3万多次。

4.1.2. VGG 2014

VGG由牛津大学视觉几何小组(Visual Geometry Group, VGG)于2014年提出[230]。VGG将模型的深度增加到16-19层,并使用非常小的(3x3)卷积滤波器,而不是AlexNet中先前使用的5x5和7x7。VGG在当时的ImageNet数据集上实现了最先进的性能

4.1.3. GoogLeNet 2014

oogLeNet,又名Inception[198,231 - 233],是Google公司自2014年以来提出的CNN模型大家庭。GoogLeNet增加了CNN的宽度和深度(最多22层)。Inception家族的主要贡献是引入了分解卷积和批归一化

4.1.4. ResNet 2015

Deep Residual Networks (ResNet)[234],由K. He等人在2015年提出,是一种新型的卷积网络架构,比以前使用的更深(高达152层)。ResNet的目标是简化网络的训练,通过将其层重新表述为参考层输入的学习残差函数。ResNet在2015年赢得了多个计算机视觉竞赛,包括ImageNet检测、ImageNet定位、COCO检测和COCO分割

4.1.5. DenseNet 2017

DenseNet[235]由G. Huang和Z. Liu等人于2017年提出。ResNet的成功表明,CNN的捷径连接使我们能够训练更深入、更准确的模型。作者接受了这一观察结果,并引入了一个密集连接的块,它以前馈方式将每一层连接到另一层

4.1.6. SENet 2018

挤压和激励网络(SENet)由J. Hu和L. Shen等人于2018年提出[236]。它的主要贡献是集成了全局池化和洗牌,以了解特征映射的渠道重要性。SENet在2017年ILSVRC分级比赛中获得第一名。

• Object detectors with new engines
近三年来,许多最新的引擎被应用于目标检测。例如,一些最新的目标检测模型,如STDN[237]、DSOD[238]、TinyDSOD[207]、Pelee[209]等,都选择DenseNet[235]作为检测引擎。Mask RCNN[4]作为实例分割的最先进模型,采用了下一代ResNet: ResNeXt[239]作为检测引擎。此外,为了加快检测速度,Xception[204]作为inception的改进版本引入的深度可分离卷积运算也被用于MobileNet[205]和LightHead RCNN[47]等检测器中。

4.2 Detection with Better Features

特征表示的质量对目标检测至关重要。近年来,许多研究人员在一些最新引擎的基础上进行了进一步提高图像特征质量的努力,其中最重要的两组方法是:1)特征融合和2)学习具有大接受场的高分辨率特征

4.2.1. Why Feature Fusion is Important?

不变性和同变性/等变性是图像特征表示的两个重要性质分类的目的是学习高层次的语义信息,因此分类需要可变的特征表示物体定位需要等变表示,因为它的目的是区分位置和尺度变化由于目标检测包括目标识别和定位两个子任务,因此检测器必须同时学习不变性和等变性。
近三年来,特征融合在目标检测中得到了广泛的应用。由于CNN模型由一系列卷积层和池化层组成,因此较深层的特征具有较强的不变性,但较少的等方差。虽然这可能有利于类别识别,但在目标检测中存在定位精度低的问题。相反,较浅层的特征不利于学习语义,但它有助于对象定位,因为它包含更多关于边缘和轮廓的信息。因此,在CNN模型中整合深层和浅层特征有助于提高不变性和等变性

4.2.2. 不同方式的特征融合

在目标检测中进行特征融合的方法有很多。本文介绍了两方面的最新方法:1)处理流程和2)元素操作
• Processing flow
最近的目标检测特征融合方法可以分为两类:1)自下而上融合,2)自上而下融合,如图18 (a)-(b)所示。自下而上的融合通过跳跃连接将浅层特征转发到更深层[237,240 - 242]。相比之下,自顶向下融合将较深层的特征反馈到较浅层[22,55,243 - 246]。除了这些方法之外,最近还提出了更复杂的方法,例如,跨不同层编织特征
由于不同层的特征图在空间和通道维度上可能具有不同的大小,因此可能需要适应特征图,例如通过调整通道数量,上采样低分辨率地图,或下采样高分辨率地图到适当的大小。最简单的方法是使用更接近的双线性插值[22,244]。此外,分数阶跃卷积(也称为转置卷积)[45,248]是最近流行的另一种调整特征映射大小和调整通道数量的方法。使用转置卷积的优点是它可以学习一种合适的方法来自己进行上采样[55,212,241 - 243,245,246,249]。
• Element-wise operation
从局部的角度来看,特征融合可以看作是不同特征映射之间的逐元素操作。有三组方法:1)元素求和,2)元素积,和3)拼接,如图18 ©-(e)所示。
元素和是进行特征融合最简单的方法。它已被频繁地用于许多最近的目标探测器[22,55,241,243,246]。元素积[245,249 - 251]与元素和非常相似,唯一的区别是使用乘法而不是求和。元素产品的一个优点是,它可以用来抑制或突出某一区域内的特征,这可能进一步有利于小目标检测[245,250,251]特征拼接是特征融合的另一种方式[212,237,240,244]。它的优点是可以用来整合不同区域的上下文信息[105,144,149,161],缺点是增加了内存[235]。

4.2.3. 学习具有大感受野的高分辨率特征

接受野和特征分辨率是基于CNN的检测器的两个重要特征前者指的是输入像素的空间范围,它有助于计算输出的单个像素后者对应于输入和特征映射之间的下采样率具有较大接受野的网络能够捕获更大规模的上下文信息,而具有较小接受野的网络可能更专注于局部细节。

正如我们之前提到的,特征分辨率越低,检测小物体就越困难提高特征分辨率最直接的方法是去除池化层或降低卷积下采样率但这又产生了一个新的问题,即由于输出步幅的减小,接收野会变小。换句话说,这将缩小检测器的“视野”,并可能导致一些大型物体的检测失败。
同时增加接收野和特征分辨率的一种有效方法是引入扩展卷积(又称阿特鲁斯卷积,或带孔卷积)。扩展卷积最初被提出用于语义分割任务[252,253]。其主要思想是扩展卷积滤波器并使用稀疏参数。例如,膨胀率为2的3x3过滤器将具有与5x5内核相同的接受域,但只有9个参数。目前,扩展卷积已被广泛应用于目标检测[21,56,254,255],并被证明在不增加任何额外参数和计算成本的情况下可以有效地提高精度[56]。

4.3. Beyond Sliding Window

尽管目标检测已经从使用手工制作的特征发展到使用深度神经网络,但检测仍然遵循“特征映射上的滑动窗口”范式[137]。最近,在滑动窗之外安装了一些探测器。
• Detection as sub-region search
子区域搜索[184,256 - 258]提供了一种新的检测方法。最近的一种方法是将检测视为一个路径规划过程,从初始网格开始,最终收敛到所需的地面真值框[256]。另一种方法是将检测视为迭代更新过程,以细化预测边界框的角[257]。
• Detection as key points localization
关键点定位是一项重要的计算机视觉任务,具有广泛的应用,如面部表情识别[259]、人体姿势识别[260]等。由于图像中的任何物体都可以通过其地面真值盒的左上角和右下角唯一确定,因此检测任务可以等效地框架为一对关键点定位问题。这一想法最近的一个实现是预测边角的热图[261]。该方法的优点是可以在语义分割框架下实现,不需要设计多尺度锚盒。

4.4. 定位改进

为了提高定位精度,近年来的检测器有两类方法**:1)边界盒改进(bounding box refinement)和2)设计新的损失函数(loss function)进行精确定位。**

4.4.1. Bounding Box Refinement

提高定位精度最直观的方法是边界盒改进,可以看作是对检测结果的后处理。尽管边界盒回归已经集成到大多数现代目标检测器中,但仍然有一些具有意外尺度的对象不能被任何预定义的锚点很好地捕获。这将不可避免地导致对它们位置的不准确预测。由于这个原因,最近引入了“迭代边界盒改进”[262-264],通过迭代地将检测结果输入到BB回归器中,直到预测收敛到正确的位置和大小。然而,也有研究者认为该方法不能保证定位精度的单调性[262],即多次应用BB回归可能会使定位退化。

4.4.2. Improving Loss Functions for Accurate Localization

在大多数现代检测器中,目标定位被认为是一个坐标回归问题。然而,这种范式有两个缺点。首先,回归损失函数不对应于最终的局部化评价。例如,我们不能保证较低的回归误差总是会产生较高的IoU预测,特别是当对象具有非常大的纵横比时。其次,传统的边界盒回归方法不能提供定位的置信度。当有多个BB相互重叠时,这可能导致非最大抑制失败(详见第2.3.5节)。
通过设计新的损失函数可以缓解上述问题。最直观的设计是直接使用IoU作为定位损失函数[265]。其他一些研究人员进一步提出了一种iou引导的NMS,以提高训练和检测阶段的本地化[163]。此外,也有研究者尝试在概率推理框架下改进定位[266]。与以往直接预测框坐标的方法不同,该方法预测了边界框位置的概率分布

4.5. 分割学习

目标检测和语义分割都是计算机视觉中的重要任务。最近的研究表明,可以通过学习语义分割来改进目标检测

4.5.1. Why Segmentation Improves Detection?

语义分割提高目标检测的原因有三个
• Segmentation helps category recognition
边缘和边界是构成人类视觉认知的基本要素[267,268]。在计算机视觉中,一个物体(如汽车、人)和一个物体(如天空、水、草)的区别在于前者通常有一个封闭而明确的边界,而后者则没有。由于语义分词任务的特点很好地捕捉了对象的边界,因此可以帮助分类识别
• Segmentation helps accurate localization
对象的ground-truth边界框由其明确定义的边界决定。对于一些具有特殊形状的物体(例如,想象一只尾巴很长的猫),很难预测高借据位置。由于物体边界可以很好地编码在语义分割特征中,用分割进行学习将有助于精确的物体定位
• 分割可以作为上下文嵌入
日常生活中的物体被不同的背景所包围,如天空、水、草等,所有这些元素都构成了一个物体的语境。整合语义分割的上下文将有助于目标检测,例如,飞机更有可能出现在天空而不是水面上。

4.5.2. How Segmentation Improves Detection?

改进分割目标检测的主要方法有两种:1)丰富特征学习和2)多任务损失函数学习
• Learning with enriched features
最简单的方法是将分割网络视为固定的特征提取器,并将其作为附加特征集成到检测框架中[144,269,270]。该方法的优点是易于实现,缺点是分割网络可能带来额外的计算。
• Learning with multi-task loss functions
另一种方法是在原始检测框架的基础上引入一个额外的分割分支,并使用多任务损失函数(分割损失+检测损失)来训练该模型[4,269]。在大多数情况下,分段早午餐将在推理阶段被删除。优点是检测速度不会受到影响,缺点是训练需要像素级的图像注释。为此,一些研究人员采用了“弱监督学习”的思想:不是基于逐像素标注蒙版的训练,而是简单地基于边界盒级标注训练分割早brunch[250,271]。

4.6. 旋转和尺度变化的鲁棒检测

目标旋转和尺度变化是目标检测中的重要问题。由于CNN学习到的特征对旋转和尺度变化的程度不是不变的,近年来,很多人在这个问题上做出了努力。

4.6.1. Rotation Robust Detection

目标旋转在人脸检测、文本检测等检测任务中非常常见。这个问题最直接的解决方案是数据增强,这样任何方向的对象都可以被增强的数据很好地覆盖[88]。另一个解决方案是为每个方向训练独立的检测器[272,273]。除了这些传统的方法外,最近又出现了一些新的改进方法。
• Rotation invariant loss functions
使用旋转不变损失函数学习的思想可以追溯到20世纪90年代[274]。最近的一些研究引入了对原始检测损失函数的约束,以使旋转对象的特征保持不变[275,276]。
• Rotation calibration
另一种改进旋转不变性检测的方法是对候选目标进行几何变换[277-279]。这对多阶段检测器特别有帮助,早期阶段的相关性将有利于随后的检测。这一思想的代表是空间变压器网络(STN)[278]。STN现在已经用于旋转文本检测[278]和旋转人脸检测[279]。
• Rotation RoI Pooling
在两阶段检测器中,特征池化的目的是首先将任意位置和大小的目标提议均匀地划分为一组网格,然后将网格特征连接起来,从而提取出固定长度的特征表示。由于网格划分是在直角坐标系下进行的,其特征对旋转变换不具有不变性。最近的改进是在极坐标中对网格进行网格划分,以便特征对旋转变化具有鲁棒性[272]。

4.6.2. 尺度鲁棒性检测

近年来,尺度鲁棒检测在训练和检测两个阶段都取得了很大的进步
• Scale adaptive training
大多数现代检测器将输入图像重新缩放到固定大小,并在所有尺度下反向传播物体的损失,如图19 (a)所示。然而,这样做的缺点是会出现“比例不平衡”问题。在检测过程中构建图像金字塔可以缓解这一问题,但不能从根本上解决[46,234]。最近的改进是图像金字塔的尺度归一化(SNIP)[280],它在训练和检测阶段都构建图像金字塔,并且只反向传播一些所选尺度的损失,如图19 (b)所示。一些研究人员进一步提出了一种更有效的训练策略:SNIP with efficient Resampling (SNIPER)[281],即将图像裁剪并重新缩放到一组子区域,以便从大批量训练中受益。

• Scale adaptive detection
现代探测器大多采用固定的结构来探测不同大小的物体。例如,在一个典型的基于CNN的检测器中,我们需要仔细定义锚点的大小。这样做的缺点是配置不能适应意外的规模变化。为了提高对小物体的检测能力,最近一些检测器提出了一些“自适应放大”技术,将小物体自适应地放大为“较大的物体”[184,258]。最近的另一个改进是学习预测图像中物体的比例分布,然后根据该分布自适应地重新缩放图像[282,283]。

4.7. Training from Scratch(从零开始训练)

大多数基于深度学习的检测器首先在大规模数据集(如ImageNet)上进行预训练,然后对特定的检测任务进行微调。人们一直认为预训练有助于提高泛化能力和训练速度,问题是,我们真的需要在ImageNet上预训练检测器吗?事实上,在目标检测中采用预训练网络存在一定的局限性。第一个限制是ImageNet分类和目标检测之间的分歧,包括它们的损失函数和规模/类别分布第二个限制是域不匹配。由于ImageNet中的图像是RGB图像,而检测有时会应用于深度图像(RGB- d)或3D医学图像,因此预训练的知识不能很好地转移到这些检测任务中。
近年来,一些研究人员试图从头开始训练一个目标检测器为了加快训练速度和提高稳定性,一些研究人员引入密集连接和批归一化来加速浅层的反向传播[238,284]。K. He等人[285]最近的工作通过探索相反的制度进一步质疑了预训练的范式:他们报告了使用随机初始化训练的标准模型在COCO数据集上的目标检测的竞争结果,唯一的例外是增加了训练迭代的次数,以便随机初始化的模型可能收敛。即使只使用10%的训练数据,随机初始化训练也具有惊人的鲁棒性,这表明ImageNet预训练可能会加快收敛速度,但不一定提供正则化或提高最终的检测精度

4.8. 对抗训练

生成对抗网络(Generative Adversarial Networks, GAN)[286]由A. Goodfellow等人于2014年提出,近年来受到了广泛关注。典型的GAN由两个神经网络组成:生成器网络和鉴别器网络,它们在极大极小优化框架下相互竞争。通常,生成器学习从潜在空间映射到感兴趣的特定数据分布,而鉴别器旨在区分真实数据分布和生成器产生的数据分布。GAN已广泛应用于许多计算机视觉任务,如图像生成[286,287]、图像样式转移[288]和图像超分辨率[289]。近两年,GAN也被应用于目标检测,特别是对小目标和遮挡目标的检测有所提高
GAN已被用于通过缩小大小物体之间的表示来增强对小物体的检测[290,291]。为了提高遮挡物体的检测,最近的一个想法是使用对抗性训练来生成遮挡遮罩[292]。对抗网络不是在像素空间中生成样本,而是直接修改特征来模拟遮挡
除了这些工作之外,“对抗性攻击”[293],旨在研究如何用对抗性示例攻击检测器,最近越来越受到关注。这一课题的研究对于自动驾驶尤为重要,因为在保证对对抗性攻击的鲁棒性之前,不能完全信任自动驾驶。

4.9. 弱监督目标检测

现代目标检测器的训练通常需要大量的人工标记数据,而标记过程耗时、昂贵且效率低下。弱监督目标检测(WSOD)旨在通过仅使用图像级注释而不是边界框来训练检测器来解决这一问题。
最近,多实例学习被用于WSOD[294, 295]。多实例学习是一种群监督学习方法[39,296]。与使用一组单独标记的实例学习不同,多实例学习模型接收一组标记的包,每个包包含许多实例。如果我们将一张图像中的候选对象视为一个包,将图像级标注作为标签,那么WSOD可以被表述为一个多实例学习过程。
类激活映射是WSOD的另一组最新方法[297,298]。对CNN可视化的研究表明,尽管对目标的位置没有监督,但CNN的卷积层仍具有目标检测器的作用。类激活映射揭示了如何使CNN在图像级标签训练的情况下仍具有定位能力[299]。
除了上述方法外,还有一些研究者认为WSOD是一种建议排序过程,通过选择信息量最大的区域,然后用图像级标注对这些区域进行训练[300]。WSOD的另一种简单方法是掩膜图像的不同部分。如果检测分数急剧下降,则物体被覆盖的概率很大[301]。此外,交互式标注[295]在训练过程中考虑了人的反馈,从而提高了WSOD。最近,生成对抗训练被用于WSOD[302]。

5. Applications

回顾过去20年来一些重要的检测应用,包括行人检测、人脸检测、文本检测、交通标志/灯光检测和遥感目标检测

5.1. Pedestrian Detection

行人检测作为一项重要的目标检测应用,在自动驾驶、视频监控、刑事侦查等诸多领域受到了广泛关注。一些早期的行人检测方法,如HOG检测器[12]、ICF检测器[171],在特征表示[12,171]、分类器设计[174]、检测加速度[177]等方面为一般目标检测奠定了坚实的基础。近年来,一些通用的目标检测算法,如Faster RCNN[19]被引入到行人检测中[165],极大地促进了该领域的进展。

5.1.1. Difficulties and Challenges

行人检测面临的挑战和困难可以总结如下:
Small pedestrian:图20 (a)显示了一些远离相机拍摄的small pedestrians的例子。在Caltech数据集[59,60]中,15%的行人高度小于30像素。
**Hard negatives:**街景图像中的一些背景在视觉外观上与行人非常相似,如图20 (b)所示
**Dense and occluded pedestrian:**图20 ©显示了一些密集和闭塞的行人的例子。在加州理工学院数据集[59,60]中,未被遮挡的行人仅占行人总数的29%
Real-time detection: 从高清视频中实时检测行人对于自动驾驶和视频监控等应用至关重要。

5.1.2. 文献综述

行人检测的研究历史非常悠久[30,31,101]。其发展可分为两个技术阶段**:1)传统行人检测和2)基于深度学习的行人检测**。我们建议读者参考以下调查以获得更多关于这一主题的细节[60,303 - 307]。
• Traditional pedestrian detection methods
由于计算资源的限制,Haar小波特征在早期行人检测中得到了广泛的应用[30,31,308]。为了提高对遮挡行人的检测,当时一种流行的想法是“组件检测”[31,102,220],即将检测视为多个部分检测器的集合,这些检测器分别对人体的不同部位进行训练,例如头部,腿部和手臂。随着计算能力的提高,人们开始设计更复杂的检测模型,2005年以来,基于梯度的表示[12,37,177,220,309]和DPM[15, 37, 54]成为行人检测的主流。2009年,利用积分图像加速,提出了一种有效且轻量级的特征表示:积分通道特征(integral Channel Features, ICF)[171]。ICF成为当时行人检测的新标杆[60]。除了特征表示外,还考虑了一些领域知识,如外观恒常性和形状对称性[310]和立体信息[173,311]。
• Deep learning based pedestrian detection methods
行人检测是最早应用深度学习的计算机视觉任务之一[312]。
**To improve small pedestrian detection:**尽管Fast/Faster R-CNN等深度学习对象检测器在一般对象检测方面已经显示出最先进的性能,但由于其卷积特征的低分辨率,它们在检测小型行人方面的成功有限[165]。最近针对这一问题的一些解决方案包括特征融合[165],引入额外高分辨率的手工特征[313,314],以及在多分辨率下集成检测结果[315]。
**To improve hard negative detection:**最近的一些改进包括增强决策树的集成[165]和语义分割(作为行人的上下文)[316]。此外,还引入了“跨模态学习”的思想,通过同时使用RGB和红外图像来丰富困难负样本的特征[317]。
To improve dense and occluded pedestrian detection:正如我们在2.3.2节中提到的,CNN的更深层的特征具有更丰富的语义,但对于检测密集物体并不有效。为此,一些研究者通过考虑目标的吸引力和周围其他物体的斥力,设计了新的损失函数[318]。目标遮挡是密集行人通常会遇到的另一个问题。部分检测器集成[319,320]和注意机制[321]是改进遮挡行人检测的最常见方法

5.2. Face Detection

人脸检测是最古老的计算机视觉应用之一[96,164]。早期的人脸检测,如VJ检测器[10],极大地推动了目标检测的发展,其许多卓越的思想即使在今天的目标检测中仍然发挥着重要的作用。人脸检测现在已经应用于各行各业,比如数码相机中的“微笑”检测,电子商务中的“刷脸”,手机app中的脸部化妆等等。

5.2.1. Difficulties and Challenges

人脸检测的难点和挑战可以总结为:
**内部类的变化:**人脸可以呈现各种表情、肤色、姿势和动作,如图21 (a)所示。
**遮挡:**人脸可能部分被其他物体遮挡,如图21 (b)所示。
Multi-scale detection: 在各种尺度下检测人脸,特别是对一些微小的人脸,如图21 ©所示。
**Real-time detection:**移动设备上的人脸检测通常需要CPU实时检测速度。

5.2.2. 文献综述

人脸检测的研究可以追溯到20世纪90年代初[95,106,108]。然后,它经历了多个历史时期:早期的人脸检测(2001年之前),传统的人脸检测(2001年至2015年),以及基于深度学习的人脸检测(2015年至今)。我们建议读者参考以下调查了解更多细节[323,324]。
• Early time’s face detection (before 2001)
早期人脸检测算法可分为三类:1)基于规则的方法。这组方法编码了人类对典型面孔构成的知识,并捕获了面部元素之间的关系[107,108]。2)基于子空间分析的方法。这组方法分析底层线性子空间中的人脸分布[95,106]。特征面是这组方法的代表[95]。3)基于学习的方法:将人脸检测框架为滑动窗口+二值分类(目标vs背景)过程。该组常用的模型包括神经网络[96,164,325]和支持向量机[29,326]。
• Traditional face detection (2000-2015)
这一时期有两组人脸检测器。第一组方法基于增强决策树[10,11,109]。这些方法计算简单,但在复杂场景下检测精度较低。第二组是基于早期卷积神经网络,利用特征的共享计算来加快检测速度[112,113,327]。
• Deep learning based face detection (after 2015)
大多数人脸检测算法都遵循了Faster RCNN和SSD等通用目标检测器的检测思想。
To speed up face detection:
级联检测是加速人脸检测器最常见的方法。另一种加速方法是预测图像中人脸的尺度分布[283],然后在选定的尺度上运行检测
To improve multi-pose and occluded face detection:
“人脸校准”的思想已被用于通过估计校准参数[279]或通过多个检测阶段使用渐进校准来改进多姿态人脸检测[277]。为了改进遮挡人脸检测,近年来提出了两种方法。第一种是结合“注意机制”,以突出潜在面部目标的特征[250]第二种是“基于部件的检测”[328],它继承了DPM的思想。
To improve multi-scale face detection:
最近在多尺度人脸检测方面的研究[322,329-331]使用了与一般目标检测相似的检测策略,包括多尺度特征融合和多分辨率检测

5.3. Text Detection

几千年来,文字一直是人类主要的信息载体。文本检测的基本目标是确定给定图像中是否存在文本,如果存在,则对其进行定位和识别。文本检测有着非常广泛的应用。它帮助视障人士“阅读”路牌和货币[332,333]。在地理信息系统中,门牌号和路牌的检测和识别使得构建数字地图变得更加容易[334,335]。

5.3.1. Difficulties and Challenges

文本检测的难点和挑战总结如下:
**Different fonts and languages:**文本可以有不同的字体、颜色和语言,如图22 (a)所示。
**文本旋转和视角扭曲:**文本可能有不同的方向,甚至可能有视角扭曲,如图22 (b)所示。
**密密麻麻的文字定位:**大宽高比和密集布局的文本行难以准确定位,如图22 ©所示。
**破碎和模糊的字符:**破碎和模糊的字符在街景图像中很常见。

5.3.2. 文献综述

文本检测包括两个相关但相对独立的任务:1)文本定位和2)文本识别。现有的文本检测方法可以分为两大类:“分步检测”和“集成检测”。我们建议读者参考以下调查了解更多细节[338,339]
•分步检测vs综合检测
分步检测方法[34,341]由字符分割、候选区域验证、字符分组和单词识别等一系列处理步骤组成。这组方法的优点是在粗分割步骤中可以过滤掉大部分背景,大大减少了后续过程的计算成本。缺点是需要仔细设置所有步骤的参数,并且错误会在每个步骤中发生并累积。相比之下,
集成方法[342-345]将文本检测作为一个联合概率推理问题,在统一的框架下处理字符定位、分组和识别等步骤。这些方法的优点是避免了累积误差,便于语言模型的集成。缺点是当考虑大量字符类和候选窗口时,推理的计算成本将很高[339]

• Traditional methods vs deep learning methods
大多数传统的文本检测方法以无监督的方式生成候选文本,其中常用的技术包括最大稳定极端区域(MSER)分割[341]和形态过滤[346]。这些方法也考虑了一些领域知识,如文本的对称性和笔画的结构[340,341,347]。
近年来,研究人员更多地**关注文本定位问题,而不是识别问题。**最近提出了两组方法。第一组方法将文本检测作为一般目标检测的特殊情况[251,348-357]。这些方法具有统一的检测框架,但对于具有方向和大宽高比的文本检测效果较差。第二组方法将文本检测框架为图像分割问题[336,337,358 - 360]。这些方法的优点是对文本的形状和方向没有特殊的限制,缺点是不容易根据分割结果区分排列密集的文本行。
近年来基于深度学习的文本检测方法针对上述问题提出了一些解决方案。
**For text rotation and perspective changes:**该问题最常见的解决方案是在锚框和RoI池层中引入与旋转和视角变化相关的附加参数[351 - 353,355 - 357]。
To improve densely arranged text detection:于分割的方法在检测密集排列的文本方面表现出更大的优势。为了区分相邻的文本行,最近提出了两组解决方案。第一种是“分段与链接”,其中“分段”是指字符热图,“链接”是指相邻的两个分段之间的连接,表明它们属于同一单词或文本行[336,358]。第二组是引入额外的角/边界检测任务,以帮助分离密集排列的文本,其中一组角或封闭边界对应于单个文本行[337,359,360]。
To improve broken and blurred text detection:最近一种处理破碎和模糊文本的方法是使用词级识别[77,361]和句子级识别[335]。对于不同字体的文本,最有效的方法是使用合成样本进行训练[77,348]。

5.4. 交通标志和红绿灯检测

近年来,随着自动驾驶技术的发展,交通标志和红绿灯的自动检测备受关注。在过去的几十年里,尽管计算机视觉社区在很大程度上推动了对一般物体的检测,而不是对交通灯和交通标志等固定模式的检测,但认为它们的识别没有挑战性仍然是错误的。

5.4.1. Difficulties and Challenges

交通标志/信号灯检测的挑战和困难可以总结如下:
**光照变化:**如图23 (a)所示,当车辆驶入阳光刺眼或夜间时,检测将特别困难。
**运动模糊:**由于汽车的运动,车载摄像机拍摄的图像会变得模糊,如图23 (b)所示。
**恶劣天气:**在恶劣天气下,如雨雪天气,会影响图像质量,如图23所示©。
**实时检测:**这对自动驾驶尤为重要。

5.4.2. 文献综述

现有的交通标志/信号灯检测方法可以分为两大类:1)传统检测方法和2)基于深度学习的检测方法。我们建议读者参阅以下调查[80]以了解有关该主题的更多细节。

• Traditional detection methods
基于视觉的交通标志/信号灯检测的研究可以追溯到20年前[362,363]。由于交通标志/信号灯具有特定的形状和颜色,传统的检测方法通常基于颜色阈值分割[364-368]、视觉显著性检测[369]、形态滤波[79]和边缘/轮廓分析[370,371]。由于上述方法仅仅是基于低级视觉设计的,在复杂的环境下往往会失效(如图23所示),因此,一些研究人员开始寻找基于视觉方法之外的其他解决方案,例如将GPS与数字地图相结合用于红绿灯检测[372,373]。虽然“特征金字塔+滑动窗”在当时已经成为一般物体检测和行人检测的标准框架,但除了极少数作品[374]外,直到2010年,主流的交通标志/灯光检测方法才遵循这一范式[375-377]。

• Deep learning based detection methods
一些著名的检测器如Faster RCNN和SSD被应用于交通标志/信号灯检测任务中[83,84,378,379]。在这些检测器的基础上,一些新技术,如注意机制和对抗性训练被用于改善复杂交通环境下的检测[290,378]。

5.5. 遥感目标检测

遥感成像技术为人们更好地了解地球打开了一扇门。近年来,随着遥感图像分辨率的提高,遥感目标检测(如飞机、船舶、油罐等的检测)成为研究热点。遥感目标探测在军事调查、灾害救援、城市交通管理等方面有着广泛的应用。

5.5.1. Difficulties and Challenges

遥感目标检测面临的挑战和困难总结如下:
**“大数据”检测:**由于遥感图像数据量巨大,如何快速准确地检测遥感目标是一个难题。图24 (a)为遥感影像与自然影像的数据量对比图。
**遮挡目标:**超过50%的地球表面每天被云覆盖。遮挡目标的一些例子如图24 (b)所示。
**领域自适应:**不同传感器(例如,不同调制和分辨率)捕获的遥感图像存在高度差异。

5.5.2. 文献综述

关于这一主题的更多细节,我们建议读者参考以下调查[90,382]。

• Traditional detection methods
传统的遥感目标检测方法大多遵循两个阶段的检测范式:1)候选目标提取和2)目标验证。在候选提取阶段,常用的方法包括基于灰度值滤波的方法[383,384]、基于视觉显著性的方法[385-388]、基于小波变换的方法[389]、基于异常检测的方法[390]等。上述方法的一个相似之处在于它们都是无监督的方法,因此在复杂的环境中通常会失败。在目标验证阶段,常用的特征包括HOG[390, 391]、LBP[384]、SIFT[386, 388, 392]等。此外,还有一些其他方法遵循滑动窗口检测范式[391-394]。
针对油罐、近岸船舶等具有特定结构和形状的目标,利用了一定的领域知识。例如,油罐检测可视为圆/弧检测问题[395,396]。近岸船舶探测可以认为是对前甲板和船尾的探测[397,398]。为了提高被遮挡目标的检测,一种常用的思路是“部分检测”[380,399]。为了检测不同方向的目标,采用“混合模型”,针对不同方向的目标训练不同的检测器[273]。

• Deep learning based detection methods
继2014年RCNN取得巨大成功后,深度CNN很快被应用于遥感目标检测[275,276,400,401]。Faster RCNN和SSD等通用目标检测框架越来越受到遥感界的关注[91,167,381,402 - 405]。
由于遥感图像与日常图像的巨大差异,人们对深度CNN特征在遥感图像中的有效性进行了一些研究[406-408]。人们发现,尽管深度CNN取得了巨大的成功,但它并不比传统的光谱数据方法更好[406]。为了检测不同方向的目标,一些研究人员改进了ROI Pooling层,以获得更好的旋转不变性[272,409]。为了提高域适应能力,一些研究人员从贝叶斯的角度来表述检测,即在检测阶段,根据测试图像的分布自适应更新模型[91]。此外,注意机制和特征融合策略也被用于改进小目标检测[410,411]。

6. CONCLUSION AND FUTURE DIRECTIONS

在过去的20年里,目标检测取得了令人瞩目的成就。本文不仅广泛回顾了20年来一些具有里程碑意义的检测器(如VJ检测器、HOG检测器、DPM、Faster-RCNN、YOLO、SSD等)、关键技术、加速方法、检测应用、数据集和指标,还讨论了目前社区面临的28个挑战,以及如何进一步扩展和改进这些检测器。
未来目标检测的研究可能会集中但不限于以下几个方面:
**Lightweight object detection:**加快检测算法的速度,使其能够在移动设备上顺利运行。一些重要的应用包括移动增强现实、智能相机、人脸验证等。尽管近年来已经做出了很大的努力,但机器和人眼之间的速度差距仍然很大,特别是在检测一些小物体时

**Detection meets AutoML:**最近基于深度学习的检测器变得越来越复杂,并且严重依赖于经验。未来的一个方向是在设计检测模型时减少人为干预(例如,如何设计引擎和如何设置锚盒),使用神经结构搜索。AutoML可能是目标检测的未来

Detection meets domain adaptation: 任何目标检测器的训练过程本质上都可以看作是在数据独立且同分布(i.i.d)的假设下的似然估计过程。非id对象检测。数据,特别是对于一些现实世界的应用程序,仍然是一个挑战。GAN在领域自适应方面显示出良好的效果,在未来的目标检测中可能会有很大的帮助

**Weakly supervised detection:**基于深度学习的检测器的训练通常依赖于大量注释良好的图像。注释过程耗时、昂贵且效率低下。开发弱监督检测技术,其中检测器仅使用图像级注释或部分使用边界框注释进行训练,对于降低人工成本和提高检测灵活性非常重要。

Small object detection: 在大场景中检测小物体一直是一个挑战。该研究方向的一些潜在应用包括利用遥感图像进行野生动物种群计数和一些重要军事目标的状态检测。一些进一步的方向可能包括视觉注意机制的整合和高分辨率轻量级网络的设计

**Detection in videos:**高清视频中的实时目标检测/跟踪对于视频监控和自动驾驶具有重要意义。传统的目标检测器通常被设计为基于图像的检测,而忽略了视频帧之间的相关性。通过探索时空相关性来改进检测是一个重要的研究方向

**Detection with information fusion:**多源/多模态数据(如RGB-D图像、3d点云、激光雷达等)的目标检测对于自动驾驶和无人机应用具有重要意义。一些悬而未决的问题包括:如何将训练有素的检测器移植到不同的数据模式中,如何进行信息融合以改进检测等。

相关文章:

Object Detection in 20 Years: A Survey(2019.5)

文章目录 Abstract1. Introduction1.1. Difference from other related reviews1.2. Difficulties and Challenges in Object Detection 2. OBJECT DETECTION IN 20 YEARS2.1. 目标检测路线图2.1.1. 里程碑:传统探测器&#xff08;粗略了解&#xff09;2.1.2. 里程碑:基于CNN的…...

Springboot 设置时区与日期格式

1.配置文件修改&#xff08;范围修改&#xff09; spring:jackson:# 东8 北京时区time-zone: GMT8# 日期格式date-format: yyyy-MM-dd HH:mm:ss 2.Java代码修改&#xff08;范围修改&#xff09; 2.1 时区 import org.springframework.context.annotation.Bean; import org.…...

从零开始学Go web——第一天

文章目录 从零开始学Go web——第一天一、Go与web应用简介1.1 Go的可扩展性1.2 Go的模块化1.3 Go的可维护1.4 Go的高性能 二、web应用2.1 工作原理2.2 各个组成部分2.2.1 处理器2.2.2 模板引擎 三、HTTP简介四、HTTP请求4.1 请求的文本数据4.2 请求方法4.2.1 请求方法类型4.2.2…...

6.Eclipse里下载Subclipse插件

方法一&#xff1a;从Eclipse Marketplace里面下载 具体操作&#xff1a;打开Eclipse --> Help --> Eclipse Marketplace --> 在Find中输入subclipse搜索 --> 找到subclipse点击install 方法二&#xff1a;从Install New Software里下载 具体操作&#xff1a;打开…...

家用洗地机哪个品牌最好最实用?热门洗地机测评

随着社会的不断进步&#xff0c;我们逐渐意识到日常生活中的许多任务需要消耗大量的时间和体力。一个典型的例子是卫生清洁工作&#xff0c;尤其是在大面积地区&#xff0c;如大型建筑物、商场或工厂。这些任务不仅繁琐&#xff0c;还可能影响生活质量和工作效率。为了应对这一…...

【C语言:自定义类型(结构体、位段、共用体、枚举)】

文章目录 1.结构体1.1什么是结构体1.2结构体类型声明1.3结构体变量的定义和初始化1.4结构体的访问 2.结构体对齐2.1如何对齐2.2为什么存在内存对齐&#xff1f; 3.结构体实现位段3.1什么是位段3.2位段的内存分配3.3位段的跨平台问题3.4位段的应用3.5位段使用注意事项 4.联合体4…...

【1day】华天软件 OAworkFlowService接口SQL注入漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现...

Oracle(2-11)RMAN Backups

文章目录 一、基础知识1、RMAN Backup Concepts RMAN备份概念2、RMAN Backup Modes RMAN备份的类型3、Backup File Types 备份文件类型4、RMAN Backup Destinations RMAN备份目标5、Backup Constraints 备份约束6、Recovery Manager Backups 恢复管理器备份7、Characteristics …...

使用docker搭建『Gitea』私有仓库

文章目录 一、安装 docker 环境1、移除以前的 docker 相关包2、配置yum源3、安装 docker4、启动 docker 二、安装 docker compose1、安装docker compose2、赋予下载的docker-compose执行权限 三、安装 gitea1. 创建工作目录2. 创建 Docker Compose 文件3. 启动 Gitea4. 访问 Gi…...

CopyOnWriteArrayList怎么用

什么是CopyOnWriteArrayListCopyOnWriteArrayList常用方法CopyOnWriteArrayList源码详解CopyOnWriteArrayList使用注意点CopyOnWriteArrayList存在的性能问题CopyOnWriteArrayList 使用实例基本应用实例并发应用实例 拓展写时复制 什么是CopyOnWriteArrayList CopyOnWriteArra…...

旋转设备状态监测与预测性维护:提高设备可靠性的关键

在工业领域的各个行业中&#xff0c;旋转设备都扮演着重要的角色。为了确保设备的可靠运行和预防潜在的故障&#xff0c;旋转设备状态监测及预测性维护变得至关重要。本文将介绍一些常见的旋转设备状态监测方法&#xff0c;并探讨如何利用这些方法来实施预测性维护&#xff0c;…...

类和对象——(7)this指针

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 人生就像骑单车&#xff0c;想保持平衡…...

回溯算法题型分类

题型一&#xff1a;排列、组合、子集相关问题 提示&#xff1a;这部分练习可以帮助我们熟悉「回溯算法」的一些概念和通用的解题思路。解题的步骤是&#xff1a;先画图&#xff0c;再编码。去思考可以剪枝的条件&#xff0c; 为什么有的时候用 used 数组&#xff0c;有的时候设…...

ApplicationRunner 类

优质博文&#xff1a;IT-BLOG-CN 在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件&#xff0c;数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为CommandLineRunner和ApplicationRunner。他们的执…...

QT中的 容器(container)-大全

一、介绍 Qt库提供了一套通用的基于模板的容器类&#xff0c;可以用这些类存储指定类型的项。比如&#xff0c;你需要一个大小可变的QString的数组&#xff0c;则使用QVector<QString>。 这些容器类比STL&#xff08;C标准模板库&#xff09;容器设计得更轻量、更安全并…...

Docker配置镜像加速器

Ubuntu 安装&#xff0f;升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端&#xff0c;参考文档docker-ce配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo t…...

飞致云1panel + 雷池WAF

可能有许多人都有这个需求&#xff1a;为自己的个人站点套上WAF&#xff0c;增加安全性&#xff0c;本文将介绍如何将1panel面板深度结合长亭雷池防火墙&#xff0c;实现为个人站点套上WAF并且自动续签ssl证书。 前提条件&#xff1a; 服务器IP已绑定域名 完整的1panel环境 …...

策略梯度简明教程

策略梯度方法 (PG&#xff1a;Policy Gradient) 是强化学习 (RL&#xff1a;Reinforcement Learning) 中常用的算法。 1、从库里的本能开始 PG的原理很简单&#xff1a;我们观察&#xff0c;然后行动。人类根据观察采取行动。 引用斯蒂芬库里的一句话&#xff1a; 你必须依靠…...

鸿蒙原生应用/元服务开发-利用picker选择器来多选相册图片

前言 在之前的时候&#xff0c;测试一个应用进入相册选择图片demo&#xff0c;利用了startAbilityForResult()方法&#xff0c;启动相对应的Ability来完成效果&#xff0c;但是这种方法有限制&#xff0c;一次只能获取一张图片&#xff0c;在完成某些功能测试的时候就很不方便。…...

java:封装统一的响应体code、data、msg、paging

背景 我们在写接口的时候一般不会直接返回给前端数据&#xff0c;而是会有响应体&#xff0c;比如 code、data、msg&#xff0c;这样就有一个统一的结构方便前端处理&#xff0c;那么今天就来封装一个统一的响应体 封装基本响应体 1、在 config 包里新建 ApiResponse.java …...

leetcode算法之栈

目录 1.删除字符串中的所有相邻重复项2.比较含退格的字符串3.基本计算器II4.字符串解码5.验证栈序列 1.删除字符串中的所有相邻重复项 删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {string ret;//使用数组模拟栈操作for(auto …...

电脑上mp4视频文件无缩略图怎么办

前言&#xff1a;有时候电脑重装后电脑上的mp4视频文件无缩略图&#xff0c;视频文件数量比较多的时候查找比较麻烦 以下方法亲测有效&#xff1a; 1、下载MediaPreview软件 2、软件链接地址&#xff1a;https://pan.baidu.com/s/1bzVJpmcHyGxXNjnzltojtQ?pwdpma0 提取码&…...

【Centos8】配置网络镜像源

文章目录 配置 yum 源配置网络 yum 源备份下载阿里 centos-base.repo 到 /etc/yum.repos.d/安装 EPEL 源测试安装 配置 yum 源 # 检查是否安装了 yum rpm -qa|grep yum# 查看本地已安装的所有软件包 yum list installed# 查看软件包安装位置 # 查看某个东西的软件包 rpm -qa|g…...

深入学习Synchronized各种使用方法

文章目录 前言一、synchronized关键字通用在下面四个地方&#xff1a;1.1synchronized修饰实例方法1.2synchronized修饰静态方法&#xff1a;1.3synchronized修饰实例方法的代码块1.4synchronized修饰静态方法的代码块2.读入数据 二.Sychronized关键特性2.1互斥2.2 刷新内存2.3…...

【idea】设置鼠标滚轮控制缩放大小

1、点击file 选择Setting 2、点击Editor 下面的 General 3、勾选 Mouse Control 下面的 Change font size with CtrlMouse Wheel in 4、点级apply 5、按 ctrl键 鼠标滚轮缩放字体的大小...

合并两个有序数组(leetcode_刷题1)

目录 题目&#xff1a;合并两个有序数组 题目分析方向1&#xff1a; 题目分析方向2&#xff1a; 题目&#xff1a;合并两个有序数组 题目要求&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums…...

麒麟linux将图片批量生成PDF的方法

笔者手里有一批国产linu系统&#xff0c;目前开始用在日常的工作生产环境中&#xff0c;我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux&#xff0c;统信UOS等&#xff0c;基本都是基于debian再开发的linux。 问题描述&#xff1a; wind…...

Linux——vim编辑文件时——.swp文件解决方案

test.cpp样例 当我们vim test.cpp进入编辑文件。 却忘记了保存退出 再次进入就会出现一下画面 当你摁下Enter键位 出现以下几个选项 O——是只读不写 E——是正常打开文件但不会载入磁盘内容 R——覆盖——是加载存储磁盘的文件(当我们忘记保存时&#xff0c;系统会自动帮我…...

【Maven】清理 maven 仓库

初始情况下&#xff0c;我们的本地仓库是没有任何jar包的&#xff0c;此时会从私服去下载&#xff08;如果没有配置&#xff0c;就直接从中央仓库去下载&#xff09;。 可能由于网络的原因&#xff0c;jar包下载不完全&#xff0c;这些不完整的jar包都是以lastUpdated结尾。此…...

APOLLO自动驾驶技术沙龙:未来已来,共创智能交通新时代

在这次Apollo会议上&#xff0c;我深刻地感受到了人工智能自动驾驶技术领域的最新进展和未来趋势。作为一名从事软件开发工作的人员&#xff0c;我深感荣幸能够参加这次盛会。 前言 本次活动是百度Apollo社区工程师齐聚首钢Park&#xff0c;带来现场实操与技术分享。主要围绕Ap…...

提供常州微信网站建设/nba交易最新消息

一、base64加密 前端用base64加密和解密的使用方法&#xff0c;只需要两个函数就可以了。一个是加密&#xff1a;window.btoa()&#xff0c;一个是解密&#xff1a;window.atob()&#xff0c;看例子&#xff1a; var str "hello"; var str64 window.btoa("h…...

黄聪开发wordpress主题/网站免费网站免费优化优化

git clone -b 分支名 仓库地址 仓库地址&#xff1a;例如http...转载于:https://www.cnblogs.com/butterflybay/p/11272469.html...

如何做付款网站/搜索引擎优化方案

文章目录1.使用EhCache实现缓存1.引入maven依赖1.1开启缓存2.使用redis实现缓存2.1引入maven依赖2.2在application配置redis连接参数2.3通过代码的方式获取spring框架applicationcontext对象2.4RedisCacheManager与RedisCacheRedisCacheRedisCacheMananger2.5shiroConfig开启缓…...

做网站选什么系统/域名注册流程

本篇教程通过PHPstudy安装Mysql数据库。什么是phpstudy&#xff1f;phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新ApachePHPMySQLphpMyAdminZendOptimizer&#xff0c;一次性安装&#xff0c;无须配置即可使用&#xff0c;是非常方便、好用的PHP调试环境。该程序不…...

谷歌做英文网站/女教师遭网课入侵直播录屏曝光i

课程内容是完整的&#xff0c;只是目录收集和编号的有点乱&#xff0c;大家下载后的都是正常的&#xff0c;不用担心(28)\\02-跟着江哥狂虐H5跨平台开发系列-认识HTML-第一次更新\\视频&#xff1b;目录中文件数:9个├─(28) 07-HTML作用(掌握)-李南江.mp4├─(29) 08-HTML发展…...

郑州网站制作多少钱/网络推销

先放两篇整理内置对象较全的博客&#xff1a; https://segmentfault.com/a/1190000011467723 https://www.cnblogs.com/liuluteresa/p/6413988.html 再来一篇面试题 https://blog.csdn.net/mino_miao/article/details/81167867 对下述定时器面试题中同步异步问题的详解&#xf…...