目标检测: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 论文地址:https://arxiv.org/abs/1905.05055v2

Awesome Object Detection:github

Abstract:

论文中引用411片文献,涵盖了许多主题,包括历史上的里程碑检测器、检测数据集、度量、检测系统的基本构件、加速技术以及最新的检测方法。还综述了行人检测、人脸检测、文本检测等重要的检测应用,该论文完整的归纳了object detection完整的知识体系。

1 INTRODUCTION

目标检测作为计算机视觉的基本问题之一,是许多其他计算机视觉任务的基础,如实例分割[1-4]、图像字幕[5-7]、对象跟踪[8]等。从应用程序的角度来看,目标检测可以被分为两个研究主题 “ general object detection ” 和 “ detection applications ” ,前者旨在探索在统一的框架下检测不同类型物体的方法,以模拟人

目录

类的视觉和认知;后者是指特定应用场景下的检测,如行人检测、人脸检测、文本检测等。

目标检测中有一些“multi-scale detection”,“hard negative mining”,“bounding box regression”,“integral image”, “vector quantization”等专有概念。需要通读原论文原理及其解释,该论文没有详细解释。

挑战和难点:尽管人们总是问 “ 在目标检测中有哪些困难和挑战? ” ,事实上,这个问题并不容易回答,甚至可能被过度概括。由于不同的检测任务具有完全不同的目标和约束,它们的困难程度可能会有所不同。除了其他计算机视觉任务中的一些常见挑战,如不同视点下的物体、光照和类内变化,目标检测的挑战包括但不限于以下几个方面:目标旋转和尺度变化 ( 如小目标 ) ,精确的目标定位,密集和遮挡的目标检测,加速检测【 “ 检测管道 ” ( 如级联检测、特征图共享计算 )、“ 检测主干 ”( 如网络压缩、轻量级网络设计 )、“ 数值计算 ”( 如积分图像、矢量量化 )】等。

2 OBJECT DETECTION IN 20 YEARS

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

2.1 A Road Map of Object Detection

目标检测的发展大致经历了两个历史时期:“ 传统的目标检测时期 ” ( 2014年以前 ) 和 “ 深度学习的检测时期 ” ( 2014年以后 )

目标检测:Object Detection in 20 Years: A Survey

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

早期的目标检测算法大多是基于手工特征构建的。

(1)Viola Jones Detectors:最初的 slide windows算法,以作者的名字命名((VJ)检测器),以纪念他们的重大贡献

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

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

关于细节,建议文章:Haar检测器      AdaBoost+Haar目标检测

(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]和各种计算机视觉应用的重要基础。(HOG本质上是一个特征提取算法,特征提取!)

HOG特征的算法可以用一下几个部分概括,

  1. 梯度计算
  2. 单元划分
  3. 区块选择
  4. 区间归一化
  5. SVM分类器

SIFT(Scale Invariant Feature Transform)全称尺度不变特征变换,是1999年Lowe提出的一种局部特征描述算子,在2004年得到了改善。
SIFT算子是把图像中检测到的特征点用一个128维的特征向量进行描述,因此一幅图像经过SIFT算法后表示为一个128维的特征向量集,该特征向量集具有对图像缩放,平移,旋转不变的特征,对于光照、仿射和投影变换也有一定的不变性,是一种非常优秀的局部特征描述算法。
SIFT算法的流程分别为:

  1. 尺度空间极点检测
  2. 关键点精确定位
  3. 关键点的方向确定
  4. 特征向量的生成

关于细节,建议文章:传统目标检测之HOG特征    图像学习-HOG特征   传统目标检测之SIFT特征  特征点匹配——SIFT算法详解

