论文笔记-2019-Object Detection in 20 Years: A Survey

2023-11-17

Object Detection in 20 Years: A Survey

Zhengxia Zou, Zhenwei Shi, Member, IEEE, Yuhong Guo, and Jieping Ye, Senior Member, IEEE
论文获取:https://arxiv.org/abs/1905.05055v2


目录

Object Detection in 20 Years: A Survey

1 INTRODUCTION

2 OBJECT DETECTION IN 20 YEARS

2.1 A Road Map of Object Detection

2.1.1 Milestones: Traditional Detectors(里程碑:传统检测器)

2.1.2 Milestones: CNN based Two-stage Detectors

2.1.3 Milestones: CNN based One-stage Detectors

2.2 Object Detection Datasets and Metrics

2.2.1 Metrics

2.3 Technical Evolution in Object Detection

2.3.1 Early Time’s Dark Knowledge

2.3.2 Technical Evolution of Multi-Scale Detection

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 Spatial Computational Redundancy and Speed Up

3.1.2 Scale Computational Redundancy and Speed Up

3.2 Speed up of Classifiers

3.3 Cascaded Detection

3.4 Network Pruning and Quantification

3.4.1 Network Pruning

3.4.2 Network Quantification

3.4.3 Network Distillation

3.5 Lightweight Network Design

3.5.1 Factorizing Convolutions

3.5.2 Group Convolution

3.5.3 Depth-wise Separable Convolution

3.5.4 Bottle-neck Design

3.5.5 Neural Architecture Search

3.6 Numerical Acceleration

3.6.1 Speed Up with Integral Image

3.6.2 Speed Up in Frequency Domain

3.6.3 Vector Quantization

3.6.4 Reduced Rank Approximation

4 RECENT ADVANCES IN OBJECT DETECTION

4.1 Detection with Better Engines

• Object detectors with new engines

4.2 Detection with Better Features

4.2.1 Why Feature Fusion is Important?

4.2.2 Feature Fusion in Different Ways

4.2.3 Learning High Resolution Features with Large Receptive Fields

4.3 Beyond Sliding Window

4.4 Improvements of Localization

4.4.1 Bounding Box Refinement

4.4.2 Improving Loss Functions for Accurate Localization

4.5 Learning with Segmentation

4.5.1 Why Segmentation Improves Detection?

4.5.2 How Segmentation Improves Detection?

4.6 Robust Detection of Rotation and Scale Changes

4.6.1 Rotation Robust Detection

4.6.2 Scale Robust Detection

4.7 Training from Scratch

4.8 Adversarial Training

4.9 Weakly Supervised Object Detection

5 APPLICATIONS

5.1 Pedestrian Detection

5.1.1 Difficulties and Challenges

5.1.2 Literature Review

5.2 Face Detection

5.2.1 Difficulties and Challenges

5.2.2 Literature review

5.3 Text Detection

5.3.1 Difficulties and Challenges

5.3.2 Literature Review

5.4 Traffic Sign and Traffic Light Detection

5.4.1 Difficulties and Challenges

5.4.2 Literature Review

5.5 Remote Sensing Target Detection

5.5.1 Difficulties and Challenges

5.5.2 Literature Review

6 CONCLUSION AND FUTURE DIRECTIONS

 


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

 

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

 


1 INTRODUCTION

目标检测是数字图像中某一类 ( 如人、动物或汽车 ) 的重要计算机视觉任务。目标检测的目标是开发计算模型和技术,提供计算机视觉应用程序所需的最基本的信息之一:什么对象在哪里?

目标检测作为计算机视觉的基本问题之一,是许多其他计算机视觉任务的基础,如实例分割[1-4]、图像字幕[5-7]、对象跟踪[8]等。从应用程序的角度来看,目标检测可以被分为两个研究主题 “ general object detection ” 和 “ detection applications ” ,前者旨在探索在统一的框架下检测不同类型物体的方法,以模拟人类的视觉和认知;后者是指特定应用场景下的检测,如行人检测、人脸检测、文本检测等。近年来,随着深度学习技术[9]的快速发展,为目标检测注入了新的血液,取得了显著的突破,将其推向了一个前所未有的研究热点。目前,目标检测已广泛应用于自主驾驶、机器人视觉、视频监控等领域。图1显示了过去二十年中与 “ 目标检测 ” 相关的出版物数量的增长。

 

与其他相关综述的区别:

近年来发表了许多关于 general object detection 的综述[24-28]。本文与上述综述的主要区别总结如下:

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

 

目标检测的难点和挑战:

尽管人们总是问 “ 在目标检测中有哪些困难和挑战? ” ,事实上,这个问题并不容易回答,甚至可能被过度概括。由于不同的检测任务具有完全不同的目标和约束,它们的困难程度可能会有所不同。除了其他计算机视觉任务中的一些常见挑战,如不同视点下的物体、光照和类内变化,目标检测的挑战包括但不限于以下几个方面:目标旋转和尺度变化 ( 如小目标 ) ,精确的目标定位,密集和遮挡的目标检测,加速检测等。在第4和第5节中,我们将对这些主题进行更详细的分析。

本文的其余部分组织如下。第2节回顾了近20年来物体检测的发展历史。第3节将介绍一些加速目标检测的技术。第4节总结了近三年来一些最先进的检测方法。第5节将回顾一些重要的检测应用。第6节对本文进行了总结,并对进一步的研究方向进行了分析。

 


2 OBJECT DETECTION IN 20 YEARS

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

 

2.1 A Road Map of Object Detection

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

 

2.1.1 Milestones: Traditional Detectors(里程碑:传统检测器)

如果我们把今天的物体检测看作是深度学习力量下的一种技术美学,那么回到20年前,我们将见证“冷兵器时代的智慧”。早期的目标检测算法大多是基于手工特征构建的。由于当时缺乏有效的图像表示,人们别无选择,只能设计复杂的特征表示,以及各种加速技术来用尽有限的计算资源。

 

(1)Viola Jones Detectors

18年前,P. Viola和M. Jones在没有任何约束条件(如肤色分割)的情况下首次实现了人脸的实时检测[10,11]。在700MHz Pentium III CPU上,在同等的检测精度下,检测器的速度是其他算法的数十倍甚至数百倍。这种检测算法,后来被称为“维奥拉-琼斯”
(VJ)检测器”,在此以作者的名字命名,以纪念他们的重大贡献。

VJ检测器采用最直接的检测方法,即,滑动窗口:查看图像中所有可能的位置和比例,看看是否有窗口包含人脸。虽然这似乎是一个非常简单的过程,但它背后的计算远远超出了计算机当时的能力。VJ检测器结合了 “ 积分图像 ”、“ 特征选择 ” 和 “ 检测级联 ” 三种重要技术,大大提高了检测速度。

  1. 积分图像:积分图像是一种计算方法,以加快盒滤波或卷积过程。与当时的其他目标检测算法一样[29-31],在VJ检测器中使用Haar小波作为图像的特征表示。积分图像使得VJ检测器中每个窗口的计算复杂度与其窗口大小无关。
  2. 特征选择:作者没有使用一组手动选择的Haar基过滤器,而是使用Adaboost算法[32]从一组巨大的随机特征池 ( 大约180k维 ) 中选择一组对人脸检测最有帮助的小特征。
  3. 检测级联:在VJ检测器中引入了一个多级检测范例 ( 又称“检测级联”,detection cascades ),通过减少对背景窗口的计算,而增加对人脸目标的计算,从而减少了计算开销。

 

(2)HOG Detector

方向梯度直方图(HOG)特征描述符最初是由N. Dalal和B.Triggs在2005年提出的。HOG可以被认为是对当时的尺度不变特征变换(scale-invariant feature transform)[33,34]和形状上下文(shape contexts)[35]的重要改进。为了平衡特征不变性 ( 包括平移、尺度、光照等 ) 和非线性 ( 区分不同对象类别 ),将HOG描述符设计为在密集的均匀间隔单元网格上计算,并使用重叠局部对比度归一化 ( 在“块”上 ) 来提高精度。虽然HOG可以用来检测各种对象类,但它的主要动机是行人检测问题。若要检测不同大小的对象,则HOG检测器在保持检测窗口大小不变的情况下,多次对输入图像进行重新标度。多年来,HOG检测器一直是许多目标检测器[13,14,36]和各种计算机视觉应用的重要基础。

 

(3)Deformable Part-based Model (基于可变形部件的模型,DPM)

DPM作为voco -07、-08、-09检测挑战的优胜者,是传统目标检测方法的巅峰。DPM最初是由P. Felzenszwalb提出的[13],于2008年作为HOG检测器的扩展,之后R. Girshick进行了各种改进[14,15,37,38]。

DPM遵循“分而治之”的检测思想,训练可以简单地看作是学习一种正确的分解对象的方法,推理可以看作是对不同对象部件的检测的集合。例如,检测“汽车”的问题可以看作是检测它的窗口、车身和车轮。工作的这一部分,也就是“star model”由P.Felzenszwalb[13]等人完成。后来,R. Girshick进一步将 star model 扩展到 “ 混合模型 ”[14,15,37,38],以处理更显著变化下的现实世界中的物体。

一个典型的DPM检测器由一个根过滤器(root-filter)和一些零件滤波器(part-filters)组成。该方法不需要手动指定零件滤波器的配置 ( 如尺寸和位置 ),而是在DPM中开发了一种弱监督学习方法,所有零件滤波器的配置都可以作为潜在变量自动学习。R. Girshick将这个过程进一步表述为一个多实例学习的特殊案例[39],“硬负挖掘”、“边界框回归”、“上下文启动”等重要技术也被用于提高检测精度 ( 将在第2.3节中介绍 )。为了加快检测速度,Girshick开发了一种技术,将检测模型 “ 编译 ” 成一个更快的模型,实现了级联结构,在不牺牲任何精度的情况下实现了超过10倍的加速度[14,38]。

虽然今天的物体探测器在检测精度方面已经远远超过了DPM,但仍然受到DPM的许多有价值的见解的影响,如混合模型、硬负挖掘、边界盒回归等。2010年,P. Felzenszwalb和R. Girshick被授予PASCAL VOC的 “ lifetime achievement ”。

 

2.1.2 Milestones: CNN based Two-stage Detectors

