文章目录
- 摘要
- 引言
- 目标检测发展历程
- 目标检测路线图
- 传统检测器
- 基于CNN的两阶段检测器
- 基于CNN的一阶段检测器
- 目标检测数据集及指标
- 数据集
- 评价指标
- 标注软件
摘要
目标检测作为计算机视觉中最基本、最具挑战性的问题之一,近年来受到了广泛的关注。它在过去二十五年的发展可以看作是计算机视觉历史的一个缩影。如果我们把今天的目标检测看作是深度学习力量下的技术美学,那么将时钟拨回25年,我们将见证冷兵器时代的智慧。本文从技术发展的角度回顾了几十篇关于目标检测的论文
本文涵盖了许多主题,包括历史上的里程碑检测器,检测数据集,度量,检测系统的基本构建块,加速技术以及最新的检测方法。本文还回顾了一些重要的检测应用,如行人检测、人脸检测、文本检测等,并深入分析了它们面临的挑战以及近年来的技术改进
引言
目标检测是一项重要的计算机视觉任务,它处理检测数字图像中某类视觉对象(如人类、动物或汽车)的实例。目标检测的目的是开发计算模型和技术,以提供计算机视觉应用所需的最基本信息之一:什么目标在哪里?
作为计算机视觉的基本问题之一,目标检测是许多其他计算机视觉任务的基础,如实例分割、图像字幕、目标跟踪等。从应用的角度来看,目标检测可以分为“一般物体检测”和“检测应用”两个研究课题,前者旨在探索在统一框架下对不同类型物体的检测方法,以模拟人类的视觉和认知,后者是指特定应用场景下的检测,如行人检测、人脸检测、文本检测等.近年来,深度学习技术的快速发展[9]为目标检测带来了新鲜血液,取得了显著的突破,并将其推向了一个前所未有的研究热点。目前,目标检测已广泛应用于许多现实应用中,如自动驾驶、机器人视觉、视频监控等
目标检测发展历程
目标检测路线图
传统检测器
大多数早期的目标检测算法都是基于手工特征构建的。由于当时缺乏有效的图像表示,人们只能设计复杂的特征表示,各种提速技巧用尽有限的计算资源
VJ detector(人脸检测):
采用最直接的探测方式,遍历图像中所有可能的位置,看是否有任何窗口包含人脸
包含三个重要技术:积分图像、特征选择和级联检测
HOG detector:(行人检测)
对当时尺度不变特征变换和上下文变化的重要改进
DPM:(HOG的扩展)
divide and conquer(分而治之)
将星型模型扩展为混合模型
边界盒回归
传统目标检测方法的巅峰
尽管今天的目标检测器在检测精度上已经远远超过了DPM,但其中很多仍然深受其宝贵见解的影响,如混合模型、困难负样本挖掘、边界盒回归等
基于CNN的两阶段检测器
随着手工特征的性能趋于饱和,目标检测在2010年之后进入平稳期。R. Girshick说:“……2010-2012年期间进展缓慢,通过构建集成系统和采用成功方法的微小变体获得了少量收益”[38]。2012年,世界见证了卷积神经网络的重生(AlexNet)[40]。由于深度卷积网络能够学习图像的鲁棒性和高级特征表示,一个自然的问题是我们是否可以将其用于目标检测?R. Girshick等人在2014年率先提出了带有CNN特征的区域(RCNN)用于目标检测,从而打破了这种死锁[16,41]。从那时起,目标检测开始以前所未有的速度发展
在深度学习时代,目标检测可以分为两种类型:“两阶段检测”和“一阶段检测”,前者将检测定义为“从粗到细”的过程,后者将检测定义为“一步完成”
• R-CNN(2014)
首次引入CNN来计算特征
通过选择性搜索提取一组对象建议,然后将每个提案重新缩放为固定大小的图像,并将其输入在ImageNet(例如AlexNet[40])上训练的CNN模型中以提取特征。最后,使用线性支持向量机分类器预测每个区域内物体的存在并识别物体类别。
(1)人们可以将高容量卷积神经网络(cnn)应用于自下而上的区域生成,以定位和分割对象;
(2)当标记训练数据稀缺时,对辅助任务进行监督预训练,然后进行特定领域的微调,可以显著提高性能
解决了:CNN定位问题和标记数据稀缺不足以训练大型CNN的问题
证明了:简单的边界盒回归方法可以有效地减少错误定位,而错误定位是主要的误差模式
RCNN在VOC07上的性能显著提升,平均平均精度(mAP)从33.7% (DPM-v5[43])大幅提高到58.5%
缺点:在大量重叠的候选框(来自一张图像的2000多个盒子)上进行冗余的特征计算导致检测速度极慢(使用GPU时每张图像14秒)
(1)获取输入图像,(2)提取大约2000个自下而上的区域候选框,(3)使用大型卷积神经网络(CNN)计算每个候选框的特征,然后(4)使用特定类别的线性支持向量机(SVM)对每个区域进行分类
• SPPNet(2014)
提出一种新的结构SPP-net,解决了CNN需要固定大小的输入图像问题
(R- CNN的特征计算是非常耗时的,因为它反复地将深度卷积网络应用于每张图像的数千个warp区域的原始像素)
SPPNet只从整个图像中提取一次特征映射(可能在多个尺度上),然后,在特征映射的每个候选窗口上应用空间金字塔池,以池化该窗口的固定长度表示,比R-CNN方法快24-102倍,而不牺牲任何检测精度(VOC07 mAP=59.2%)
key: 卷积层不需要固定的图像大小,全连接层才需要,在最后一个卷积层后加空间金字塔池化层,SPP层汇集特征并生成固定长度的输出
• Fast RCNN(2015)
提出了一种快速区域卷积网络(Fast R-CNN)的目标检测方法
解决了两个主要的挑战:
首先,必须处理许多候选对象位置(通常称为“proposals”)
其次,这些候选点只能提供粗略的定位,必须加以改进才能实现精确定位
Fast R-CNN去掉了R-CNN中的SVM分类器和bbox线性回归器,而是将两者都放在一体化网络中。同时,运用了ROI-pooling 层,将大小不一的RP转换成同样的size,因此可以将整张图像进行过SS操作后,直接输入进CNN层,一次性对所有的RP完成分类和bbox回归
输入图像和多个感兴趣区域(RoI)被输入到一个全卷积网络中。每个RoI被汇集成一个固定大小的特征映射,然后通过全连接层(fc)映射到一个特征向量。该网络每个RoI有两个输出向量:softmax概率和每个类的边界盒回归偏移量。该体系结构是端到端训练的,具有多任务损失
• Faster RCNN(2015)
引入了一个区域生成网络(RPN),它与检测网络共享全图像卷积特征,(将RPN和Fast R-CNN合并成一个单一的网络)从而实现几乎无成本的区域生成
首次引入了Anchor,anchor 是在输入图像上以不同尺度和长宽比预定义的一系列框,用来提供候选区域。这些 anchor 框充当了在图像中可能包含目标的建议性边界框,通过对这些框进行分类和边界框回归,模型能够更准确地检测出目标对象的位置和类别
解决了区域生成计算瓶颈问题
从R-CNN到Faster RCNN,目标检测系统的大多数独立块,如提案检测、特征提取、边界盒回归等,已经逐渐集成到一个统一的端到端学习框架中
• R-FCN(2016)
提出了基于区域的全卷积网络,用于准确高效的目标检测
解了决图像分类中的平移不变性和目标检测中的平移方差之间的困境
key idea:
所有可学习的权重层都是卷积的,并在整个图像上计算,每个RoI的计算成本可以忽略不计。最后一个卷积层为每个类别生成k^2个位置敏感分数映射库,因此具有具有C个对象类别(+1为背景)会有k² (C +1) - 通道个输出层。k²个分数映射对应于描述相对位置的k × k空间网格
• Feature Pyramid Networks(2017)
提出特征金字塔网络(FPN):通过自上而下的途径和横向连接将低分辨率、语义强的特征与高分辨率、语义弱的特征结合起来
自上而下的路径通过上采样空间上更粗糙,但语义上更强的更高金字塔层次的特征图,产生更高分辨率的特征。然后,这些特征通过横向连接通过自下而上通路的特征得到增强。每个横向连接合并了自底向上路径和自顶向下路径的相同空间大小的特征图
图3显示了构建自顶向下特征映射的构建块。对于较粗分辨率的特征图,我们将空间分辨率上采样2倍(为了简单起见,使用最近邻上采样)
通过元素加法将上采样映射与相应的自下而上映射合并(自下而上映射经过1×1卷积层以减少通道维度)
• Light-Head R-CNN(2017)
提出了一种新的两级检测器,Light-Head R- CNN,通过使用薄特征映射和便宜的R-CNN子网(池化和单个全连接层),使网络头部尽可能轻
light-head设计能够在不影响计算速度的情况下显著提高检测结果
并且Light Head R-CNN加上小型的Xception-like(backbone)基础模型可以在102 FPS的速度下实现30.7 mmAP
• Libra R-CNN: (2019)
发现检测性能往往受到训练过程中不平衡的限制(模型体系结构的潜力没有得到充分利用),这种不平衡通常包括三个层面——样本层面、特征层面和目标层面
为了减轻由此带来的不利影响,提出了Libra R-CNN,它集成了三个新颖的组件:IoU平衡采样、平衡特征金字塔和平衡L1损耗,分别用于减少样本、特征和客观层面的不平衡
基于CNN的一阶段检测器
• You Only Look Once (YOLO)(2015)
作者完全抛弃了之前“候选框检测+验证”的检测范式。相反,它遵循一种完全不同的理念:将单个神经网络应用于完整的图像。该网络将图像划分为多个区域,并同时预测每个区域的边界框和概率
即将目标检测重新定义为一个单一的回归问题,直接从图像像素到边界框坐标和类概率(也就是:将整张图片作为输入,直接从完整图像中预测边界框和类别概率)
• Single Shot MultiBox Detector (SSD)(2015)
SSD的主要贡献是引入了多参考点和多分辨率检测技术
SSD 将边界框的输出空间离散为一组默认框,每个特征图位置具有不同的长宽比和尺度,它不需要为边界框假设重新采样像素或特征,并且与其他方法一样准确,这大大提高了高精度检测的速度
完全消除了候选框生成和随后的像素或特征重新采样阶段
其他单阶段方法相比,SSD即使在较小的输入图像尺寸下也具有更好的精度
SSD的核心是使用应用于特征映射的小卷积过滤器来预测一组固定的默认边界框的类别分数和框偏移
• YOLO v2(2016)
YOLO v2在YOLO检测方法基础上进行各种改进,如Anchor Boxes和Darknet-19神经网络结构
YOLO9000在YOLO v2的基础上进行扩展,通过引入WordTree数据集和WordNet层来实现
目标检测与分类联合训练的方法允许YOLO9000检测大量不同的对象类别,包括各种物体、动物和概念,缩小了检测和分类之间数据集大小差距
• RetinaNet(2017)
探索了一级探测器的精度多年来一直落后于二级探测器的原因。T.-Y。Lin等人在2017年发现了背后的原因并提出了RetinaNet[23]。他们声称,在训练密集探测器时遇到的极端前景-背景类不平衡是主要原因。为此,在RetinaNet中引入了一个新的损失函数,名为“焦点损失”,通过重塑标准交叉熵损失,使检测器在训练过程中更多地关注难分类的错误示例
• YOLO v3(2018)
对YOLO进行了一些改进,基于YOLOv2、Darknet-19中使用的网络和那些新奇的残差网络之间的混合方法,提出了Darknet-53
改进了正负样本选取、损失函数、Darknet-53骨干网络,并引入了特征金字塔多尺度预测,显著提升了速度和精度。
• YOLO v4(2020)
作者使用了新的特征:WRC、CSP、CmBN、SAT、Mish-激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU损失,并将其中一些特征结合起来获得了最先进的结果:MS COCO数据集在Tesla V100上以~ 65 FPS的实时速度获得了43.5%的AP(65.7%的AP50)
开发了一个高效、强大的目标检测模型。它使得每个人都可以使用1080 Ti或2080 Ti GPU来训练超级快速准确的目标检测器
在检测器训练过程中验证了最先进的Bag-of- Freebies和Bag-of- specials方法对目标检测的影响
修改了最先进的方法,使它们更有效,更适合单GPU训练,包括CBN, PAN, SAM等
• YOLO v5(2020)
主干部分:使用了Focus网络结构
数据增强:Mosaic数据增强
**多正样本匹配:**在之前的Yolo系列里面,在训练时每一个真实框对应一个正样本,即在训练时,每一个真实框仅由一个先验框负责预测。YoloV5中为了加快模型的训练效率,增加了正样本的数量,在训练时,每一个真实框可以由多个先验框负责预测
• PP-YOLO(2020)
将yolov3的主干替换为ResNet50-vd-dcn,其他保持不变,然后介绍了一堆技巧,可以提高YOLOv3的性能,几乎不损失效率
即:结合现有的各种几乎不增加模型参数和FLOPs数量的技巧对yolov3存在的问题进行改进,改进后的检测器就叫PP-YOLO
• PP-YOLOv2(2021)
以PP-YOLO为基准模型进行了改进,主要是neck采用PAN而不是FPN,在neck部分采用Mish激活而不是backbone,增加输入大小,更改IoU aware loss为软标签格式等
• YOLOR(2021)
一个训练好的卷积神经网络(CNN)模型通常只能完成一个单一的目标,造成上述问题的主要原因是我们只从神经元中提取特征,而没有使用CNN中丰富的隐式知识。
提出了一个统一的网络,将内隐知识和外显知识编码在一起,统一的网络可以生成统一的表示,同时服务于各种任务。我们可以在卷积神经网络中执行核空间对齐、预测细化和多任务学习
• YOLOX(2021)
将YOLO检测器转换为无锚点方式,并进行其他先进的检测技术,即解耦头和领先的标签分配策略SimOTA
• PP-YOLOE(2022)
PP-YOLOE对PP-YOLOv2进行了改进,提出了一种新颖的RepResBlock,标签分配策略采用的损失任务对齐学习(TAL),改进了head,提出了速度和精度并重的ET-head,改进了损失函数
• YOLO v7(2022)
设计了几种可训练的 bag-of-freebies 方法,使得实时目标检测在不增加推理成本的情况下,大大提高了检测精度
对于目标检测方法的改进,提出了两个新问题,即重参数化模块如何替换原有模块,以及动态标签分配策略如何处理对不同输出层的分配。此外,我们还提出了解决这些问题所带来的困难的方法(bag-of-freebies )
提出了实时目标检测器的“扩展”和“复合缩放”方法,可以有效地利用参数和计算量,该方法可有效减少当前实时目标检测器约40%的参数和50%的计算量,具有更快的推理速度和更高的检测精度
• YOLO v6(2022)
注入了一种自蒸馏策略,同时执行分类任务和回归任务。同时,我们动态调整来自老师和标签的知识,帮助学生模型在所有训练阶段更有效地学习知识
我们广泛地验证了 标签分配、损失函数和数据增强技术的先进检测技术,并有选择地采用它们来进一步提高性能
我们在RepOptimizer和channel-wise蒸馏的帮助下,对检测的量化方案进行了改革
目标检测数据集及指标
数据集
构建更大的数据集和更少的偏差对于开发先进的计算机视觉算法至关重要。在目标检测方面,在过去的10年中已经发布了许多知名的数据集和基准测试,包括PASCAL VOC挑战[50,51](如VOC2007, VOC2012), ImageNet大规模视觉识别挑战(如ILSVRC2014) [52], MS-COCO检测挑战[53]等数据集。这些数据集的统计结果见下表
• Pascal VOC
PASCAL Visual Object Classes (VOC) Challenges 1(从2005年到2012年)[50,51]是早期计算机视觉社区中最重要的竞赛之一。在PASCAL VOC中有多个任务,包括图像分类、目标检测、语义分割和动作检测。Pascal-VOC在目标检测中使用最多的有两个版本:VOC07和VOC12,前者由5k张tr图像+ 12k个标注对象组成,后者由11k张tr图像+ 27k个标注对象组成。在这两个数据集中标注了生活中常见的20类对象(Person: Person;动物:鸟、猫、牛、狗、马、羊;交通工具:飞机、自行车、轮船、公共汽车、汽车、摩托车、火车;室内:瓶子、椅子、餐桌、盆栽、沙发、电视/显示器)
• ILSVRC
ImageNet大规模视觉识别挑战赛(ILSVRC) 推动了通用目标检测技术的发展。ILSVRC从2010年到2017年每年举办一次。它包含使用ImageNet图像的检测挑战。ILSVRC检测数据集包含200类视觉对象。图像/对象实例的数量比VOC大两个数量级。例如,ILSVRC-14包含517k张图像和534k个带注释的对象
• MS-COCO
MS-COCO 3[53]是目前最具挑战性的目标检测数据集。基于MS-COCO数据集的年度竞赛自2015年开始举办。它的对象类别数量比ILSVRC少,但对象实例数量更多。例如,MS-COCO-17 包含来自80个类别的164k图像和897k注释对象。与VOC和ILSVRC相比,MS-COCO最大的进步在于,除了边界框标注之外,MS-COCO还使用逐实例分割对每个对象进行标记,以帮助精确定位。此外,MS-COCO比VOC和ILSVRC包含更多的小物体(其面积小于图像的1%)和更密集的物体。这些特点使得MS- COCO中的对象分布更接近于现实世界中的对象分布。就像当时的ImageNet一样,MS-COCO已经成为对象检测社区事实上的标准
• Open Images
2018年,继MS-COCO之后,以前所未有的规模引入了开放图像检测(Open image -ages Detection, OID)挑战。
Open Images有两个任务:1)标准对象检测,2)视觉关系检测,即检测特定关系中的成对对象。对于目标检测任务,数据集由1,910k张图像组成,在600个对象类别上有15,440k个带注释的边界框
评价指标
目标检测器使用多种指标来评价检测器的性能,如:FPS、precision、recall,以及最常用的AP、mAP
为了比较所有对象类别的性能,通常使用所有对象类别的平均AP (mAP)作为性能的最终度量。为了测量目标定位精度,使用Intersection over Union (IoU)来检查预测框和地面真值框之间的IoU是否大于预定义的阈值
对于COCO数据集来说,AP就相当于mAP,对AP[0.5,0.95]求平均和,AP50即AP.5,指的是threshold设置为0.5
标注软件
为便于COCO和PASCAL VOC数据集的采集制作,目标检测领域有两款比较常用的数据集标注工具labelme和labelImg。这两大标注工具都有对应的python包,所生成的数据格式为常见的三种数据集格式VOC格式,COCO格式和YOLO格式
VOC采用的是图像文件与xml标签文件,而COCO采用的是json格式,YOLO采用的是txt文本格式