【YOLO系列合集】下部分——YOLOv6到YOLOv10

【YOLO系列合集】上部分——YOLOv1到YOLOv5


7. YOLOX算法

YOLOX是旷视科技2021年提出的目标检测算法,它基于YOLOv3-SPP进行改进,将原有的anchor-based调整为了anchor-free形式,并且集成了其他先进检测技术(比如decoupled head、label assignment SimOTA)取得了SOTA性能。类似于YOLOv5,它也提供了多个尺度版本的模型,Nano/Tiny/s/m/l/x,而且该方法的ONNX、TensorRT、NCNN、OpenVino推理模型均已开源。下图是YOLOX与其他检测算法的对比情况图:

以我实际的使用情况来看,对比YOLOv5算法,YOLOX在检测精度方面确实比YOLOv5更加优秀,但速度会稍微慢一点点。

7.1 改进细节

作者以YOLOv3-SPP为基准,即backbone为Darknet-53,neck为SPP+FPN,head部分为分3个特征图输出NxNx(3x(4+1+80))。YOLOX对其进行一步步改进,下面来看具体的改进手段。

训练YOLOv3-SPP baseline
和YOLOv3论文中不一样的是,作者增加了一些策略,比如在训练过程中加入EMA权重更新技术,cosine学习率下降,IoUloss和IoU感知分支;用BCEloss训练分类分支和obj分支,用IoUloss训练回归分支。对于数据增强部分,作者只采用了随机水平翻转和颜色抖动以及多尺度训练,没有使用随机尺寸裁剪(因为作者认为这和后面的马赛克数据增强重叠了,不好评估马赛克数据增强带来的影响)。最终在COCO val数据集上是38.5%mAP。

Decoupled head
在目标检测中,分类与回归任务的冲突是一种常见问题。因此,分类与定位头的解耦已被广泛应用到单阶段、两阶段检测中。然而YOLOv3/v4/v5都没有把检测头解耦,作者通过实验发现,解耦检测头能让训练收敛更快,如下图:

解耦头,意味着会检测头会多一个分支结构,所以参数量会增加,为了尽量少增加参数,作者在进入预测分支之前先用1x1卷积将特征通道减少,然后再接分类分支和回归分支。其结构如下所示:
在这里插入图片描述
Strong data augmentation
数据增强部分,作者将Mosaic和MixUp添加到增强策略中,以提高YOLOX的性能。在模型训练过程中采用MixUp和Mosaic对数据进行增强,并在最后15个epoch关闭它。实际应用下来看,最后15epoch关闭数据增强很有用。

Anchor-free
Anchor-based方法的弊端:需要在优化之前,聚类分析数据集标注框的情况,这会导致训练出来的模型使用场景及泛化性能受限。锚框设计增加了检测头的复杂性,预测框数量会根据锚框设计的增加而增加。而无锚框机制显著减少了需要启发式调整的设计参数的数量和涉及的许多技巧(例如,锚框聚类,网格敏感)的良好性能,使检测器的训练和解码阶段大大简化。将anchor-based调整为anchor-free比较简单,作者将每个位置的预测从3个(YOLOv3是每个grid设置3个anchor)减少到1个,并使它们直接预测4个值,即网格左上角的两个偏移量,以及预测框的高度和宽度。改成anchor-free后,作者参考FCOS,将每个目标的中心定位正样本并预定义一个尺度范围以便于对每个目标指派FPN特征尺度。经过这个改进后,模型参数和GFLOPs都减少了,推理速度更快,而且性能还提升至42.9%mAP了。

Multi positives
上面的匹配策略,一个gt框只能匹配一个正样本(因为采用center location匹配),这意味着会忽略掉周边高质量预测框,所以作者划定gt框中心点3x3的区域内匹配正样本,这个区域就类似于FCOS中的”center sampling”。这一改进促使模特mAP提升至45.0%。

SimOTA
OTA从全局角度分析标签分配,并将分配过程制定为最优运输(Optimal Transport, OT)问题,从而产生当前分配策略中的SOTA性能。然而,在实践中我们发现用Sinkhorn-Knopp算法求解OT问题带来了额外25%的训练时间,这对于训练来说是相当昂贵的。因此,我们将其简化为动态top-k策略,命名为SimOTA,以获得近似解。在SimOTA中,预测框pj与gt框gi的匹配代价计算为:
在这里插入图片描述
λ为平衡系数,前者为gi与pj的分类损失,后者为gi与pj的回归损失。
对于每一个gt框gi,选择前topk个与之损失最小的预测框,且该预测框中心点在gi中心点3x3的范围内的可作为该gt框gi的正样本,其余则作为负样本。通过这个改进,mAP又提升至47.3%。