(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 ”。

关于细节,建议文章:DPM模型  传统目标检测之DPM模型

2.1.2 Milestones: CNN based Two-stage Detectors

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

(1)RCNN

RCNN用于目标检测任务的鼻祖,他的训练和预测阶段分别如下:

训练阶段主要训练三部分:RCNN最后两层的微调,Linear SVM和bounding-box regressor。主要步骤如下:

  1. 候选框(ROI)生成:使用了selective search的方法,Selective search是一种比较好的数据筛选方式,首先对图像进行过分割切成很多很多小块,然后根据小块之间的颜色直方图、梯度直方图、面积和位置等基本特征,把相近的相邻对象进行拼接,从而选出画面中有一定语义的区域。
  2. 特征提取:使用一预训练的CNN网络提取每个ROI的特征,将CNN的最后一个FN层换成我们自己的,比如样本有100类,那我们最后一层输出维度101(1类是背景)。训练使用SGD,样本组成:所有与Groud Truth框的IoU大于0.5的视作该类的正样本,每次SGD随机选择32个正样本和96个背景样本进行训练。这就是一个典型的CNN分类网络,正常训练即可,但是我们并不会全连接之后softmax输出分类,参考文章
  3. 类别预测:为每一个类别训练一个linear SVM分类器,为什么不用高维,思考一下?在这里使用了 hard negative mining(难例挖掘),即着重训练那些易错的样本。参考文章
  4. 候选框精修(Bounding-box regression ):首先用NMS对同个类的region proposals进行合并,因为SVM会给我们的每个ROI一个分数,因此我们选取得分最高而且与ground-truth重叠度超过阈值的ROI,记为P,然后丢弃与该被选框重叠度较高的那些,对剩下的高分ROI,每个P与其对应的ground-truth组成一个样本对 ,我们使用他们作为样本让线性回归学习一个从预测框到ground-truth的映射关系。

预测过程基本一致,对输入图片产生ROI,CNN网络特征提取,SVM类别预测,然后NMS,对选择的那个预测框使用线性变化进行精修。

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

关于细节,建议文章:RCNN论文解读

(2)SPPNet

2014年,K. He等人提出了空间金字塔池化网络( Spatial Pyramid Pooling Networks,SPPNet)。SPPnet的贡献主要有亮点

  1. region proposal之后不对每个ROI卷积提取特征,而是先对整个图片进行特征提取,在feature map上找到每个候选框的区域(将候选框从原图映射到特征图),再对各个ROI采用SPP层池化,提取出固定长度的特征向量。相比于RCNN对每个ROI进行特征提取,这样做无疑是非常节省时间的。
  2. SPPNet的主要贡献是引入了空间金字塔池化(SPP)层,它使CNN能够生成固定长度的表示,而不需要重新缩放图像/感兴趣区域的大小,黑色图片代表卷积之后的特征图,接着我们以不同大小的块来提取特征,分别是4*4,2*2,1*1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial bins),我们从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。这种以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP)。比如,要进行空间金字塔最大池化,其实就是从这21个图片块中,分别计算每个块的最大值,从而得到一个输出单元,最终得到一个21维特征的输出。

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

关于细节,建议文章:SPP-Net论文详解

(3)Fast RCNN

2015年,R. Girshick提出了Fast RCNN检测器,这是对R-CNN和SPPNet的进一步改进。Fast RCNN使能够在相同的网络配置下同时训练检测器和边界框回归器。与SPPnet相同,这里也是先进卷积产生feature map,然后每个roi进入spp层(ROI pooling layer其实就是简化版的spp)进行尺寸的休整,不同之处在于经过fc层之后,直接接两个训练器,一个softmax用于分类,另一个regressor用于bounding box的精修。因为有两个任务,所以使用了多人损失将分类和回归损失结合起来,然后对整个网络进行训练即可。

虽然Fast-RCNN成功地融合了R-CNN和SPPNet的优点,但其检测速度仍然受到提案/建议检测的限制。然后,一个问题自然而然地出现了:“ 能用CNN模型进行region proposal吗? ” 稍后,Faster R-CNN解决了这个问题。

关于细节,建议文章:Fast RCNN算法详解

(4)Faster RCNN

2015年,S. Ren等人提出了Faster RCNN检测器,在Fast RCNN之后不久。Faster RCNN 是第一个端到端的,也是第一个接近实时的深度学习检测器。

Faster RCNN的主要贡献是引入了区域建议网络 (RPN),使几乎cost-free的region proposal成为可能。从RCNN到Faster RCNN,一个目标检测系统中的大部分独立块,如region proposal、特征提取、边界框回归等,都已经逐渐集成到一个统一的端到端学习框架中。

