目标检测:Object Detection in 20 Years: A Survey
Posted langb2014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目标检测: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年以后 )
2.1.1 Milestones: Traditional Detectors(里程碑:传统检测器)
早期的目标检测算法大多是基于手工特征构建的。
(1)Viola Jones Detectors:最初的 slide windows算法,以作者的名字命名((VJ)检测器),以纪念他们的重大贡献
VJ检测器采用最直接的检测方法,即,滑动窗口:查看图像中所有可能的位置和比例,看看是否有窗口包含人脸。虽然这似乎是一个非常简单的过程,但它背后的计算远远超出了计算机当时的能力。VJ检测器结合了 “ 积分图像 ”、“ 特征选择 ” 和 “ 检测级联 ” 三种重要技术,大大提高了检测速度。
- 积分图像:积分图像是一种计算方法,以加快盒滤波或卷积过程。与当时的其他目标检测算法一样[29-31],在VJ检测器中使用Haar小波作为图像的特征表示。积分图像使得VJ检测器中每个窗口的计算复杂度与其窗口大小无关。
- 特征选择:作者没有使用一组手动选择的Haar基过滤器,而是使用Adaboost算法[32]从一组巨大的随机特征池 ( 大约180k维 ) 中选择一组对人脸检测最有帮助的小特征。
- 检测级联:在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特征的算法可以用一下几个部分概括,
- 梯度计算
- 单元划分
- 区块选择
- 区间归一化
- SVM分类器
SIFT(Scale Invariant Feature Transform)全称尺度不变特征变换,是1999年Lowe提出的一种局部特征描述算子,在2004年得到了改善。
SIFT算子是把图像中检测到的特征点用一个128维的特征向量进行描述,因此一幅图像经过SIFT算法后表示为一个128维的特征向量集,该特征向量集具有对图像缩放,平移,旋转不变的特征,对于光照、仿射和投影变换也有一定的不变性,是一种非常优秀的局部特征描述算法。
SIFT算法的流程分别为:
- 尺度空间极点检测
- 关键点精确定位
- 关键点的方向确定
- 特征向量的生成
关于细节,建议文章:传统目标检测之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。主要步骤如下:
- 候选框(ROI)生成:使用了selective search的方法,Selective search是一种比较好的数据筛选方式,首先对图像进行过分割切成很多很多小块,然后根据小块之间的颜色直方图、梯度直方图、面积和位置等基本特征,把相近的相邻对象进行拼接,从而选出画面中有一定语义的区域。
- 特征提取:使用一预训练的CNN网络提取每个ROI的特征,将CNN的最后一个FN层换成我们自己的,比如样本有100类,那我们最后一层输出维度101(1类是背景)。训练使用SGD,样本组成:所有与Groud Truth框的IoU大于0.5的视作该类的正样本,每次SGD随机选择32个正样本和96个背景样本进行训练。这就是一个典型的CNN分类网络,正常训练即可,但是我们并不会全连接之后softmax输出分类,参考文章
- 类别预测:为每一个类别训练一个linear SVM分类器,为什么不用高维,思考一下?在这里使用了 hard negative mining(难例挖掘),即着重训练那些易错的样本。参考文章
- 候选框精修(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的贡献主要有亮点
- region proposal之后不对每个ROI卷积提取特征,而是先对整个图片进行特征提取,在feature map上找到每个候选框的区域(将候选框从原图映射到特征图),再对各个ROI采用SPP层池化,提取出固定长度的特征向量。相比于RCNN对每个ROI进行特征提取,这样做无疑是非常节省时间的。
- 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初始化成前面提到的;
关于细节,建议文章: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个对象类别上。
准确率:
数据下载链接:
1. http://host.robots.ox.ac.uk/pascal/VOC/
2. http://image-net.org/challenges/LSVRC/
4. https://storage.googleapis.com/openimages/web/index.html
(5)Datasets of Other Detection Tasks
在过去的20年里,除了一般的目标检测外,在行人检测、人脸检测、文本检测、交通标志/灯光检测、遥感目标检测等特定领域的检测应用也十分繁荣。表2-6列出了这些检测任务的一些流行数据集。
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年后 ) ”,如图所示。
(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回归损失。损失函数的一般形式可以写成如下形式:
近两年来另一种流行的技术是多分辨率检测[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) 上下文交互,如图所示。
(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,如图所示。
(1)Greedy selection
贪心选择是一种老式但最流行的目标检测方法。该过程背后的思想简单直观:对于一组重叠检测,选择检测分值最大的边界框,并根据预定义的重叠阈值 ( 如0.5 ) 删除相邻框。上述处理以贪婪的方式迭代执行。
虽然贪心选择已成为 NMS 的实际方法,但仍有一定的改进空间,如图所示。近年来,尽管最近进行了一些手工修改以改进其性能[158,159,163] ,据我们所知,贪心选择仍然是当今目标检测的最强基线。
Greedy实现很方便,但是他也存在很多问题
- 得分最高的可能并不是最合适的。
- 他会抑制周围的物体。
- NMS并不能抑制false positive的bounding box
(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主要是为了处理正负样本数目差距过大的问题。HNM 在目标检测中的技术演进如图所示。
(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-上文也讲过,它是利用了如下损失函数, 表示第i个bounding box与第j个ground truth匹配,并且ground truth的类别为 k,从而保证了只有正样本的位置误差会进行计算。
- OHEM:Online Hard Example Mining
关于细节,建议文章:OHEM论文解读
很有意思的一篇工作,网络架构是基于Fast-RCNN的,架构有两个相同 的RoI网络,不同的是其中一个只可读,另一个可读可写。我们看到(a) 是只可读的,只对所有RoI做前向计算,所以只需分配内存给前向计算 操作,(b)既可读也可写,对被选择的hard RoIs不仅做前向计算也做反向 传播计算。对于一次SGD迭代,计算过程如下:先计算出特征图,可读RoI网络对所 有RoI执行前向计算并计算每个RoI的损失,然后选择hard RoIs。把这 些hard RoIs输入到可读可写的RoI网络中执行前向前向计算和反向传播更新网络,并把可读可写的RoI网络的参数赋值给只可读的网络,一次 迭代就完成了。
- RefineNet
关于细节,建议文章:RefineDet(3)_总结_CVPR2018
3 SPEED-UP OF DETECTION
加速目标检测一直是一个重要而又具有挑战性的问题。在过去的20年里,目标检测领域已经发展了复杂的加速技术。这些技术大致可以分为 “ 检测管道提速 ”、“ 检测引擎提速 ” 和 “ 数值计算提速 ” 三个层次,如图所示。
3.1 Feature Map Shared Computation
在目标检测器的不同计算阶段中,特征提取通常占主导地位。对于基于滑动窗的检测器,计算冗余从位置和尺度两方面入手,其中位置冗余是由相邻窗口之间的重叠造成的,尺度冗余是通过相邻尺度间的特征关联造成的。
3.1.1 Spatial Computational Redundancy and Speed Up
减少空间计算冗余最常用的方法是特征图共享计算,即,在滑动窗口前只计算一次整个图像的特征图。传统检测器的 “ 图像金字塔 ” 可以看作是一个 “ 特征金字塔 ”。例如,为了加快 HOG 行人检测器的速度,研究者通常会将整个输入图像的 “ HOG map ” 进行累加,如图所示。然而,这种方法的缺点也很明显,即, feature map 分辨率 ( 此 feature map 上滑动窗口的最小步长 ) 将受到单元格大小的限制。如果一个小对象位于两个单元格之间,那么所有检测窗口都可能忽略它。解决这个问题的一个方法是构建一个完整的特征金字塔。
特征图共享计算的思想在基于卷积的检测器中也得到了广泛的应用。一些相关的著作可以追溯到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],提高定位精度以上是关于目标检测:Object Detection in 20 Years: A Survey的主要内容,如果未能解决你的问题,请参考以下文章
论文翻译 DOTA:A Large-scale Dataset for Object Detection in Aerial Images
第三十四节,目标检测之谷歌Object Detection API源码解析
多尺度目标检测 Multiscale Object Detection