End-to-end YOLO
即模型最后直接输出结果,不需要最后做nms,这样的改进会导致掉点,所以作者最终没有采用。

下面是上述改进的消融实验结果:
在这里插入图片描述
从表中可以看出,数据增强,划分3x3领域取更多正样本和SimOTA动态匹配正样本这三个改进对YOLOX提升比较大。

Other Backbones
仿照YOLOv5的网络规模改进得到YOLOX-S/M/L/X,仿照YOLOv4-Tiny提出YOLOX-Tiny及YOLOX-Nano,实验结果均表明YOLOX的这些改进很优秀。
在这里插入图片描述


8. YOLOv6算法

YOLOv6出自美团基础研发平台/视觉智能部研发团队,出于以下几个出发点,考虑对YOLO系列检测算法进行改进;1、RepVGG论文思想还未应用到检测网络,于是考虑对检测网络进行重参数化设计;2、基于重参数化的检测器的量化也需要细致的处理,否则难以处理由于其在训练和推理过程中的异构配置而导致的性能下降;3、更关注模型部署时的推理速度;4、对于更特定的优化策略比如标签分配和损失函数设计,需要进一步验证考虑到架构差异性;5、对于部署,我们可以容忍训练策略的调整,以提高准确性性能,但不会增加推理成本,例如知识蒸馏。基于以上5点因素,作者提出YOLOv6,为了在不降低性能的情况下提高推理速度,作者研究了最先进的量化方法,包括训练后量化(PTQ)和量化感知训练(QAT),并将它们应用于YOLOv6中,以实现可部署网络的目标。用TensorRT量化后的速度对比如下图所示:
在这里插入图片描述
总之,YOLOv6的贡献如下:
(1)、为不同场景应用定制不同规模的模型,小模型以普通的单路径主干为特征,而大模型建立在高效的多分支块上;
(2)、加入了自蒸馏策略,同时执行了分类任务和回归任务;
(3)、融合了各种先进tricks,如:标签分配检测技术、损失函数和数据增强技术;
(4)、在RepOptimizer和通道蒸馏的帮助下优化了检测器的量化方案。

8.1 YOLOv6细节

YOLOv6的重新设计包括以下部分:网络设计、标签分配、损失函数、数据增强、行业方便的改进以及量化和部署。整体YOLOv6网络结构如下:
在这里插入图片描述

8.1.1 网络设计

Backbone
与其他主流架构相比,作者发现RepVGG骨干网络具备和小型网络一样的推理速度,但是提取到的特征更丰富,性价比很高,但是由于参数和计算成本的爆炸性增长,它很难被缩放以获得更大的模型。所以作者把RepBlock作为小型网络的子模块;对于大型模型,作者基于现在的CSP模块进行改进得到了CSPStackRep模块。如下图所示为RepBlock和CSPStackRep的结构图:
在这里插入图片描述
基于以上改进,作者得到了高效的重参数主干网络EfficientRep,如下图所示:
在这里插入图片描述
相比于 YOLOv5 采用的 CSP-Backbone,该 Backbone 能够高效利用硬件(如 GPU)算力的同时,还具有较强的表征能力。作者将Backbone中stride=2的普通Conv层替换成了stride=2的RepConv层。同时,将原始的CSP-Block都重新设计为RepBlock,其中RepBlock的第一个RepConv会做channel维度的变换和对齐。另外,作者还将原始的SPPF优化设计为更加高效的 SimSPPF。

Neck
YOLOv6也和v4/v5一样采用了PAN结构,不同的是,作者用RepBlocks(N/S)或CSPStackRep(M/L)对CSPBlock进行了替换,同时对整体 Neck 中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力,命名为Rep-PAN,结构如下图所示:
在这里插入图片描述

Head
像FCOS和YOLOX一样,也是解耦了分类和回归任务,但它们都在每个分支中引入额外的两个3x3卷积层用于提取任务特征;在YOLOv6中,作者采用混合通道策略,将3x3卷积层简化到只使用一个,检测头的宽度由骨干和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟。使其更加高效,命名为Efficient Decoupled Head。
在这里插入图片描述

Anchor-free
基于anchor-free的检测算法由于其泛化性能好和解码预测简单而减少了后处理成本。目前有两类anchor-free方式,基于锚点和基于关键点的方式,YOLOv6采用基于锚点的方式,其回归分支实际上预测了从锚点到box四边的距离。

8.1.2 标签分配

标签分配负责在训练阶段将标签分配给预定义的锚。早期都是采用比较简单的方式,根据gt框与预定义锚框的iou大小来判断,现在有了比较复杂的动态匹配策略,如SimOTA和TAL。YOLOv6早期版本采用SimOTA分配策略,但是,在实践中,作者发现引入SimOTA将减缓训练过程,而且经常陷入不稳定训练的情况。因此,YOLOv6后期采用TAL的方式,因为高效又训练友好。