最重要的贡献无疑是提出了anchor的概念和RPN网络了。RPN网络实际分为2条线,在原图尺度上,设置了密密麻麻的候选Anchor。然后上面那条线用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor,所以,仅仅是个二分类而已!另一条线对anchor进行回归,因此第一条输出的是W*H*2K(K是feature map上每个pixel生成的anchor的数目),第二条线输出的是W*H*4K(回归有四个参数)。这些参数进入proposal(接受了分类信息以及预测框信息)就可以生成region proposal了,然后每个region proposal进入roopooling输出统一大小的特征向量,然后就是基本的网络结构了。

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

关于细节,建议文章:  一文读懂Faster RCNN

(5)Feature Pyramid Networks(FPN)

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

关于细节,建议文章:【目标检测】FPN(Feature Pyramid Network)

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]更关注这个问题。

YOLO将object detection看作是一个回归问题(这大概是因为他的误差函数是平方和误差而非分类问题中的交叉熵之类的),他有几个重要的contribution:

  • 基于全局图像预测而不是region proposal或者slide window,因此对背景的检测性能远远超过前两种方法(context information比较全面)。

关于细节,建议文章:YOLO(You Only Look Once)算法详解      目标检测|YOLO原理与实现

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

相比Yolo,SSD采用CNN来直接进行检测,而不是像Yolo那样在全连接层之后做检测。其实采用卷积直接做检测只是SSD相比Yolo的其中一个不同点,另外还有两个重要的改变,

一是SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体;

二是SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes,在Faster R-CNN中叫做锚,Anchors)。Yolo算法缺点是难以检测小目标,而且定位不准,但是这几点重要改进使得SSD在一定程度上克服这些缺点。

关于细节,建议文章:目标检测|SSD原理与实现

(3)RetainNet

单级检测器速度快、结构简单,但多年来一直落后于两级检测器的精度。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% )。

  • 论文主要提出了一种新的loss,称为focal loss,解决了正负样本数目差距过大以及区分了样本的难易程度两个问题(也不能说解决了吧,找到了很好的优化方案)
  • 基于FPN提出了一个新的one stage目标检测框架,称为RetinaNet,当时在精度和速度方面达到了最好的平衡。

一种使用Focal Loss的全新结构RetinaNet,使用ResNet+FPN作为backbone,再利用一阶段的目标识别法+Focal Loss。这个结构在COCO数据集上达到了39.1的mAP。

这个结构要注意几点:

1、训练时FPN每一级的所有example都被用于计算Focal Loss,loss值加到一起用来训练;

2、测试时FPN每一级只选取score最大的1000个example来做nms;

3、整个结构不同层的head部分(c和d部分)共享参数,但分类和回归分支间的参数不共享;

4、分类分支的最后一级卷积的bias初始化成前面提到的目标检测:Object Detection in 20 Years: A Survey

关于细节,建议文章:RetainNet

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数据集检测精度的提高。

Datasets具体介绍如下:

(1)Pascal VOC

PASCAL可视化对象类(Visual Object Classes,VOC)挑战(2005-2012)是早期计算机视觉界最重要的比赛之一。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: airplane, 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)推动了通用目标检测技术的发展。ILSVRC从2010年到2017年每年举办一次。它包含一个使用ImageNet图像的检测挑战。ILSVRC检测数据集包含200类视觉对象。它的图像/对象实例的数量比VOC大两个数量级。例如ILSVRC-14包含517k图像和534k带注释的对象。

(3)MS-COCO

MS-COCO是目前最具挑战性的目标检测数据集。自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个对象类别上。

目标检测:Object Detection in 20 Years: A Survey

准确率:

目标检测:Object Detection in 20 Years: A Survey

数据下载链接:

1. http://host.robots.ox.ac.uk/pascal/VOC/

2. http://image-net.org/challenges/LSVRC/

3. http://cocodataset.org/

4. https://storage.googleapis.com/openimages/web/index.html

(5)Datasets of Other Detection Tasks

在过去的20年里,除了一般的目标检测外,在行人检测、人脸检测、文本检测、交通标志/灯光检测、遥感目标检测等特定领域的检测应用也十分繁荣。表2-6列出了这些检测任务的一些流行数据集。