随着手工特征的性能趋于饱和,目标检测在2010年之后达到了一个稳定的水平。R.Girshick说:“ ... progress has been slow during 2010-2012, with small gains obtained by building ensemble systems and employing minor variants of successful methods ”[38]。2012年,卷积神经网络[40]在世界范围内重生。由于深卷积网络能够学习图像的鲁棒性和高层次特征表示,一个自然的问题是我们能否将其应用到目标检测中?R. Girshick等人在2014年率先打破僵局,提出了具有CNN特征的区域(RCNN)用于目标检测[16,41]。从那时起,目标检测开始以前所未有的速度发展。

在深度学习时代,目标检测可以分为两类:“ two-stage detection ” 和 “ one-stage detection ”,前者将检测框定为一个 “ 从粗到细 ” 的过程,而后者将其定义为 “ 一步完成 ”。

 

(1)RCNN

RCNN背后的想法很简单:它首先通过选择性搜索[42]提取一组对象建议(对象候选框)。然后,每个提案都被重新调整成一个固定大小的图像,并输入到一个在 ImageNet 上训练得到的CNN模型 ( 例如,AlexNet[40] ) 来提取特征。最后,利用线性SVM分类器对每个区域内的目标进行预测,识别目标类别。RCNN在VOC07上产生了显著的性能提升,平均平均精度 ( mean Average Precision,mAP ) 从33.7%  ( DPM-v5[43] ) 大幅提高到58.5%。

虽然RCNN已经取得了很大的进步,但它的缺点是显而易见的:在大量重叠的提案上进行冗余的特征计算 ( 一张图片超过2000个框 ),导致检测速度极慢 ( GPU下每张图片14秒 )。同年晚些时候,SPPNet[17]被提出并克服了这个问题

 

(2)SPPNet

2014年,K. He等人提出了空间金字塔池化网络 ( Spatial Pyramid Pooling Networks,SPPNet ) [17]。以前的CNN模型需要固定大小的输入,例如,AlexNet[40]需要224x224图像。SPPNet的主要贡献是引入了空间金字塔池化(SPP)层,它使CNN能够生成固定长度的表示,而不需要重新缩放图像/感兴趣区域的大小。利用SPPNet进行目标检测时,只对整个图像进行一次特征映射计算,然后生成任意区域的定长表示,训练检测器,避免了卷积特征的重复计算。SPPNet的速度是R-CNN的20多倍,并且没有牺牲任何检测精度(VOC07 mAP=59.2%)。

SPPNet虽然有效地提高了检测速度,但仍然存在一些不足:第一,训练仍然是多阶段的,第二,SPPNet只对其全连接层进行微调,而忽略了之前的所有层。次年晚些时候,Fast RCNN[18]被提出并解决了这些问题

 

(3)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 的优点,但其检测速度仍然受到提案/建议检测的限制 ( 详见2.3.2节 )。然后,一个问题自然而然地出现了:“ 我们能用CNN模型生成对象建议吗? ” 稍后,Faster R-CNN [19]解决了这个问题

 

(4)Faster RCNN

2015年,S. Ren等人提出了 Faster RCNN 检测器[19,44],在 Fast RCNN 之后不久。Faster RCNN 是第一个端到端的,也是第一个接近实时的深度学习检测器 ( COCO mAP@.5=42.7%, COCO mAP@[.5,.95]=21.9%, VOC07 mAP=73.2%, VOC12 mAP=70.4%, 17fps with ZFNet[45] )。Faster RCNN 的主要贡献是引入了区域建议网络 ( RPN ),使几乎 cost-free 的区域建议成为可能。从 RCNN 到 Faster RCNN ,一个目标检测系统中的大部分独立块,如提案检测、特征提取、边界框回归等,都已经逐渐集成到一个统一的端到端学习框架中。

虽然 Faster RCNN 突破了 Fast RCNN 的速度瓶颈,但是在后续的检测阶段仍然存在计算冗余。后来提出了多种改进方案,包括 RFCN [46]和 Light head RCNN [47]。(详见第3节。)

 

(5)Feature Pyramid Networks(FPN)

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

 

2.1.3 Milestones: CNN based One-stage Detectors

(1)You Only Look Once (YOLO)

YOLO由R. Joseph等人于2015年提出。它是深度学习时代[20]的第一个单级检测器。YOLO非常快:YOLO的一个快速版本运行速度为155fps, VOC07 mAP=52.7%,而它的增强版本运行速度为45fps, VOC07 mAP=63.4%, VOC12 mAP=57.9%。YOLO是 “ You Only Look Once ” 的缩写。从它的名字可以看出,作者完全抛弃了之前的 “ 提案检测+验证 ” 的检测范式。相反,它遵循一个完全不同的哲学:将单个神经网络应用于整个图像。该网络将图像分割成多个区域,同时预测每个区域的边界框和概率。后来R. Joseph在 YOLO 的基础上进行了一系列改进,提出了其 v2 和 v3 版本[48,49],在保持很高检测速度的同时进一步提高了检测精度。

尽管与两级探测器相比,它的探测速度有了很大的提高,但是YOLO的定位精度有所下降,特别是对于一些小目标。YOLO的后续版本[48,49]和后者提出的 SSD [21]更关注这个问题

 

(2)Single Shot MultiBox Detector (SSD)

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与以往任何检测器的主要区别在于,前者在网络的不同层检测不同尺度的对象,而后者仅在其顶层运行检测。

 

(3)RetinaNet

单级检测器速度快、结构简单,但多年来一直落后于两级检测器的精度。T.-Y.Lin等人发现了背后的原因,并在2017年[23]提出了RetinaNet。他们声称,在密集探测器训练过程中所遇到的极端的前景-背景阶层不平衡(the extreme foreground-background class imbalance)是主要原因。为此,在 RetinaNet 中引入了一个新的损失函数 “ 焦损失(focal loss)”,通过对标准交叉熵损失的重构,使检测器在训练过程中更加关注难分类的样本。焦损耗使得单级检测器在保持很高的检测速度的同时,可以达到与两级检测器相当的精度。( COCO mAP@.5=59.1%, mAP@[.5, .95]=39.1% )。

 

2.2 Object Detection Datasets and Metrics

建立具有更少的偏置的更大的数据集,是开发先进的计算机视觉算法的关键。在目标检测方面,在过去10年中,已经发布了许多著名的数据集和基准测试,包括 PASCAL VOC 挑战[50,51]的数据集(例如,VOC2007, VOC2012)、ImageNet 大尺度视觉识别挑战[52](例如,ILSVRC2014)、MS-COCO检测挑战[53]等。表1给出了这些数据集的统计数据。图4显示了这些数据集的一些图像示例。图3显示了从2008年到2018年对VOC07、VOC12和MS-COCO数据集检测精度的提高。

 

(1)Pascal VOC

PASCAL可视化对象类 ( Visual Object Classes,VOC ) 挑战 ( 2005 - 2012 ) [50,51]是早期计算机视觉界最重要的比赛之一。PASCAL VOC中包含多种任务,包括图像分类、目标检测、语义分割和动作检测。两种版本的Pascal-VOC主要用于对象检测:VOC07和VOC12,前者由 5k tr. images + 12k annotated objects 组成,后者由 11k tr. images + 27k annotated objects 组成。这两个数据集中注释了生活中常见的20类对象( Person: person; Animal: bird, cat, cow, dog, horse, sheep; Vehicle: aeroplane, bicycle, boat, bus, car, motor-bike, train; Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor )。近年来,随着ILSVRC、MS-COCO 等大型数据集的发布,VOC逐渐淡出人们的视野,成为大多数新型检测器的试验台。

 

(2)ILSVRC

ImageNet大规模视觉识别挑战 ( Large Scale Visual Recognition Challenge,ILSVRC ) [52]推动了通用目标检测技术的发展。ILSVRC 从2010年到2017年每年举办一次。它包含一个使用 ImageNet 图像[57]的检测挑战。ILSVRC 检测数据集包含200类视觉对象。它的图像/对象实例的数量比VOC大两个数量级。例如,ILSVRC-14 包含 517k 图像和 534k 带注释的对象。

 

(3)MS-COCO

MS-COCO [53]是目前最具挑战性的目标检测数据集。自2015年以来一直保持一年一度的基于 MS-COCO 数据集的比赛。它的对象类别比 ILSVRC 少,但是对象实例多。例如,MS-COCO-17 包含来自 80 个类别的 164k 图像和 897k 带注释的对象。与 VOC 和 ILSVRC 相比,MS-COCO 最大的进步是除了边框标注外,每个对象都进一步使用实例分割进行标记,以帮助精确定位。此外,MS-COCO 包含更多的小对象 ( 其面积小于图像的1% ) 和比 VOC 和 ILSVRC 更密集的定位对象。所有这些特性使得 MSCOCO 中的对象分布更接近真实世界。就像当时的 ImageNet 一样,MS-COCO 已经成为对象检测社区的实际标准。

 

(4)Open Images

继 MS-COCO 之后,开放图像检测 ( OID ) 技术在2018年迎来了前所未有的挑战。在开放图像中有两个任务:1) 标准目标检测,2) 视觉关系检测,检测特定关系中成对的目标。对于目标检测任务,数据集由 1,910k 张图像和 15,440k 个带注释的边界框组成,这些边界框位于 600 个对象类别上。

 

(5)Datasets of Other Detection Tasks

在过去的20年里,除了一般的目标检测外,在行人检测、人脸检测、文本检测、交通标志/灯光检测、遥感目标检测等特定领域的检测应用也十分繁荣。表2-6列出了这些检测任务的一些流行数据集。有关这些任务的检测方法的详细介绍可在第5节中找到。

 

2.2.1 Metrics

我们如何评估目标探测器的有效性? 这个问题甚至可能在不同的时间有不同的答案。

在早期的检测社区中,对于检测性能的评价标准并没有得到广泛的认可。例如,在行人检测[12]的早期研究中,“每个窗口的漏报率与误报率 ( FPPW ) ” 通常用作度量。然而,逐窗测量 ( FPPW ) 可能存在缺陷,在某些情况下无法预测[59]的完整图像特性。2009年,加州理工学院 ( Caltech ) 建立了行人检测基准[59,60],从那时起,评估指标从每窗口 ( per-window,FPPW ) 改为每图像的伪阳性 ( false positive per-image,FPPI )。