SimOTA
OTA将目标检测中的标签分配问题视为最佳传输问题,它从全局角度考虑预测框与真实标签的匹配的最优问题,从而对每个真实标签对象定义正负样本预测框。而SimOTA是OTA的简化版本,减少了额外的超参数但依然保持了其性能。SimOTA的分配标签步骤为:
(1)、计算成对预测框与真值框代价,由分类及回归loss构成
(2)、计算真值框与前k个预测框IoU,其和为Dynamic k;因此对于不同真值框,其Dynamic k存在差异
(3)、最后选择代价最小的前Dynamic k个预测框作为正样本

TAL(Task alignment learning,任务对齐学习)
任务对齐学习的匹配标签方式最早由TOOD检测算法提出,该算法设计了一个统一的分类分数和预测框质量的指标用来替换传统的IoU度量方式。这在一定程度上,使得分类任务和回归任务的不一致性得到了缓解。

其匹配标签的步骤为:
(1)、在各个特征层计算gt与预测框IoU及与分类得分乘积作为score,进行分类检测任务对齐
(2)、对于每个gt选择top-k个最大的score对应bbox
(3)、选取bbox所使用anchor的中心落在gt内的为正样本
(4)、若一个anchor box对应多个gt,则选择gt与预测框IoU最大那个预测框对应anchor负责该gt

8.1.3 损失函数

主流的anchor-free检测算法的损失函数包括分类损失、回归损失和object损失;作者通过系统的实验,最终确定分类损失采用VAriFocal Loss,回归损失采用SIou/GIoU。

Classification Loss
Focal Loss对传统的交叉熵损失进行了改进,解决了正样本与负样本、难样本与易样本之间的类不平衡问题。为了解决训练和推理在质量估计和分类使用上不一致的问题,quality Focal Loss (QFL)进一步扩展了Focal Loss,将分类分数和定位质量联合表示,用于分类中的监督。VariFocal Loss(VFL)也对Focal Loss进行改进,它对正负样本的处理是不对称的,通过考虑正负样本的不同重要程度,平衡了正负样本的学习信号。Poly Loss将常用的分类损失分解为一系列的加权多项式基数。它在不同的任务和数据集上调整多项式系数,通过实验证明它比交叉熵损失和Focal Loss更好。
通过一系列实验,YOLOv6的分类损失最终采用VariFocal Loss。

Box Regression Loss
边框回归损失在边界框定位学习中充当着重要角色,早期是采用L1损失,后来就涌现出IoU系列损失和probability loss。
IoU损失将预测框的四个边界作为一个整体单位进行回归。它被证明是有效的,因为它与评价指标一致。IoU有很多变体,比如:GIoU、DIoU、CIoU、α-IoU、SIoU通过实验,作者在YOLOv6-N和YOLOv6-T中采用SIoU,剩余网络结构则采用GIoU。

Distribution Focal Loss(DFL)
将连续分布的box位置简化为离散的概率分布。它考虑了数据的模糊性和不确定性,而没有引入任何其他强的先验因素,这有助于提高box的定位精度,特别是当ground-truth boxes模糊时。在DFL的基础上,DFLv2开发了一个轻量级的子网络,以利用分布统计和实际定位质量之间的密切关联,这进一步提高了检测性能。然而,DFL通常比一般的目标框回归多输出17倍的回归值,导致了大量的开销。额外的计算成本大大阻碍了小模型的训练。而DFLv2由于有了额外的子网络,进一步增加了计算负担。通过实验表明,DFLv2在YOLOv6中带来了与DFL相似的增益效果,因此,作者只在YOLOv6-M/L中采用DFL。

Object Loss
FCOS检测算法首次提出了对象损失,以降低低质量边界框的分数,以便在后处理中过滤掉它们。YOLOX也利用它加速收敛并提升网络性能。在YOLOv6中,作者也尝试加入对象损失,但是没起到正面效果。

8.2 适应工业界的改进

作者尝试了其他常见的做法和技巧来提高性能,包括自蒸馏和更多的迭代epoch。对于自蒸馏,分类和回归都分别由教师模型进行监督。回归的蒸馏是由于DFL而实现的。此外,软标签和硬标签的信息比例通过余弦衰减动态下降,这有助于学生在训练过程中的不同阶段选择性地获取知识。

更多迭代次数,300增加到400epoch
在这里插入图片描述

