目标检测综述(待补ing)

摘要

目标检测作为计算机视觉中最基本、最具挑战性的问题之一,近年来受到了广泛的关注。它在过去二十五年的发展可以看作是计算机视觉历史的一个缩影。如果我们把今天的目标检测看作是深度学习力量下的技术美学,那么将时钟拨回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数据集的采集制作,目标检测领域有两款比较常用的数据集标注工具labelmelabelImg。这两大标注工具都有对应的python包,所生成的数据格式为常见的三种数据集格式VOC格式,COCO格式和YOLO格式
VOC采用的是图像文件与xml标签文件,而COCO采用的是json格式,YOLO采用的是txt文本格式

backbone

AlexNet(2012)

出自
首当其冲的必然是AlexNet啦,重振DL荣光,AlexNet义不容辞,开启了AI新时代,划分了传统目标检测和基于深度学习目标检测,其论文被认为是CV界最具影响力的论文之一,引用次数已超13w
上图是因为受限于当时的GPU内存不足,作者用了两块GPU进行并行计算,224224是进行了随即裁剪,原图是227227见下图

AlexNet 的突破点主要有:

  1. 网络更大更深,LeNet5 有 2 层卷积 + 3层全连接层,有大概6万个参数,而AlexNet 有 5 层卷积 + 3 层全连接,有6000万个参数和65000个神经元。
  2. 使用 ReLU作为激活函数, LeNet5 用的是 Sigmoid,虽然 ReLU 并不是 Alex 提出来的,但是正是这次机会让 ReLUC位出道,一炮而红。AlexNet 可以采用更深的网络和使用ReLU 是息息相关的。
  3. 使用 数据增强 和 dropout 来解决过拟合问题。在数据增强部分使用了现在已经家喻户晓的技术,比如crop,PCA,加高斯噪声等。而 dropout 也被证明是非常有效的防止过拟合的手段。
  4. 用最大池化取代平均池化,避免平均池化的模糊化效果,并且在池化的时候让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
  5. 提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力

VGGNet(2014)

VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好

发现2个3x3的卷积核效果相当于1个5x5的卷积核效果,因为它们的感受野(输入图像上映射区域的大小)相同,但2个3x3卷积核的参数个数(18个)却比1个5x5(25个)

类似地,3个3x3的卷积核相当于1个7x7的卷积核,而1个7x7的卷积核的参数个数为49,而3个3x3的卷积核的参数个数仅为27

感受野


因此VGGNet采用了多次堆叠3x3的卷积核,目的是减少参数的数量

网络结构如下,D、E分别代表VGG-16、VGG-19

GoogleNet(2014)

ResNet(2016)

出自
ResNet通过引入残差结构,很好地解决了"退化"问题

将期望的底层映射表示为H(x),残差函数F(x)= H(x) - x
通过恒等映射来解决梯度消失问题! 而恒等映射就是那条skip-connection跳跃连接。

传统神经网络出现梯度消失的根本原因在于: 因为链式法则的存在,如果使用普通激活函数,则会因为连乘效应,带来梯度消失问题。
这个其实还有一个更深的含义: 当传统神经网络可能在多层网络中间已经学习到最优解,而继续往后学习会因为链式法则和反向传播反而使模型退化。所以我们需要一个机制,让模型学习到最优解以后就截至了,就不再学习了,这就是恒等映射的意义所在!

残差网络的学习输出实际由两部分组成:主分支的卷积学习F(x) + 恒等映射x, 当F(x)趋近于0,相当于神经网络已经达到最优了,学习不到更多特征了。那么此时学习输出就剩下恒等映射x, 而y=x的导数是1,所以即便在链式法则下也不会出现梯度消失问题,而是会一直透明传输到最后输出点,这就是残差网络的全部意义
上图我们可以看到从50层往上,每个3×3卷积的前后都用到了1×1卷积,目的是降低通道数,减少参数量的计算