近年来,对目标检测最常用的评估方法是 “ 平均精度 ( AP ) ”,该方法最早是在 VOC2007 中引入的。AP 定义为不同召回情况下的平均检测精度,通常以类别特定的方式进行评估。为了比较所有对象类别的性能,通常使用所有对象类别的平均 AP ( mAP ) 作为性能的最终度量。为了测量目标定位精度,使用 Union 上的交集 ( Intersection over Union,IoU ) 来检查预测框和地面真实框之间的 IoU 是否大于预定义的阈值,比如 0.5。如果是,则将该对象标识为 “ 成功检测到 ”,否则将标识为 “ 未检测到 ”。因此,基于 mAP 的 0.5 -IoU 多年来已成为用于目标检测问题的实际度量。

2014年以后,由于 MS-COCO 数据集的普及,研究人员开始更加关注边界框位置的准确性。MS-COCO AP没有使用固定的 IoU 阈值,而是在多个 IoU 阈值上取平均值,阈值介于 0.5 ( 粗定位 ) 和 0.95 ( 完美定位 ) 之间。这种度量的变化鼓励了更精确的对象定位,并且对于一些实际应用可能非常重要 ( 例如,假设有一个机器人手臂试图抓住扳手 )。

近年来,对开放图像数据集的评价有了进一步的发展,如考虑了组框(group-of boxes)和非穷举的图像级类别层次结构。一些研究者也提出了一些替代指标,如 “ 定位回忆精度 ” [94]。尽管最近发生了一些变化,基于 VOC/COCO 的 mAP 仍然是最常用的目标检测评估指标。

 

2.3 Technical Evolution in Object Detection

在本节中,我们将介绍检测系统的一些重要构件及其在过去20年中的技术发展。

 

2.3.1 Early Time’s Dark Knowledge

早期的目标检测 ( 2000年以前 ) 没有遵循滑动窗口检测等统一的检测理念。当时的检测器通常基于如下低层和中层的视觉设计。

 

(1)Components, shapes and edges(组件、形状和边缘)

“ 分量识别(Recognition-by-components)” 作为一种重要的认知理论[98],长期以来一直是图像识别和目标检测的核心思想[13,99,100]。一些早期的研究人员将目标检测定义为测量对象组件、形状和轮廓之间的相似性,包括距离变换[101]、形状上下文
[35]、小边特征[102]等。尽管最初的结果很有希望,但在更复杂的检测问题上,事情进展得并不顺利。因此,基于机器学习的检测方法开始蓬勃发展。

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

建立对象的统计模型,比如特征面(Eigenfaces)[95,106]如图5 (a)所示,是目标检测历史上第一波基于学习的方法。1991年,M.Turk等人利用特征脸分解技术在实验室环境中实现了实时人脸检测[95]。与当时基于规则或模板的方法相比[107,108],统计模型通过从数据中学习特定于任务的知识,更好地提供了对象外观的整体描述。

自2000年以来,小波特征变换开始主导视觉识别和目标检测。这组方法的本质是通过将图像从像素点转换为一组小波系数来学习。其中,Haar小波由于其计算效率高,被广泛应用于一般目标检测[29]、人脸检测[10,11,109],行人检测[30,31]等目标检测任务中。图5 (d)为VJ检测器学习到的一组用于人脸的Haar小波基[10, 11]。

 

(2)Early time’s CNN for object detection

使用CNN检测物体的历史可以追溯到20世纪90年代[96],当时Y. LeCun等人做出了巨大的贡献。由于计算资源的限制,当时的CNN模型比现在的模型要小得多,也要浅得多。尽管如此,在早期基于CNN的检测模型中,计算效率仍然被认为是难以破解的难题之一。Y. LeCun等人进行了一系列改进,如 “ 共享权值复制神经网络(shared-weight replicated neural network) ” [96]和 “ 空间位移网络(space displacement network) ” [97]通过扩展卷积网络的每一层,覆盖整个输入图像,减少计算量,如图5(b) - (c)所示。这样,只需一次网络的正向传播,就可以提取出整个图像任意位置的特征。这可以看作是当今全卷积网络 ( FCN ) 的原型[110,111],FCN 几乎是在20年后提出的。CNN也被应用于其他任务,如人脸检测[112,113]和手势实时跟踪[114](hand tracking of its time)。

 

2.3.2 Technical Evolution of Multi-Scale Detection

多尺度检测(Multi-scale detection)对象的 “ 不同尺寸 ” 和 “ 不同纵横比 ” 是目标检测的主要技术难题之一。近20年来,多尺度检测经历了多个历史时期:“ 特征金字塔和滑动窗口(2014年前) ”,“ 基于对象建议的检测(2010-2015年) ”,“ 深度回归(2013-2016) ”、“ 多参考检测( multi-reference detection,2015年后 ) ”、“ 多分辨率检测( multi-resolution detection,2016年后 ) ”,如图6所示。

 

(1)Feature pyramids + sliding windows (before 2014)

随着VJ检测器后计算能力的提高,研究者们开始更加关注一种直观的检测方法,即构建 “ 特征金字塔+滑动窗口 ”。从2004年到2014年,基于这种检测范式构建了许多里程碑式的检测器,包括HOG检测器、DPM,甚至深度学习时代的Overfeat检测器[103] ( ILSVRC-13定位任务获奖者 )。

早期的检测模型,如VJ检测器和HOG检测器,都是专门针对具有 “ 固定长宽比 ” ( 如人脸和直立的行人 )的对象,只需构建特征金字塔,并在其上滑动固定大小检测窗口。当时没有考虑检测 “ 各种纵横比 ”。为了检测具有更复杂外观 ( 如 PASCAL VOC 中的外观 ) 的对象,R. Girshick等人开始在特征金字塔外寻找更好的解决方案。“ 混合模型 ”[15]是当时最好的解决方案之一,它通过训练多个模型来检测不同纵横比的物体。除此之外,基于范例的检测[36,115]通过为训练集的每个对象实例 ( 范例 ) 训练单独的模型,提供了另一种解决方案。

随着现代数据集中的对象 ( 例如 MS-COCO ) 变得更加多样化,混合模型或基于范例的方法不可避免地会导致更加复杂的检测模型。于是一个问题就自然而然地产生了:是否存在一种统一的多尺度方法来检测不同长宽比的对象? “ 对象建议(object proposals) ” 的提出已经回答了这个问题。

 

(2)Detection with object proposals (2010-2015)

对象建议(object proposals)引用一组可能包含任何对象的与类无关的候选框。它于2010年首次应用于目标检测[116]。使用对象建议进行检测有助于避免对图像进行彻底的滑动窗口搜索。

目标/对象建议检测算法应满足以下三个要求:1) 高召回率,2) 高定位准确率,3) 在前两个要求的基础上,提高精度,减少处理时间。现代的建议检测方法可以分为三类:1) 分割分组方法[42, 117-119], 2) 窗口评分方法[116,120-122],3) 基于神经网络的方法[123-128]。我们建议读者阅读以下论文,以全面回顾这些方法[129,130]。

早期的建议检测方法遵循自底向上的检测理念[116,120],深受视觉显著性检测的影响。后来,研究人员开始转向低水平的视觉 ( 如边缘检测 ) 和更精细的手工技能,以改进候选框的定位[42,117 - 11,122,131]。2014年以后,随着深度CNN在视觉识别领域的普及,基于自上而下学习的方法在这个问题上开始显示出更多的优势[19,121,123,124]。从那时起,对象建议检测就从自下而上的视觉演化为 “ 对一组特定对象类的过度拟合 ”,检测器与建议生成器之间的区别也变得模糊[132]。

随着 “ object proposal ” 对滑动窗口检测的革命性变革,并迅速主导基于深度学习的检测器,2014-2015年,许多研究者开始提出以下问题:object proposal 在检测中的主要作用是什么? 是为了提高准确度,还是仅仅为了加快检测速度? 为了回答这个问题,一些研究人员试图削弱 proposal 的作用[133]或单纯对CNN特征进行滑动窗口检测[134-138],均未得到满意的结果。在单级检测器和 “ 深度回归 ” 技术兴起之后,建议检测很快就淡出了人们的视线。

 

(3)Deep regression (2013-2016)

近年来,随着GPU计算能力的提高,人们处理多尺度检测的方式变得越来越直接和暴力。使用深度回归来解决多尺度问题的思想非常简单,即,基于深度学习特征直接预测边界框的坐标[20,104]。这种方法的优点是简单易行,缺点是定位不够准确,特别是对于一些小对象。“ 多参考检测 ” 解决了这一问题。

 

(4)Multi-reference/-resolution detection (after 2015)

多参考检测是目前最流行的多尺度目标检测框架[19,21,44,48]。它的主要思想是在图像的不同位置预先定义一组不同大小和宽高比的参考框(即锚框),然后根据这些参考框预测检测框

每个预定义锚框的典型损失包括两部分:1) 类别识别的交叉熵损失;2) 目标定位的L1/L2回归损失。损失函数的一般形式可以写成如下形式:

其中是 predicted 的和 ground-truth 的边界框的位置,是它们的类别概率。是锚框和它的ground-truth 之间的 IOU。是一个 IOU 阈值,比如0.5。如果锚框没有覆盖任何对象,其定位损失不计入最终损失。

近两年来另一种流行的技术是多分辨率检测[21,22,55,105],即在网络的不同层检测不同尺度的目标。由于CNN在正向传播过程中自然形成了一个特征金字塔,更容易在较深的层中检测到较大的物体,在较浅的层中检测到较小的物体。多参考和多分辨率检测已成为当前最先进的目标检测系统的两个基本组成部分。

 

2.3.3 Technical Evolution of Bounding Box Regression

边界框(BB)回归是一种重要的目标检测技术。它的目的是在初始建议(initial proposal)或锚框的基础上细化预测边界框的位置。在过去的20年里 BB 回归经历了三个历史时期:“ (1)没有 BB 回归(2008年以前) ”,“ (2)从 BB 到 BB (2008-) ” 以及 “ (3)从feature到 BB (2013年后) ”。图7为边界框回归的演化过程。

 

(1)Without BB regression (before 2008)

早期的检测方法,如 VJ 检测器和 HOG 检测器,大多不使用 BB 回归,通常直接将滑动窗口作为检测结果。为了获得精确的目标位置,研究人员别无选择,只能建造非常密集的金字塔,并在每个位置上密集地滑动探测器。

 

