作者回顾了目标检测技术近二十年来的发展历程,参考了400多篇相关论文,讨论主题包括历史上的里程碑检测器、检测数据集、度量标准、检测系统基本构建块、加速技术以及最新检测方法。论文还对行人检测、人脸检测、文本检测等重要检测应用进行了综述,并对近年来它们面临的挑战和技术改进进行了分析。
从应用角度来看,目标检测可以分为通用目标检测和检测应用。前者利用统一框架检测不同类型目标,后者则是特定的检测应用场景,如行人检测、人脸检测、文本检测等。
图 1. 为近年来目标检测领域发表的论文数量变化趋势
图 1. 从1998-2018年目标检测领域发表的论文不断增加本文与其他综述的主要区别在于:
根据技术发展的脉络进行全面的回顾对关键技术和最新技术进行深入探索对检测加速技术的综合分析目标检测的困难和挑战
除了常见的计算机视觉任务面临的挑战,比如:不同视角、光照、类中差异等,目标检测面临的挑战包括但是不限于以下几个方面:
目标旋转和尺度变化(小目标)精确目标定位稠密和遮挡目标检测检测加速作者在第 2 2 2 部分回顾了目标检测 20 20 20 年来的发展史。第 3 3 3 部分介绍目标检测加速技术。第 4 4 4 部分总结了近三年来最新的检测方法。第 5 5 5 部分回顾了一些重要的检测应用。第 6 6 6 部分总结论文,分析未来研究方向。
这部分将介绍里程碑检测器、检测数据集、度量准则以及关键技术发展
过去20年,目标检测经历了两个主要阶段:传统目标检测(2014年之前)、深度学习目标检测(2014年之后)
图 2. 展示了目标检测发展历程
图 2. 目标检测发展路线传统目标检测算法建立在手工设计的特征的基础上。由于缺乏有效的图像表示,人们别无选择,只能设计复杂的特征,以及各种加速技巧来使用有限的计算资源。
VJ 检测器
V J VJ VJ 检测器首次实现了无约束的实时人脸检测(如,皮肤颜色分割)。运行在 700 M H z P e n t i u m I I I C P U 700MHz~Pentium~III~CPU 700MHz Pentium III CPU 上,同等精度下比其他算法快几十倍甚至几百倍。
V J VJ VJ 检测器遵循最直接的检测方式,即滑动窗口:通过图像中所有可能的位置和尺度来查看是否包含人脸。这种过程看似简单,背后的计算远远超出该时代计算机的算力。 V J VJ VJ 检测器采用积分图、特征选择、检测级联极大地提升了检测速度。
积分图:积分图是一种加速框过滤或卷积过程的计算方法。和同时期的其他方法一样, V J VJ VJ 检测器使用 H a a r Haar Haar 小波作为图像的特征表示。积分图使每个窗口的计算复杂度与窗口大小无关。
特征选择: 作者没有使用一组人工选择的 H a a r Haar Haar 基滤波器,而是使用 A d a b o o s t Adaboost Adaboost 算法从一组大量随机特征池中选择一组最有利于人脸检测的小特征集。
检测级联: V J VJ VJ 检测器引入多阶段检测范式(检测级联),通过减少背景窗口上的计算,增加人脸目标计算来减少计算开销。
HOG 检测器
H O G HOG HOG 被看作是该时期尺度不变特征变换和形状上下文的重要改进。为平衡特征不变性(平移、缩放、光照)和非线性(区分不同类目标), H O G HOG HOG 描述符被设计成在均匀间隔单元的密集网格上计算,并使用重叠的局部对比归一化来提高精度。尽管 H O G HOG HOG 可以用于检测多种目标,它的最初动机是行人检测。为检测不同大小的目标, H O G HOG HOG 多次缩放输入图像,并保持检测窗口大小不变。
DPM
D P M DPM DPM 遵循分而治之的思想,训练可以简单地看作是学习一种正确的目标分解方法,推理可以看作是对不同目标部位的检测的集合。比如,检测车的问题,可以看作是对车窗,车体,轮子的综合检测。星模型的研究是由 P . F e l z e n s z w a l b P. Felzenszwalb P.Felzenszwalb 等人完成的, R . G i r s h i c k R. Girshick R.Girshick 等人进一步将星模型扩展到混合模型。
典型的 D P M DPM DPM 检测器是由根滤波器和部位滤波器组成。 D P M DPM DPM 提出一种弱监督学习方法,而不是手动指定部位滤波器配置(例如,大小和位置),它可以将部位滤波器的所有配置作为潜在变量来学习。 R . G i r s h i c k R. Girshick R.Girshick 将此过程进一步表述为多实例学习的特例,并使用难分负样本挖掘、边界框回归和 context priming 来提升检测精度。 G i r s h i c k Girshick Girshick 开发了一种 “编译” 检测模型的技术,使模型变得更快,实现了级联架构,在不损害精度的条件下,速度提升了十倍以上。
RCNN
首先通过 S e l e c t i v e S e a r c h Selective Search SelectiveSearch 提取一系列目标提议,然后将每个提议缩放到特定大小喂到卷积神经网络中提取特征,最后使用线性 S V M SVM SVM 预测提议中是否包含目标,以及目标属于哪个类别。
尽管 R C N N RCNN RCNN 有了很大提升,它的缺陷也很明显:大量重叠提议上的冗余特征计算导致检测速度极其慢。
SPP-Net
S P P − N e t SPP-Net SPP−Net 的主要贡献是提出了空间金字塔池化层(SPP),这使 C N N CNN CNN 对任意大小的图像和 R O I ROI ROI 能够生成固定大小的表征,而不需要进行缩放。使用 S P P − N e t SPP-Net SPP−Net 进行目标检测,只需从整个图像提取一次特征图,就可以生成任意区域的固定长度的表征来训练检测器,避免了重复卷积运算。
在不牺牲精度的条件下, S P P − N e t SPP-Net SPP−Net 检测速度比 R − C N N R-CNN R−CNN 快 20 20 20 倍。但是它仍然有一些缺点,首先,训练是分阶段进行的,其次,只微调了全连接层,忽略了之前所有层。
Fast RCNN
结合 R − C N N R-CNN R−CNN 和 S P P − N e t SPP-Net SPP−Net, F a s t R − C N N Fast~R-CNN Fast R−CNN 相比于 R − C N N R-CNN R−CNN 精度从 58.5 % 58.5\% 58.5% 提升到 70.0 % 70.0\% 70.0%,检测速度提升了 200 200 200 倍。
但是它的检测速度仍然受限于 S e l e c t i v e S e a r c h Selective~Search Selective Search。
Faster R-CNN
它是第一个端到端,第一个近实时的深度学习检测器。它的主要贡献是引入了 R P N RPN RPN,使区域提议近乎无时间损耗。它将区域提议、特征提取、边界框回归集成在一个统一的,端到端框架中。
FPN
在 F P N FPN FPN 之前,大多数检测器只在网络顶层进行检测。虽然深层特征有利于目标分类,但是不利于目标定位。为此, F P N FPN FPN 开发了一个具有横向连接的自顶向下的体系结构,用在所有尺度上构建高级语义。由于 C N N CNN CNN 通过前向传播自然形成一个特征金字塔, F P N FPN FPN 在多尺度目标检测方面显示出巨大的进步。
YOLO
相比于之前的检测方法, Y O L O YOLO YOLO 没有区域提议步骤,能够实现快速检测。尽管检测速度有极大的提升,但是相比于 t w o − s t a g e two-stage two−stage 方法,定位精度下降,尤其对于一些小目标更是如此
SSD
S S D SSD SSD 引入了多参考多分辨率检测技术,极大地提高了单阶段检测器精度,特别对一些小物体而言。 S S D SSD SSD 在检测速度和精度方面有优势。 S S D SSD SSD 和之前的检测器的区别在于,它在不同层上检测不同尺度的目标。
RetinaNet
尽管单极检测器速度快而且简单,但是精度上已经落后两级检测器很多年。极端的前景-背景类不平衡是造成这一现象的主要原因。作者在交叉熵损失的基础上引入 f o c a l l o s s focal~loss focal loss,训练时,重点关注难分、误分类样本。
这些数据集的统计数字见表 1 1 1 图 3 3 3 为08-18年在数据集上的检测精度
图 3 3 3 在VOC07、VOC12、MS-COCO数据集上的检测精度Pascal VOC
Pascal Visual Object Classes(05-12) 是计算机视觉领域最重要的赛事之一。包含多任务,图像分类、目标检测、语义分割和行为检测。主要有两个版本的 Pascal-VOC 用于检测:VOC07 和 VOC12,前者包含 5K 张训练图像,共 12K 个标注目标。后者包含 11K 张训练图像,共 27K 个标注目标。两个数据集中包含了 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
ImageNet Large Scale Visual Recognition Challenge(10-17) 包含检测挑战赛。检测数据集包括 200 类视觉目标,图像/目标比 VOC 大两个数量级。例如,ILSVRC-14 包含517K 图像以及 534K 注释目标。
MS-COCO
MS-COCO 是当前最有挑战性的目标检测数据集。从 15 年开始举办比赛。它的目标类别比 ILSVRC 少,但是目标实例更多。例如,MS-COCO-17 包含 164K 张图像,来自 80 类的 897K 个标注目标。与 VOC 和 ILSVRC 相比,MS-COCO 除了边界框注释以外,每个目标通过实例分割进一步标注来帮助精确定位。此外,它包含更多小目标(面积小于图像的 1 % 1\% 1%),以及密集定位目标。这些特点使 M S − C O C O MS-COCO MS−COCO 中的目标分布更接近于真实世界。
Open Images
2018 年推出了 O p e n I m a g e s Open~Images Open Images 检测挑战赛。包含两个任务:
标准目标检测视觉关系检测,用于检测特定关系中的匹配目标目标检测,数据集包含 1910 K 1910K 1910K 张图像, 600 600 600 个目标类别的 15440 K 15440K 15440K 个标注目标。
其他数据集
表 2 − 6 2-6 2−6 列举了特定检测领域比较流行的数据集
表 2 2 2 行人检测数据集 表 3 3 3 表 3 3 3 面部检测数据集 表 4 4 4 表 4 4 4 文本检测数据集 表 5 5 5 表 5 5 5 交通灯和交通信号检测数据集 表 6 6 6 表 6 6 6 遥感目标检测数据集最开始行人检测使用每个窗口漏检 v s vs vs F P FP FP(FPPW) 来评价检测性能; C a l t e c h p e d e s t r i a n d e t e c t i o n Caltech~pedestrian~detection Caltech pedestrian detection 使用==每张图像的 F P FP FP==来评估性能;
V O C 07 VOC07 VOC07 以后使用 A P AP AP 评价检测性能。 A P AP AP 定义为不同召回率下的平均检测精度,通常在某一特定类别下进行评估。为比较所有目标类的检测性能,通常使用 m A P mAP mAP 作为最终性能指标。
为度量目标定位精度,使用交并比( I o U IoU IoU)来检查预测框和 G T GT GT 框之间的 I o u Iou Iou 是否大于预定义的阈值,如, 0.5 0.5 0.5。如果大于阈值则表示成功检测,否则表示漏检。基于 0.5 I o U 0.5IoU 0.5IoU 的 m A P mAP mAP 已经成为多年来用于目标检测问题的事实上的度量标准。
M S − C O C O MS-COCO MS−COCO 的 A P AP AP 是在 0.5 − 0.95 0.5-0.95 0.5−0.95 多个 I o U IoU IoU 阈值上的平均值。
O p e n I m a g e s Open~Images Open Images 数据集中的评估有了一些进一步的发展,例如,通过考虑框组和非穷举图像级类别层次。一些研究人员还提出了一些替代指标,例如定位召回精度。基于 V O C / C O C O VOC/COCO VOC/COCO 的 m A P mAP mAP 仍然是最常用的目标检测评估指标。
早期检测通常不遵循滑动窗口等统一检测理念。当时检测器通常基于低级和中级视觉设计。
组件、形状和边缘
部件识别,作为重要认知理论,长期以来一直是图像识别和目标检测核心思想。早期研究将目标检测定义为目标组件、形状、轮廓之间的相似度度量,包括距离变换、形状上下文和 E d g e l e t Edgelet Edgelet 等等。
基于机器学习的检测经历了多个发展阶段,包括外观统计模型(1998)、小波特征表示(98-05)、梯度表示(05-12)。
建立目标统计模型,比如特征脸是目标检测史上第一波基于学习的方法。相比于同时期基于规则和模板的方法,统计模型更好地提供了目标外观的完整描述。
2000 年以后,小波特征变换开始主导视觉识别和目标检测。这组方法的本质是通过将图像从像素变换成一组小波系数来学习。在这些方法中, H a a r Haar Haar 小波由于其较高的计算效率,被广泛用于目标检测任务中,如一般目标检测、人脸检测、行人检测等。
早期基于 CNN 的目标检测
不同大小和纵横比的多尺度检测是目标检测领域的主要挑战之一。过去 20 年经历了多个历史阶段:
特征金字塔和滑动窗口(—2014)目标提议检测(2010—2015)深度回归(2013—2016)多参考检测(2015—)多分辨率检测(2016—)如图 6 6 6 所示
图 6 6 6 多尺度检测的发展特征金字塔和滑动窗口
包括 H O G HOG HOG、 D P M DPM DPM、 O v e r F e a t OverFeat OverFeat
开始 V J VJ VJ 和 H O G HOG HOG 建立特征金字塔,使用固定长宽比的检测窗来检测人脸和行人。后来使用混合模型来检测多个长宽比目标。基于样本的检测为训练样本中每个实例训练单独的模型。
基于目标提议的检测
目标提议指一组很可能包含目标的未知类候选框。这可以避免滑动窗口在整个图像上穷尽搜索。
该类检测算法应该满足以下条件:
高召回率高定位精度在前两个基础上,提高精度,减少时间这种方法主要划分为三类:
分割分组方法窗口评分方法基于神经网络的方法早期的提议检测方法遵循自底向上的检测理念,受视觉显著性检测的影响。之后研究人员转向低水平视觉(例如边缘检测)和更细致的手工技巧,以提高候选框定位。2014 年以后,自顶向下基于学习的方法开始展现更多的优势。
许多研究者提出以下问题:目标提议是为了提高检测精度还是加快检测速度? 单级检测和深度回归技术兴起后,提议检测很快从视野中溜走。
深度回归
随着 G P U GPU GPU 算力的增加,人们处理多尺度检测问题越来越直接。基于深度学习特征直接预测边界框坐标是非常简单的。这种方法简单易实现,但是定位可能不够精确,特别对于一些微小目标而言。多参考检测解决这一问题。
多参考-分辨率检测(2015—)
主要思路是通过在图像不同位置预定义一系列不同大小和长宽比的参考框,并且基于这些参考框来预测检测框。
每个预定义的 anchor 的损失主要包括两部分:类别交叉熵损失; L 1 / L 2 L1/L2 L1/L2 目标定位回归损失。损失函数可写为: (1) L ( p , p ∗ , t , t ∗ ) = L c l s . ( p , p ∗ ) + β I ( t ) L l o c . ( t , t ∗ ) I ( t ) = { 1 IOU { a , a ∗ } > η 0 else \begin{aligned} L\left(p, p^{*}, t, t^{*}\right)&=L_{c l s .}\left(p, p^{*}\right)+\beta I(t) L_{l o c .}\left(t, t^{*}\right)\\ I(t)&=\left\{\begin{array}{ll}{1} & {\operatorname{IOU}\left\{a, a^{*}\right\}>\eta} \\ {0} & {\text { else }}\end{array}\right. \end{aligned}\tag1 L(p,p∗,t,t∗)I(t)=Lcls.(p,p∗)+βI(t)Lloc.(t,t∗)={10IOU{a,a∗}>η else (1) η \eta η 为 I o U IoU IoU 阈值 0.5 0.5 0.5。
多分辨率检测是在网络的不同层检测不同大小的目标。 C N N CNN CNN 前向传播天然形成特征金字塔结构,在浅层检测小目标,深层检测大目标更加容易。多参考和多分辨率检测已经形成当前检测器两个基本模块。
B B BB BB 回归经历了三个历史阶段:
无 B B BB BB 回归(—2008)从 B B BB BB 到 B B BB BB(2008—2013)从特征到 B B BB BB (2013—)图 7 7 7 展示了这一发展过程
图 7 7 7 B B BB BB 发展历程无 BB 回归
比如 V J VJ VJ 和 H O G HOG HOG 检测器没有使用 B B BB BB 回归,通常把滑动窗口看作检测结果。为获取精确的目标定位,研究人员只能在每个位置密集使用金字塔和检测器。
从 BB 到 BB
D P M DPM DPM 首先使用 B B BB BB 回归来检测目标。那时的 B B BB BB 回归作为后处理块,是一个可选项。由于 V O C VOC VOC 为每个目标预测单个边界框,因此 D P M DPM DPM 生成最终检测的最简单的方法是直接使用根过滤器位置。
从特征到 BB
F a s t e r R C N N Faster~RCNN Faster RCNN 以后, B B BB BB 回归不再作为独立的后处理块而是和检测器集成,并以端到端的方式训练。 s m o o t h − L 1 smooth-L1 smooth−L1 函数如下: (2) L ( t ) = { 5 t 2 ∣ t ∣ ⩽ 0.1 ∣ t ∣ − 0.05 else L(t)=\left\{\begin{array}{ll}{5 t^{2}} & {|t| \leqslant 0.1} \\ {|t|-0.05} & {\text { else }}\end{array}\right.\tag2 L(t)={5t2∣t∣−0.05∣t∣⩽0.1 else (2) 平方根函数: (3) L ( x , x ∗ ) = ( x − x ∗ ) 2 L\left(x, x^{*}\right)=\left(\sqrt{x}-\sqrt{x^{*}}\right)^{2}\tag3 L(x,x∗)=(x −x∗ )2(3) 作为回归损失,比 D P M DPM DPM 中最小二乘损失具有更强的鲁棒性。
大脑利用事物和环境之间的联系来促进视觉感知和认知。上下文启发长期用于提升检测。在其发展史上主要有三个常见方法:
使用局部上下文检测全局上下文检测上下文交互其发展历程如图所示。
图 8 8 8 语境启发发展历程局部上下文检测
局部上下文指要检测的目标周围区域的视觉信息。早在21世纪初,研究者发现,包含局部上下文,例如面部边界轮廓,可以帮助提升人脸检测性能。深度学习通过简单扩大网络的感受野或目标提议的大小来提升检测性能。
全局上下文检测
全局上下文利用场景配置作为目标检测附加信息源。早期检测,集成全局上下文常见的方法是集成构成场景的元素的统计摘要,如 G i s t Gist Gist。深度学习检测器有两种方法集成全局上下文。
利用更大的感受野(甚至比图像大),或者对 C N N CNN CNN 特征进行全局池化操作。将全局上下文看作一种序列信息,使用循环神经网络来学习。上下文交互
上下文交互是指通过视觉元素的交互传递的信息,比如,约束和依赖性。对于大多数目标检测器,目标实例被单独检测和识别,而不利用它们的关系。最近的一些研究表明,可以通过考虑上下文交互来改进现代目标检测器。最近的一些改进可以分为两类:
第一类是探索单个目标之间的关系第二类是探索目标和场景之间的依赖关系模型由于相邻窗口具有相似的检测分数,使用非最大抑制后处理步骤可以删除重复的检测框,获得最终结果。20年来,非最大抑制发展出三种方法:
贪心选择边界框聚合学习非最大抑制图 9 9 9 为非最大抑制发展历程
图 9 9 9 非最大抑制发展历程贪心选择
该方法老式但流行,其思想简单而直观:对于一组重叠检测,选择具有最大检测分数的边界框,同时根据预定义阈值(如, 0.5 0.5 0.5)移除相邻的框,上述过程以贪婪的方式迭代执行。
该方法虽然主流,但是仍然有提升空间,如图 11 11 11。
图 11 11 11 NMS 贪心选择失败实例 主要有以下几点原因: 得分最高的检测,未必最合适可能抑制附近的检测不会去除假正例BB 聚合
主要思想是将多个重叠框合并或聚类为一个最终检测。优点在于充分考虑目标关系及其空间布局。 V J VJ VJ 和 O v e r F e a t OverFeat OverFeat 使用该方法。
学习 NMS
主要思想是将 NMS 看作滤波器,对所有原始检测打分,并且将 NMS 看作网络的一部分进行端到端的训练。与传统方法相比,这些方法在改善遮挡和密集目标检测方面表现出良好的效果。
HNM 主要用于处理训练中类别不平衡问题。 该技术发展历程如图所示。
图 10 10 10 HNM 发展历程Bootstrap
指一组训练技术,训练从一小部分背景样本开始,训练过程中迭代添加新的未分类背景。早期引入 Bootstrap 的目的是减少数百万背景样本的训练计算。后来变成 D P M DPM DPM 和 H O G HOG HOG 检测器标准的训练技术,用于处理类不平衡问题。
基于深度学习的 HNM
平衡正负样本权重 S S D SSD SSD 和 O H E M OHEM OHEM 只有小部分样本的梯度会被反向传播设计损失函数来关注难分样本目标检测加速是一个重要也具有挑战性的问题。主要分为三组:
检测管道加速检测引擎加速数字计算加速如图 12 12 12 所示
图 12 12 12 检测加速技术特征提取是主要计算量。对于滑动窗口检测器,冗余来自于位置和尺度两方面,前者是由相邻窗口之间的重叠引起的。后者是由相邻尺度之间的特征相关性引起的。
最常见的思路是特征图共享计算,即,在滑动窗口前只计算一次整个图像特征图。传统检测器的图像金字塔可以被看做是特征金字塔。这种方法的缺点是特征图分辨率受单元格大小的限制,如果一个小目标位于两个单元格之间,则所有检测器都可能忽略它。解决这一问题的方法是构建完整特征金字塔。
特征图共享计算的思想在卷积型检测器中也得到了广泛应用。
最成功的方法是直接缩放特征而不是图像。但是由于模糊效应,这种方法不能直接用于 H O G − l i k e HOG-like HOG−like 特征。 H O G HOG HOG 邻域尺度和积分通道特征之间具有强相关性,这种相关性可以通过近似相邻尺度特征图来加速特征金字塔计算。此外,建立检测器金字塔是另一种加速方案,即通过在一个特征图上简单滑动多个检测器来检测不同尺度目标,而不是缩放图像或特征。
基于滑动窗口的检测器,如 H O G HOG HOG 和 D P M DPM DPM,由于线性分类器计算复杂度较低,因此更多采用线性分类器。核支持向量机在提高精度的同时,也带来较高的计算开销。作为标准非参数方法,传统核方法没有固定的计算复杂度,当训练集很大时,检测速度会非常慢。
模型近似是最常用的加速核分类器方法。由于经典核支持向量机的决策边界仅取决于少数样本(支持向量),推理阶段的计算复杂度与支持向量的数量成正比。
约简集向量是核支持向量机的一种逼近方法,目的是在少量合成向量基础上获得等价决策边界。另一种加速核支持向量机的方法是将其决策边界近似成分段线性形式,从而达到恒定推理时间。核方法还可以通过稀疏编码的方式加速。采用由粗到精的检测思路:通过简单计算过滤掉大多数简单的背景窗口,然后通过复杂计算处理比较困难的窗口。 V J VJ VJ 是级联检测器的代表。后来的 H O G HOG HOG 和 D P M DPM DPM 都使用这种方法加速。
近年来,级联检测用于基于深度学习的检测器,尤其是大场景中的小目标检测,如人脸检测,行人检测等。级联检测除了加速算法,还可以解决其他问题,比如改进难分样本检测,集成上下文信息,提高定位精度等。
前者对网络结构或权重进行剪枝来减小模型大小,后者指减小激活或者权重的代码长度。
最早是 o p t i m a l b r a i n d a m a g e optimal~brain~damage optimal brain damage 用于压缩多层感知网络的参数,这种方法中,网络的损失函数近似为二阶导数,从而去除一些不重要的权重。根据这一思路,近年来网络剪枝通常 采用迭代训练和剪枝方法,每个训练阶段后只去除一部分不重要的权重,并重复这一过程。由于传统网络剪枝只去除了不重要的权重,可能导致卷积核中一些稀疏连接模式,因此不能直接用于压缩 CNN 模型。
近来关于网络量化的研究主要集中在网络二值化,目的是通过将网络激活或者权重量化为二进制变量(0/1),从而使浮点操作转换为逻辑操作(与、或、非)来加快网络速度。网络二进制化可以显著加快计算速度,减少网络存储,更容易部署在移动端。上述思想一个可能的实现是,通过最小二乘法将卷积近似为二元变量。利用多个二元卷积的线性组合可以得到更精确的近似。此外,一些研究进一步开发了用于二值化计算的 GPU 加速库,获得更显著的加速效果。
这种方法的一种直接思路是使用教师网络指导学生网络的训练,以便后者实现加速检测。另一种方法是对候选区域进行变换,使学生网络和教师网络之间的特征距离最小化。这种方法使检测模型在同等精度下,速度提高为原来的两倍。
最后一种加速基于 CNN 检测器的方法是直接设计轻量级网络,而不是现成的检测引擎。 图 14 14 14
图 14 14 14 各种轻量级卷积方法分解卷积是最简单、直接的方法。主要有两组:
在空间维度上,将一个大卷积核分解为一组小卷积核 图 14 ( b ) 14(b) 14(b) 如 7 × 7 7\times7 7×7 卷积核分解为 3 3 3 个 3 × 3 3\times3 3×3 卷积核,两者感受野大小相同,但是后者更高效。将一个 k × k k\times k k×k 卷积核分解为一个 k × 1 k\times1 k×1 和一个 1 × k 1\times k 1×k 卷积核。 在通道维度上,将一大组卷积核分解为两小组卷积核 图 14 ( c ) 14(c) 14(c) 比如特征图通道数为 c c c 卷积核数量为 d d d,可以分解为 d ′ d' d′ 个卷积核的卷积层 + d d d 个卷积核的卷积层。原始层的复杂度从 O ( c k 2 d ) O(ck^2d) O(ck2d) 减少到 O ( c k 2 d ′ ) + O ( d ′ d ) O(ck^2d')+O(d'd) O(ck2d′)+O(d′d)。群卷积通过将特征通道划分为多个不同的组,然后在每一组分别进行卷积来减少卷积层参数数量。如果将特征通道均匀划分为 m m m 组,理论上,卷积计算的复杂度将降低到原来的 1 / m 1/m 1/m。如图 14 ( d ) 14(d) 14(d)
可以被看作是群卷积当组数等于通道数的特例。如图 14 ( e ) 14(e) 14(e)。这一思想被用于目标检测和细粒度分类。
主要有两种思路:
压缩检测器输入层,减少检测管道开始的计算量压缩检测引擎的输出,使特征图更薄近来,通过神经结构搜索( N A S NAS NAS)自动设计网络体系结构引起人们极大的兴趣。
常用于目标检测的数值方法主要有四种:
积分图加速频域加速矢量量化降秩逼近积分图能够帮助快速计算图像子区域的和。其本质是信号处理中,卷积的积分—微分可分性。 (4) f ( x ) ∗ g ( x ) = ( ∫ f ( x ) d x ) ∗ ( d g ( x ) d x ) f(x) * g(x)=\left(\int f(x) d x\right) *\left(\frac{d g(x)}{d x}\right)\tag4 f(x)∗g(x)=(∫f(x)dx)∗(dxdg(x))(4) 其中, d g ( x ) / d x d g(x) / d x dg(x)/dx 是一个稀疏信号,卷积可以通过等式的右边进行加速。
由于线性检测器的检测可以被看做是特征图和检测权值的窗口内积,这一过程可以用卷积来实现。
卷积可以以多种方式加速,傅里叶变换是非常实用的的选择,特别是加速大卷积核。频域加速卷积的理论基础是信号处理中的卷积定理,即,在适当的条件下,两个信号卷积的傅里叶变换是其傅里叶空间中的逐点乘积。 (5) I ∗ W = F − 1 ( F ( I ) ⊙ F ( W ) ) I * W=F^{-1}(F(I) \odot F(W))\tag5 I∗W=F−1(F(I)⊙F(W))(5) 其中 F F F 为傅里叶变换, F − 1 F^{-1} F−1 为傅里叶反变换, I I I 和 W W W 是输入图像和卷积核, ∗ * ∗ 是卷积运算, ⊙ \odot ⊙ 是逐点乘积。可以通过快速傅里叶变换( F F T FFT FFT)和快速傅里叶反变换( I F F T IFFT IFFT)来加速计算。
V Q VQ VQ 是信号处理中一种经典量化方法,目的是通过一小组原型向量来近似一大组数据分布。可用于目标检测中的数据压缩和加速内积操作。例如,使用 V Q VQ VQ, H O G HOG HOG 直方图可以被分组并量化成一组原型直方图向量。然后在检测阶段,特征向量和检测权重之间的内积可以通过查表操作来实现。因为在这个过程中没有浮点乘法和除法,所以 D P M DPM DPM 和 S V M SVM SVM 检测器的速度可以被加速一个数量级。
深度网络中,全连接层的计算实际上是两个矩阵的乘法。当参数矩阵 W ∈ R u × v \mathbf{W} \in \mathbb{R}^{u \times v} W∈Ru×v 很大时,检测器的计算负担很重。降秩近似是加速矩阵乘法的一种方法。目的是对矩阵 W W W 进行低阶分解: (6) W ≈ U Σ t V T \mathbf{W} \approx \mathbf{U} \boldsymbol{\Sigma}_{t} \mathbf{V}^T\tag6 W≈UΣtVT(6) 其中, U U U 是由 W W W 的前 t t t 个左奇异向量组成的 u × t u\times t u×t 矩阵; Σ t \boldsymbol{\Sigma}_{t} Σt 是包含 W W W 最上面 t t t 个奇异值的 t × t t\times t t×t 对角矩阵; V V V 是由 W W W 的前 t t t 个右奇异向量组成的 v × t v\times t v×t 矩阵。以上过程也称为截断 S V D SVD SVD。将参数数量从 u v uv uv 减到 t ( u + v ) t(u+v) t(u+v)。如果 t t t 比 m i n ( u , v ) min(u, v) min(u,v) 小得多,效果很显著。截断 S V D SVD SVD 为 F a s t R C N N Fast~RCNN Fast RCNN 实现了 2 2 2 倍加速。
这部分作者回顾了目标检测领域近三年的研究。
图 17 17 17 三种检测器精度的比较
图 17 17 17 F a s t e r R C N N Faster~RCNN Faster RCNN、 R − F C N R-FCN R−FCN、 S S D SSD SSD 在 M S − C O C O MS-COCO MS−COCO 数据集上使用不同检测引擎时的精度 AlexNetVGG: 16—19层,使用 3 × 3 3\times3 3×3 卷积核取代 5 × 5 5\times5 5×5 和 7 × 7 7\times7 7×7。GoogLeNet: 即, I n c e p t i o n Inception Inception 网络家族,增加卷积神经网络深度和宽度。ResNetDenseNet: 受 s h o r t c u t short~cut short cut 连接的影响,作者将每一层以前馈的方式和其他所有层相连。SENet: 主要贡献是将全局池化与 s h u f f l i n g shuffling shuffling 结合,学习特征图通道的重要性。研究者在最新检测引擎的基础上,努力提高图像特征质量,最重要的两组方法是:
特征融合学习具有大感受野的高分辨率特征不变性和等变是图像特征表示中的两个重要性质。分类要求特征具有不变性;目标定位需要等变表示,因为它旨在区分位置和尺度变化。由于目标检测包含这两个子任务,所以需要同时学习不变性和等变性。
由于 CNN 的深层具有更好的不变性,更差的等变性,这对分类任务有益,但是不利于精确目标定位。相反,浅层具有更好的等变性,但是不变性较差。 因此,深层和浅层特征融合有助于提高不变性和等变性。
图 18 18 18
图 18 18 18 不同特征融合方法 处理流 主要可以分为两类: 自底向上融合:通过跳跃连接将浅层特征传递到深层自顶向下融合:将深层特征反馈给浅层还有一些更复杂的方法,跨不同层编织特征
由于不同层特征在空间和通道维度上可能不同,可能需要调整特征图通道数,上采样低分辨率特征图,降采样高分辨率特征图。最简单的方法是最邻近或者双线性插值。此外,分数步长卷积(转置卷积)是最近另一种流行的调整特征图大小和通道数的方法。这种方法的优点是可以自动学习上采样。
元素运算 特征融合可以被看做是不同特征图间的元素运算。主要有几组方法:
元素求和元素乘积串联元素求和是最简单的特征融合方法。元素乘积和元素求和非常相似,唯一不同是使用乘法而不是加法。元素乘积的优点是可以抑制或者强调某一区域内特征,可能有利于小目标检测。特征串联的优点是可以整合不同区域的上下文特征,缺点是增加内存消耗。
大感受野能够捕获大尺度上下文信息,小感受野更关注局部细节。特征图分辨率越小,越难检测小目标。增加特征分辨率最直接的方法是去除池化层,或者减小卷积下采样率。但是这样同时会减小感受野。
同时增加感受野和分辨率的方法是引入空洞卷积。空洞卷积最初用于语义分割。主要思想是使用稀疏参数扩大卷积核。
尽管 CNN 在目标检测领域已经得到广泛应用,但是它仍然遵循 “在特征图上滑动窗口” 的检测范式。仍有一些检测器超越滑动窗口限制。
子区域搜索 将检测看作路径规划过程,从初始网格开始,最终收敛到 G T GT GT 框。另一种方法将检测看作迭代更新过程来细化指定边界框角点。
关键点定位 由于目标位置可以由左上角和右下角确定,因此检测任务可以等价为一对关键点定位问题。该方法的优点是可以在语义分割框架下实现,不需要设计多尺度锚。
主要有两种方法:
边界框精炼设计新的损失函数它可以看作是检测结果的后处理。一些非常规尺度的目标难以被预定义的锚捕获,不可避免地导致不精确的位置预测。因此引入迭代边界框精炼,将检测结果迭代地输入到 B B BB BB 回归器,直到预测收敛到正确位置和大小。然而,也有研究者认为,这种方法难以保证定位精度的单调性,也就是说, B B BB BB 回归多次应用会使定位退化。
检测器大多将目标定位看作坐标回归问题。然而这种范式有两个缺陷:
回归损失函数和最终定位评估不对应传统边界框回归不包含定位置信度,当多个 B B BB BB 重叠导致非最大抑制失效通过设计新的损失函数可以解决这些问题。最直接的思路是直接使用 I o U IoU IoU 作为定位损失函数。其他一些研究者提出使用 I o U IoU IoU 引导的 N M S NMS NMS 来改进训练和检测阶段的定位。还有研究者尝试在概率推理框架下改进定位精度,与以往直接预测边界框坐标的方法不同,这种方法可以预测边界框位置的概率分布。
最近的研究表明,学习语义分割可以提升目标检测性能。
主要由三个原因:
分割有助于类别识别分割帮助精确定位分割可以作为上下文嵌入有两种主要方法:
学习丰富特征: 将分割网络看作固定特征提取器,集成到检测框架中。优点是易实现,缺点是带来附加计算。用多任务损失函数学习: 在原始检测网络的顶部引入分割分支,使用多任务损失训练,推理阶段去除分割分支。优点是检测速度不受影响,缺点是训练需要像素级图像标注。因此,一些研究者遵循弱监督学习思想,不是基于像素级注释掩码,而是边界框注释来训练分割分支。传统的方法主要有两类:
数据增强为不同方位训练独立检测器新的方法主要有:
为检测损失函数添加约束,从而使旋转目标的特征不发生改变。另一种方法是对候选目标做几何变换,增加旋转不变性。代表是空间变换网络( S T N STN STN)旋转 R o I RoI RoI 池化:取代笛卡尔坐标,在极坐标中划分网格增加旋转不变性。通常认为预训练可以提高模型泛化能力,并且加快训练速度。事实上采用预训练网络有一些局限性:
第一个限制是,分类和目标检测之间的差异,包括损失函数以及尺度/类别分布的差异。第二个是域不匹配。 I m a g e N e t ImageNet ImageNet 是 R G B RGB RGB 图像,检测任务有时需要使用深度图像。为了加速训练以及从头训练的稳定性,一些研究人员引入了密集连接和 B N BN BN 以加速浅层的反向传播。研究人员发现, I m a g e N e t ImageNet ImageNet 预训练可以加快收敛速度,但是不一定有正则化或者提高最终精度的作用。
典型的 G A N GAN GAN 由生成器和判别器组成,在极大极小优化框架内竞争。典型地,生成器学习从潜在空间映射到感兴趣的特定数据分布,而鉴别器旨在区分真实数据分布的实例和由生成器生成的实例。 G A N GAN GAN 近年来主要用于遮挡和小目标检测。
G A N GAN GAN 通过缩小小目标和大目标之间的表示差异,来提升对小目标的检测。为提升对遮挡目标的检测,一个思路是利用对抗性训练来产生遮挡掩码,取代在像素空间生成样本,对抗网络直接修改特征以模拟遮挡。
除了这些研究之外,旨在研究如何用对抗样本攻击检测器的“对抗攻击”最近引起了越来越多的关注。关于这一主题的研究对于自主驾驶尤其重要,因为在保证对抗攻击的鲁棒性之前,不能完全信任它。
弱监督目标检测器( W S O D WSOD WSOD)旨在通过图像级标注而不是边界框标注来训练检测器,从而减少对标注数据集的依赖。
近来,多实例学习已经用于 W S O D WSOD WSOD。多实例学习是一组监督学习方法。多实例学习模型接收一组标记的包,每个包包含许多实例,而不是使用一组单独标记的实例进行学习。如果将一幅图像中的候选目标视为一个包,将图像级注释视为标签,那么 W S O D WSOD WSOD 可以被表示为一个多实例学习过程。
类激活映射是另一组用于 W S O D WSOD WSOD 的方法。对 C N N CNN CNN 可视化的研究表明,尽管没有对目标的位置进行监督, C N N CNN CNN 的卷积层仍然充当目标检测器。类别激活映射揭示了如何使 C N N CNN CNN 在接受图像级标签训练后仍具有定位能力。
除了上述方法之外,一些其他研究人员通过选择信息量最大的区域,然后用图像级注释来训练这些区域,从而将 W S O D WSOD WSOD 视为提议排序过程。 W S O D WSOD WSOD 的另一个简单方法是掩盖图像的不同部分,如果检测分数急剧下降,那么目标很可能被覆盖。此外,交互式注释在训练中考虑了人的反馈,以便改善 W S O D WSOD WSOD。最近,生成对抗训练被用于 W S O D WSOD WSOD。
H O G HOG HOG 、 I C F ICF ICF 以及 F a s t e r R C N N Faster~RCNN Faster RCNN 检测器
传统行人检测 基于 H a a r Haar Haar 小波特征; D P M DPM DPM 检测器;利用积分图像处理技术,提出了一种有效的,轻量级特征表示:积分通道特征( I C F ICF ICF)
基于深度学习的行人检测
提升小行人检测:特征融合;引入高分辨率手工特征,集成多分辨率检测结果。提升难分负样本检测:包含增强决策树的集成和语义分割。此外,跨模式学习也被用来丰富难分负样本特征。提升密集和遮挡人群检测:设计新的损失函数,考虑目标的吸引以及和周围其他目标的排斥。部位检测器和注意力机制是改善遮挡行人检测的最常用方法。主要分成两个独立但相关的任务:文本定位;文本识别
逐步检测:字符分割;候选区域验证;字符分组;字识别;优点是粗分割步骤中对背景进行滤波,降低后续计算量;缺点是需要仔细设置所有步骤中参数,误差会在每一步中积累。 传统方法 VS 深度学习方法:第一组是一般目标检测的特例;第二组方法将文本检测看作图像分割问题 文本旋转和视角改变 改进密集分布的文本检测 改进破碎模糊文本检测
传统检测 基于深度学习的检测方法
传统检测 基于深度学习的检测
未来的研究可能集中在几个方面:
轻量级目标检测检测与 A u t o M L AutoML AutoML检测与域自适应弱监督检测小目标检测视频中的检测(实时)信息融合检测