1x1 卷积层:应用 1x1 卷积来降低输入的维度。这降低了计算成本并有助于压缩信息。
3x3 卷积层:该层捕获降维内的空间特征。
1x1 卷积层(扩展):应用另一个 1x1 卷积将维度扩展回原始大小。这是瓶颈部分,因为它在再次扩展之前通过狭窄的层“挤压”信息
瓶颈结构的主要目的是在计算效率和表达能力之间取得平衡
通过使用 1x1 卷积降低维度,模型的计算效率变得更高,从而允许更深层次的架构。3x3 卷积捕获空间特征,最后的 1x1 卷积将维度向后扩展,保持网络的表达能力

ResNeXt(2017)

ResNeXt在ResNet的基础上利用分组卷积来增强网络的表达能力,通过这种结构的组合和堆叠,实现了深层网络的训练和优化。它在ImageNet等数据集上取得了较好的性能,并且相对于传统的ResNet网络,具有更高的参数效率和计算效率
简单设计产生了一个同质的、多分支的体系结构,只有几个超参数需要设置。这个策略暴露了一个新的维度,我们称之为**“基数”(转换集合的大小),作为深度和宽度维度之外的一个重要因素**
采用了VGG/ResNets的重复层策略,同时以一种简单、可扩展的方式利用了分裂-转换-合并策略

遵循VGG/ResNets Inception的两个简单规则的约束:
(i)如果产生相同大小的空间映射,则块共享相同的超参数(宽度和过滤器大小),
(ii)每次当空间映射被下采样2倍时,块的宽度(通道数)乘以2倍。第二条规则确保所有块的计算复杂度(以flop(浮点运算,以乘法加的次数计算)为单位)大致相同

DenseNet(2017)

出自
ResNet解决了深层网络梯度消失问题,它是从深度方向研究的宽度方向是GoogleNet的Inception而DenseNet是从feature入手,通过对feature的极致利用能达到更好的效果和减少参数
DenseNet主要由 Dense Block 和 Transition Layer 两部分组成

Dense Block——特征重用

DenseBlock每个层的特征图大小相同,层与层之间采用密集连接方式


上图可以看出Dense Block互相连接所有的层,即每一层的输入都来自于它前面所有层的特征图每一层的输出均会直接连接到它后面所有层的输入
DenseNet采用密集连接对于一个L层的DenseBlock,共包含 L(L+1)/2 个连接(两两相连)*
Dense Block是直接concat来自不同层的特征图,这可以实现特征重用(即对不同“级别”的特征——不同表征进行总体性地再探索),提升效率,这一特点是DenseNet与ResNet最主要的区别

DenseBlock中采用BN+ReLU+Conv的结构,平常我们常见的是Conv+BN+ReLU。这么做的原因是:卷积层的输入包含了它前面所有层的输出特征,它们来自不同层的输出,因此数值分布差异比较大,所以它们在输入到下一个卷积层时,必须先经过BN层将其数值进行标准化,然后再进行卷积操作

Transition

Transition层包括一个1x1卷积(用于调整通道数)和2x2AvgPooling(用于降低特征图大小)
连接两个相邻的DenseBlock,缩小上一个DenseBlock的宽高,达到下采样效果,使特征图的宽高减半

优点
参数减少,计算效率更高,效果更好(相较于其他网络),实现了特征重用,同时利用低层次和高层次的特征。
特征重用实现了梯度的提前传播,也至少保留了前面网络的能力,不至于变弱(解决了退化问题)

不足
由于需要进行多次Concatenate操作,数据需要被复制多次,显存容易增加得很快,需要一定的显存优化技术。因此在训练过程中,训练的时间要比Resnet作为backbone长很多
并且ResNet更加的简洁,变体也多,更加成熟,因此后来更多使用的是ResNet

SENet(2018)

我们提出了一种新的架构单元,称之为“挤压和激励”(SE)块,该单元通过明确建模通道之间的相互依赖性,自适应地重新校准通道特征响应。我们表明,这些块可以堆叠在一起形成SENet架构,在不同的数据集上非常有效地泛化
我们进一步证明,SE块在略微增加计算成本的情况下,为现有最先进的CNNs带来了显著的性能改进