(2)From BB to BB (2008-2013)

第一次将BB回归引入目标检测系统是在 DPM [15]中。那时的 BB 回归通常作为一个后处理块,因此它是可选的。由于 PASCAL VOC 的目标是预测每个对象的单个边界框,因此 DPM 生成最终检测的最简单方法应该是直接使用其根过滤器位置。后来,R. Girshick 等人提出了一种更复杂的方法来预测一个基于对象假设完整配置的边界框,并将这个过程表示为一个线性最小二乘回归问题[15]。该方法对 PASCAL 标准下的检测有明显的改进。

 

(3)From features to BB (after 2013)

2015年引入 Faster RCNN 后,BB 回归不再作为单独的后处理块,而是与检测器集成,以端到端的方式进行训练。同时,BB 回归已经演化为直接基于 CNN 特征预测 BB。为了得到更强的鲁棒性预测,通常使用 smooth-L1 函数(公式2)[19]或平方根函数(公式3)[20]作为回归损失,它们对异常值的鲁棒性比 DPM 中使用的最小二乘损失更强。一些研究人员还选择将坐标标准化,以获得更稳健的结果[18,19,21,23]。

 

2.3.4 Technical Evolution of Context Priming

视觉对象通常嵌入到与周围环境一起的典型上下文中。我们的大脑利用物体和环境之间的联系来促进视觉感知和认知[160]。长期以来,上下文启动(Context priming)一直被用来改进检测。在其进化过程中,常用的方法有三种:1) 局部上下文检测,2) 全局上下文检测,3) 上下文交互,如图8所示。

 

(1)Detection with local context

局部上下文是指要检测的对象周围区域的视觉信息。长期以来,人们一直认为局部上下文有助于改进对象检测。在21世纪初, Sinha 和 Torralba [139]发现,包含面部边界轮廓等局部上下文区域可以显著提高人脸检测性能。Dalal 和 Triggs 还发现,加入少量的背景信息可以提高行人检测[12]的准确性。最近的基于深度学习的检测器也可以通过简单地扩大网络的接受域或对象建议的大小来根据局部上下文进行改进[140–145, 161]。

 

(2)Detection with global context

全局上下文利用场景配置作为对象检测的额外信息源。对于早期的对象检测器,集成全局上下文的一种常见方法是集成组成场景的元素的统计摘要,如 Gist [160]。对于现代的基于深度学习的检测器,有两种方法来集成全局上下文。第一种方法是利用大的接受域 ( 甚至大于输入图像 ) [20]或 CNN feature 的全局池化操作[147]。第二种方法是将全局上下文看作一种序列信息,并使用递归神经网络学习它[148,149]。

 

(3)Context interactive

上下文交互是指通过视觉元素的交互 ( 如约束和依赖关系 ) 来传达的信息。对于大多数对象检测器,是在不利用对象实例之间的关系的情况下分别检测和识别对象实例。最近的一些研究表明,考虑上下文的交互作用可以改进现代的目标检测器。最近的一些改进可以分为两类,第一类是探索单个对象之间的关系[15,146,150,152,162],第二类是探索建模对象和场景之间的依赖关系[151,151,153]。

 

2.3.5 Technical Evolution of Non-Maximum Suppression

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

 

(1)Greedy selection

贪心选择是一种老式但最流行的目标检测方法。该过程背后的思想简单直观:对于一组重叠检测,选择检测分值最大的边界框,并根据预定义的重叠阈值 ( 如0.5 ) 删除相邻框。上述处理以贪婪的方式迭代执行

虽然贪心选择已成为 NMS 的实际方法,但仍有一定的改进空间,如图11所示。首先,得分最高的框可能不是最合适的。其次,它可能会抑制附近的物体。最后,它不抑制假阳性。近年来,尽管最近进行了一些手工修改以改进其性能[158,159,163] ( 详情参见第4.4节 ) 据我们所知,贪心选择仍然是当今目标检测的最强基线。

 

(2)BB aggregation

BB 聚合是另一组用于 NMS 的技术[10, 103, 156, 157],将多个重叠的边界框组合或聚类成一个最终检测。这种方法的优点是充分考虑了对象关系及其空间布局。有一些著名的检测器使用这种方法,如 VJ 检测器[10]和 Overfeat [103]。

 

(3)Learning to NMS

最近一组受到广泛关注的 NMS 改进是学习 NMS [136,146,154,155]。这类方法的主要思想是将NMS看作一个过滤器,对所有原始检测进行重新评分,并以端到端方式将NMS训练为网络的一部分。与传统的手工NMS方法相比,这些方法在改善遮挡和密集目标检测方面取得了良好的效果。

 

2.3.6 Technical Evolution of Hard Negative Mining

目标检测器的训练本质上是一个不平衡的数据学习问题。在基于滑动窗口的检测器的情况下,每个对象的背景和对象之间的不平衡可能达到极端的个背景窗口。现代检测数据集要求预测对象的长径比,进一步将不平衡比提高到[129]。在这种情况下,使用所有的背景数据进行训练是有害的,因为大量易产生的负样本将压倒学习过程。困难负样本挖掘 ( HNM ) 是针对训练过程中数据不平衡的问题。HNM 在目标检测中的技术演进如图10所示。

 

(1)Bootstrap

目标检测中的 Bootstrap 是指一组训练技术,训练从一小部分背景样本开始,然后在训练过程中迭代地添加新的误分类背景。在早期的对象检测器中,最初引入 bootstrap 的目的是减少对数百万个背景样本的训练计算[10,29,164]。后来成为 DPM 和 HOG 检测器中解决数据不平衡问题的标准训练技术[12,13]。

 

(2)HNM in deep learning based detectors

在深度学习时代后期,由于计算能力的提高,在 2014-2016 年的目标检测中,bootstrap 很快被丢弃[16-20]。为了缓解训练期间的数据目标平衡问题,像 Faster RCNN 和 YOLO 这样的检测器只是在正窗和负窗之间平衡权重。然而,研究人员后来发现,权重平衡不能完全解决不平衡的数据问题[23]。为此,2016年以后,bootstrap 被重新引入到基于深度学习的检测器中[21,165 - 168]。例如,在 SSD [21]和 OHEM 中[166],只有很小一部分样本的梯度 ( 损失值最大的 ) 将反向传播。在 RefineDet [55]中,设计了一个 “ 锚框细化模块(anchor refinement module) ” 来过滤容易出现的负样本。另一种改进是设计新的损失函数[23,169,170],通过重新定义标准的交叉熵损失,使其更关注于困难的、分类错误的样本[23]。

 


3 SPEED-UP OF DETECTION

加速目标检测一直是一个重要而又具有挑战性的问题。在过去的20年里,目标检测领域已经发展了复杂的加速技术。这些技术大致可以分为 “ 检测管道提速 ”、“ 检测引擎提速 ” 和 “ 数值计算提速 ” 三个层次,如图12所示。

 

3.1 Feature Map Shared Computation

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

 

3.1.1 Spatial Computational Redundancy and Speed Up

减少空间计算冗余最常用的方法是特征图共享计算,即,在滑动窗口前只计算一次整个图像的特征图。传统检测器的 “ 图像金字塔 ” 可以看作是一个 “ 特征金字塔 ”。例如,为了加快 HOG 行人检测器的速度,研究者通常会将整个输入图像的 “ HOG map ” 进行累加,如图13所示。然而,这种方法的缺点也很明显,即, feature map 分辨率 ( 此 feature map 上滑动窗口的最小步长 ) 将受到单元格大小的限制。如果一个小对象位于两个单元格之间,那么所有检测窗口都可能忽略它。解决这个问题的一个方法是构建一个完整的特征金字塔,这将在第3.6节中介绍。

特征图共享计算的思想在基于卷积的检测器中也得到了广泛的应用。一些相关的著作可以追溯到20世纪90年代[96,97]。近年来大多数基于CNN的检测器,例如,SPPNet [17]、Fast-RCNN [18]和 Faster-RCNN [19]都采用了类似的思想,实现了数十倍甚至数百倍的加速度。

 

3.1.2 Scale Computational Redundancy and Speed Up

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

 

3.2 Speed up of Classifiers

传统的基于滑动窗口的检测器,如 HOG 检测器和 DPM,由于计算复杂度较低,更喜欢使用线性分类器而不是非线性分类器。核 SVM 等非线性分类器的检测精度较高,但同时也带来较高的计算开销。作为一种标准的非参数方法,传统的核函数法没有固定的计算复杂度。当我们有一个非常大的训练集时,检测速度会变得非常慢。

在目标检测中,有很多方法可以加快核分类器的速度,其中最常用的是 “ 模型近似 ” [30,174]。由于经典 核SVM 的决策边界只能由一小组训练样本 ( 支持向量 ) 确定,因此推理阶段的计算复杂度与支持向量的个数成正比:约简集向量[30]是 核SVM 的一种近似方法,其目的是用少量的合成向量来获得一个等价的决策边界。另一种提高 核SVM 在目标检测中的速度的方法是将其决策边界近似为分段线性形式,从而获得一个恒定的推理时间[174]。核方法也可以通过稀疏编码方法来加速[175]。

 

3.3 Cascaded Detection

级联检测是一种常用的目标检测技术[10,176]。它需要一个粗到精的检测理念:使用简单的计算过滤掉大部分简单的背景窗口,然后用复杂的窗口处理那些更困难的窗口。VJ检测器是级联检测的代表。在此之后,许多后续的经典对象检测器,如HOG检测器和DPM,都使用了这种技术来加速[14, 38, 54, 177, 178]。

近年来,级联检测也被应用到基于深度学习的检测器中,特别是针对 “ 大场景中的小对象 ” 的检测任务,如人脸检测[179,180]、行人检测[165,177,181]等。除了算法加速外,级联检测还被应用于解决其他问题,如提高对困难样本的检测[182-184],整合上下文信息[143,185],提高定位精度[104,125]。

 

3.4 Network Pruning and Quantification

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

 

3.4.1 Network Pruning

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

 

3.4.2 Network Quantification

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

 

3.4.3 Network Distillation

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

 

3.5 Lightweight Network Design

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

 

3.5.1 Factorizing Convolutions