目标检测:Object Detection in 20 Years: A Survey

目标检测:Object Detection in 20 Years: A Survey

目标检测:Object Detection in 20 Years: A Survey

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 仍然是最常用的目标检测评估指标。

FPPW (False Positive per Window)

  • 基本含义:给定一定数目N的负样本图像,分类器将负样本判定为“正”的次数FP,其比率FP/N即为FPPW。
  • FPPW意义与ROC中的假阳率相同。FPPW中,一张图就是一个样本。

FPPI (False Positive per Image)

  • 基本含义:给定一定数目N的样本集,内含N张图像,每张图像内包含或不包含检测目标(每张图像均需要标注:(1)包含目标的个数;(2)目标的准确位置L)。
    然后在每张图像上运行分类器,检测目标并得到位置p。然后,检查每张图像内的检测结果是否“击中”标定的目标:
    a. 若图像内无目标,而分类器给出了n个“目标”检测结果,那么False Positive 次数 +n;
    b. 若图像内有目标,则判断p是否击中L(判断标准主要看p与L的重叠率)。若判断未击中,则False Positive 次数 +1。
    最后 FPPI = (False Positive 次数)/N

FPPI 相比于FPPW来说,更接近于分类器的实际应用情况

AP and MAP

参考:目标检测中的AP,mAP

2.3 Technical Evolution in Object Detection

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

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年后 ) ”,如图所示。

目标检测:Object Detection in 20 Years: A Survey