SE块首先通过Ftr将X映射到U,然后通过挤压将全局空间信息压缩到通道描述符中得到统计量Zc,接着通过激励算子完全捕获与通道相关的依赖关系,得到s,最后经过Fscale算子得到最终的输出X~

CSPNet(2019)

提出了跨阶段部分网络(CSPNet),以缓解以往的工作需要从网络架构的角度进行大量推理计算的问题。我们将此问题归因于网络优化中梯度信息的重复
设计CSPNet的主要目的是使该体系结构能够实现更丰富的梯度组合,同时减少计算量
CSPNet能够提高CNN的学习能力、t可以有效地减少大量的内存流量、可以显著降低计算瓶颈和精确融合模型(EFM)可以有效降低所需的内存带宽
CSPDenseNet保留了DenseNet的特征重用特性的优点,同时通过截断梯度流防止了过多的重复梯度信息
梯度信息重用(有别于冗余的梯度信息)可以减少计算量和内存占用提高效率,但会降低精度(可能是因为重用梯度信息带来的近似误差)
如果能够有效地减少重复的梯度信息,网络的学习能力将会大大提高

EfficientNet(2020)

提出了一种复合缩放方法,该方法使用简单而高效的复合系数对深度/宽度/分辨率的所有维度进行均匀缩放
为了更进一步,使用神经架构搜索来设计一个新的基线网络,并将其扩展以获得一系列模型,称为EffentNets,它比以前的ConvNets具有更好的准确性和效率
放大网络宽度、深度或分辨率的任何维度都可以提高精度,但对于更大的模型,精度增益会降低
为了追求更好的精度和效率,在卷积神经网络缩放过程中,平衡网络宽度、深度和分辨率的各个维度是至关重要的

在复合缩放方法的支持下,我们证明了移动尺寸的EfficientNet模型可以非常有效地缩放,在ImageNet和五种常用的迁移学习数据集上,以更少的参数和FLOPS超过了最先进的精度(低FLOPS只需要更少的计算资源)

FasterNet(2023)

CVPR2023
基于PConv提出了新的轻量级backboneFasterNet
解决了低FLOPS的问题,分析得出DWConv算子速度变慢的主要原因——频繁内存访问,提出了**部分卷积(partial convolution,PConv)**算子,达到同时减少计算冗余度和内存访问的目的
通过实验检验了仅仅减少FLOPs并不一定会导致延迟的以同样程度降低,这主要是由于低效的每秒浮点运算次数(FLOPS)造成的


(FasterNet分为四个阶段,每个阶段都有一个嵌入层(Embedding,步幅4的Conv 4×4)或一个合并层(Merging,步幅2的Conv 2×2)进行空间下采样和通道数量扩展)

在每个fastnet块中,一个PConv层后面跟着两个PWConv(逐点卷积)层(1*1)归一化层和激活层放在中间层之后,以保持特征的多样性并实现较低的延迟

PConv

减少了计算冗余以及内存访问的数量,解决了DWConv算子频繁访问内存的问题

轻量级网络设计

最后一组加速基于CNN的检测器的方法是直接设计一个轻量级网络,而不是使用现成的检测引擎。长期以来,研究人员一直在探索网络的正确配置,以便在有限的时间成本下获得准确性。除了一些一般的设计原则,如“更少的通道和更多的层”[197],近年来提出了一些其他的方法:1)分解卷积,2)群卷积,3)深度可分离卷积,4)瓶颈设计,5)神经结构搜索

分解卷积