分解卷积是构建轻量级CNN模型最简单、最直接的方法。有两类分解方法。

第一类方法是将一个大的卷积滤波器分解成一组空间维数较小的卷积滤波器[47, 147, 198],如图14 (b)所示。例如,可以将一个 7x7 过滤器分解为三个 3x3 过滤器,它们共享相同的接收域,但是后者效率更高。另一个例子是将 k×k 滤波器分解为 k×1 滤波器和 1×k 滤波器[198,199],这对于非常大的滤波器来说可能更有效,比如 15x15 [199]。该思想最近被用于目标检测[200]。

第二类方法是将一大组卷积分解为信道维数较小的两组[201,202],如图14 (c)所示。例如,可以用  个滤波器近似卷积层,用  个滤波器 + 一个非线性激活 + 另外  个滤波器 (  <  )近似有  个通道的特征图。在这种情况下,原始层的复杂度  可以降低到 

 

3.5.2 Group Convolution

群卷积的目的是通过将特征信道划分为多个不同的组,然后分别对每个组进行卷积,从而减少卷积层中参数的数量[189,203],如图14 (d)所示。如果我们将特征信道平均分成 m 组,不改变其他构型,理论上卷积的计算复杂度将会降低到原来的 1/m 。

 

3.5.3 Depth-wise Separable Convolution

图14 (e)所示的深度可分离卷积是近年来流行的一种构建轻量级卷积网络的方法[204]。当组数等于信道数时,它可以看作是群卷积的一个特例。

假设我们有一个带有d个滤波器的卷积层,和一个 c 通道的特征图。每个滤波器的大小为 k×k 。对于深度可分卷积,每个 k×k×c 滤波器首先被分割成 c 个片,每个片的大小为 k×k×1 ,然后在每个通道中对滤波器的每个片分别进行卷积。最后,一些 1x1 滤波器用于进行维度转换,以便最终的输出应该具有 d 通道。利用深度可分卷积,将计算复杂度从降低到。该思想最近被应用于目标检测和细粒度分类(fine-grain classification)[205-207]。

 

3.5.4 Bottle-neck Design

与前一层相比,神经网络中的瓶颈层只包含很少的节点。它可以用来学习降维输入的高效数据编码,这在深度自编码中得到了广泛的应用[208]。近年来,瓶颈设计被广泛应用于轻量化网络的设计[47,209 - 212]。在这些方法中,一种常见的方法是压缩检测器的输入层,以减少从检测管道开始的计算量[209-211]。另一种方法是压缩检测引擎的输出,使 feature map 变薄,使其在后续检测阶段更加高效[47,212]。

 

3.5.5 Neural Architecture Search

近年来,人们对利用神经结构搜索 ( NAS ) 自动设计网络体系结构而不是依赖于专家经验和知识产生了浓厚的兴趣。NAS 已应用于大规模图像分类[213,214],目标检测[215]和图像分割[216]任务。NAS 最近在设计轻量级网络方面也显示出了很好的结果,其中在搜索过程中考虑了预测精度和计算复杂度的限制[217,218]。

 

3.6 Numerical Acceleration

在这一节中,我们主要介绍了四种重要的数值加速方法,它们在目标检测中经常使用:1) 积分图像加速,2) 频域加速,3) 矢量量化,4) 降阶近似

 

3.6.1 Speed Up with Integral Image

积分图像是图像处理中的一种重要方法。它有助于快速计算图像子区域的和。积分图像的本质是信号处理中卷积的积分微分可分性

其中,如果是一个稀疏信号,那么卷积可以被方程右边的部分加速。虽然 VJ 检测器[10]以积分图像加速著称,但在它诞生之前,积分图像已经被用来加速 CNN 模型[219],并达到了10倍以上的加速度。

除了上面的例子,积分图像还可以用来加速目标检测中更一般的特征,例如颜色直方图,梯度直方图[171, 177, 220, 221]等。一个典型的例子就是通过计算积分 HOG 映射加速 HOG [177,220]。积分 HOG 映射不是在传统的积分图像中积累像素值,而是在图像中积累梯度方向,如图15所示。由于 cell 的直方图可以看作是某一区域梯度向量的和,利用积分图像可以计算任意位置和大小的矩形区域的直方图,计算开销是恒定的。积分 HOG 映射已被应用于行人检测中,并在不损失任何精度的前提下实现了数十倍的加速度[177]。

2009年晚些时候,P. Dollar’等人提出了一种新的图像特征,称为积分通道特征 ( ICF ),可以认为是积分图像特征的一种更为普遍的情况,并已成功应用于行人检测[171]。ICF 在其所处的时间内,以接近实时的检测速度实现了最先进的检测精度。

 

3.6.2 Speed Up in Frequency Domain

卷积是目标检测中的一种重要的数值运算形式。由于线性检测器的检测可以看作是特征图与检测器权值之间的窗口内积,因此该过程可以通过卷积来实现。

卷积可以在很多方面得到加速,傅里叶变换是一个非常实用的选择尤其是对于加速那些大的滤波器。频域加速卷积的理论基础是信号处理中的卷积定理,即在合适的条件下,两个信号卷积的傅里叶变换是其傅里叶空间的点乘

其中,是傅里叶变换,是傅里叶反变换,是输入图像和滤波器,是卷积运算,是点乘运算。利用快速傅里叶变换 ( Fast Fourier Transform,FFT )和快速傅里叶反变换 ( Inverse Fast Fourier Transform,IFFT )可以加速上述计算。FFT 和 IFFT 现在经常被用来加速 CNN 模型[222-225]和一些经典的线性目标检测器[226],这使得检测速度提高了一个数量级。图16为在频域中加速线性目标检测器的标准管道 ( 如 HOG 和 DPM )。

 

3.6.3 Vector Quantization

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

 

3.6.4 Reduced Rank Approximation

在深度网络中,全连接层的计算本质上是两个矩阵的乘法。当参数矩阵较大时,检测器的计算量较大。例如,在 Fast RCNN 检测器[18]中,将近一半的前向传递时间用于计算全连接层。降秩近似是一种加速矩阵乘法的方法。它的目的是对矩阵进行低秩分解

其中,是由的第一个左奇异向量构成的矩阵,是一个包含个奇异值的对角矩阵,是由的第一个右奇异向量构成的矩阵。上述过程也称为截断 SVD(Truncated SVD),将参数从减少到,当远小于时效果显著。截断 SVD 被用来加速 Fast RCNN 检测器[18],达到 x2 的速度。

 


4 RECENT ADVANCES IN OBJECT DETECTION

在这一节中,我们将回顾近三年来最先进的对象检测方法。

 

4.1 Detection with Better Engines

近年来,deep CNN 在许多计算机视觉任务中发挥了核心作用。由于检测器的精度在很大程度上取决于其特征提取网络,因此本文将主干网络 ( 如 ResNet 和 VGG ) 称为检测器的 “ 引擎 ”。图17为三种知名检测系统选择不同引擎[27]时的检测精度:Faster RCNN [19], R-FCN [46]和 SSD [21]。

在本节中,我们将介绍深度学习时代的一些重要的检测引擎。关于这个话题的更多细节,我们请读者参考下面的调查[229]。

 

(1)AlexNet

AlexNet [40]是一个八层的深度网络,是第一个开启计算机视觉深度学习革命的 CNN 模型。AlexNet 通过大幅领先[ 15.3% 对 26.2% ( 第二名 ) 错误率],赢得了 2012 年 ImageNet LSVRC-2012 大赛。截至 2019 年 2 月,Alexnet 论文被引用超过 3 万次。

 

(2)VGG

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

 

(3)GoogLeNet

GoogLeNet 又称 Inception [198,231 - 233],是由谷歌公司在2014年提出的一个CNN模型大家族。GoogLeNet 增加了 CNN 的宽度和深度 ( 多达22层 ) 。Inception 系列的主要贡献是介绍了分解卷积和批量标准化(batch normalization)

 

(4)ResNet

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

 

(5)DenseNet

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

 

(6)SENet

挤压激励网络 ( Squeeze and Excitation Networks,SENet ) 是由J. Hu和L. Shen等人于2018年提出的[236]。它的主要贡献是将全局池化和混编(global pooling and shuffling)一体化,以学习 feature map 在通道方面(channel-wise)的重要性。SENet 在ILSVRC 2017 年分类竞赛中获得第一名。

 

• Object detectors with new engines

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

 

4.2 Detection with Better Features

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

 

4.2.1 Why Feature Fusion is Important?

不变性(Invariance) 和 同变性/等变化(equivariance) 是图像特征表示的两个重要性质分类 需要不变的特征表示,因为它的目的是学习高级语义信息。目标定位 需要等变的表示,因为它的目的是区分位置和尺度的变化。由于目标检测由目标识别和定位两个子任务组成,因此检测器必须同时学习不变性和等变性。

近三年来,特征融合在目标检测中得到了广泛的应用。由于CNN模型由一系列卷积层和池化层组成,更深层次的特征具有更强的不变性,但等变性较小。虽然这有利于分类识别,但在目标检测中定位精度较低。相反,较浅层次的特征不利于学习语义,但它有助于对象定位,因为它包含更多关于边缘和轮廓的信息。因此,CNN模型中深度和深度特征的融合有助于提高不变性和等变性。

 

4.2.2 Feature Fusion in Different Ways

在目标检测中进行特征融合的方法有很多。本文从两个方面介绍了近年来的一些方法:1) 处理流程;2) 元素智能操作。

 

(1)Processing flow

目前用于目标检测的特征融合方法可分为两类:1) 自底向上融合,2) 自顶向下融合,如图18 (a)-(b)所示。自底向上的融合通过跳跃连接将浅层特征前馈到更深的层[237,240 - 242]。相比之下,自顶向下的融合将更深层次的特征反馈给更浅层次[22,55,243-246]。除了这些方法,最近还提出了更复杂的方法,例如跨不同层编织特性[247]。

由于不同层的 feature map 在空间维度和通道维度上都可能有不同的尺寸,因此可能需要对 feature map 进行调整,如调整通道数量、上采样低分辨率 map 或下采样高分辨率 map ,使其尺寸合适。最简单的方法是使用最接近或双线性插值(nearest or bilinear-interpolation)[22,244]。此外,分数阶条纹卷积 ( 又称转置卷积 ) [45,248]是近年来另一种常用的调整 feature map 大小和调整通道数量的方法。使用分数阶条纹卷积的优点是,它可以学习一种适当的方法来执行上采样本身[55,212,241 - 243,245,246,249]。

 