(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回归损失。损失函数的一般形式可以写成如下形式:

目标检测:Object Detection in 20 Years: A Survey

近两年来另一种流行的技术是多分辨率检测[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为边界框回归的演化过程。

目标检测:Object Detection in 20 Years: A Survey

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

目标检测:Object Detection in 20 Years: A Survey

目标检测:Object Detection in 20 Years: A Survey

2.3.4 Technical Evolution of Context Priming

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

目标检测:Object Detection in 20 Years: A Survey

(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,如图所示

目标检测:Object Detection in 20 Years: A Survey

(1)Greedy selection

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

虽然贪心选择已成为 NMS 的实际方法,但仍有一定的改进空间,如图所示。近年来,尽管最近进行了一些手工修改以改进其性能[158,159,163] ,据我们所知,贪心选择仍然是当今目标检测的最强基线。

Greedy实现很方便,但是他也存在很多问题

  1. 得分最高的可能并不是最合适的。
  2. 他会抑制周围的物体。
  3. NMS并不能抑制false positive的bounding box

目标检测:Object Detection in 20 Years: A Survey

(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

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

目标检测:Object Detection in 20 Years: A Survey

(1)Bootstrap

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

关于细节,建议文章:Bootstrap详解

(2)HNM in deep learning based detectors

随着算力的增长,bootstrap其实是被遗弃了一段时间,为了克服数据的imbalance,很多算法只是简单的balance一下正负样本对损失的权重(YOLO,RCNN),但是这个方法后来被发现不能完全解决imbalance的问题。2016年之后,bootstrap又被重新提出,在SSD或者OHEM中,只有比较少的一部分样本的梯度会被反向传播,这些样本都是loss很大的样本,即难以区分的样本,而简单样本的损失就忽略不计。在RefineDet中,一个“锚优化模块”被设计用来过滤容易的样本。另一种改进是设计新的损失函数,通过重塑标准交叉熵损失,使其将更多的注意力放在硬的、错误分类的例子上.

其中比较出名的几篇文章分别如下:

  • facol loss也就是我们上面说过的retainNet,通过设计损失函数高效地解决了正负样本imblance和寻找hard negative样本的问题。
  • SSD-Single Shot MultiBox Detector-上文也讲过,它是利用了如下损失函数, 目标检测:Object Detection in 20 Years: A Survey 表示第i个bounding box与第j个ground truth匹配,并且ground truth的类别为 k,从而保证了只有正样本的位置误差会进行计算。

目标检测:Object Detection in 20 Years: A Survey

  • OHEM:Online Hard Example Mining

关于细节,建议文章:OHEM论文解读

很有意思的一篇工作,网络架构是基于Fast-RCNN的,架构有两个相同 的RoI网络,不同的是其中一个只可读,另一个可读可写。我们看到(a) 是只可读的,只对所有RoI做前向计算,所以只需分配内存给前向计算 操作,(b)既可读也可写,对被选择的hard RoIs不仅做前向计算也做反向 传播计算。对于一次SGD迭代,计算过程如下:先计算出特征图,可读RoI网络对所 有RoI执行前向计算并计算每个RoI的损失,然后选择hard RoIs。把这 些hard RoIs输入到可读可写的RoI网络中执行前向前向计算和反向传播更新网络,并把可读可写的RoI网络的参数赋值给只可读的网络,一次 迭代就完成了。

目标检测:Object Detection in 20 Years: A Survey

  • RefineNet

目标检测:Object Detection in 20 Years: A Survey

关于细节,建议文章:RefineDet(3)_总结_CVPR2018

3 SPEED-UP OF DETECTION

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

目标检测:Object Detection in 20 Years: A Survey

3.1 Feature Map Shared Computation

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

3.1.1 Spatial Computational Redundancy and Speed Up

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

目标检测:Object Detection in 20 Years: A Survey

特征图共享计算的思想在基于卷积的检测器中也得到了广泛的应用。一些相关的著作可以追溯到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 的决策边界只能由一小组训练样本 ( 支持向量 ) 确定,因此推理阶段的计算复杂度与支持向量的个数成正比:目标检测:Object Detection in 20 Years: A Survey约简集向量[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 Quantifification

网络修剪 ” 和 “ 网络量化 ” 是加速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) 神经结构搜索

目标检测:Object Detection in 20 Years: A Survey

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)所示。例如,可以用 目标检测:Object Detection in 20 Years: A Survey 个滤波器近似卷积层,用 目标检测:Object Detection in 20 Years: A Survey 个滤波器 + 一个非线性激活 + 另外 目标检测:Object Detection in 20 Years: A Survey 个滤波器 ( 目标检测:Object Detection in 20 Years: A Survey  )近似有 目标检测:Object Detection in 20 Years: A Survey 个通道的特征图。在这种情况下,原始层的复杂度 目标检测:Object Detection in 20 Years: A Survey 可以降低到 目标检测:Object Detection in 20 Years: A Survey

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 通道。利用深度可分卷积,将计算复杂度从目标检测:Object Detection in 20 Years: A Survey降低到目标检测:Object Detection in 20 Years: A Survey。该思想最近被应用于目标检测和细粒度分类(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

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

目标检测:Object Detection in 20 Years: A Survey

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

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

目标检测:Object Detection in 20 Years: A Survey

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

关于细节,建议文章:积分图加速矩阵块

3.6.2 Speed Up in Frequency Domain

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

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

目标检测:Object Detection in 20 Years: A Survey

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

目标检测:Object Detection in 20 Years: A Survey

3.6.3 Vector Quantization

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

3.6.4 Reduced Rank Approximation

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

目标检测:Object Detection in 20 Years: A Survey

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

原文:

目标检测:Object Detection in 20 Years: A Survey

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

目标检测:Object Detection in 20 Years: A Survey

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 年分类竞赛中获得第一名。

这几个CNN网络类似的介绍,关于细节,建议文章:CNN网络与实现

• 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]。

目标检测:Object Detection in 20 Years: A Survey

(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],在不需要任何额外参数和计算代价的情况下,被证明是提高精度的有效方法。解决这一问题一个新兴的方法即dilated convolution

4.3 Beyond Sliding Window

虽然目标检测已经从使用手工特征发展到使用深度神经网络,但大多数网络都是基于sliding window的,最近有一些网络跳出了这个paradigm

  • Detection as sub-region search

子区域搜索提供了一种新的检测方法。一种最近的方法是将检测看作是从初始网格开始,最终收敛到所需的地面真值盒的路径规划过程。另一种方法是将检测视为迭代更新过程,对预测的边界框的角进行细化。这个方法的几个代表作品:

关于代表作品细节,建议文章:Grid R-CNN Plus(2019)

AZ-Net:将小物体所在的区域不断放大然后进行识别,类似的工作也挺多的,下面是大会上的演讲,关于细节,建议视频演讲:https://www.youtube.com/watch?v=aToPrMdLX0g,需要*

  • Detection as key points localization

关键点定位是一项重要的计算机视觉任务,具有广泛的应用,如面部表情识别、人体姿态识别(pose估计)等。由于图像中的任何一个目标都可以通过ground truth box的左上角和右下角唯一地确定,因此可以将检测任务等价地框定为一对关键点定位问题。这个想法最近的一个应用是cornernet。该方法的优点是可以在语义分割框架下实现,不需要设计多尺度的anchor。

关于细节,建议文章:CornerNet:目标检测算法新思路

4.4 Improvements of Localization

定位精度的提升一般有两种方法:一种是bounding box的精修,一种是设计新的loss function。

4.4.1 Bounding Box Refinement

尽管bounding box regression已经集成到大多数现代对象检测器中,但是必然会有些物品无法被提前设置的anchor捕获,这就会造成这些位置上的不精确。为此,最近引入了迭代边界框细化,迭代地将检测结果输入BB回归器,直到预测收敛到正确的位置和大小。但也有研究者认为该方法不能保证定位精度的单调性,即BB回归多次使用会使定位退化。

使用这种方法比较出名的工作即Cascade R-CNN,简单来说就是使用三个级联的refinement网络,并不断调高IOU阈值,

关于细节,建议文章:目标检测论文阅读:Cascade R-CNN: Delving into High Quality Object Detection

4.4.2 Improving Loss Functions for Accurate Localization

在大多数现代探测器中,目标定位被认为是一个坐标回归问题。然而,这个paradigm有两个缺点。首先,回归损失函数不对应最终的定位评价。例如,我们不能保证一个较低的回归误差总是会产生一个较高的IoU预测,特别是当对象具有非常大的长宽比时。其次,传统的边界盒回归方法不能提供定位的置信度。当多个BB相互重叠时,可能会导致NMS失效。

通过设计新的损耗函数可以缓解上述问题。最直观的设计是直接使用IoU作为局部化损失函数。还有一些研究者进一步提出了iou引导的NMS,以提高训练和检测阶段的定位能力。此外,一些研究者也尝试在概率推理框架下改进定位。与以往直接预测盒坐标的方法不同,该方法预测了一个边界盒位置的概率分布。

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],即,将图像裁剪并重新缩放到一组子区域,以便从大规模批量训练中获益。

目标检测:Object Detection in 20 Years: A Survey

(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

这一部分主要是应用的内容,权当扩展视野即可

包括行人检测、人脸检测、文本检测、交通标志/灯光检测、遥感目标检测等。

5.1 Pedestrian Detection

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

5.1.1 Diffificulties 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:从高清视频中实时检测行人对自动驾驶和视频监控等应用至关重要。

目标检测:Object Detection in 20 Years: A Survey

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的实时检测速度。

目标检测:Object Detection in 20 Years: A Survey

Early time’s face detection (before 2001)

早期的人脸检测算法可以分为三大类:1)基于规则的检测方法。这组方法对典型脸的构成要素的人类知识进行编码,并捕捉面部元素之间的关系。2)基于子空间分析的方法。这组方法在底层线性子空间中分析人脸分布。特征面就是这组方法的代表。3)基于学习的方法:将人脸检测帧为滑动窗口+二分类(目标vs背景)过程。这类模型常用的有神经网络模型和支持向量机模型。

  • Traditional face detection (2000-2015)