分解卷积是构建轻量级CNN模型的最简单和最直接的方法。有两组分解方法
第一组方法是将一个大的卷积滤波器在空间维度上分解为一组小的卷积滤波器,如图14 (b)所示。例如,可以将一个7x7滤波器分解为三个3x3滤波器,它们共享相同的接受场,但后者效率更高。另一个例子是将k×k过滤器分解为k×1过滤器和1×k过滤器,这对于非常大的过滤器(例如15x15)可能更有效。这个想法最近被用于目标检测
第二组方法是在通道维度上将一大组卷积分解为两个小组,如图14 ©所示。例如,可以用d个滤波器近似卷积层,用d’ 滤波器+一个非线性激活+另外d个滤波器(d’ < d)。在这种情况下,原始层的复杂度O(dk^2 c)可以降低到O(d’k2c) + O(dd’)

群卷积

群卷积的目的是通过将特征通道分成许多不同的组,然后在每一组上独立进行卷积来减少卷积层中的参数数量[189,203],如图14 (d)所示。如果我们将特征通道平均分成m组,在不改变其他配置的情况下,理论上卷积的计算复杂度将降低到原来的1/m

深度可分离卷积

如图14 (e)所示,深度可分离卷积是最近流行的一种构建轻量级卷积网络的方法[204]。当组数与通道数相等时,它可以看作是群卷积的一种特殊情况
假设我们有一个包含d个滤波器和c个通道的特征映射的卷积层。每个过滤器的大小是k × k。对于深度可分离卷积,每个k×k×c过滤器首先被分割成c片,每个片的大小为k×k×1,然后使用过滤器的每个切片在每个通道中单独执行卷积。最后,使用多个1x1滤波器进行维度转换,以便最终输出应该有d个通道。通过使用深度可分卷积,可以将计算复杂度从O(dk 2c)降低到O(ck 2) + O(dc)。这个想法最近被应用于物体检测和细粒度分类

瓶颈设计

与前几层相比,神经网络中的瓶颈层包含的节点较少。它可以用于学习具有降维的输入的有效数据编码,这在深度自编码器中已被广泛使用。近年来,瓶颈设计被广泛用于设计轻量级网络。在这些方法中,一种常见的方法是压缩检测器的输入层,从检测管道的最开始就减少计算量。另一种方法是压缩检测引擎的输出,使特征映射更薄,从而使其在后续检测阶段更高效

神经结构搜索

人们对通过神经架构搜索(NAS)自动设计网络架构而不是严重依赖专家经验和知识产生了浓厚的兴趣。NAS已应用于大规模图像分类、目标检测和图像分割任务。最近,NAS在设计轻量级网络方面也显示出有希望的结果,在搜索过程中同时考虑了对预测精度和计算复杂性的约束

轻量网络

SqueezeNet(2016)

hh
在同等精度的情况下,较小的CNN架构提供了至少三个优势:(1)较小的CNN在分布式训练期间需要更少的服务器间通信。(2)较小的cnn从云端导出新模型到自动驾驶汽车所需的带宽更少。(3)较小的cnn更适合部署在FP-GAs和其他内存有限的硬件上。
作者提出了Squeezenet[27],采用三种策略:
策略1:用1x1过滤器替换3x3过滤器;策略2:将3x3滤波器输入通道的数量减少;策略3:在网络的后期进行下采样。策略1和策略2是关于明智地减少CNN中参数的数量,同时试图保持准确性。策略3是关于在有限的参数预算下最大化准确性。

即使使用未压缩的32位值来表示模型,SqueezeNet的模型尺寸也比模型压缩社区的最佳努力小1.4倍,同时保持或超过基线精度
深度压缩(Han et al., 2015a)不仅在具有许多参数的CNN架构(例如AlexNet和VGG)上工作得很好,而且还能够压缩已经紧凑的、完全卷积的SqueezeNet架构。深度压缩将SqueezeNet压缩了10倍,同时保留了基线精度。总而言之:通过将CNN架构创新(SqueezeNet)与最先进的压缩技术(Deep compression)相结合,我们将模型尺寸缩小了510倍,而与基线相比,精度没有下降。
然而,SqueezeNet和其他模型存在于一个广泛的、很大程度上未被探索的CNN架构设计空间中。因此我们对微架构探索(每个模块层的维度和配置)和宏观架构探索(模块和其他层的高级端到端组织)进行了探索,提出了Fire模块、简单旁路架构和复杂旁路架构。