(2)Element-wise operation

从局部的角度看,特征融合可以看作是不同特征映射之间的元素智能操作。有三组方法:1) element-wise 的和,2) element-wise 的积,3) 串联,如图18 (c)-(e)所示。

element-wise 的和是执行特征融合最简单的方法。它已被频繁地用于许多最近的目标检测器[22,55,241,243,246]。element-wise 的积[245,249 - 251]与 element-wise 的和非常相似,唯一的区别是使用乘法而不是求和。element-wise 的积的一个优点是,它可以用来抑制或突出某个区域内的特性,这可能进一步有利于小对象检测[245,250,251]。特征拼接/串联是特征融合的另一种方式[212,237,240,244]。它的优点是可以用来集成不同区域的上下文信息[105,144,149,161],缺点是增加了内存[235]。

 

4.2.3 Learning High Resolution Features with Large Receptive Fields

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

正如我们前面提到的,特征分辨率越低,就越难检测小对象。提高特征分辨率最直接的方法是去除池化层或降低卷积下采样率。但这将带来一个新的问题,即由于输出步长减小,接受域会变得太小。换句话说,这将缩小检测器的“视线”范围,并可能导致一些大型目标的漏检。

一种同时提高接收域和特征分辨率的方法是引入膨胀/扩展卷积(dilated convolution),又称无孔卷积(atrous convolution)或带孔卷积(convolution with holes)。膨胀/扩展卷积最初是在语义分割任务中提出的[252,253]。其主要思想是对卷积滤波器进行扩展,和使用稀疏参数。例如,膨胀率为 2 的 3x3 滤波器会具有与核为 5x5 的滤波器相同的接受域,但只有 9 个参数。膨胀卷积目前已广泛应用于目标检测中[21,56,254,255],在不需要任何额外参数和计算代价的情况下,被证明是提高精度的有效方法。

 

4.3 Beyond Sliding Window

虽然目标检测已经从手工特征发展到深度神经网络,但仍然遵循 “ 特征图滑动窗口 ” 的模式[137]。最近,在滑动窗之外还安装了一些检测器。

 

(1)Detection as sub-region search

子区域搜索[184,256-258]提供了一种新的检测方法。最近的一种方法是将检测视为一个路径规划过程,从初始网格开始,最终收敛到所需的 ground truth box [256]。另一种方法是将检测看作是一个迭代更新过程,对预测边界框的角进行细化[257]。

 

(2)Detection as key points localization

关键点定位是一项重要的计算机视觉任务,有着广泛的应用,如面部表情识别[259]、人体姿态识别[260]等。由于图像中任何对象都可以由其在 ground truth box 的左上角和右下角唯一确定,因此检测任务可以等价地框定为一对关键点定位问题。这个想法最近的一个实现是预测拐角的热图[261]。该方法的优点是可以在语义分割框架下实现,不需要设计多尺度的锚框

 

4.4 Improvements of Localization

为了提高定位精度,目前的检测方法主要有两种:1) 边界框细化法2) 设计新的损失函数进行精确定位

 

4.4.1 Bounding Box Refinement

提高定位精度最直观的方法是对边界框进行细化,可以将其视为检测结果的后处理。尽管边界框回归已经集成到大多数现代目标检测器中,但是仍然有一些具有意外尺度的对象不能被预定义的锚框很好地捕获。这将不可避免地导致对其位置的不准确预测。由于这个原因,“ 迭代边界框细化(iterative 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 Learning with Segmentation

目标检测和语义分割是计算机视觉中的重要任务。近年来的研究表明,通过学习和语义分割可以提高目标检测能力。

 

4.5.1 Why Segmentation Improves Detection?

语义分割提高目标检测能力的原因有三个。

 

(1)Segmentation helps category recognition

边缘和边界是构成人类视觉认知的基本要素[267,268]。在计算机视觉中,物体(如汽车、人)和物体(如天空、水、草)的区别在于前者通常有一个封闭的、明确的边界,而后者没有。由于语义分割任务的特征能够很好地捕捉到对象的边界,因此分割可能有助于分类识别

 

(2)Segmentation helps accurate localization

对象的 ground-truth 边界框由其定义良好的边界决定。对于一些特殊形状的物体 ( 例如,想象一只猫有很长的尾巴 ),很难预测高 IOU 的位置。由于目标边界可以很好地编码在语义分割特征中,分割学习有助于准确的目标定位。

 

(3)Segmentation can be embedded as context

日常生活中的物体被不同的背景所包围,如天空、水、草等,这些元素构成了一个物体的语境。整合上下文的语义分割将有助于目标检测,例如,飞机更有可能出现在空中而不是水上。

 

4.5.2 How Segmentation Improves Detection?

通过分割提高目标检测的主要方法有两种:1) 采用丰富的特征学习2) 采用多任务损失函数学习

 

(1)Learning with enriched features

最简单的方法是将分割网络看作一个固定的特征提取器,并将其作为附加特征集成到检测框架中[144,269,270]。该方法的优点是易于实现,缺点是分割网络可能带来额外的计算

 

(2)Learning with multi-task loss functions

另一种方法是在原有检测框架的基础上引入额外的分割分支,用多任务损失函数 ( 分割损失+检测损失 ) 训练该模型[4,269]。在大多数情况下,分割分支将在推理阶段被删除。优点是检测速度不受影响,缺点是训练需要像素级的图像标注。为此,一些研究人员采用了 “ 弱监督学习 ” 的思想:他们不是基于像素级注释掩码进行训练,而是基于边界框级注释训练分割分支[250,271]。

 

4.6 Robust Detection of Rotation and Scale Changes

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

 

4.6.1 Rotation Robust Detection

对象旋转在人脸检测、文本检测等检测任务中非常常见。这个问题最直接的解决方案是数据扩充,使任何方向的对象都能被扩充的数据很好地覆盖[88]。另一种解决方案是为每个方向训练独立的检测器[272,273]。除了这些传统的方法,最近还有一些新的改进方法。

 

(1)Rotation invariant loss functions

旋转不变损失函数学习的思想可以追溯到20世纪90年代[274]。最近的一些工作对原有的检测损失函数进行了约束,使旋转后的物体的特征保持不变[275,276]。

 

(2)Rotation calibration

改进旋转不变的检测的另一种方法是对候选对象进行几何变换[277 - 279]。这对于多级检测器尤其有用,前阶段的相关性将有利于后续的检测。这种思想的代表是空间变压器网络 ( Spatial Transformer Networks,STN ) [278]。STN 目前已被用于旋转文本检测[278]和旋转人脸检测[279]。

 

(3)Rotation RoI Pooling

在 two-stage 检测器中,特征池化的目的是为任意位置和大小的对象建议(object proposal)提取固定长度的特征表示,首先将 proposal 均匀地划分为一组网格,然后将网格特征串联起来。由于网格划分是在直角坐标系下进行的,其特征对旋转变换不具有不变性。最近的一项改进是在极坐标下对网格进行网格划分,使特征对旋转变化具有鲁棒性[272]。

 

4.6.2 Scale Robust Detection

近年来,在尺度鲁棒检测的训练和检测阶段都有了改进。

 

(1)Scale adaptive training

大多数现代检测器都是将输入图像重新缩放到一个固定的尺寸,并将物体在所有尺度下的损失进行反向传播,如图19 (a)所示。但是,这样做的缺点是会出现 “ 尺度不平衡 ” 问题。在检测过程中构建图像金字塔可以缓解这一问题,但不能从根本上解决[46,234]。最近的一个改进是图像金字塔的尺度标准化 ( Scale Normalization for Image Pyramids,SNIP ) [280],它在训练阶段和检测阶段都建立图像金字塔,只对一些选定尺度的损失进行反向传播,如图19 (b)所示。一些研究人员进一步提出了一种更有效的训练策略:使用高效重采样的 SNIP(SNIP with Efficient Resampling,SNIPER)[281],即,将图像裁剪并重新缩放到一组子区域,以便从大规模批量训练中获益。

 

(2)Scale adaptive detection

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

 

4.7 Training from Scratch

大多数基于深度学习的检测器首先在大规模数据集 ( 如 ImageNet ) 上进行预训练,然后针对特定的检测任务进行微调。人们一直认为预训练有助于提高泛化能力和训练速度,问题是,我们真的需要在 ImageNet 上对检测器进行预训练吗? 事实上,采用预训练网络进行目标检测存在一定的局限性。第一个限制是 ImageNet 分类和目标检测之间的散度,包括它们的损失函数和尺度/类别分布第二个限制是领域不匹配。由于 ImageNet 中的图像是 RGB 图像,而有时需要进行检测的是深度图像 ( RGB- d ) 或三维医学图像,因此无法很好地将预先训练好的知识转移到这些检测任务中。

近年来,一些研究人员尝试从零开始训练一种目标检测器。为了加快训练速度和提高稳定性,一些研究人员引入密集连接(dense connection)和批量归一化(batch normalization)来加速浅层的反向传播[238,284]。最近K . He等人[285]的工作进一步质疑预训练的范式通过探索相反的制度推进:他们报告了使用从随机初始化训练而来的标准模型对 COCO 数据集进行目标检测的有竞争性的结果,唯一的改变是增加了训练迭代的次数,以便随机初始化的模型可以收敛。即使只使用10%的训练数据,随机初始化训练的鲁棒性也令人惊讶,这表明 ImageNet 预处理可以加快收敛速度,但不一定提供正则化或提高最终检测精度

 

4.8 Adversarial Training

由A. Goodfellow等人于2014年提出的生成式对抗网络 ( Generative Adversarial Networks,GAN ) [286]近年来受到了极大的关注。一个典型的 GAN 由两个神经网络组成:一个生成网络和一个判别网络,它们在极小极大优化框架下相互竞争。通常,生成器学习从潜在空间映射到感兴趣的特定数据分布,而鉴别器的目的是区分真实数据分布中的实例和生成器生成的实例。GAN 广泛应用于图像生成[286,287]、图像样式传输[288]、图像超分辨率[289]等计算机视觉任务。近年来,GAN 也被应用于目标检测,尤其是对小遮挡目标的检测

