【目标检测新SOTA!v7 v4作者新作!】YOLO v9 思路设计 + 全流程优化 + 手把手训练自己数据
YOLO v9 思路复现 + 全流程优化 + 手把手训练自己数据
- 提出背景:深层网络的 信息丢失、梯度流偏差
- YOLO v9 设计逻辑
- 可编程梯度信息(PGI):使用PGI改善训练过程
- 广义高效层聚合网络(GELAN):使用GELAN改进架构
- 对比其他解法
- 1. 残差网络(ResNet)
- 2. 密集连接网络(DenseNet)
- 3. 注意力机制
- 4. 可逆网络架构
- 5. 特征金字塔网络(FPN)
- 效果
- 训练自己数据
提出背景:深层网络的 信息丢失、梯度流偏差
论文:https://arxiv.org/pdf/2402.13616.pdf
代码:https://github.com/WongKinYiu/yolov9
- 问题: 深度网络在前馈过程中数据丢失信息,导致偏差的梯度流和错误的目标与输入关联。
- 解法: YOLO v9
在实际应用中,例如交通监控系统中的车辆和行人检测,深度网络可能会因为网络层过深而导致在前馈过程中丢失对车辆和行人的关键特征信息。
这种信息丢失会导致梯度流在反向传播过程中带有偏差,使得网络无法准确地学习到车辆和行人的特征,进而影响检测准确性。
针对这个问题,YOLOv9被提出作为一种解决方案。
它结合了PGI(可编程梯度信息)和GELAN(广义高效层聚合网络)技术来克服信息瓶颈和深度监督在轻量级网络中的不适用性问题。
YOLOv9的PGI技术包括辅助可逆分支和多级辅助信息,这些设计有助于在网络的深层中保留更多的信息,生成更可靠的梯度,从而在训练过程中确保了更准确的目标与输入之间的关联。
例如,如果在交通监控系统中部署了YOLOv9,当监控画面中有车辆通过时,即使在网络较深的层次上,YOLOv9也能有效地保留车辆的关键特征信息,如车辆的轮廓、颜色和标志等。
这使得在整个训练过程中,网络能够学习到更为精确的特征,提高车辆检测的准确率。
与传统的深度网络相比,YOLOv9能够减少因信息丢失导致的错误预测,从而在实时对象检测任务中表现出更高的准确性和效率。
图展示了在相同输入图像下,不同神经网络架构的特征图对比。
特征图代表了模型初始权重处理后各个网络架构所关注的内容。
这些可视化包括PlainNet、ResNet、CSPNet以及所提出的GELAN(v9采用),以及原始输入图像。
这些地图用来分析在前馈过程中每个网络保留了多少信息。
图中表明,所提出的GELAN架构保留了最完整的信息,并为计算目标函数提供了最可靠的梯度信息,这对模型的准确性至关重要。
GELAN在添加了PGI的可逆分支后,对目标对象的专注能力得到了提升。
- GELAN在没有PGI时显示出一些分散的特征激活
- 而在结合了PGI后,YOLOv9能够更集中地捕捉到目标对象的位置
- 表明PGI的引入有助于网络在早期训练阶段就能够更准确地学习到目标的关键信息。
在MS COCO数据集上实现顶尖性能。
YOLO v9 设计逻辑
深度网络在处理复杂任务时面临的主要问题——信息丢失和梯度流偏差。
YOLO v9 结合 可编程梯度信息(PGI)和 通用ELAN(GELAN) 设计。
GELAN架构改进是基于ELAN,能够有效降低参数数量,提高计算效率。PGI作为训练改善手段,可以更好地维护传播过程中的关键信息。
PGI 通过一个辅助的可逆分支来维持关键信息,并确保梯度流的准确性。
接着,为了使模型能够在不同的硬件上高效运行,设计了GELAN,它允许模型根据硬件能力选择最合适的计算块。
最后,通过结合这两种技术,开发了YOLOv9,它在保持模型轻量级的同时,大幅提升了对象检测的准确率和速度。
可编程梯度信息(PGI)和广义高效层聚合网络(GELAN)是在深度学习领域为提高神经网络性能而提出的先进概念。以下是对这两个概念的详细解释:
可编程梯度信息(PGI):使用PGI改善训练过程
PGI是一种旨在解决深度网络中的信息瓶颈问题的策略。
在深度网络的训练过程中,由于层与层之间的复杂映射,有用的信息可能会逐渐丢失,这会导致梯度信号变弱,最终影响网络的学习效率和预测准确性。
-
特征1:辅助可逆分支 - PGI在网络中引入了一个辅助分支,它与主分支并行运行。
这个辅助分支被设计为可逆的,意味着它可以在不丢失信息的情况下执行数据的正向和反向传播。
这有助于在训练过程中产生更可靠的梯度信号,因为它保证了即使是深层次的特征也能够保留对目标任务有用的信息。
-
特征2:避免语义损失 - 在深度监督方法中,通常将额外的监督信号(如分类标签)插入到网络的中间层,以促进更深层的特征学习。
然而,这种方法可能会引入语义损失,因为中间层的特征可能无法完全代表数据的全部复杂性。
PGI通过其辅助可逆分支的设计来避免这种情况,使得整个网络能够在各个层次上保持语义信息的完整性。
PGI框架包括三个组件:主分支、辅助可逆分支和多级辅助信息
- 特征1: 主分支用于推断,保证无额外推断成本。
- 特征2: 辅助可逆分支产生可靠梯度,防止信息丢失。
- 特征3: 多级辅助信息整合不同预测头的梯度信息。
PGI通过辅助可逆分支和多级辅助信息两条路径来提供可靠的梯度,并指导主分支学习,形成一个互补和增强的网络结构。
- 辅助可逆分支作为一个独立模块在训练阶段生成可靠梯度,然后在推断阶段被移除,确保了信息的完整性而不增加推断成本。
- 多级辅助信息作为一个整合网络,联合不同预测头的梯度,提供全面的信息给主分支。
广义高效层聚合网络(GELAN):使用GELAN改进架构
GELAN是一个新型的神经网络架构,它结合了多种网络设计的优点,旨在提供一个既轻量又高效的网络架构。
-
特征1:综合设计 - GELAN融合了CSPNet和ELAN的设计理念,创建了一个灵活的网络架构,能够根据不同的应用需求和计算资源进行调整。
CSPNet通过分割和合并特征图来减少冗余计算,而ELAN则使用层聚合来增强特征的表示能力。
-
特征2:计算块的自由选择 - 与传统的深度网络架构依赖特定类型的计算单元不同,GELAN允许在其框架内使用各种类型的计算块,比如传统的卷积层、深度可分卷积或者其他类型的新颖计算单元。
这种设计不仅提高了网络的适应性,也使得GELAN能够轻松地部署在不同性能的设备上,从高性能服务器到边缘设备。
这图是 GELAN(广义高效层聚合网络)的架构,并将其与CSPNet和ELAN两种网络架构进行了对比。
GELAN是将CSPNet和ELAN的特点结合在一起,并扩展以支持任何计算块的新型网络架构。
(a) CSPNet: 这种架构包括一个分裂-合并的过程,它通过在网络的不同层之间分裂和合并特征来提高性能和效率。
(b) ELAN: 这是一种更进一步的架构,它在CSPNet的基础上增加了多个卷积层(conv)的堆叠,每个卷积层都会进行特征转换,之后再进行合并。
© GELAN: 提出的GELAN架构不仅模仿了CSPNet的分裂-合并机制,还扩展了ELAN的设计,使其可以使用任何类型的计算块,而不仅限于卷积层。
这种设计增加了网络的灵活性,使其能够根据不同的应用需求选择最合适的计算块。
图中的“transition”表示特征转换层,“split”表示特征分裂操作,“concatenation”表示特征合并操作。
“xn”表示特征的复制或扩展,“module”表示网络中的可选模块,“partition”表示特征的分区。
通过这种方式,GELAN旨在克服以往架构中存在的局限性,如过度依赖卷积层堆叠或者处理复杂任务时的效率问题。
- 融合 CSPNet 的计算效率 和 ELAN 的层聚合策略。
这种设计不仅减少了模型的参数数量和计算复杂度,还保持了高水平的准确率和推理速度,使其适用于各种推理设备,从高性能服务器到资源受限的边缘设备。
此外,GELAN的灵活性允许开发者根据特定应用场景的需要,自由选择和替换不同的计算块,进一步优化模型性能和效率。
对比其他解法
除了YOLOv9采用的PGI(可编程梯度信息)和GELAN(广义高效层聚合网络)外,还有其他几种解法。
这图是关于不同神经网络架构及方法的可视化对比,特别是在处理信息瓶颈和提供辅助信息方面的不同策略。
(a) PAN (Path Aggregation Network): 这种结构通过聚合不同路径的信息来缓解信息瓶颈问题,但仍然存在信息丢失的问题。
(b) RevCol (Reversible Columns): 这种结构旨在保持信息流的完整性,通过可逆列来避免信息的损失,但代价是计算成本较高。
© 深度监督 (Deep Supervision): 这个方法通过在网络的不同深度层添加预测头来实现辅助监督,这可以帮助网络学习到多层次的辅助信息,但可能导致信息损坏。
(d) 可编程梯度信息 (PGI): 这是论文提出的新方法,它通过辅助可逆分支产生可靠的梯度,以供主分支使用,从而控制主分支在多个语义层次上的学习,这有助于更好地保留语义信息并优化梯度流。
图中的蓝色块代表神经网络中的层,灰色块代表预测头或辅助分支,虚线框高亮了每种方法的关键特征。
1. 残差网络(ResNet)
-
解决方案: 通过引入残差连接(Skip Connections)允许信息直接从一层传递到后面的多个层,从而减轻了梯度消失问题并保留了更多的信息。
-
对比: 残差连接是一种简单有效的方法来维持信息流,但它可能不足以处理所有类型的信息损失,尤其是在非常深的网络或需要高度复杂特征提取的任务中。
PGI通过辅助可逆分支提供了一种更为动态和可控的方式来保持关键信息,而GELAN则通过灵活的网络结构设计提供了进一步的优化空间。
2. 密集连接网络(DenseNet)
-
解决方案: 在DenseNet中,每一层都与前面所有层直接相连,这保证了信息在网络中的自由流动,并减少了信息丢失。
-
对比: DenseNet通过增强特征重用来提高效率和减少参数数量,但这种架构的参数效率和计算效率与GELAN相比可能不那么优秀。
GELAN允许更灵活的计算块使用,可能在特定任务上提供更好的性能和效率。
3. 注意力机制
-
解决方案: 注意力机制可以动态地聚焦于输入数据的关键部分,从而提高网络对重要信息的敏感性和保留能力。
-
对比: 注意力机制为网络提供了一种有效的信息筛选和增强方式,可以与PGI和GELAN结合使用,以进一步优化信息流和提高模型性能。
它们各自解决信息保留问题的方式不同,可以相互补充。
如在PGI的辅助可逆分支中集成注意力机制,在PGI的辅助可逆分支中引入注意力模块,如自注意力(Self-Attention)或卷积注意力机制。
帮助模型更加精确地聚焦于输入特征中对目标任务最重要的部分,从而在生成可靠梯度时保留更多关键信息。
如在GELAN网络中应用注意力增强的计算块,将注意力机制融入GELAN网络的计算块中,例如,使用带有注意力机制的卷积层(如注意力增强的ResNet块)作为GELAN的构建模块。
这样的设计可以使网络在处理特征时自动强调更有用的信息,同时抑制不相关的信息。
如结合PGI和GELAN的特性使用注意力机制进行特征融合,在PGI和GELAN的结合框架中,可以在特征融合阶段引入注意力机制,特别是在合并来自主分支和辅助可逆分支的特征时。
通过对这些特征进行加权融合,模型可以更好地利用各自的优势,提取出最有价值的信息。
4. 可逆网络架构
-
解决方案: 一些网络设计允许前馈和反向传播过程可逆,确保了信息的完全保留。
-
对比: 可逆网络架构直接针对信息丢失问题提供了解决方案,而PGI中的辅助可逆分支也采用了类似的思想,但在一个辅助的分支上实现,以提高梯度的可靠性和信息的保存。
因为传统的可逆架构虽然能够保留完整的输入信息,但增加了额外的复合层,会导致推断速度变慢。
GELAN则通过结构上的创新进一步提升了网络的性能。
5. 特征金字塔网络(FPN)
-
解决方案: FPN通过构建一个多尺度的特征金字塔来维持在不同尺度上的信息,特别适用于需要捕捉多尺度信息的任务,如对象检测。
-
对比: FPN专注于通过多尺度表示来保留信息,而PGI和GELAN则通过改进梯度流和网络架构的方式来综合解决信息丢失问题,三者可以结合使用,以在不同层面上优化信息保留。
如选择GELAN作为模型的基础架构,引入FPN进行多尺度特征融合,利用PGI优化梯度流和信息保留。
效果
表格按照不同的性能指标对模型进行了排名,包括模型参数数量、浮点运算次数(FLOPs)、以及不同IoU阈值下的平均精度(AP)。
这些性能指标是衡量对象检测器性能的关键指标。
- IoU,即交并比,是一个衡量预测边界框与真实边界框重叠度的指标。
- AP通常用来评估模型在不同IoU阈值下检测准确性的平均表现。
- 此外,AP的不同变体(如AP50、AP75等)代表了在不同的IoU阈值(0.50、0.75等)下的性能。
以下是表格的详细拆解:
- #Param. (M): 模型参数的数量,以百万为单位。这反映了模型的复杂度。
- FLOPs (G): 浮点运算次数,以十亿为单位。这是衡量模型计算复杂度的指标。
- AP50% - AP75%: 这些列显示在IoU阈值为50%和75%时的平均精度(AP),这是评估模型准确度的常用指标。
- AP: 这一列通常表示在所有IoU阈值上平均的AP值。
- APS, APM, APL: 分别代表小尺寸(S)、中尺寸(M)、大尺寸(L)对象的AP值。这说明了模型在不同尺寸对象检测方面的性能。
表格中展示了多个版本的YOLO(包括YOLOv5、v6、v7、v8和v9),以及其他模型如PPYOLOE、DAMO YOLO、Gold YOLO等。
YOLOv9 在多个性能指标上显示出了优越性,特别是在参数较少和计算复杂度较低的情况下,仍然保持了高AP值,显示了其高效率和准确性。
比如其中一列:
- YOLOv9的AP为55.6%
- YOLOv8的AP为52.9%
- YOLOv5的AP为50.0%
结论:
- YOLOv9 在保持较低参数数量和计算复杂度的同时,实现了与其他高性能模型相当或更好的AP值,尤其是在大尺寸对象检测上(APL)表现出色。
- YOLOv9的性能优于其他从头训练的模型,在大多数性能指标上都有明显提升。
- 这表明YOLOv9是在参数效率和检测准确性之间取得了良好平衡的高效检测模型。
训练自己数据
英文原文:https://blog.roboflow.com/train-yolov9-model/
- 中文解读:https://mp.weixin.qq.com/s/_wsJbLaoZqFNiEri5yiW4Q
代码:https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/train-yolov9-object-detection-on-custom-dataset.ipynb?ref=blog.roboflow.com
训练YOLOv9,分为以下部分:
-
安装YOLOv9:首先需要从GitHub克隆YOLOv9的代码库,并安装必要的依赖。
-
数据准备:下载并准备自定义数据集,例如足球运动员的数据集。数据集需要被格式化为YOLOv9兼容的格式。
-
模型训练:使用训练脚本和自定义数据集来训练模型。可以根据需要调整训练参数,如批量大小、训练周期数、图像大小等。
-
模型评估:训练完成后,使用生成的图表和混淆矩阵来评估模型的性能。
-
推理运行:最后,使用训练好的模型对新的图像或数据进行预测,以检验模型的实际效果。
-
- 中文解读:https://mp.weixin.qq.com/s/_wsJbLaoZqFNiEri5yiW4Q
-
-
-
-
-
- 融合 CSPNet 的计算效率 和 ELAN 的层聚合策略。
-
-