MobileNets(2017)

作者提出了MobileNets[28]的高效模型,用于移动和嵌入式视觉应用。MobileNets基于流线型架构,使用深度可分离卷积来构建轻量级深度神经网络。我们引入了两个简单的全局超参数(宽度乘法器α和分辨率乘数ρ),它们可以有效地在延迟和准确性之间进行权衡。
深度可分离卷积,它将标准卷积分解为深度卷积和称为点卷积的1 × 1卷积,大大减少了计算量,如下图:

ShuffleNet(2017)

ShuffleNet,是专门为计算能力非常有限(例如,10-150 MFLOPs)的移动设备设计的。采用了点群卷积和通道shuffle两种新的运算,在保持精度的同时大大降低了计算成本
注意到最先进的基础架构,如Xception和ResNeXt,在极小的网络中变得效率较低,因为昂贵的密集1 × 1卷积。
作者提出使用点群卷积来降低1 × 1卷积的计算复杂度。为了克服群卷积带来的副作用提出了一种新的通道shuffle操作,以帮助信息在特征通道之间流动。基于这两种技术,构建了一个称为ShuffleNet的高效架。
对于前一层生成的特征图,我们可以先将每一层的通道划分为若干个子组,每个组有n通道,然后再为下一层的每个组提供不同的子组。
通道洗牌操作(c):假设一个卷积层具有g个组,其输出具有g × n个通道;我们首先将输出通道维度重塑为(g,n),转置然后将其平坦化,作为下一层的输入。

用点向群卷积替换第一个1 × 1层,然后进行通道洗牌操作,形成一个ShuffleNet单元,如上图所示。第二次点向群卷积的目的是恢复通道维度以匹配捷径路径。
对于使用stride应用ShuffleNet的情况,我们只需做两处修改(见图2 ©):(i)在快捷路径上增加一个3 × 3的平均池化;(2)用通道级联代替逐元素的加法,方便地扩大通道尺寸,增加的计算成本很低。

MobileNetV2(2019)

基于MobileNets,作者提出了一种新的移动架构,MobileNetV2[30],它是基于一个反向残余结构,其中的捷径连接是在薄瓶颈层之间。中间扩展层使用轻量级深度卷积来过滤作为非线性源的特征。此外,我们发现为了保持表征能力,在窄层中去除非线性是很重要的。
MobileNetV2使用k = 3 (3×3深度可分离卷积),因此计算成本比标准卷积小8到9倍,而精度只有很小的降。

ShuffleNet V2(2018)

hh
神经网络架构设计多以计算复杂度的间接度量为指导,即FLOPs。然而,直接度量如速度,还取决于其他因素,例如内存访问成本和平台特性(硬件平台)。因此,这项工作建议评估目标平台上的直接度量,而不仅仅是考虑FLOPs.此前工作观察到低FLOPs并不意味着高速度
提出了有效的网络架构设计应该考虑两个原则:
首先,应该使用直接度量(例如,速度)而不是间接度量(例如,FLOPs)
其次,这些指标应该在目标平台上进行评估

从几个不同的方面对运行时间(或速度)进行了详细的分析
得出一个高效的网络架构应该:1)使用“平衡”卷积(相等的通道宽度);2)意识到使用群卷积的代价;3)降低碎片化程度;4)减少元素操作

ShuffleNet V2采用了channel split操作,实现了特征重用,更好的满足了提出的高效网络架构原则

PeleeNet(2019)

hh
由现实问题出发:在计算能力和内存资源有限的移动设备上运行卷积神经网络(CNN)模型的需求日益增加,对高效模型设计进行研究
指出此前提出的高效体系结构存在的问题:如MobileNet、ShuffleNet和MobileNetV2等严重依赖于深度可分离卷积,这在大多数深度学习框架中缺乏有效的实现,而将高效模型与快速目标检测算法相结合的研究很少
基于此,作者提出了一种用传统卷积来构建的高效的PeleeNet架构

