摘要:本文根据目标检测的发展,对400多篇相关的文章进行综述,涵盖了很多主题,包括历史上里程碑检测器、检测数据集、度量标准、检测系统的基本构件、加速技术以及最新的检测方法。本文也综述了行人检测、面部检测、文本检测等一些重要的检测应用,并对面临的挑战和近几年来的技术发展做了深度的分析。
目标检测的任务是开发计算模型和技术用来解决机器视觉应用中所需的最基本消息之一:物体在哪里?从应用的角度来看,目标检测可以分为两个研究主题“一般目标检测”和“检测应用”, 近年来随着深度学习技术的快速发展,为目标检测注入了新的血液,并取得了显著的突破,将其推向了一个前所未有的研究热点,目标检测目前已广泛应用于自主驾驶、机器人视觉、视频监控等。目标检测中的困难和挑战:物体的旋转和尺度变化(如小的物体)、准确的物体定位、密集和隐蔽的物体检测、检测速度的加快等。
对象检测的发展大致经历了两个历史时期:“传统对象检测时期(2014年以前)”和“基于深度学习的检测时期(2014年以后)”。
(1)Viola Jones检测器
VJ检测器遵循最直接的检测方式,即滑动窗口:遍历所有可能的位置并缩放图像中的比例,以查看是否有任何窗口包含人脸,在700MHz的奔腾III处理器上运行。VJ检测器通过结合“积分图像”,“特征选择”和“检测级联”三项重要技术,大大提高了检测速度,但计算远远超出了计算机当时的能力。
1)积分图象:积分图像是一种计算方法,用于加速箱滤波或卷积过程。与当时的其他对象检测算法一样,在VJ检测器中使用Haar小波作为图像的特征表示。积分图像使得VJ检测器中每个窗口的计算复杂度与其窗口大小无关。
2)特征选择:作者没有使用一组手动选择的Haar基础滤波器,而是使用Adaboost算法从大量的随机特征池(约18万维)中选择了一小部分对人脸检测有帮助的特征集。
3)检测级联:在VJ探测器中引入了一种多级检测范式(又名 “检测级联”),通过减少背景窗口的计算量而将更多的计算量花在人脸目标上,从而减少了计算开销。
(2)HOG Detector
方向梯度直方图(HOG)是对尺度不变特征变换和形状背景的重要改进,对变换、大小、光章和其他非线性因素鲁棒,在保持检测窗口大小不变的情况下,多次对输入图像进行重新标度,主要解决行人检测问题。
(3)Deformable Part-based Model
DPM主要思想为分解再组装,由一个根滤波器(root filter)和几个部分滤波器(part filter)组成,在做检测时,它并不直接检测某一物体,而是检测它的各个组成部分,再进行组装,得到该物体的类别和位置信息。使用弱监督方法取代手动配置part-filters,现在流行的混合模型、难例挖掘、边界框回归等也在当时提出,使用了一种“编译”检测器模型的方法达到了比级联更快的检测速度,且不损失精度。
2010-2012年,基于传统方法的目标检测进入瓶颈,而深度卷积神经网络给目标检测注入了新的动力。在深度学习时代,目标检测可以分为两阶段(two-stage)和单阶段(one-stage)检测,前者要经历一个由粗糙到精细的过程,后者则能够直接得到结果。
(1)RCNN
RCNN背后的想法很简单:它首先通过选择性搜索selective search提取一系列目标的候选框。将每个候选框都缩放到固定尺寸送到ImageNet训练好的CNN模型中,抽取每个候选框对应的特征,最后使用线性SVM分类器来预测候选框中目标类别。平均精度从33.7%大幅提高到58.5%,但是计算量太大,一张图会获得超过2000个候选框,模型非常慢,GPU上14s/image。
(2)SPPNet
2014年Spatial Pyramid Pooling Networks可以将不同候选框通过SPP layer产生固定尺寸的特征图,并且不需要缩放,只对整个图像进行一次特征映射计,避免了卷积特征的重复计算,SPPNet的速度是RCNN的20多倍,但SPPNet仍然是多阶段的检测器,只对其全连接层进行微调,而忽略了之前的所有层。
(3)Fast RCNN
Fast RCNN是对R-CNN和SPPNet的进一步改进,同时训练检测器和边界框回归器,检测速度是 RCNN 的200多倍,检测速度仍然受限于候选框的数量。
上图是Fast RCNN的工作流程。它的流程为,首先使用selective search方法提取出候选框,然后使用CNN来提取图像的特征图,并将候选框映射到特征图上。之后使用ROI池化来将候选框中的特征图池化为7x7xC(深度)的矩阵。将它输入全连接后分别使用两个损失函数来进行优化:一个是分类损失函数,另一个是边框回归损失函数。
(4)Faster RCNN
Faster RCNN 是第一个端到端的,近乎实时的深度学习检测器主要贡献是引入了Region Proposal Network(RPN),使网络能够自己生成候选框。虽然突破了速度瓶颈,但是在后续的检测阶段仍然存在计算冗余。
上图是RPN的结构。在使用CNN提取图像特征后,做一个3x3的卷积。作者在这里提出了anchor概念。
对每一个像素,分别检测以其为中心的固定尺寸不同比例的9个anchor box,并在后续使用RPN的上面部分分辨它是背景还是物体,使用IoU作为评判标准,去除背景框,使用剩下的部分来回归边框。后续的做法与Fast R-CNN一致。
(5)Feature Pyramid Networks(FPN)
在FPN之前大多数基于深度学习的检测器只在网络的顶层进行检测。虽然有利于分类识别,但不利于对象的定位。FPN具有横向连接的自顶向下体系结构,得到不同尺度的特征图,FPN在检测各种尺度的目标检测方面显示出了巨大的进步。
FPN的框架如上。首先使用一个预训练的网络来得到不同大小的123层网络,然后对4进行上采样,并用1x1的卷积对2进行降维,然后将结果进行对应相加并进行3x3的卷积消除叠加影响得到5,同理得到6。随后将456输出到RPN中得到候选框,并使用候选框框出456中的区域,然后将其输入ROI层,并进行分类和边框回归。
(1)You Only Look Once (YOLO)
YOLO是第一个单阶段的目标检测器,在较少精度损失的前提下甚至达到了155fps的速度。完全抛弃了“候选框+验证”的模式,而是采用了另一种方法:用单个神经网络处理整个图像。网络将图像分割成不同的region,并且同时预测边界框和对应的目标概率。尽管YOLO速度很快,但是和两阶段的检测器相比,准确度仍然不足,尤其是对于小目标。
(2)Single Shot MultiBox Detector (SSD)
SSD的主要贡献是引入了多尺度和多分辨率检测技术,这大大提高了单级检测器的检测精度,特别是对于一些小目标。SSD与以往任何检测器的主要区别在于,前者在网络的不同层检测不同尺度的对象,而后者仅在其顶层运行检测。SSD的核心思想是使用每个卷积层产生的特征图来进行检测。从前面我们明白了,不同的卷积层对不同尺度的物体的检测敏感程度不同,于是这种方法就可以很好地兼顾各种尺度物体的检测。
(3)RetinaNet
单级检测器速度快、结构简单,但多年来一直落后于两级检测器的精度。RetinaNet主要贡献是为解决训练样本类别不平衡而提出了focal loss,使单阶段的模型达到了双阶段模型的准确度。
Focal loss:
比较有名的数据集有PASCAL VOC(其中VOC2007和2012比较常见,基本只作为新算法的test-bed)、ILSVRC(有200个类)、MS-COCO(现在比较常用的,也是最难的检测数据集。它共有80个类,且标注不再是方框,而是per-instance segment。它还包含了许多的小物体)、Open Images Detection(2018年建立,还在发展的数据集。它不仅检测物体,还试图检测物体间的关系)。
数据集的统计数据
数据集的一些图像示例
2008年到2018年对VOC07、VOC12和MS-COCO数据集检测精度的提高
PASCAL可视化对象类 ( Visual Object Classes)包括图像分类、目标检测、语义分割和动作检测。VOC07和VOC12主要用于对象检测,这两个数据集中注释了生活中常见的20类对象( Person: person; Animal: bird, cat, cow, dog, horse, she ep; Vehicle: aeroplane, bicycle, boat, bus, car, motor-bike, t rain; Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor )。
(#images = 11k,#annotations = 27k, #classes = 20)
(2)ILSVRC
Image Large Scale Visual Recognition Challenge(大规模视觉识别挑战)推动了通用目标检测技术的发展。ILSVRC 检测数据集包含200类视觉对象,它的图像/对象实例的数量比VOC大两个数量级,ILSVRC-14 包含 517k 图像和 534k 带注释的对象。
(#images = 517k,#annotations = 534k, #classes = 200)
(3)MS-COCO
MS-COCO是目前最具挑战性的目标检测数据集。与 VOC 和 ILSVRC 相比,MS-COCO 最大的进步是除了边框标注外,每个对象都进一步使用实例分割进行标记,以帮助精确定位。此外,MS-COCO 包含更多的小对象 ( 其面积小于图像的1% ) 和比 VOC 和 ILSVRC 更密集的定位对象。
(#images = 164k,#annotations = 897k, #classes = 80)
(4)Open Images
开放图像检测 ( OID ) 技术在2018年迎来了前所未有的挑战。在开放图像中有两个任务: 标准目标检测,视觉关系检测,检测特定关系中成对的目标。
(#images = 1910k,#annotations = 15440k, #classes = 600)
(5)Datasets of Other Detection Tasks
在过去的20年里,除了一般的目标检测外,在行人检测、人脸检测、文本检测、交通标志/灯光检测、遥感目标检测等特定领域的检测应用也十分繁荣。
早期指标:
FPPW:miss rate vs. false positives per-window(每个窗口的漏报率和误报率),无法反映全图上的性能。
FPPI:miss rate vs. false positives per-image(每张图片的漏报率和误报率),全图性能。
后来:
AP:average precision(平均精度)代表不同召回下的平均检测精度,在VOC2007提出。mAP即所有对象类别的平均精度,通常使用mAP作为最终性能指标,使用交并比(Intersection over Union, IoU)判断是否召回,以0.5为阈值的mAP(mAP0.5)多年来都作为目标检测领域的标准。
2014年后:
MS-COCO:将原IoU的0.5阈值改为了0.5~0.95,步长为0.05的一系列AP,阈值从小到大分别对应了粗糙定位和精确定位,也就是阈值越大难度越高,召回出的框也越接近ground truth。
最近:
虽然提出了一些定位回忆精度等指标,但是VOC/COCO为代表的mAP仍然是使用最广泛的目标检测指标。
早期的目标检测 ( 2000年以前 ) 没有遵循滑动窗口检测等统一的检测理念。当时的检测器通常基于如下低层和中层的视觉设计
(1)Components, shapes and edges(部件、形状、边缘)
核心理念:“Recognition-by-components” (分量识别)—— Distance Transforms,Shape Contexts,Edgelet,—— 复杂环境中效果不好。
机器学习:1998年之前:数据模型(Eigenfaces),1998-2005:小波表征(Haar),2005-2012:梯度表征。
(2)早期的CNN
早期基于CNN的检测模型计算效率较低,提出了许多加速的方法:共享权值复制神经网络(shared-weight replicated neural network) 和空间位移网络(space displacement network)。
总体来说,多尺度检测经历了以下几个阶段:
2014以前:特征金字塔和滑窗
2010-2015:基于候选框的检测
2013-2016:深度回归
2015以后:多参考检测
2016以后:多分辨率检测
(1)Feature pyramids + sliding windows特征金字塔+滑窗(-2014)
VJ和HOG用固定宽高比的滑窗检测目标,为了检测Pascal VOC中更复杂的目标,mixture model通过训练多个不同的模型来检测不同宽高比的目标。exemplar-based detection提供了一种基于范例的检测办法。
(2)Detection with object proposals目标提议框(2010-2015)
目标提议框旨在统一训练不同宽高比的多尺度方法,提议框是类别无关的一组框,可以包含任何目标。它被第一次使用是在2010年,避免了滑窗方法带来的大量计算。基于提议框的检测算法需要达到以下三个要求:高召回率,高定位准确度,基于1、2,提升检测精度和速度。现代的提议框检测方法分成三大类:分割聚类方法 segmentation grouping approaches,窗赋分方法 window scoring approaches,基于神经网络的方法 neural network approaches。从自底向上方法开始,慢慢演变为使用低层纹理、边缘特征,或人工提取的特征,提高定位准确度。2014年后,深度神经网络在检测任务上表现出色。
(3)Deep regression深度回归,单阶段检测器(2013-2016)
GPU算力的提升,人们开始使用更加直接粗暴的方式进行多尺度检测,于是就有了用深度神经网络直接回归边界框的坐标的方法,简单且容易实现,但是小对象定位不够准确。
(4)多尺度参考/多分辨率检测(2015-)
多尺度参考Multi-reference的思想是在每个像素点上预定义一组不同尺寸和宽高比参考框(锚框anchor),接着基于anchor进行预测。经典的损失函数为cross-entropy loss + L1/L2 loss,前者用于分类,后者用于回归,并且常有一个权重项平衡两者。若anchor box和gt box的交并比大于某一阈值,则将该anchor对应像素的回归损失回传,反之不回传。另一种流行的方法是多分辨率检测,也就是通过在网络的不同特征层上检测不同尺度的目标,浅层检小目标,深层检大目标,如FPN、SSD等。
其中t和t*是 predicted 的和 ground-truth 的边界框的位置,p和p*是它们的类别概率。IOU{a,a*}是锚框和它的ground-truth a* 之间的 IOU。η是一个IOU阈值。
2008年前:without BB regression
2008-2013:from BB to BB
2013-至今:from feature to BB
(1)Without BB regression (before 2018)
早期VJ和HOG通常直接把滑窗作为检测结果,为了获得更精确的定位和尺寸,就需要设计非常密集的滑窗。
(2)From BB to BB (2008-2013)
DPM是第一个采用边界框回归的方法。当时边界框回归是一种可以选择的后处理方法。
(3)From features to BB (after 2013)
2015年Faster RCNN将边界框的回归整合进了检测器中,并且实现了端到端。回归框直接通过卷积特征图得到,通常会使用smooth L1 Loss作为损失函数:
也有学者用root-square函数:
物体都是嵌入在周围环境中的,我们的大脑可以把物体和环境信息联系在一起,然后就能识别和理解物体。对于语义的提取,学界经历了三个阶段:
1)使用局部语义检测
2)使用全局语义检测
3)语义交互
(1)Detection with local context局部语义
局部语义信息是指目标周围的有限区域的视觉信息,曾经把目标检测的能力提升了不少。21世纪早期,学者发现局部语义可以提升人脸检测的性能、可以提升行人检测的性能。最近的深度学习也从局部语义中获益,要么是通过增大感受野获得局部语义信息,要么是通过目标的提议框。
(2)Detection with global context全局语义
全局语义可以挖掘额外的场景信息。早期的目标检测器的一种常用方法是将全局语义中的元素的统计信息整合进去,如Gist。现代的深度学习方法有两种手段:1)利用更大的感受野(甚至可以比原图大小还大),2)将全局的语义信息作为一种信息序列用于RNN中。
(3)Context interactive语义交互
语义交互指的是视觉元素的交互传达的部分信息,比如限制和依赖关系。对于大部分的检测器来说,目标是被分别检测的,没有考虑它们之间的关系。最近的研究将这种关系也考虑在内。可以分为两类:1)探索独立目标之间的关系,2)建模目标和环境之间的依赖关系。
非最大抑制 (NMS) 是一组重要的目标检测技术,在过去的20年里NMS 逐渐发展成以下三组方法:1) greedy selection 2) 边界框聚合,3) 学习 NMS。
(1)Greedy selection
Greedy selection背后的思想简单直观:对于一组重叠检测,选择检测分值最大的边界框,并根据预定义的重叠阈值删除相邻框并迭代执行。虽是当今目标检测的最强基线,仍有一定的改进空间,检测分值最大的可能不是最合适的,可能会覆盖/压制附近的物体,not suppress flase positives.
(2)BB aggregation
BB 聚合用于 NMS 的技术(VJ 检测器和 Overfeat),将多个重叠的边界框组合或聚类成一个最终检测,充分考虑了对象关系及其空间布局。
(3)Learning to NMS
主要思想是将NMS看作一个过滤器,对所有原始检测进行重新评分,并以端到端方式将NMS训练为网络的一部分,在改善遮挡和密集目标检测方面取得了良好的效果。
目标检测器的训练本质上是一个不平衡的数据学习问题。基于滑动窗口的检测器每个对象的背景和对象之间的不平衡可能达到极端的104~105,现代检测数据集进一步将不平衡比提高到106~107。在这种情况下,使用所有的背景数据进行训练是有害的,因为大量易产生的硬负样本将压倒学习过程,硬负样本挖掘 (HNM) 是针对训练过程中数据不平衡的问题。
(1)Bootstrap
目标检测中的Bootstrap训练从一小部分背景样本开始,然后在训练过程中迭代地添加新的误分类背景。在早期的对象检测器中,最初引入 bootstrap 的目的是减少对数百万个背景样本的训练计算。后来成为 DPM 和 HOG 检测器中解决数据不平衡问题的标准训练技术。
(2)HNM in deep learning based detectors
为了缓解训练期间的数据目标平衡问题,RefineDet中设计了一个 “anchor refinement module” 来过滤容易出现的负样本。另一种改进是设计新的损失函数,通过重新定义标准的交叉熵损失,使其更关注于困难的、分类错误的样本。
目标检测的加速技术大致可以分为“检测管道提速”、“检测引擎提速” 和“数值计算提速”三个层次。
在目标检测器的不同计算阶段中,特征提取通常占主导地位。对于基于滑动窗的检测器,计算冗余从位置和尺度两方面入手,其中位置冗余是由相邻窗口之间的重叠造成的,尺度冗余是通过相邻尺度间的特征关联造成的。
减少空间计算冗余最常用的方法是特征图共享计算,在滑动窗口前只计算一次整个图像的特征图,这种方法分辨率将受到单元格大小的限制,如果一个小对象位于两个单元格之间,所有检测窗口都可能忽略它,解决这个问题的一个方法是构建一个完整的特征金字塔。特征图共享计算的思想在基于卷积的检测器中得到了广泛的应用,其中包含大多数基于CNN的检测器。
为了减少尺度计算冗余,最成功的方法是直接缩放特征而不是图像,首次应用于VJ检测器。分析发现 HOG 相邻尺度与积分通道特征之间存在很强的关性,可以通过近似相邻尺度的特征图来加速特征金字塔的计算。 “ 检测器金字塔 ”通过在特征图上滑动多个检测器来检测不同尺度的对象,而不是重新缩放图像或特征。
传统的基于滑动窗口的检测器更喜欢使用线性分类器,kernel SVM等非线性分类器的检测精度较高也带来较高的计算开销。加快核心分类器的速度常用的是“模型近似”,reduced set vectors(缩减集向量)是kernel SVM的一种近似方法,其目的是用少量的合成向量来获得一个等价的决策边界,另一种方法是将其决策边界近似为分段线性形式,获得一个恒定的推理时间,也可以通过稀疏编码方法来加速。
VJ检测器为代表的级联检测需要一个粗到精的检测理念:使用简单的计算过滤掉大部分简单的背景窗口,然后用复杂的窗口处理那些更困难的窗口。级联检测常用于“大场景中的小对象”的检测任务,除了算法加速外,还被应用于提高对困难样本的检测,整合上下文信息,提高定位精度。
网络修剪和网络量化是加速CNN模型的两种常用技术,前者是指对网络结构或权值进行修剪以减小其大小,后者是指减少激活值或权值的码长。
网络修剪通常采用迭代的训练和修剪过程,在每个训练阶段后只移除一小部分不重要的权重,并重复这些操作。网络修剪简单地去除不重要的权值,可能导致卷积滤波器中存在一些稀疏连接模式,不能直接应用于CNN模型的压缩。解决这个问题的一个简单方法是删除整个过滤器而不是独立的权重。
网络量化主要集中在网络二值化,其目的是通过量化网络的激活值或权值为二进制变量,来加速网络的速度,以便浮点运算转换为AND,OR,NOT逻辑运算。显著加快计算速度,减少网络的存储,更容易部署到移动设备上。用最小二乘法通过二进制变量近似卷积,使用多个二进制卷积的线性组合可以得到更精确的近似,GPU加速库进行二值化计算有更显著的加速结果。
网络蒸馏是将大型网络的知识压缩成小型网络的一般框架,该思想的一种直接方法是使用“教师网络”来指导“学生网络”训练,另一种方法是对候选区域进行变换,使“学生网络”和“教师网络”的特征距离最小化。
设计一个轻量级的网络来加速基于 CNN 的检测器,在有限的时间成本下获得准确性,设计原则“更少的通道,更多的层”。其他方法:1) 分解卷积,2) 组卷积,3) 深度可分离卷积,4) 瓶颈设计,5) 神经结构搜索。
分解卷积是构建轻量级CNN模型最简单、最直接的方法。有两类分解方法:第一类方法是将一个大的卷积滤波器分解成一组空间维数较小的卷积滤波器,第二类方法是将一大组卷积分解为信道维数较小的两组。
组卷积的目的是通过将特征信道划分为多个不同的组,然后分别对每个组进行卷积,从而减少卷积层中参数的数量。
深度可分离卷积是组卷积中组数等于信道数,假设我们有一个带有d个滤波器的卷积层,和一个 c 通道的特征图。每个滤波器的大小为 k×k 。对于深度可分离卷积,每个k×k×c 滤波器首先被分割成 c 个片,每个片的大小为 k×k×1 ,然后在每个通道中对滤波器的每个片分别进行卷积。最后,一些 1x1 滤波器用于进行维度转换,以便最终的输出应该具有 d 通道。
瓶颈设计一种常见的方法是压缩检测器的输入层,以减少从检测管道开始的计算量,另一种方法是压缩检测引擎的输出,使特征图变薄,在后续检测阶段更加高效。
人们利用神经结构搜索(NAS)自动设计网络体系结构。NAS 已应用于大规模图像分类,目标检测和图像分割任务。NAS在搜索过程中考虑了预测精度和计算复杂度的限制。
介绍了四种重要的数值加速方法:1) 积分图像加速,2) 频域加速,3) 矢量量化,4) 降阶近似。
积分图像有助于快速计算图像子区域的和,积分图像的本质是信号处理中卷积的积分微分可分性:
其中,如果 是一个稀疏信号,那么卷积可以被方程右边的部分加速。积分图像还可以用来加速目标检测中更一般的特征:颜色直方图,梯度直方图,还通过计算积分 HOG 映射加速 HOG,积分 HOG 映射在图像中积累梯度方向,不是积累像素值。积分通道特征 ( ICF )已成功应用于行人检测,接近实时的检测速度。
线性检测器的检测是特征图与检测器权值之间的窗口内积,通过卷积实现。傅里叶变换可以加速那些大的滤波器。频域加速卷积的理论基础是信号处理中的卷积定理,在合适的条件下,两个信号卷积的傅里叶变换是其傅里叶空间的点乘:
其中, 是傅里叶变换, 是傅里叶反变换, 和 是输入图像和滤波器, 是卷积运算, 是点乘运算。利用快速傅里叶变换 ( Fast Fourier Transform,FFT )和快速傅里叶反变换 ( Inverse Fast Fourier Transform,IFFT )可以加速上述计算。
矢量量化 ( VQ )目的是通过一组小的原型矢量来近似一组大数据的分布,可用于数据压缩、加速内积运算。使用VQ将HOG直方图分组并量化为一组原型直方图向量,通过查表操作实现特征向量与检测权值的内积,没有浮点乘法和除法,速度提高一个数量级。
在深度网络中,全连接层的计算本质上是两个矩阵的乘法,降阶近似是一种加速矩阵乘法的方法。它的目的是对矩阵 进行低秩分解:
其中, 是由 的第一个 左奇异向量构成的 矩阵, 是一个包含 前 个奇异值的 对角矩阵, 是由 的第一个 右奇异向量构成的 矩阵,称为截断 SVD(Truncated SVD),将参数从 减少到 ,当 远小于 时效果显著。
在这一节中,我们将回顾近三年来最先进的对象检测方法。
检测器的精度在很大程度上取决于其特征提取网络,将主干网络称为检测器的“引擎”。
(1)AlexNet
AlexNet是一个八层的深度网络,是第一个开启计算机视觉深度学习革命的 CNN 模型。
(2)VGG
。VGG将模型的深度增加到16-19层,使用非常小的卷积滤波器(3x3),而不是以前 AlexNet使用的5x5和7x7。
(3)GoogLeNet
GoogLeNet又称Inception,增加了CNN的宽度和深度(多达22层)。Inception 系列的主要贡献是介绍了分解卷积和批量标准化。
(4)ResNet
Deep Residual Networks(深度残差网络,ResNet)比以前使用的卷积网络架构要深很多(高达152层)。ResNet 的目标是简化网络的训练,通过参考输入层将其层重新构造为学习残差函数。
(5)DenseNet
DenseNet表明CNN的捷径连接(the short cut connection)使我们能够训练更深更准确的模型,并引入一个密集连接块(a densely connected block),以前馈的方式将每层连接到另一层。
(6)SENet
挤压激励网络(queeze and Excitation Networks,SENet)主要贡献是将全局池化和混编(global pooling and shuffling)一体化,以学习feature map在通道方面的重要性。
特征表示的质量是目标检测的关键,许多研究人员在一些最新的引擎的基础上,进一步提高了图像特征的质量,其中最重要的两组方法是:1) 特征融合;2) 学习具有较大接受域的高分辨率特征。
不变性(Invariance)和同变性/等变化(equivariance)是图像特征表示的两个重要性质。分类:需要不变的特征表示,因为它的目的是学习高级语义信息。目标定位:需要等变的表示,因为它的目的是区分位置和尺度的变化。由于目标检测由目标识别和定位两个子任务组成,因此检测器必须同时学习不变性和等变性。
CNN模型由一系列卷积层和池化层组成,更深层次的特征具有更强的不变性,但等变性较小。虽然这有利于分类识别,但在目标检测中定位精度较低。相反,较浅层次的特征不利于学习语义,但它有助于对象定位,因为它包含更多关于边缘和轮廓的信息。CNN模型中深度和深度特征的融合有助于提高不变性和等变性。
目标检测中特征融合的方法:处理流程、元素智能操作。
(1)Processing flow
目标检测的特征融合方法有两类:自底向上融合,自顶向下融合。自底向上融合通过跳跃连接将浅层特征前馈到更深的层,自顶向下融合将更深层次的特征反馈给更浅层次。跨不同层编织特性。由于不同层的feature map在空间维度和通道维度上都可能有不同的尺寸,需要对feature map进行调整,调整通道数量、上采样低分辨率map或下采样高分辨率map,方法有最接近或双线性插值,分数阶条纹卷积,后者学习一种适当的方法来执行上采样本身。
(2)Element-wise operation
特征融合可以看作是不同特征映射之间的元素智能操作,有三组方法:1) element-wise的和,2) element-wise 的积,3) 串联。
element-wise的和是执行特征融合最简单的方法, element-wise的积与 element-wise的和非常相似,唯一的区别是使用乘法而不是求和。element-wise的积优点是可以用来抑制或突出某个区域内的特性,有利于小对象检测。特征拼接/串联优点是可以用来集成不同区域的上下文信息,缺点是增加了内存。
接受域和特征分辨率是基于CNN的检测器的两个重要特点,前者是指输入像素的空间范围,用于计算输出的单个像素,而后者对应于输入与特征图之间的下采样率。具有较大接受域的网络能够捕获更大范围的上下文信息,而具有较小接受域的网络则可能更专注于局部细节。特征分辨率越低,就越难检测小对象,提高特征分辨率最直接的方法是去除池化层或降低卷积下采样率。由于输出步长减小,接受域会变得太小,将缩小检测器的“视线”范围,并可能导致一些大型目标的漏检。
一种同时提高接收域和特征分辨率的方法是引入膨胀/扩展卷积(dilated convolution),又称无孔卷积(atrous convolution)或带孔卷积(convolution with holes)。主要思想是对卷积滤波器进行扩展,和使用稀疏参数。
深度神经网络的目标检测仍然遵循“特征图滑动窗口”的模式。
(1)Detection as sub-region search
子区域搜索是将检测视为一个路径规划过程,从初始网格开始,最终收敛到所需的 ground truth box。另一种方法是将检测看作是一个迭代更新过程,对预测边界框的角进行细化。
(2)Detection as key points localization
关键点定位优点是可以在语义分割框架下实现,不需要设计多尺度的anchor框。检测任务可以等价地框定为一对关键点定位问题。
为了提高定位精度,目前的检测方法主要有两种:1) 边界框细化法;2) 设计新的损失函数进行精确定位。
提高定位精度最直观的方法是对边界框进行细化,可以将其视为检测结果的后处理。仍然有一些具有意外尺度的对象不能被预定义的anchor很好地捕获。“迭代边界框细化”将检测结果迭代地输入BB回归器,直到预测收敛到正确的位置和大小。
回归损失函数并不对应最终的位置评估,传统边界框回归方法不能提供定位的置信度,多个BB重叠时,可能导致非最大抑制失败。设计新的损失函数可以解决,可以直接使用IoU作为定位损失函数,还有IOU引导的NMS来改进训练和检测阶段的定位,在概率推理框架下改进定位预测了边界框位置的概率分布。
通过学习语义分割可以提高目标检测能力。
语义分割提高目标检测能力的原因有三个。
(1)细分有助于类别识别
边缘和边界是构成人类视觉认知的基本要素,语义分割任务的特征能够很好地捕捉到对象的边界,分割有助于分类识别。
(2)细分有助于准确定位
定义良好的边界决定对象的ground-truth边界框,目标边界可以很好地编码在语义分割特征中,分割学习有助于准确目标定位。
(3)细分能够整合上下文
日常生活中的物体被不同的背景所包围,这些元素构成了一个物体的语境,整合上下文的语义分割将有助于目标检测。
通过分割提高目标检测的主要方法有两种:1) 采用丰富的特征学习;2) 采用多任务损失函数学习。
(1)丰富的特征学习
将分割网络看作一个固定的特征提取器,并作为附加特征集成到检测框架中,易于实现但分割网络可能带来额外的计算。
(2)多任务损失函数学习
在原有检测框架的基础上引入额外的分割分支,用多任务损失函数(分割损失+检测损失)训练该模型。检测速度不受影响但训练需要像素级的图像标注,引入“弱监督学习”的思想:他们不是基于像素级注释掩码进行训练,而是基于边界框级注释训练分割分支。
目标旋转和尺度变化是目标检测中的重要挑战,CNN学习到的特征是不受旋转和尺度变化的影响的。
对象旋转最直接的解决方案是数据扩充,使任何方向的对象都能被扩充的数据很好地覆盖,或者为每个方向训练独立的检测器。
(1)旋转不变损失函数Rotation invariant loss functions
最近的一些工作对原有的检测损失函数进行了约束,使旋转后的物体的特征保持不变。
(2)旋转校准Rotation calibration
改进旋转不变的检测的另一种方法是对候选对象进行几何变换,对于多级检测器很有效,前阶段的相关性将有利于后续的检测。这种思想的代表是空间变压器网络(STN)。
(3)Rotation RoI Pooling
在two-stage检测器中,特征池化的目的是为任意位置和大小的object proposal提取固定长度的特征表示,将proposal均匀地划分为一组网格,然后将网格特征串联起来。在极坐标下对网格进行网格划分使特征对旋转变化具有鲁棒性。
尺度鲁棒检测的训练和检测阶段都有了改进。
(1)尺度自适应训练Scale daptive training
大多数现代检测器都是将输入图像重新缩放到一个固定的尺寸,并将物体在所有尺度下的损失进行反向传播,会现“尺度不平衡”问题。构建图像金字塔可以缓解这一问题,但不能从根本上解决。图像金字塔的尺度标准化(SNIP),在训练阶段和检测阶段都建立图像金字塔,只对一些选定尺度的损失进行反向传播。使用高效重采样的SNIP(SNIPER),将图像裁剪并重新缩放到一组子区域,以便从大规模批量训练中获益。
(2)尺度自适应检测Scale adaptive detection
现代检测器大多采用固定的结构来检测不同尺寸的物体,配置不能适应意外的尺度变化。为了提高对小目标的检测,“自适应放大”技术自适应地将小目标放大为“大目标”。学习预测图像中对象的尺度分布,然后根据分布自适应地重新缩放图像。
大多数基于深度学习的检测器首先在大规模数据集上进行预训练,然后针对特定的检测任务进行微调。我们真的需要在ImageNet 上对检测器进行预训练吗?采用预训练网络进行目标检测存在一定的局限性。第一个限制是ImageNet分类和目标检测之间的散度,包括它们的损失函数和尺度/类别分布。第二个限制是领域不匹配。由于ImageNet中的图像是RGB图像,而有时需要进行检测的是深度图像或三维医学图像,无法很好地将预先训练好的知识转移到这些检测任务中。
为了加快训练速度和提高稳定性,一些研究人员引入密集连接(dense connection)和批量归一化(batch normalization)来加速浅层的反向传播。即使只使用10%的训练数据,随机初始化训练的鲁棒性也令人惊讶。
生成式对抗网络(Generative Adversarial Networks,GAN)由两个神经网络组成:一个生成网络和一个判别网络,它们在极小极大优化框架下相互竞争。
生成器学习从潜在空间映射到感兴趣的特定数据分布,鉴别器区分真实数据分布中的实例和生成器生成的实例。GAN广泛应用于图像生成、图像样式传输、图像超分辨率、小遮挡目标的检测。GAN 被用来通过缩小小目标和大目标之间的模型表示来增强对小目标的检测。使用对抗性训练生成遮挡掩模来提高对被遮挡物体的检测,对抗性网络直接修改特性来模拟遮挡。
弱监督目标检测的目标是训练一个只带有图像级注释而不是边界框的检测器。多实例学习模型不是使用一组单独标记的实例进行学习,而是接收一组标记的包,每个包包含多个实例。类激活映射揭示了如何使CNN在接受图像级标签训练的情况下仍然具有定位能力。WSOD通过选择信息量最大的区域,然后用图像级注释对这些区域进行训练。WSOD 屏蔽图像的不同部分,如果检测分数急剧下降,那么一个物体将高概率被覆盖。交互注释在训练中考虑了人的反馈,改进了 WSOD。
过去20年来一些重要的检测应用,包括行人检测、人脸检测、文本检测、交通标志/灯光检测和遥感目标检测。
行人检测在自动驾驶、视频监控、刑事侦查等领域得到了广泛的关注。早期的行人检测方法,如HOG检测器,ICF检测器,在特征表示,分类器的设计,检测加速度方面,为一般的目标检测奠定了坚实的基础,Faster RCNN已经被引用到行人检测中。
Small pedestrian小行人:在 Caltech 数据集中,15%的行人高度小于30像素。
Hard negatives:街景图像中一些背景与行人的视觉外观很相似。
Dense and occluded pedestrian拥挤行人:在 Caltech 数据集中,未被遮挡的行人仅占行人总数的29%。
Real-time detection实时监测:从高清视频中实时检测行人对自动驾驶和视频监控等应用至关重要。
行人检测发展可分为两个技术阶段:1) 传统的行人检测;2) 基于深度学习的行人检测。
(1)Traditional pedestrian detection methods
由于计算资源的限制,Haar小波特征在早期行人检测中得到了广泛的应用。为了提高对被遮挡行人的检测,组件检测(detection by components)把检测看作一个多部分检测器的集合,这些检测器分别在不同的人体部位训练,如头部、腿部和手臂上。基于梯度的表示和 DPM已经成为行人检测的主流。积分信道特征通过使用积分图像加速( Integral Channel Features,ICF )。
(2)Deep learning based pedestrian detection methods
To improve small pedestrian detection:由于卷积特征的分辨率较低,最新方法包括特征融合,引入额外的高分辨率手工特征,以及基于多个分辨率的集成检测结果。
To improve hard negative detection:改进引入了“交叉模态学习(cross-modal learning)”的思想,利用 RGB 图像和红外图像来丰富困难负样本的特征,包括语义分割(作为行人的上下文)。
To improve dense and occluded pedestrian detection拥挤行人:考虑到目标的吸引力和周围物体的排斥力,设计了新的损失函数,局部检测器的集成和attention mechanism(注意机制)是改善遮挡行人检测最常见的方法。
人脸检测是最古老的计算机视觉应用之一。人脸检测已经应用于各行各业,如数码相机中的“微笑”检测、电子商务中的“刷脸”、移动应用中的人脸化妆等。
Intra-class variation:人脸可以呈现出多种表情、肤色、姿势和动作。
Occlusion:人脸可能被其他物体遮挡部分。
Multi-scale detection:检测多种尺度下的人脸,特别是微小的人脸。
Real-time detection:移动设备上的人脸检测通常需要CPU的实时检测速度。
人脸检测的研究经历了多个历史时期:早期人脸检测(2001年以前)、传统人脸检测(2001-2015)、基于深度学习的人脸检测(2015-至今)。
(1)Early time’s face detection (before 2001)
早期的人脸检测算法可以分为三组:1) 基于规则的方法,将人类对构成一张典型面孔的知识进行编码,并捕捉面部元素之间的关系。2) 基于子空间分析的方法,分析了人脸在底层线性子空间中的分布。特征面(Eigenfaces)是这组方法的代表。3) 基于学习的方法:将人脸检测框架为滑动窗口+二进制分类 (目标vs背景) 的过程,常用的模型包括神经网络和SVM。
(2)Traditional face detection (2000-2015)
这一时期有两组人脸检测器。第一组方法是基于增强决策树构建的,计算简单,但在复杂场景下检测精度较低。第二组基于早期的卷积神经网络,利用特征的共享计算加快检测速度。
(3)Deep learning based face detection (after 2015)
在深度学习时代,大多数人脸检测算法都遵循一般的目标检测思想,Faster RCNN 和 SSD。
To speed up face detection:级联检测是深度学习时代加速人脸检测最常用的方法。另一种加速方法是预测图像中人脸的尺度分布,然后在一些选定的尺度上进行检测。
To improve multi-pose and occluded face detection:“人脸定标(face calibration)”的思想通过估计定标参数或通过多个检测阶段的渐进定标来改进多姿态人脸检测。为了提高对遮挡人脸的检测,最近提出了两种方法。第一个是融入“注意机制(attention mechanism)”,突出潜在人脸目标的特征。第二种是“基于部分的检测(detection based on parts)”,它继承了 DPM 的思想。
To improve multi-scale face detection:近年来多尺度人脸检测的研究包括多尺度特征融合和多分辨率检测。
本检测的基本目标是确定给定图像中是否有文本,定位并识别它。文本检测帮助视障人士 “ 阅读 ” 街道标志和货币,对门牌号和街道标识的检测和识别使得构建数字地图更加容易。
Different fonts and languages:文本可能有不同的字体颜色语言
Text rotation and perspective distortion:文本可能有不同的方向,甚至可能有透视失真。
Densely arranged text localization密集排列的文本:长径比大、布局密集的文本行很难精确定位。
Broken and blurred characters:破碎和模糊的字符在街景图像中很常见。
文本检测包括两个相关但相对独立的任务:1) 文本定位;2) 文本识别。现有的文本检测方法可分为“步进检测”和“综合检测”。
(1)Step-wise detection vs integrated detection
步进检测方法由字符分割、候选区域验证、字符分组、单词识别等一系列处理步骤组成。优点是大部分的背景都可以在粗分割步骤中进行滤波,大大降低了后续处理的计算成本,缺点是需要仔细设置所有步骤的参数,这些错误将在每个步骤中发生和积累。综合检测将文本检测定义为联合概率推理问题,在统一的框架下处理字符定位、分组和识别的步骤。优点是避免了累积误差,易于集成语言模型,缺点是当考虑到大量字符类和候选窗口时,推理的计算开销会很大。
(2)Traditional methods vs deep learning methods
传统的文本检测方法大多是在无监督的情况下生成候选文本,其中常用的技术包括最大稳定极值区域MSER)分割和形态滤波,还考虑了文本的对称性和笔画结构等领域知识。
文本的定位问题有两组方法。第一组方法将文本检测作为一般目标检测的特例,都有统一的检测框架,但对于方向性或长宽比较大的文本检测效果较差。第二组方法将文本检测框架为图像分割问题,优点是对文本的形状和方向没有特殊的限制,缺点是根据分割结果很难区分排列密集的文本行。
For text rotation and perspective changes文本旋转和视角更改:这个问题最常见的解决方案是在anchor boxes和RoI池化层中引入额外的参数,这些参数与旋转和视角变化相关。
To improve densely arranged text detection:基于分段的方法在检测密集排列的文本时显示出更大的优势。一个是“线段与链接(segment and linking)”, “segment”是指字符热图,“linking”是指两个相邻 segment 之间的连接,表示它们属于同一单词或文本行。另一个是引入额外的角/边界检测任务,以帮助分离密集排列的文本,其中一组角或封闭的边界对应于单个文本行。
To improve broken and blurred text detection:处理破碎和模糊文本的方法是使用单词级识别和句子级识别。处理不同字体的文本,最有效的方法是使用合成样本进行训练。
随着自动驾驶技术的发展,交通标志和交通灯的自动检测近年来引起了人们的极大关注。
Illumination changes:车辆行驶在强光下或夜间检测尤为困难。
Motion blur:由于汽车运动,车载摄像头拍摄到的图像比较模糊。
Bad weather:在恶劣天气下,如雨雪天气,图像质量会受到影响。
Real-time detection:实时监测对自动驾驶特别重要。
现有的交通标志/灯光检测方法可以分为两大类:传统的检测方法和基于深度学习的检测方法。
(1)Traditional detection methods
传统的检测方法通常基于颜色阈值,视觉显著性检测,形态滤波,边缘/轮廓分析。近年来将GPS与数字地图相结合用于交通灯检测,2010年遵循“特征金字塔 + 滑动窗”。
(2)Deep learning based detection methods
在深度学习时代,Faster RCNN和SSD被应用到交通标志/灯光检测任务中,用注意机制和对抗性训练改善复杂交通环境下的检测。
随着遥感图像分辨率的提高,遥感目标检测(如飞机、船舶、油罐等的检测)成为研究热点。遥感目标检测在军事侦察、灾害救援、城市交通管理等方面有着广泛的应用。
Detection in “big data”:由于遥感图像数据量巨大,如何快速准确地检测遥感目标仍然是一个问题。
Occluded targets:地球表面每天有50%以上被云覆盖。
Domain adaptation:不同传感器不同的调制和分辨率拍摄的遥感图像存在很大的差异。
(1)Traditional detection methods
传统的遥感目标检测方法大多采用两阶段检测范式:1) 候选框提取;2) 目标验证。候选框提取阶段常用基于灰度值滤波的方法,基于视觉显著性的方法,基于小波变换的方法、基于异常检测的方法等,都是非监督方法,在复杂的环境中通常会失败。在目标验证阶段常用的特征包括HOG,LBP,SIFT,遵循滑动窗口检测范式。为了改进遮挡目标检测常用“局部检测”,为了检测不同方向的目标使用“混合模型”。
(2)Deep learning based detection methods
Faster RCNN和SSD已经引起了遥感界越来越多的关注,由于遥感图像与日常图像的巨大差异,为了检测不同方向的目标,改进了ROI池化层,以获得更好的旋转不变性。为了提高区域自适应能力,从贝叶斯的角度提出了检测方法,根据测试图像的分布自适应更新模型,注意机制和特征融合策略也被用来改进小目标检测。
本文广泛综述了一些里程碑检测器(例如VJ检测器、HOG检测器、DPM、Faster-RCNN、YOLO、SSD等),关键技术,加速方法,检测应用,数据集和指标,讨论了目前遇到的挑战,以及如何将这些检测器进一步扩展和改进。未来的目标检测研究可能会集中在以下几个方面:
Lightweight object detection轻量物体检测:加快检测算法的速度,使其能够在移动设备上平稳运行。一些重要的应用包括移动增强现实、智能摄像头、人脸验证等。
Detection meets AutoML:深度学习的检测器变得越来越复杂,严重依赖于经验。未来的方向是在使用神经结构搜索设计检测模型时减少人为干预。
Detection meets domain adaptation领域自适应:任何目标检测器的训练过程本质上都可以看作是一个假设数据独立且同分布(i.i.d)时的似然估计过程。GAN在领域自适应方面显示出良好的应用前景,对未来的目标检测具有重要的指导意义。
Weakly supervised detection弱监督检测技术:基于深度学习的检测器的训练通常依赖于大量注释良好的图像,注释过程耗时、开销大且效率低。开发弱监督检测技术,只使用图像级标注或部分使用边界框标注对检测器进行训练,对于降低人工成本和提高检测灵活性具有重要意义。
Small object detection:在大场景中检测小物体一直是一个挑战,该研究方向的一些潜在应用包括利用遥感图像计算野生动物的数量和检测一些重要军事目标的状态,进一步的方向可能包括高分辨率轻量级网络的设计。
Detection in videos:高清视频中的实时目标检测/跟踪对于视频监控和自主驾驶具有重要意义,传统的目标检测器通常设计为基于图像的检测,而忽略了视频帧之间的相关性。通过探索时空相关性来改进检测是一个重要的研究方向。
Detection with information fusion信息融合:RGB-D图像、三维点云、激光雷达等多数据源/多模式的目标检测对自主驾驶和无人机应用具有重要意义。目前存在的问题包括:如何将训练有素的检测器移植到不同的数据模式,如何进行信息融合以提高检测能力等。