GAN 被用来通过缩小小目标和大目标之间的模型表示来增强对小目标的检测[290,291]。为了提高对被遮挡物体的检测,最近的一个想法是使用对抗性训练生成遮挡掩模[292]。与在像素空间中生成示例不同,对抗性网络直接修改特性来模拟遮挡。

此外,“ 对抗性攻击 ” [293]研究如何用对抗性的例子攻击检测器,近年来受到越来越多的关注。这一课题的研究对于自主驾驶来说尤为重要,因为在保证其对对抗攻击的鲁棒性之前,不能完全信任它。

 

4.9 Weakly Supervised Object Detection

现代目标探测器的训练通常需要大量的人工标记数据,而标记过程费时、昂贵、低效。弱监督目标检测 ( Weakly Supervised Object Detection,WSOD ) 目标是通过训练一个只带有图像级注释而不是边界框的检测器来解决这一问题。

近年来,多实例学习在 WSOD 中得到了广泛的应用[294、295]。多实例学习是一种有监督的学习方法[39,296]。多实例学习模型不是使用一组单独标记的实例进行学习,而是接收一组标记的包,每个包包含多个实例。如果将一个图像中的候选对象看作一个包,并将图像级注释看作标签,那么 WSOD 可以表示为一个多实例学习过程。

类激活映射是最近出现的另一组WSOD方法[297,298]。对CNN可视化的研究表明,尽管没有对目标位置的监控,但是CNN的卷积层表现为目标检测器。类激活映射揭示了如何使CNN在接受图像级标签训练的情况下仍然具有定位能力[299]。

除了上述方法外,还有一些研究者认为 WSOD 是一个 proposal 排序过程,通过选择信息量最大的区域,然后用图像级注释对这些区域进行训练[300]。WSOD 的另一个简单方法是屏蔽图像的不同部分。如果检测分数急剧下降,那么一个物体将高概率被覆盖。此外,交互注释[295]在训练中考虑了人的反馈,从而改进了 WSOD [301]。最近,生成对抗性训练被用于 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)显示了一些远离摄像机拍摄的小行人的例子。在 Caltech 数据集[59,60]中,15%的行人高度小于30像素。

Hard negatives:街景图像中的一些背景与行人的视觉外观非常相似,如图20 (b)所示。

Dense and occluded pedestrian:图20 (c)显示了密集和遮挡行人的一些例子。在 Caltech 数据集[59,60]中,未被遮挡的行人仅占行人总数的29%。

Real-time detection:从高清视频中实时检测行人对自动驾驶和视频监控等应用至关重要。

 

5.1.2 Literature Review

行人检测研究历史悠久[30, 31,101]。其发展可分为两个技术阶段:1) 传统的行人检测;2) 基于深度学习的行人检测。我们请读者参考下面的调查以获得关于这个话题的更多细节[60,303 - 307]。

 

(1)Traditional pedestrian detection methods

由于计算资源的限制,Haar小波特征在早期行人检测中得到了广泛的应用[30,31,308]。为了提高对被遮挡行人的检测,当时流行的一个想法是 “ 组件检测(detection by components) ” [31,102,220],即,把检测看作一个多部分检测器的集合,这些检测器分别在不同的人体部位训练,如头部、腿部和手臂上。随着计算能力的提高,人们开始设计更加复杂的检测模型,并从2005年起,基于梯度的表示[12,37,177,220,309]和 DPM [15,37,54]已经成为行人检测的主流。在2009年,通过使用积分图像加速,一个有效的轻量级特征表示被提出:积分信道特征 ( Integral Channel Features,ICF ) [171]。ICF成为当时行人检测的新标杆[60]。除了特征表示,还考虑了一些领域知识,如外观恒常性、形状对称性[310]以及立体信息[173,311]。

 

(2)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]。此外,还引入了 “ 交叉模态学习(cross-modal learning)” 的思想,利用 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]在很大程度上促进了目标检测,它的许多出色的思想甚至在今天的目标检测中仍然发挥着重要的作用。人脸检测已经应用于各行各业,如数码相机中的 “ 微笑 ” 检测、电子商务中的 “ 刷脸 ”、移动应用中的人脸化妆等。

 

5.2.1 Difficulties and Challenges

人脸检测的难点和挑战可以总结如下。

Intra-class variation:人脸可以呈现出多种表情、肤色、姿势和动作,如图21 (a)所示。

Occlusion:人脸可能被其他物体遮挡部分,如图21 (b)所示。

Multi-scale detection:检测多种尺度下的人脸,特别是一些微小的人脸,如图21所示(c)。

Real-time detection:移动设备上的人脸检测通常需要CPU的实时检测速度。

 

5.2.2 Literature review

人脸检测的研究可以追溯到20世纪90年代初[95,106,108]。然后经历了多个历史时期:早期人脸检测(2001年以前)、传统人脸检测(2001-2015)、基于深度学习的人脸检测(2015-至今)。我们请读者参考以下调查以了解更多详情[323,324]。

 

(1)Early time’s face detection (before 2001)

早期的人脸检测算法可以分为三组:1) 基于规则的方法。这组方法将人类对构成一张典型面孔的知识进行编码,并捕捉面部元素之间的关系[107,108]。2) 基于子空间分析的方法。这组方法分析了人脸在底层线性子空间中的分布[95,106]。特征面(Eigenfaces)是这组方法的代表[95]。3) 基于学习的方法:将人脸检测框架为滑动窗口+二进制分类 ( 目标 vs 背景 ) 的过程。这一组常用的模型包括神经网络[96,164,325]和 SVM [29, 326]。

 

(2)Traditional face detection (2000-2015)

这一时期有两组人脸检测器。第一组方法是基于增强决策树构建的[10,11,109]。这些方法计算简单,但在复杂场景下检测精度较低。第二组基于早期的卷积神经网络,利用特征的共享计算加快检测速度[112,113,327]。

 

(3)Deep learning based face detection (after 2015)

在深度学习时代,大多数人脸检测算法都遵循一般的目标检测思想,如 Faster RCNN 和 SSD。

To speed up face detection:级联检测(详见3.3节)是深度学习时代加速人脸检测最常用的方法[179,180]。另一种加速方法是预测图像中人脸的尺度分布[283],然后在一些选定的尺度上进行检测。

To improve multi-pose and occluded face detection:“ 人脸定标(face calibration) ” 的思想通过估计定标参数[279]或通过多个检测阶段的渐进定标[277]来改进多姿态人脸检测。为了提高对遮挡人脸的检测,最近提出了两种方法。第一个是融入 “ 注意机制(attention mechanism)”,突出潜在人脸目标的特征[250]。第二种是 “ 基于部分的检测(detection based on parts)” [328],它继承了 DPM 的思想。

To improve multi-scale face detection:近年来多尺度人脸检测的研究[322,329 - 331]采用了与一般目标检测相似的检测策略,包括多尺度特征融合和多分辨率检测 ( 详见2.3.2和4.2.2节 )。

 

5.3 Text Detection

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

 

5.3.1 Difficulties and Challenges

文本检测的难点和挑战可以总结如下。

Different fonts and languages:文本可能有不同的字体、颜色和语言,如图22 (a)所示。

Text rotation and perspective distortion:文本可能有不同的方向,甚至可能有透视失真,如图22 (b)所示。

Densely arranged text localization:长径比大、布局密集的文本行很难精确定位,如图22 (c)所示。

Broken and blurred characters:破碎和模糊的字符在街景图像中很常见。

 

5.3.2 Literature Review

文本检测包括两个相关但相对独立的任务:1) 文本定位;2) 文本识别。现有的文本检测方法可分为 “ 步进检测 ” 和 “ 综合检测 ” 两大类。我们请读者参考下面的调查以了解更多细节[338、339]。

 

(1)Step-wise detection vs integrated detection

步进检测方法[340,341]由字符分割、候选区域验证、字符分组、单词识别等一系列处理步骤组成。这组方法的优点是大部分的背景都可以在粗分割步骤中进行滤波,大大降低了后续处理的计算成本。缺点是需要仔细设置所有步骤的参数,这些错误将在每个步骤中发生和积累。相比之下,综合检测[342-345]将文本检测定义为联合概率推理问题,在统一的框架下处理字符定位、分组和识别的步骤。这些方法的优点是避免了累积误差,易于集成语言模型。缺点是,当考虑到大量字符类和候选窗口时,推理的计算开销会很大[339]。

 

(2)Traditional methods vs deep learning methods

传统的文本检测方法大多是在无监督的情况下生成候选文本,其中常用的技术包括最大稳定极值区域(Maximally Stable Extremal Regions,MSER)分割[341]和形态滤波(morphological filtering)[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:基于分段的方法在检测密集排列的文本时显示出更大的优势。为了区分相邻的文本行,最近提出了两组解决方案。第一个是 “ 线段与链接(segment and linking)”,其中 “ segment ” 是指字符热图,“ linking ” 是指两个相邻 segment 之间的连接,表示它们属于同一单词或文本行[336、358]。第二组是引入额外的角/边界检测任务,以帮助分离密集排列的文本,其中一组角或封闭的边界对应于单个文本行[337,359,360]。

To improve broken and blurred text detection:最近一种处理破碎和模糊文本的方法是使用单词级[77,361]识别和句子级识别
[335]。处理不同字体的文本,最有效的方法是使用合成样本进行训练[77,348]。

 

5.4 Traffic Sign and Traffic Light Detection

随着自动驾驶技术的发展,交通标志和交通灯的自动检测近年来引起了人们的极大关注。在过去的几十年里,虽然计算机视觉社区在很大程度上推动了对一般目标的检测,而不是像交通灯和交通标志这样的固定模式,但认为它们的识别没有挑战性仍然是一个错误。

 

5.4.1 Difficulties and Challenges

交通标志/信号灯检测的挑战和困难可以总结如下。

Illumination changes:如图23 (a)所示,当车辆行驶在强光下或夜间时,检测尤为困难。

Motion blur:由于汽车的运动,车载摄像头拍摄到的图像会变得模糊,如图23 (b)所示。

Bad weather:在恶劣天气下,如雨雪天气,图像质量会受到影响,如图23所示(c)。

Real-time detection:这对自动驾驶特别重要。

 

5.4.2 Literature Review

现有的交通标志/灯光检测方法可以分为两大类:传统的检测方法和基于深度学习的检测方法。关于这个话题的更多细节,我们请读者参考下面的调查[80]。

 

(1)Traditional detection methods

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

 

(2)Deep learning based detection methods

在深度学习时代,一些著名的检测器如 Faster RCNN 和 SSD 被应用到交通标志/灯光检测任务中[83,84,378,379]。在这些检测器的基础上,一些新的技术,如注意机制和对抗性训练被用来改善复杂交通环境下的检测[290,378]。

 

5.5 Remote Sensing Target Detection

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

 

5.5.1 Difficulties and Challenges

遥感目标检测面临的挑战和困难总结如下。

Detection in “big data”:由于遥感图像数据量巨大,如何快速准确地检测遥感目标仍然是一个问题。图24(a)比较遥感图像和自然图像的数据量。

Occluded targets:地球表面每天有50%以上被云覆盖。图24 (b)给出了一些被遮挡目标的例子。

Domain adaptation:不同传感器 ( 例如,不同的调制和分辨率 ) 拍摄的遥感图像存在很大的差异。

 

5.5.2 Literature Review

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

 

(1)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]。

 