PeleeNet的一些关键特性是:
• 双向致密层
• Stem Block
• 瓶颈层采用动态通道数
• 过渡层没有压缩
• 采用传统的post-activation

对SSD的网络架构进行了速度加速优化,然后将其与PeleeNet相结合

MnasNet(2019)

作者提出了一种自动移动神经架构搜索(MNAS)方法,该方法明确地将模型真实延迟(而非FLOPS)纳入主要目标,以便搜索可以识别在准确性和延迟之间实现良好权衡的模型,该方法主要基于多目标奖励和新的搜索空间。
多目标奖励:将设计问题表示为一个多目标优化问题,同时考虑CNN模型的精度和推理延迟
搜索空间:观察到以前的自动化方法(只搜索少数复杂的单元格,然后重复堆叠相同的单元格)排除了对计算效率很重要的层多样性。为了解决这个问题,我们提出了一种新的因式分层搜索空间,它允许层即使在架构上不同,但仍然能在灵活性和搜索空间大小之间取得适当的平衡。
由此产生的MnasNet架构证实了层多样性的重要性

搜索框架由三个部分组成:基于循环神经网络(RNN)的控制器,用于获取模型精度的训练器,以及用于测量延迟的基于手机的推理引擎。在每一步中,1.控制器首先使用其当前参数θ对一批模型进行采样,通过基于其RNN的softmax logits预测一系列令牌。2.对于每个采样模型m,我们在目标任务上训练它得到它的准确率ACC(m),3.并在真实手机上运行它得到它的推理延迟LAT(m)。然后我们计算奖励值R(m)。在每一步结束时,通过使用邻域策略优化(Proximal Policy Optimization)定义的期望奖励来更新控制器的参数θ。重复采样-求值-更新循环,直到达到最大步数或参数θ收敛

MobileNetsV3(2019)

作者提出了基于互补搜索技术(NAS+NetAdapt)和新颖架构设计相结合的下一代MobileNets,探索了自动搜索算法和网络设计如何协同工作,以利用互补的方法提高整体技术水平。创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对的是高资源和低资源的用例,针对语义分割(或任何密集像素预测)任务,我们提出了一种新的轻量级高效分割解码器:精简空间金字塔池(LR-ASPP)
本文的目标是开发最好的移动计算机视觉架构,优化移动设备上的精度和延迟权衡
为了实现这一目标,我们引入了 (1)互补搜索技术,(2)适用于移动设置的新型高效非线性算法,(3)新型高效网络设计,(4)新型高效分割解码器

Once-for-All(OFA2020)

解决了跨许多设备和资源约束的高效推理的挑战性问题,特别是在边缘设备上
作者通过解耦训练和搜索来训练一个支持多种架构设置的一次性(OFA)网络,降低成本,可以快速地从OFA网络中选择一个专门的子网络,而不需要额外的训练可以在大量硬件平台下实现高效的深度学习部署
为了有效地训练OFA网络(防止不同大小的子网络受到干扰,小子网干扰大子网),我们还提出了一种新的渐进式收缩算法,这是一种广义剪枝方法,它可以在比剪枝(深度、宽度、核大小和分辨率)更多的维度上减小模型大小

优化

剪枝、量化和知识蒸馏

剪枝

“网络修剪”的研究最早可以追溯到20世纪80年代。当时,Y. LeCun等人提出了一种称为“最优脑损伤”的方法来压缩多层感知器网络的参数。在这种方法中,通过对网络的二阶导数来近似网络的损失函数,从而去掉一些不重要的权重。基于这一思路,近年来的网络剪枝方法通常采用迭代的训练剪枝过程,即在每一阶段的训练后只去除一小部分不重要的权值,并重复这些操作。由于传统的网络修剪只是简单地去除不重要的权值,这可能导致卷积滤波器中出现一些稀疏的连通性模式,因此不能直接用于压缩CNN模型。这个问题的一个简单解决方案是去除整个过滤器,而不是独立的权重。

