论文链接:http://arxiv.org/abs/2406.14239
代码链接:https://github.com/LilianHollard/LeYOLO
摘要:针对当前检测模型只注重速度不注重计算效率的情况,文中重点研究了基于FLOP的高效目标检测计算的神经网络架构的设计选择,并提出了几种优化方法来提高基于yolo的模型的效率
提出1.高效的backbone 2.更快的FPAN 3. DNIN检测头
- 使用参数量表明轻量化的问题:相同数量的参数在输入图像大小不同的时候需要的计算需求不同,导致应用中依旧有问题
- 同时针对速度指标,它也与计算量有关,所有文章聚焦FLOP构建高效网络,同时给出了参数和计算量以供参考
- 本人的一些见解:其实,在真实应用中,无论是计算量还是参数量等都只是一个相对指标,因为同样的模型在不同的CPU、内存、图像大小、以及模型本身架构等所产生的影响都不是线性的,都会很大程度影响模型性能。
论文主要方法
Block definition
( a )经典瓶颈(classical bottleneck):就是早期的深度学习模型中,由于网络层数增加会导致训练困难(如梯度消失或梯度爆炸),这限制了网络的深度,进行残差连接可以缓解这一问题
( b )倒置瓶颈(inverted bottleneck):倒置瓶颈结构最著名的应用是 MobileNetV2,主要特点是1. 通过扩展卷积(1x1)增加通道数量得到更多特征2. 扩展后通过深度可分离卷积(通道卷积+逐点卷积(1x1))3. 残差连接
( c )作者:可以看作对(b)的优化,对反向瓶颈块进行的实验中,作者观察到优化通道数量可以有效地减少计算需求,特别是在大尺寸空间特征图上。实际上,如果一个块的扩展比例等于1,或者通过串联效应,传入通道 Cin等于计算得到的扩展层的数量Cmid ,那么块中就不需要使用第一个逐点卷积。卷积过程公式如下
Stride strategy
- 每个语义信息Pi都有输入(Cin)、输出(Cout)、扩展通道(Cmid),作者希望将Cmid层即隐藏层按比例增加通道,从CmidPi到CmidPi+1
- 我们可以简单地对每个区块应用一个丰富的扩展比率,而不仅仅是那些步幅大于1的区块,但这样做会显著增加整体网络成本。
- 虽然这种策略对整个模型不是强制性的,但它在某些节点确实是有意义的,可以从昂贵的特征映射空间大小中最大化信息扩展,特别是在最终的逐点卷积中。
STEM
- STEM可以用于描述第一层,将输入图像(通常3通道)卷积到小空间尺寸,并激发更多的通道数,主要的好处就是减少后面层的计算成本。
- 查看最先进的yolo样本,只有YOLOv6[32]和YOLOv8[29]是计算资源较低的STEM,当通道和层的数量减少到x0.25时,它们的总成本为0.32 GFLOP,这两个模型快速缩小到160x160p的特征映射,以补偿滑动卷积在空间大小上的成本太高。
- 作者的方法:作者在整个 STEM 中使用“点卷积”和“标准卷积”,限制严格的低通道数量,从 P0(640 × 640)到 P2(160 × 160)
Efficient backbone feature extractor
- 首先,我们使用了一个倒置瓶颈,因为它具有无与伦比的计算成本和成本-准确率。最后,对于层数的选择,我们根据神经网络的现状做了一个明显的观察:重点是P4或同等级别的图层重复。
- 使用NAS类型的算法来选择层数或重复次数,作者观察到相同的现象:P4上的层比其他层更重要。(个人解读:文章表达的大致意思应该是很多网络依赖重复P3层,但是作者通过多个算法观察发现侧重于重复P4层搭建自己的网络更好。)如下表所示
Information Bottleneck Characteristic’s
信息瓶颈原理理论强调了学习理论中关于信息的两个关键方面。首先,作者认识到深度神经网络(DNNs)偏离了精确的马尔可夫链.其次,由于DNNs仅处理来自前一层的输入,一个直接的影响涉及潜在丢失信息,随后的层无法恢复,如下式
- 昂贵的解决方案:参数共享
- 由于在上述等式中实现公平是可行的,存在理论[66]表明,每一层应该最大化自身内部的信息I(Y;hi),同时尽量减少层间信息交换I(hi−1;hi)。因此,我们没有像[71,73,21,5]那样增加模型的计算复杂度,而是选择更有效地扩展模型,整合Dangyoon的[17]反向瓶颈理论。
- 作者方法:我们的实现包括以I(h0;hn),其中n等于神经网络的最后一个隐藏层,通过确保输入/输出通道的数量不超过从第一个隐藏层到最后一个隐藏层的差比。隐层通道数应保持在输入通道P1和输出通道P5所限定的范围内,差比小于6,使I(hi−1;hi)的形式为I(h1;hn)。看公式就行,很简单意思如下
- Dangyonn等人的反向瓶颈通道扩展实验[17]表明,扩展或缩小比率不应超过6。因此作者针对I(Y;hi)最大扩展为3,此外,在具有逐步反向瓶颈和逐点通道扩展策略的情况下,通过总扩展为6,进一步激发信息,在(Pi;Pi+1)之间最大化I(Y;hi),然而,我们将信息从P4的反向瓶颈进一步激发到P5,最大化I(Y;hi) at (P4;P5),扩展为9(与扩展为6相比增加0.5 mAP)
- 块之间的残差连接的实现有助于最小化I(hi−1;Hi),提供前一层Hi−1的信息。密集连接[16,27]可以增强模型,但是,它们需要额外的内存。
Neck
- BiFPN:使用计算成本低的层(拼接和加法、深度和逐点卷积),然而,BiFPN需要太多的语义信息和太多的阻塞状态(等待前一层、复杂图形),这使得它难以跟上快速执行速度
- SiSO:单一输入和输出,与YOLOF论文中提出的其他解决方案相比,我们观察到具有多输出的颈部(single -in, multiple -out - SiMO)和具有单输出的颈部(single -in, multiple -out - SiMO)之间的显着退化。我们特别感兴趣的是他们对SiMO潜在效率的研究,证明了通过优化语义信息流来改进YOLO模型颈部第一层的可能性,只有一个丰富的输入。
- 作者:我们提出了一种快速泛网(FPANet),具有更少的卷积层数、更少的通道数和更有效的语义信息共享。所提方法与YOLOv8中的neck概念相似。在主干网络后的P3和P5之间以及头部之前减少了计算流,直接加强了P4中的语义信息层,如图4(b)所示。此外简化了neck,减少了锁定和等待时间,考虑到有限的并行化机会和架构的复杂性。其实直接看上图(b)就行。
Decoupled Network in Network Head
- 自YOLOv6[32]以来,模型头已经成为一个更强大的工具,将块分为两个部分:分类分支和对象回归。虽然非常高效,但这意味着成本几乎翻倍,需要进行分类和检测的卷积。
- 我们的理论认为,除了使用轻量级深度卷积逐个细化由主干和neck通道提取的特征外,不需要添加空间信息。
- 通过YOLO的逐点网格操作,我们从理论上证明了使用点向卷积作为逐像素滑动多层感知器解决方案来简化检测头是可能的,类似于每个像素的分类命题——对于仅限空间的指令进行多次深度卷积,细化两个点向分类和回归每个像素之间的空间关系。
- 消融研究(见第 B.4 章)证明仅在模型头部使用逐点卷积可以取得更好的结果,在 LeYOLO-Nano 640 尺度上达到 33.4 mAP。通过在逐点卷积之间使用深度卷积细化空间信息,将模型推至 34.3 mAP。
- 我们提出了DNiN(解耦网络头),这是一种以点为中心的方法,为每个网络提议提供两个单独的点操作:分类和回归(边界框)。点操作在目标检测中是必不可少的,在网络中的网络框架中充当逐像素分类器和回归器。深度卷积被分成两个3x3卷积,以降低与单个5x5卷积相比的总成本。
- 我们操作两个独立的点卷积:一个用于分类,另一个用于回归。这种区别源于分类和边界框提取之间的不同需求。我们提出的DNiN头扩展通道以匹配类数,同时保持在Pi级的空间维度。因此,每个像素代表一个潜在的预测。使用1x1卷积是指神经网络的起源,特别是NiN模型[35],其中点卷积作为传统多层感知器的替代品出现。
总结
证明了在不同语义信息层级之间进行缩放和优化通道选择可以使所提方法超越前所未有的 FLOP 每个 mAP 的比率
存两张作者的图帮助源码理解,我将发一篇在v8中复现作者代码的文章。