自蒸馏
为了进一步提高模型的准确性,同时不引入太多的额外计算成本,作者应用经典的知识蒸馏技术,使教师和学生的预测之间的KL散度最小。教师模型限定为学生模型本身,但是经过了预先训练的,所以可以称之为自蒸馏的学习方式。KL散度通常被用来衡量数据分布之间的差异。然而,在目标检测中有两个子任务,其中只有分类任务可以直接利用基于KL散度的知识提炼。由于DFL损失的存在,我们也可以在box回归上执行它。知识蒸馏损失可以用公式表述为:
在这里插入图片描述
总的损失可以表述为:
在这里插入图片描述
Ldet代表检测网络自身损失,LKD代表蒸馏损失,α用于平衡两者损失。

图像灰度边界
在YOLOv5和YOLOv7的实现中,在评估模型性能时,每个图像周围都放置了半截灰色边界。虽然没有添加有用的信息,但它有助于检测图像边缘附近的物体。这个技巧也适用于YOLOv6。但是,额外的灰度边界会降低推理速度,但是不要又会降低精度,作者猜测是mosaic增加中引入灰度填充的原因造成的,所以,在训练过程中,在最后一轮,关闭了马赛克增强。最终使得减少了灰色边界面积的情况下,不掉点。
在这里插入图片描述

8.3 量化与部署

为了解决基于重新参数化的模型量化时的性能下降问题,作者用RepOptimizer训练YOLOv6,以获得PTQ友好的权重,使得其特征的分布是非常狭窄的,能够有利于量化,如下图所示:
在这里插入图片描述

PTQ的实验结果如下:
在这里插入图片描述

通过将量化敏感操作部分转换为浮点计算,进一步提高了PTQ的性能。

为防止PTQ不足,作者引入QAT(训练中量化),保证训练推理一致,作者同样使用RepOptimizer,此外使用channel-wise蒸馏,如图所示:
在这里插入图片描述

QAT的实验结果如下:
在这里插入图片描述


9. YOLOv7算法

YOLOv7是YOLOv4和YOLOR同一个作者发布的算法,和YOLOv6优化的方式大致相同,都是结合重参数化对网络结构进行改进,相比于YOLOv6在自蒸馏和量化方面做优化,YOLOv7在网络结构方面做了更多的探索,也提出了训练方法的优化。这些模块和优化方法可以在不增加推理成本的情况下,增强训练成本以提高目标检测的准确性。

YOLOv7的贡献如下:
1、设计了几种可训练的bag-of-freebies,使实时检测器可以在不提高推理成本的情况下大大提高检测精度;
2、对于目标检测的发展,作者发现了两个新的问题,即模块重参化如何高效替代原始模块,以及动态标签分配策略如何处理好不同输出层的分配。作者针对这两个问题提出了方法进行解决。
3、作者为实时检测器提出了“扩展”和“复合缩放”(extend” and “compound scaling”)方法,可以更加高效地利用参数和计算量,同时,作者提出的方法可以有效地减少实时检测器40%的参数和50%的计算量,并且具备更快的推理速度和更高的检测精度。

9.1 YOLOv7细节

YOLOv7网络结构如下所示,图片来自”A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 AND BEYOND”)
在这里插入图片描述

9.1.1 YOLOv7的网络结构改进

扩展高效层聚合网络(E-ELAN, Extended efficient layer aggregation network)
ELAN结构通过控制最短最长的梯度路径,允许深度模型更有效地学习和收敛。YOLOv7基于ELAN结构提出的E-ELAN适用于具有无限堆叠计算块的模型。E-ELAN通过打乱和合并(shuffling and merging)基数来结合不同groups的特征,在不破坏原有梯度路径的情况下增强网络的学习能力。
在这里插入图片描述

基于连接的模型的模型缩放
模型缩放的主要目的是调整模型的某些属性,生成不同尺度的模型,以满足不同推理速度的需要。例如:Efficientnet系列,通过同时调整宽度、深度和分辨率得到b0到b7版本。YOLOv7的网络结构是基于串联的结构,其中标准缩放技术(如深度缩放)会导致过渡层的输入通道和输出通道之间的比率变化,从而导致模型的硬件使用减少。比如:串联结构网络中深度增加同时也会导致网络宽度增加,如下图a、b;YOLOv7提出了一种新的基于串联的模型缩放策略,该策略将块的深度和宽度以相同的因子进行缩放,以保持模型的最优结构。如下图c所示
在这里插入图片描述

9.1.2 bag-of-freebies