这一时期有两组人脸检测器。第一组方法是基于提升决策树构建的。这些方法计算简单,但在复杂场景下检测精度较低。第二组基于早期卷积神经网络,使用特征的共享计算来加速检测

  • Deep learning based face detection (after 2015)

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

提高人脸检测速度:级联检测(详见3.3节)是深度学习时代提高人脸检测速度最常用的方法,另一种加速方法是预测图像中人脸的尺度分布,然后在选定的尺度上进行检测

改进多位姿和遮挡人脸检测:通过估计标定参数或通过多个检测阶段进行渐进标定,人脸标定的思想被用于改进多位姿人脸检测。为了改善遮挡人脸检测,最近提出了两种方法。第一种是加入注意机制,突出底层人脸目标的特征。第二种是基于零件的检测,它继承了DPM的思想。

为了改进多尺度人脸检测:最近的多尺度人脸检测研究使用了与一般目标检测相似的检测策略,包括多尺度特征融合和多分辨率检测(详见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:破碎和模糊的字符在街景图像中很常见。

目标检测:Object Detection in 20 Years: A Survey

5.3.2 Literature Review

文本检测由两个相关但相对独立的任务组成:1)文本定位和2)文本识别。现有的文本检测方法可以分为两类:逐级检测和综合检测

  • Step-wise detection vs integrated detection