量化

量化通过减少模型参数的位数或压缩权重,使得神经网络可以使用更少的存储空间和计算资源来执行任务,同时尽量保持模型的性能。这种技术在移动设备、嵌入式系统以及要求低能耗的环境中尤其有用
关于网络量化的工作主要集中在网络二值化上,其目的是通过量化其激活或权重到二进制变量(例如,0/1)来加速网络,以便将浮点运算转换为AND, or, NOT逻辑运算。网络二值化可以显著加快计算速度,减少网络存储,从而更容易在移动设备上部署。上述思想的一种可能实现是用最小二乘法用二进制变量近似卷积。通过使用多个二进制卷积的线性组合可以获得更精确的近似。此外,一些研究人员进一步开发了用于二值化计算的GPU加速库,获得了更显著的加速结果

知识蒸馏

蒸馏是一种将大网络(“教师网络”)的知识压缩到小网络(“学生网络”)中的通用框架。这一思想已被用于加速目标检,这种想法的一种直接方法是使用教师网来指导(轻量级)学生网的训练,以便后者可以用于加快检测。另一种方法是对候选区域进行变换,使学生网和教师网之间的特征距离最小。这种方法使检测模型的速度提高了2倍,同时达到了相当的精度。

数据增强

数据增强系列

损失函数

目标检测损失函数系列

未来展望

未来目标检测的研究可能会集中但不限于以下几个方面:
Lightweight object detection: 加快检测算法的速度,使其能够在移动设备上顺利运行。一些重要的应用包括移动增强现实、智能相机、人脸验证等。尽管近年来已经做出了很大的努力,但机器和人眼之间的速度差距仍然很大,特别是在检测一些小物体时。

Detection meets AutoML: 最近基于深度学习的检测器变得越来越复杂,并且严重依赖于经验。未来的一个方向是在设计检测模型时减少人为干预(例如,如何设计引擎和如何设置锚盒),使用神经结构搜索。AutoML可能是目标检测的未来

Detection meets domain adaptation: 任何目标检测器的训练过程本质上都可以看作是在数据独立且同分布(i.i.d)的假设下的似然估计过程。非id对象检测。数据,特别是对于一些现实世界的应用程序,仍然是一个挑战。GAN在领域自适应方面显示出良好的效果,在未来的目标检测中可能会有很大的帮助

Weakly supervised detection: 基于深度学习的检测器的训练通常依赖于大量注释良好的图像。注释过程耗时、昂贵且效率低下。开发弱监督检测技术,其中检测器仅使用图像级注释或部分使用边界框注释进行训练,对于降低人工成本和提高检测灵活性非常重要。

Small object detection: 在大场景中检测小物体一直是一个挑战。该研究方向的一些潜在应用包括利用遥感图像进行野生动物种群计数和一些重要军事目标的状态检测。一些进一步的方向可能包括视觉注意机制的整合和高分辨率轻量级网络的设计。

Detection in videos: 高清视频中的实时目标检测/跟踪对于视频监控和自动驾驶具有重要意义。传统的目标检测器通常被设计为基于图像的检测,而忽略了视频帧之间的相关性。通过探索时空相关性来改进检测是一个重要的研究方向。

Detection with information fusion: 多源/多模态数据(如RGB-D图像、3d点云、激光雷达等)的目标检测对于自动驾驶和无人机应用具有重要意义。一些悬而未决的问题包括:如何将训练有素的检测器移植到不同的数据模式中,如何进行信息融合以改进检测等

Reference

Object Detection in 20 Years: A Survey(2019)
Object Detection in 20 Years: A Survey
R-CNN系列
YOLO系列
2022目标检测综述
大杂烩oo
backbone系列
数据增强系列
损失函数系列

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值