卷积重参数化
尽管RepConv在VGG上取得了优异的性能,但将它直接应用于ResNet和DenseNet或其他网络架构时,它的精度会显著降低。作者使用梯度传播路径来分析不同的重参化模块应该和哪些网络搭配使用。通过分析RepConv与不同架构的组合以及产生的性能,作者发现RepConv中的identity破坏了ResNet中的残差结构和DenseNet中的跨层连接,这为不同的特征图提供了梯度的多样性。基于这个原因,作者使用没有identity连接的RepConv结构。下图显示了作者在PlainNet和ResNet中使用的“计划型重参化卷积”的一个示例。
在这里插入图片描述

辅助训练模块
使用引导头(lead head)预测作为指导来生成由粗到细的层次标签,这些标签分别用于辅助头(auxiliary head)和引导头的学习。其结构如下:
在这里插入图片描述

引导头指导的标签分配器主要是根据引导头的预测结果和gt真实框进行计算,并通过优化过程生成软标签。这些软标签将作为辅助头和引导头的目标训练模型。这点可以被看作是一种广义残差学习。通过让较浅的辅助头直接学习引导头已经学习过的信息,引导头将更能专注于学习尚未学习的剩余信息。

其他bag-of-freebies
Batch normalization in conv-bn-activation:目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏差和权重中。
Implicit knowledge:YOLOR中的隐式知识可以在推理阶段将计算值简化为向量。这个向量可以与前一层或后一层卷积层的偏差和权重相结合。
Exponential moving average:作者使用 EMA 模型作为最终的推理模型。


10 YOLOv8算法