步进检测方法由字符分割、候选区域验证、字符分组和单词识别等一系列处理步骤组成。这组方法的优点是在粗分割步骤中可以过滤大部分背景,大大减少了后续处理的计算量。缺点是需要仔细设置所有步骤的参数,错误会在每一个步骤中出现并累积。

集成方法将文本检测作为一个联合概率推理问题,在统一框架下处理字符定位、分组和识别步骤。这些方法的优点是避免了累积错误,易于集成语言模型。缺点是,在考虑大量字符类和候选窗口时,推理的计算成本会很高

  • Traditional methods vs deep learning methods

大多数传统的文本检测方法都是以无监督的方式生成候选文本,其中常用的技术包括最大稳定极值区域(Maximally Stable Extremal region, MSER)分割[341]和形态学滤波[346]。这些方法还考虑了一些领域的知识,如文本的对称性和笔画的结构

近年来,文本定位问题的研究越来越受到重视,而非识别问题。最近提出了两组方法。第一组方法将文本检测作为一般目标检测的一个特例[251,348 357]。这些方法都有统一的检测框架,但对于有方向和大纵横比的文本检测效果较差。第二组方法将文本检测框架作为图像分割问题[336,337,358 360]。这些方法的优点是对文本的形状和方向没有特殊的限制,缺点是不容易根据分割结果区分排列密集的文本行。近年来基于深度学习的文本检测方法对上述问题提出了一些解决方案

对于文本旋转和透视变化:最常见的解决方案是在锚框和RoI池化层中引入额外的参数,这些参数与旋转和透视变化相关[351 353,355 357]。

改进密集文本检测:基于分割的方法在密集文本检测方面表现出更大的优势。为了区分相邻的文本行,最近提出了两组解决方案。第一种是线段和链接,线段指字符热图,链接指相邻的两个线段之间的连接,表明它们属于同一单词或同一文本行[336,358]。第二组是引入一个额外的角/边界检测任务来帮助分离排列密集的文本,其中一组角或一个封闭边界对应于单独的文本行。

为了改进破碎和模糊文本检测:一个处理破碎和模糊文本的最新想法是使用词级识别[77,361]和句子级识别[335]。对于不同字体的文本,最有效的方法是利用合成样本进行训练。

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:这对自动驾驶特别重要。

目标检测:Object Detection in 20 Years: A Survey

5.4.2 Literature Review

现有的交通标志/信号灯检测方法可以分为两类:1)传统的检测方法和2)基于深度学习的检测方法。-

  • 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]。在此基础上,采用了注意机制和对抗性训练等新技术,提高了复杂交通环境下的检测能力。

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:不同传感器 ( 例如,不同的调制和分辨率 ) 拍摄的遥感图像存在很大的差异。

目标检测:Object Detection in 20 Years: A Survey

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

--------------------------------------------------------------完结--------------------------------------------------------------------

参考资料:

https://zhuanlan.zhihu.com/p/192362333

https://zhuanlan.zhihu.com/p/76494575

https://zhuanlan.zhihu.com/p/36088972

https://zhuanlan.zhihu.com/p/36088972

https://zhuanlan.zhihu.com/p/98756890

https://zhuanlan.zhihu.com/p/139913323

https://blog.csdn.net/clover_my/article/details/92794719

https://zhuanlan.zhihu.com/p/114700229

上一篇:PAT (Basic Level) Practise - 写出这个数


下一篇:[RxJS] Combination operators: concat, startWith