(2)Deep learning based detection methods

RCNN在2014年取得巨大成功后,深度 CNN 很快被应用到遥感目标检测中[275, 276, 400, 401]。一般目标检测框架像 Faster RCNN 和 SSD 已经引起了遥感界越来越多的关注[91,167,381,402-405]。

由于遥感图像与日常图像的巨大差异,人们对遥感图像的深度CNN特征的有效性进行了一些研究[406-408]。人们发现,尽管深度CNN取得了巨大的成功,但它并不比传统的光谱数据处理方法好[406]。为了检测不同方向的目标,一些研究人员改进了ROI池化层,以获得更好的旋转不变性[272、409]。为了提高区域自适应能力,一些研究者从贝叶斯的角度提出了检测方法,在检测阶段,根据测试图像的分布自适应更新模型[91]。此外,注意机制和特征融合策略也被用来改进小目标检测[410,411]。

 


6 CONCLUSION AND FUTURE DIRECTIONS

近20年来,在目标检测方面取得了显著的成就。本文不仅在其20年的历史广泛综述了一些里程碑检测器(例如VJ检测器、HOG检测器、DPM、Faster-RCNN、YOLO、SSD等),关键技术,加速方法,检测应用,数据集和指标,而且还讨论了社区目前遇到的挑战,以及如何将这些检测器进一步扩展和改进。

 

未来的目标检测研究可能会集中在以下几个方面:

Lightweight object detection:加快检测算法的速度,使其能够在移动设备上平稳运行。一些重要的应用包括移动增强现实、智能摄像头、人脸验证等。虽然近年来已经做了很大的努力,但机器和人眼之间的速度差距仍然很大,特别是在检测一些小物体时。

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

Detection meets domain adaptation:任何目标检测器的训练过程本质上都可以看作是一个假设数据独立且同分布(i.i.d)时的似然估计过程。使用非 i.i.d 数据的目标检测,特别是对一些实际应用程序来说,仍然是一个挑战。GAN在领域自适应方面显示出良好的应用前景,对未来的目标检测具有重要的指导意义

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

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

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

Detection with information fusion:RGB-D图像、三维点云、激光雷达等多数据源/多模式的目标检测对自主驾驶和无人机应用具有重要意义。目前存在的问题包括:如何将训练有素的检测器移植到不同的数据模式,如何进行信息融合以提高检测能力等。

 

站在技术进步的高速公路上,我们相信这篇论文将帮助读者建立一个目标检测的大蓝图,并找到这个快速发展的研究领域的未来方向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

论文笔记-2019-Object Detection in 20 Years: A Survey 的相关文章

  • 循环神经网络(RNN)的基本原理及LSTM的基本结构

    来源于课上实验 结果清晰 遂上传于此 实验环境TensorFlow1 14 该课件仅用于教学 请勿用于其他用途 详细参考 实验笔记 实验视频 一 实验目的 学习掌握循环神经网络 RNN 的基本原理及LSTM的基本结构 掌握利用LSTM神经元
  • vulfocus靶场安装教程

    背景 漏洞把场是目前每个安全人员以及想学习信息安全的人必备的东西 但目前商业化产品居多 还有一些类似dwwa sqlilabs这类的开源项目 但是漏洞环境比较固定 使用完一次后就失去其作用 搭建的成本过高 每次启动的流程会比较繁锁 甚至很多

随机推荐

  • 【react】对state的理解

    state是类创建的实例对象上的一个状态属性 想要改变类的实例对象的值 就要用到构造器 但由于类组件都是继承的React内置的Component类 继承的类 要写构造器的话 就必须写super 改变state this state xxx
  • TIP Spring-boot健康检查查看详细信息

    Spring boot提供了健康检查的手段 定期检查应用各个组件的状态 并提供了一些通用组件的检查 比如MySQL Redis等 可以使用下面的命令查看应用的健康状态 curl localhost port health 如果应用有异常 会
  • GhostNetV2学习笔记

    GhostNetV2学习笔记 GhostNetV2 Enhance Cheap Operation with Long Range Attention Abstract 轻量级卷积神经网络 CNNs 是专为在移动设备上具有较快推理速度的应用
  • Deployment Controller 典型使用场景

    1 重新调度 Rescheduling 不管想运行 1 个副本还是 1000 个副本 副本控制器都能确保指定数量的副本存在于集群中 即使发生节点故障或 Pod 副本被终止运行等意外状况 2 弹性伸缩 Scaling 手动或者通过自动扩容代理
  • 【科普】CRC校验(一)什么是CRC校验?

    目录 CRC 循环冗余校验 CRC 校验码的生成 CRC 的发送方与接收方 发送方 接收方 除法异或运算示意图 CRC 循环冗余校验 CRC Cyclic Redundancy Check 循环冗余检验 是一种用于检测数字数据错误的技术 作
  • 不用JS,教你只用纯HTML做出几个实用网页效果

    转载请注明出处 葡萄城官网 葡萄城为开发者提供专业的开发工具 解决方案和服务 赋能开发者 原文出处 https blog bitsrc io pure html widgets for your web application c90155
  • Python - 遍历列表

    方法1 for循环直接遍历 lists m1 1900 m2 2000 for item in lists print item 注 同JAVA中的foreach循环一样 用for循环遍历列表 并不能改变列表中的数据项的值 lists m1
  • 校验密码复杂度(规则:长度8-30,必须包含数字、字母、特殊符号)、校验用户名(规则:长度4-19,包含数字、字母,不包含特殊字符)

    校验密码复杂度 规则 长度8 30 必须包含数字 字母 特殊符号 校验用户名 规则 长度4 19 包含数字 字母 不包含特殊字符
  • RHEL8网络管理

    RHEL8网络管理服务 NetworkManager早期的设计目的是为了统一网络配置 表示以后所有的网络相关的配置都使用NetworkManager来实现 NetworkManager服务提供了3种工具用来配置网卡参数 都不需要去手动修改网
  • 【每日多题之贪心】

    文章目录 1 分割平衡字符串 1 1 题目描述 1 2 题目分析 1 3 代码实现 2 最少操作数使数组递增 2 1 题目描述 2 2 题目分析 2 3 代码实现 3 卡车上的最大单元数 3 1 题目描述 3 2 题目分析 3 3 代码实现
  • 使用UML编写Java应用程序

    引言 统一建模语言 Unified Modeling Language 简写为UML 是一种通用的模拟语言 它可以用于确定 展示和记录软件系统的设计过程 统一建模语言中的图形标记 尤其是用于面向对象的软件设计 它有两大优点 1 UML是国际
  • iframe添加loading效果

    问题 当一个页面嵌入iframe时 iframe加载会有延迟 即在iframe元素展现前 嵌入iframe的父页面会有一段白屏情况 用户感知不到iframe页面在加载 体验效果不是很好 解决方法 为了提升用户体验 让用户感知到当前页面在加载
  • FISCO BCOS离线搭建单机单群组4节点

    系列文章目录 第一章 FISCO BCOS在线搭建单机单群组4节点 文章目录 系列文章目录 前言 一 安装准备 1 安装依赖包 2 创建操作目录 3 下载脚本 三 搭建单群组4节点联盟链 1 暂停并清除FISCO BCOS 2 搭建区块链
  • Python实战

    逆向完美世界登录 js代码调试阶段 1 查看密码关键字段 2 Ctrl shift f全局搜索 password 找到相关js文件 3 从代码的setpublickey encrypt关键字可以看出 使用了非对称加密算法 4 此处打断点 再
  • ubuntu 使用FFTW快速计算离散傅里叶变换

    FFTW the Faster Fourier Transform in the West 是一个快速计算离散傅里叶变换的标准C语言程序集 其由MIT的M Frigo 和S Johnson 开发 可计算一维或多维实和复数据以及任意规模的DF
  • 解决Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题

    解决Xilinx ISE 14 7在Win10下选择 open project 崩溃闪退的问题 问题描述 ISE 14 7对win10无法完美支持 在使用64位ISE时点击OPEN之类的东西时程序都会崩溃 虽然使用32位不会有这个问题 但是
  • nvidia-docker容器迁移导致GPU启动失败解决方案

    引言 起因是最近发现一个很有趣的问题 当我的docker容器迁移到另一台服务器去 因为GPU版本不一致导致项目启动是会报错为 CUDA error CUDA ERROR NO DEVICE no CUDA capable device is
  • Python爬虫如何获取页面内所有URL链接?本文详解

    如何获取一个页面内所有URL链接 在Python中可以使用urllib对网页进行爬取 然后利用Beautiful Soup对爬取的页面进行解析 提取出所有的URL 什么是Beautiful Soup Beautiful Soup提供一些简单
  • mxnet.ndarray.slice_axis 沿给定轴切片

    mxnet ndarray slice axis data None axis Null begin Null end Null out None name None kwargs 作用 沿给定轴切片 返回沿给定轴从开始索引到结束索引的数组
  • 论文笔记-2019-Object Detection in 20 Years: A Survey

    Object Detection in 20 Years A Survey Zhengxia Zou Zhenwei Shi Member IEEE Yuhong Guo and Jieping Ye Senior Member IEEE论