YOLOv8和YOLOv5都是由小型初创公司Ultralytics创建并维护的,和YOLOv5一样,也没有形成论文,但工程readme里面链接了参考文档(https://docs.ultralytics.com/models/yolov8/),该文档非常丰富,包含如何快速运行、训练、验证、预测及导出其他格式模型,还包含除检测任务的其他任务的扩展如:分割、分类和姿态估计,同时也包含YOLO系列其他模型的汇总介绍。

YOLOv8的主要特点有:
模型更快更准确;
模型除了能完成目标检测任务,也可以无缝衔接到实例分割、图像分类以及姿态估计任务;
与之前的YOLO版本兼容可扩展,ultralytics相当于一个YOLO统一框架;
YOLOv8采用新的backbone,与YOLOv5相比采用了anchor-free策略,模型也采用了新的损失函数;
YOLOv8支持导出多种格式的模型,并且可以在CPU/GPU上运行。

10.1 YOLOv8细节

YOLOv8网络结构如下所示,图片来自github用户RangeKing(https://github.com/open-mmlab/mmyolo/pull/621)。
在这里插入图片描述

对比YOLOv8和YOLOv5的yaml格式网络结构配置
在这里插入图片描述

可以看到网络规模n/s/m/l/x的深度、宽度配置比例没有改变,但max_channels,YOLOv8的减少了。
Backbone部分,YOLOv8将YOLOv5采用的C3结构升级成了C2f,其余通道数配置均未改变
Head部分,相对于YOLOv5,上采样之前减少了卷积操作,同样将C3升级成了C2f

10.1.1 YOLOv8的C2f结构

YOLOv8中的C2f结构如下图红框部分:
在这里插入图片描述

由子模块ConvModule和多个DarknetBottleneck所组成,而DarknetBottleneck又包含两个3x3卷积的ConvModule;对比YOLOv5的C3结构,如下:
在这里插入图片描述

其中ConvModule对应CBS,结构没有改变,DarknetBottleneck相对于YOLOv5的Bottleneck结构,将其第一个1x1的CBS换成了3x3的CBS结构,即YOLOv8的DarknetBottleneck包含两个3x3卷积,值得注意的是,YOLOv8和YOLOv5一样,都在backbone部分的Bottleneck应用了shortcut连接,而neck部分没有应用shortcut。最大的不同是C2f中每个DarknetBottleneck均分出一半通道的特征图直接连接到最后,多个DarknetBottleneck分出来的通道以及最后一个DarknetBottleneck的输出通过Concat操作合并在一起,并经过1x1的ConvModule得到想要的输出通道,这有点像YOLOv7的E-ELAN结构,优化了梯度在网络之间的传播路径,下面具体看代码实现:
在这里插入图片描述

10.1.2 YOLOv8的SPPF模块

之前YOLOv5以及YOLO其他系列均采用SPP模块,结构如下:
在这里插入图片描述

而YOLOv8采用的SPPF是将池化操作的并行分支改为了串行操作,并在每个池化后接了shortcut,结构如下:
在这里插入图片描述

代码对应如下:
在这里插入图片描述

10.1.3 YOLOv8的neck和head

Neck部分变化得比较少,一是上采样之前减少了卷积操作,二是将C3升级成了C2f,变化比较大的是head部分,像YOLOX和YOLOv6一样,YOLOv8解耦了分类和回归分支,而且取消了obj分支,并且变成了anchor-free,如下:
当为YOLOv8l模型时,w=1.0,最大通道数为512
在这里插入图片描述

而YOLOv5l的耦合方式检测头结构如下:
在这里插入图片描述

10.1.4 YOLOv8的损失函数

由上部分可知,检测头解耦后,每个特征尺度的检测头有两个分支:分类分支和回归分支,结构如下:
在这里插入图片描述

分类分支还是采用BCE损失,回归分支是采用CIoU与DFL(Distribution Focal Loss)共同控制。


11. YOLOv9算法

YOLOv9和YOLOv7的一作是同一个人,所以均采用同一个检测框架;文章出发点可归因于论文的这句话:
在这里插入图片描述

作者先表明现如今检测算法主要集中在设计目标函数及有效的框架,但却忽略了输入数据逐层进行特征提取和空间变换时,会丢失大量的信息,这些丢失的信息会造成梯度偏差影响模型参数的更新。如下图所示是各个网络的特征图细节展示;
在这里插入图片描述

目前,可以缓解这一现象的主要方法如下:

使用可逆架构:这种方法主要使用重复的输入数据,并以显式的方式维护输入数据的信息;缺点是需要额外的层来组合重复馈送的输入数据,增加推理成本,且受限不能有太深的路径,网络很难捕获高阶语义信息进行建模;
Mask建模:主要利用重建损失,采用隐式方法最大化提取的特征,保留输入信息;缺点是重建损失有时与目标损失相冲突或者与输入数据产生不正确的关联;
引入深度监督概念:它使用没有丢失太多重要信息的浅层特征来预先建立从特征到目标的映射,以确保重要信息可以转移到更深的层;缺点是若在浅层丢失信息,后续层无法检索到所需信息,容易造成错误积累。

本文将深入研究数据在深度网络中传输时的重要数据丢失问题,即信息瓶颈和可逆函数。为此,作者提出了可编程梯度信息(programmable gradient information, PGI)应对深度神经网络中多目标的各种变化,PGI可针对目标任务提供完整的输入信息,因此网络可以根据完整的梯度信息更新网络权重。此外,作者还基于梯度路径规划在ELAN结构的基础上设计了一个轻量高效的网络结构GELAN(Generalized Efficient Layer Aggregation Network),而YOLOv9正是利用GELAN结构来设计的。它们在COCO数据集上的表现如下图:
在这里插入图片描述

11.1 YOLOv9细节

YOLOv9网络结构如下:
在这里插入图片描述

11.1.1 Programmable Gradient Information

为了解决数据在深度网络中传输时信息丢失的问题,作者提出了一种新的辅助监督框架,称为可编程梯度信息(PGI),如图下图(d)所示。
在这里插入图片描述

PGI主要包括三个部分,即(1)主分支、(2)辅助可逆分支、(3)多级辅助信息。从上图(d)中,我们可以看到PGI的推理过程只使用主分支,因此不需要任何额外的推理成本。至于其他两个组成部分,它们用于解决或减缓深度学习方法中的几个重要问题。其中,设计了辅助可逆分支来处理神经网络深化所带来的问题。网络深化会造成信息瓶颈,使损失函数无法生成可靠的梯度。对于多级辅助信息,它是为了处理深度监督引起的误差积累问题而设计的,特别是对于多预测分支的架构和轻量级模型。

辅助可逆分支(Auxiliary Reversible Branch)
在PGI结构中,作者提出了辅助可逆分支来生成可靠的梯度。但是作者通过实验得到在网络主分支中增加可逆结构(如上图b黄色虚线框部分)会带来推理时间的急剧上升,增加图b黄色框部分,推理时间能增加一倍。

作者意识到,我们要的目标是使用可逆结构来获得可靠的梯度,因此“可逆”并不是推理阶段的唯一必要条件。作者将可逆分支视为深度监督分支的扩展部分,设计了辅助可逆分支,如图d蓝色虚线框部分。这样一来,深层主分支中可能因信息瓶颈而丢失的重要信息,可以通过辅助可逆分支获得补充的梯度信息,这些信息有助于网络学习到更准确、更关键的特征,以更有效地完成目标任务。作者进一步指出,由于复杂的任务需要在深层网络中进行转换,因此可逆结构在浅层网络中的表现比一般网络差。因此提出的方法不追求在主分支上保留完整原始信息,而是通过辅助监督机制提供有用的梯度更新。

多级辅助信息(Multi-level Auxiliary Information)
包含深度监督信息的多级预测分支结构如上图c所示。对于目标检测任务而言,可以使用不同的特征金字塔来检测不同大小的目标。因此,在连接到深度监督分支后,将引导浅层特征学习小物体检测所需的特征,此时模型将其他大小目标的位置作为背景。然而,上述行为会导致深层特征金字塔丢失大量预测目标物体所需的信息。在这里,作者认为每个特征金字塔都需要接收到所有目标物体的信息,以便后续的主干分支能够保留完整的信息来学习对各种目标的预测。因此,作者引入了一种多级辅助信息架构,通过在辅助监督特征金字塔层和主分支之间加入集成网络,如上图d粉色虚线框部分所示。这个集成网络的角色是整合来自不同预测分支的梯度信息,并将这一聚合的信息传递给主分支,以促进参数的更新。

11.1.2 Generalized ELAN

通过结合CSPNet和ELAN这两种采用梯度路径规划设计的神经网络架构,作者设计了一种考虑轻量级、推理速度和准确性的通用高效层聚合网络(GELAN)。它的整体架构如下图所示,ELAN是卷积层的堆叠结构,而GELAN适用范围更广,是任何block的堆叠。
在这里插入图片描述


12. YOLOv10算法

YOLOv10出自清华大学,论文指出过去人们对YOLO的优化,主要集中在架构设计、优化目标、数据增强策略,然而并没有人试图去掉后处理步骤NMS,这对YOLO系列的端到端部署是不利的而且会增加推理时间。此外,各版本YOLO中各部件的设计缺乏全面彻底的检查,导致计算冗余明显,限制了模型的能力。所以YOLOv10的目标就是从后处理和模型架构两个方面进一步推进YOLO系列的性能。为此,作者提出一致双标签分配NMS-free训练法,带来了高性能和低延时。在模型架构设计方面,作者引入整体高效-精度驱动的模型设计策略,从YOLOv10的全面优化各组件来看达到了高效-精度最优,这大大降低了计算开销,提高了性能。在COCO数据集相同mAP情况下,YOLOv10-S比RT-DETR-R18快1.8倍,同时比后者小2.8倍的参数量和flops。与YOLOv9-C相比,在相同性能下,YOLOv10-B的延迟减少了46%,参数减少了25%。
在这里插入图片描述

之前的YOLO改进版本均是采用一对多的标签分配策略,即一个标注框对应多个正样本,这样在检测的后处理阶段就必须应用NMS选择最佳检测结果。想去掉NMS,就可参考DETR的算法框架,例如RT-DETR提出了一种高效的混合编码器和最小不确定性查询选择,将DETR推进到实时应用领域。然而,由于DETR的内在复杂性,导致部署困难,很难在精度和延时找到平衡。所以还是回到CNN-based 检测器的探索。

回顾之前YOLO系列的结构方面的改进,为增强主干特征提取能力,提出了多种主计算单元如:DarkNet,CSPNet,EfficientRep和ELAN等等,针对Neck部分,有PAN,BiC,GD和RepGFPN等等,还探索了增强多尺度特征融合的方法,模型缩放方法和模型重参数化技术。虽然这些改进都对最终的模型性能取得了提升,但从效率和精度的角度上来讲,仍然缺乏对各个YOLO版本中各种组件的全面评估。换句话讲,各版本YOLO内部仍然存在相当大的计算冗余,导致参数利用率低,效率次优。

12.1 YOLOv10细节

12.1.1 Consistent Dual Assignments for NMS-free Training

在训练阶段,之前版本的YOLO大多采用TAL标签分配策略,为一个目标标注框一次分配多个正样本,采用一对多分配,可以产生丰富的监控信号,便于优化,实现更优的性能。然而,这种一对多训练策略需要YOLO依赖NMS的后处理,这导致部署的推理效率不理想。虽然以前也有论文探索一对一匹配来抑制冗余预测,但它们通常会引入额外的推理开销或产生次优性能。

Dual label assignments
一对一的标签分配策略可以避免后处理的NMS操作,但是它导致训练过程中的弱监督问题,优化精度和推理时间不能达到最优。有幸的是,这些缺陷都可以通过一对多的标签分配策略弥补,所以作者提出了双标签分配策略来有效结合两种标签分配方式的优势。如下图a所示,作者在原来版本的YOLO基础上新增加一个一对一分配策略的检测头;在训练过程中,两个检测头与模型共同优化,使backbone和neck享受到一对多分配所提供的丰富监督信息。在推理过程中,作者抛弃了一对多检测头,利用一对一检测头进行预测。这使得YOLOv10能够进行端到端部署,而不会产生任何额外的推理成本。在一对一匹配中,作者采用了top 1的选择,达到了与匈牙利匹配相同的效果,并且减少了额外的训练时间。
在这里插入图片描述

Consistent matching metric
在标签分配过程中,一对一和一对多方法都利用一个度量来定量地评估预测和实例之间的一致性水平。

为了实现两个分支的预测感知匹配,作者采用了统一的匹配度量公式如下:
在这里插入图片描述

其中p是类别预测分数,b^和b是bounding box的预测和实例,s代表指示预测锚点是否在实例内的空间先验,α和β是两个超参数,用于平衡语义预测任务和回归定位任务。

在双标签分配中,一对多分支比一对一分支提供更丰富的监控信号。所以,如果我们能够将一对一检测头的监督与一对多检测头的监督协调起来,我们就可以朝着一对多检测头优化的方向去优化一对一检测头,这样就可以让一对一检测头在推理过程中提供更好的预测质量,从而获得更好的性能。

12.1.2 Holistic Efficiency-Accuracy Driven Model Design

除了后处理之外,YOLO的模型架构也在效率和精度上存在较大的改进空间。之前YOLO模型体系结构表现出不可忽略的计算冗余和约束能力,这为实现高效率和高性能提供了潜力。作者从效率和准确性的角度全面地执行YOLO的模型设计。

Efficiency driven model design
YOLO的组件包括stem、downsampling layers、包含数个基本block的stages和检测头。由于stem部分计算成本很少,因此作者对其他三个部分进行了效率驱动的模型设计。

  1. Lightweight classification head:通常来说,分类头和回归头采用相同的预测架构,但作者通过分析YOLOv8-S发现,他们计算开销方面表现出显著的差异(分类头占比大),而且它们对整个YOLO模型的性能提升的贡献也不一样(回归头对YOLO性能更重要),所以作者减少了分类头的计算开销,采用轻量级架构,它由两个深度可分离的卷积组成,深度可分离卷积核大小为3×3,然后是一个1×1卷积。

  2. Spatial-channel decoupled downsampling:之前版本的YOLO通常是用3x3卷积并应用stride等于2实现下采样,同时输出channel变成两倍,这样做引入了较大计算量和参数量。作者这里将下采样和channel数量解耦,利用点卷积(pointwise convolution)来调制channel维度,然后利用深度卷积(depthwise convolution)来执行空间下采样,这样做大大减小了计算量和参数量。

  3. Rank-guided block design:之前版本的YOLO通过在每个stage中应用相同的基础block;通过分析YOLOv8各个版本每个stage的冗余度,如下图a所示,从图中结果表明,简单地在所有阶段采用相同的block设计并不能达到最佳的产能效率平衡。
    在这里插入图片描述

为了解决这个问题,作者提出了一个等级引导的块设计方案,旨在减少使用紧凑的架构设计显示冗余的阶段的复杂性。作者首先提出了一种紧凑的倒块(CIB)结构,如上图b所示,该结构采用深度卷积进行空间混合,采用的点卷积进行信道混合。

Accuracy driven model design
作者进一步探索了精度驱动设计的大核卷积和自注意力,旨在以最小的成本提高性能。

  1. Large-kernel convolution:采用大核深度卷积(depthwise convolution)是扩大接受野和增强模型能力的有效方法。然而,在所有阶段简单地利用它们可能会导致用于检测小物体的浅层特征受到污染,同时在高分辨率stage也会带来显著的I/O开销和延迟。因此,作者建议在较小分辨率stage时利用CIB中的大核深度卷积。具体来说,作者将CIB中第二个3×3深度卷积的核大小增加到7×7,此外,作者采用结构重参数化技术引入另一个3×3深度卷积分支来缓解优化问题,而不需要推理开销。此外,随着模型大小的增加,其接受域自然会扩大,使用大核卷积的好处会减少。因此,作者只对小模型尺度采用大核卷积。

  2. Partial self-attention (PSA):作者提出了高效的部分自注意力结构,如上图c所示。作者在1×1卷积后将通道上的特征均匀地划分为两部分,只将其中一部分输入到由多头自注意模块(MHSA)和前馈网络(FFN)组成的N PSA模块中。然后通过1×1的卷积将两个部分连接并融合。PSA仅放置在分辨率最低的stage4之后,避免了自注意的二次计算复杂性带来的过多开销。这样可以将全局表示学习能力融入到YOLO中,计算成本较低,很好地增强了模型的能力,从而提高了性能。


参考文献
[1] YOLOX: Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun.YOLOX: Exceeding YOLO Series in 2021
[2] YOLOv6: Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, Liang Li, etc. YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications
[3] YOLOv7: Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
[4] YOLOv8: Ultralytics公司. https://github.com/ultralytics/ultralytics
[5] YOLOv9: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao. YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
[6] YOLOv10: Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han, Guiguang Ding. YOLOv10: Real-Time End-to-End Object Detection

【YOLO系列合集】上部分——YOLOv1到YOLOv5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值