文章目录
- 摘要
- 引言
- 目标检测发展历程
- 目标检测路线图
- 传统检测器
- 基于CNN的两阶段检测器
- 基于CNN的一阶段检测器
- 目标检测数据集及指标
- 数据集
- 评价指标
- 标注软件
- backbone
- AlexNet(2012)
- VGGNet(2014)
- GoogleNet(2014)
- ResNet(2016)
- ResNeXt
- DenseNet(2017)
- Dense Block——特征重用
- Transition
- CSPNet
- EfficientNet
- FasterNet
- PConv
- 轻量级网络设计
- 分解卷积
- 群卷积
- 深度可分离卷积
- 瓶颈设计
- 神经结构搜索
- 轻量网络
- Reference
摘要
目标检测作为计算机视觉中最基本、最具挑战性的问题之一,近年来受到了广泛的关注。它在过去二十五年的发展可以看作是计算机视觉历史的一个缩影。如果我们把今天的目标检测看作是深度学习力量下的技术美学,那么将时钟拨回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文本格式
backbone
AlexNet(2012)
出自
首当其冲的必然是AlexNet啦,重振DL荣光,AlexNet义不容辞,开启了AI新时代,划分了传统目标检测和基于深度学习目标检测,其论文被认为是CV界最具影响力的论文之一,引用次数已超13w
上图是因为受限于当时的GPU内存不足,作者用了两块GPU进行并行计算,224224是进行了随即裁剪,原图是227227见下图
AlexNet 的突破点主要有:
- 网络更大更深,LeNet5 有 2 层卷积 + 3层全连接层,有大概6万个参数,而AlexNet 有 5 层卷积 + 3 层全连接,有6000万个参数和65000个神经元。
- 使用 ReLU作为激活函数, LeNet5 用的是 Sigmoid,虽然 ReLU 并不是 Alex 提出来的,但是正是这次机会让 ReLUC位出道,一炮而红。AlexNet 可以采用更深的网络和使用ReLU 是息息相关的。
- 使用 数据增强 和 dropout 来解决过拟合问题。在数据增强部分使用了现在已经家喻户晓的技术,比如crop,PCA,加高斯噪声等。而 dropout 也被证明是非常有效的防止过拟合的手段。
- 用最大池化取代平均池化,避免平均池化的模糊化效果,并且在池化的时候让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
- 提出了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
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
CSPNet
EfficientNet
FasterNet
CVPR2023
基于PConv提出了新的轻量级backbone:FasterNet
解决了低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在设计轻量级网络方面也显示出有希望的结果,在搜索过程中同时考虑了对预测精度和计算复杂性的约束
轻量网络
Reference
Object Detection in 20 Years: A Survey(2019)
Object Detection in 20 Years: A Survey
R-CNN系列
YOLO系列
2022目标检测综述
大杂烩oo
backbone系列