YOLOV9学习总结

YOLOV9论文阅读笔记

【论文】https://arxiv.org/pdf/2402.13616.pdf

【源码】https://github.com/WongKinYiu/yolov9

背景

当今的深度学习方法专注于设计最合适的目标函数,以使模型的预测结果与实际情况最接近。同时,必须设计一个合适的架构,以便获取足够的信息进行预测。

基于传统的深度学习方法,当输入数据经过逐层特征提取和空间变换时,大量信息会丢失(信息瓶颈)。

论文深入探讨当数据通过深度网络传输时的数据丢失重要问题,即信息瓶颈和可逆函数,提出可编程梯度信息(PGI)的概念和广义高效层聚合网络(GELAN)。PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息以更新网络权重。此外,基于梯度路径规划设计了一种新的轻量级网络架构——广义高效层聚合网络(GELAN)。GELAN的架构证实了PGI在轻量级模型上取得了优异的结果。

简介

信息瓶颈

在深度网络中,输入数据在前向传播过程中丢失信息的现象通常被称为信息瓶颈。目前,主要可以缓解这一现象的方法有:

(1)使用可逆架构:该方法主要使用重复的输入数据并以显式方式保留输入数据的信息;

(2)使用掩模建模:主要利用重构损失,采用隐式方式最大化提取的特征并保留输入信息;

(3)引入深度监督概念:利用未丢失太多重要信息的浅层特征,预先建立特征到目标的映射,以确保重要信息能够传递到更深层。

然而,以上方法在训练和推理过程中存在不同的缺点。例如,可逆架构需要额外的层来结合重复输入数据,这会显著增加推理成本。此外,由于输入数据层到输出层不能有太深的路径,这一限制会使训练过程中难以建模高阶语义信息。至于掩模建模,其重构损失有时会与目标损失冲突。此外,大多数掩模机制还会与数据产生不正确的关联。对于深度监督机制来说,它会产生误差累积,如果浅监督在训练过程中丢失信息,后续层将无法检索所需信息。以上现象在困难任务和小模型上会更显著。
为了解决上述问题,我们提出了一个新概念,即可编程梯度信息(PGI)。该概念通过辅助可逆分支生成可靠的梯度,使深层特征仍然保持执行目标任务的关键特性。辅助可逆分支的设计可以避免传统深度监督过程可能导致的语义丢失,这种过程集成了多路径特征。换句话说,我们正在不同语义层次上编程梯度信息传播,从而实现最佳的训练结果。PGI的可逆架构建立在辅助分支上,因此没有额外的成本。由于PGI可以自由选择适合目标任务的损失函数,它也克服了掩模建模遇到的问题。所提出的PGI机制可应用于各种规模的深度神经网络,比深度监督机制更通用,后者只适用于非常深的神经网络。
在本文中,我们还基于ELAN设计了广义ELAN(GELAN),GELAN的设计同时考虑了参数数量、计算复杂性、准确性和推理速度。这种设计允许用户随意选择适合不同推理设备的计算块。我们将提出的PGI和GELAN结合起来,然后设计了一个新一代的YOLO系列目标检测系统,我们称之为YOLOv9。我们使用了MS COCO数据集进行实验,并实验结果验证了我们提出的YOLOv9在所有对比中均取得了最佳性能。

可编程梯度信息(Programmable Gradient Information, PGI)

在这里插入图片描述

PGI主要有以下三部分:

  • 主分支:推理过程
  • 可逆辅助分支:为主分支的反向传播生成可靠梯度,解决网络深度化带来的问题
  • 多级辅助信息:控制主分支学习可规划的多级语义信息,处理深度监督带来的误差积累问题(特别是多预测分支架构和轻量级模型)

Auxiliary Reversible Branch—辅助可逆分支

PGI中引入可逆架构来保持完整信息,但是将主分支添加到可逆架构中会增加大量推理成本,如上图(b)RevCol,将输入数据重复添加到网络的高分辨率计算层(黄色框内)会增加推理时间,且可逆架构在千层网络上的表现不如一般网络(因为复杂任务需要在更深网络中转换)。

如上图(d)Programmable Gradient Information(蓝色框内),将可逆分支作为深度监督分支的拓展,设计辅助分支。辅助可逆分支具有以下优点:

  • 提供可靠的梯度信息给主分支,避免了信息瓶颈带来的重要信息丢失的问题。
  • 不强制主分支保留完整信息,而是由辅助监督机制生成有用梯度进行更新,因此也适用浅层网络
  • 可以在推理阶段移除,因此可以保留原始网络的推理能力
  • PGI可以在任何可逆架构担当辅助可逆分支的角色。

Multi-level Auxiliary Information—多层次辅助信息

深度监督架构包含多个预测分支,如上图(c)Deep Supervision所示。对于目标检测,不同特征金字塔执行不同任务,比如检测不同大小的物体。因此,在连接深度监督分支后,浅层特征被引导学习用于小物体检测所需的特征,此时其他大小物体的位置被视为背景。这种做法会导致深层特征金字塔丢失目标检测对象所需的大量信息

多层次辅助信息是在辅助监督的特征金字塔和主分支之间插入一个集成网络,然后使用其结合不同的检测头返回梯度,如上图(d)Programmable Gradient Information(粉紫色框内)。多层次辅助信息汇总了包含所有目标对象的梯度信息,将其传递给主分支,更新参数,此时主分支的特征金字塔层次的特征不会被某些特定对象的特征所主导。多层次辅助信息具有以下优点:

  • 缓解深度监督中信息丢失问题。

  • 任何集成网络可以用于多层次辅助信息。

Generalized ELAN—广义ELAN

在这里插入图片描述

GELAN是通过结合带有梯度路径规划的CSPNet和ELAN两种神经网络架构的新网络架构,如上图所示,模仿CSPNet将ELAN拓展为支持任何计算块的GELAN,从而兼顾轻量级、推理速度和准确性等。

实验效果

  • 实验设置

    实验源于YOLOv7 AF(同一作者),数据集为MS COCO2017,所提及的模型都是从头开始训练,总训练500个epochs,设置学习率时,前3个epochs使用线性预热,之后的epochs根据模型规模设置相应衰减方式,最后15个epochs关闭马赛克数据增强。

  • 实现细节

    分别基于YOLOv7和Dynamic YOLOv7构建了通用版和扩展版YOLOv9,使用CSPNet块和计划的RepConv作为计算块,用GELAN代替ELAN。

  • 与最先进水平比较

    YOLOv9在各方面有显著提升。

    在这里插入图片描述

    • 与轻量级和中等模型YOLO MS相比,YOLOv9参数减少10%,计算量减少5-15%,AP提升0.4-0.6%。
    • 与YOLOv7 AF比较,YOLOv9-C参数减少42%,计算量减少22%,AP一样(53%)。
    • 与YOLOv8-X比较,YOLOv9-E参数减少16%,计算量减少27%,AP显著提升1.7%。

在这里插入图片描述

​ 使用ImageNet作为预训练权值比较,在参数利用方面,使用常规卷积的YOLOv9比使用深度卷积的YOLO MS更好;在大型模型的参数利用率方面,大大超过使用ImageNet预训练模型的RT-DETR。

  • 消融实验

    • GELAN实验

      在这里插入图片描述

      在不同计算块比较中,CSP效果最好,参数和计算量都有减少,而且提升了0.7%。

      在这里插入图片描述

    ​ GELAN对深度不敏感,组合任意的GELAN组件设计网络架构,就能得到性能稳定的模型。

    • PGI实验
      在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

​ PGI能够有效处理信息瓶颈、信息破碎等问题,全面提高不同尺寸模型的精度。

  • 可视化

    在这里插入图片描述

    ​ 从上图我们可以看出,随着层数的增加,所有架构的原始信息在逐渐减少。

    • 在PlainNet的 5 0 t h 50^{th} 50th层很难看清物体位置, 10 0 t h 100^{th} 100th层时可区分的特征都丢失。

    • ResNet的 5 0 t h 50^{th} 50th层能看清物体位置,但是边界信息已经丢失,当深度超过 10 0 t h 100^{th} 100th层后整个图像变得模糊不清。

    • CSPNet和GELAN的表现都很好,都能在 20 0 t h 200^{th} 200th之前保持清晰识别物体的特征,其中,GELAN的结果更稳定,边界信息更清晰。
      在这里插入图片描述

    上图为GELAN和YOLOv9(GELAN+PGI)的PAN特征图的可视化结果,经历一个历时的偏差预热,GELAN最初存在一些偏差,但是加入PGI的可逆分支之后,能更聚焦与目标对象,这说明PGI能在训练过程中提供可靠的提取,从而使用于更新的参数能够有效捕捉输入数据。

YOLOV9流程图

根据论文的PGI和GELAN流程图,和源码中yolov9.yaml绘制YOLOv9流程图如下:

在这里插入图片描述

在这里插入图片描述

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了学习yolov3源码,你可以从以下几个步骤开始: 1. 首先,了解yolov3的原理和基本概念。这将帮助你更好地理解源码。你可以阅读yolov3的论文笔记,这篇博客提供了对yolov3原理的详细解释和分析。 2. 接下来,你可以访问yolov3的源码地址,这个项目存储在GitHub上。你可以浏览代码库,并下载源码以进行进一步的学习和实验。 3. 在阅读源码时,重点关注YoloBody的实现。YoloBody是yolov3网络的核心部分,负责输出三个out,并对这些输出的先验框进行解码,以在原图上显示出先验框。仔细研究YoloBody的代码,理解它是如何实现这些功能的。 4. 在学习源码时,建议你进行实践和调试。你可以使用一些示例图片或自己的图片作为输入,运行源码并观察输出结果。这将帮助你更好地理解代码的执行过程和效果。 5. 最后,如果你在学习源码的过程中遇到了问题,可以参考论坛或在线社区中的讨论,与其他人进行交流和解答疑惑。这将为你提供更多的学习资源和支持。 总结起来,要学习yolov3源码,你可以先了解yolov3的原理和基本概念,然后浏览源码并进行实践和调试。重点关注YoloBody的实现,并与其他人进行交流和讨论。这样,你将能够更好地理解yolov3的源码和实现细节。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [yolov3源码逐行详解(3.0版本)](https://blog.csdn.net/weixin_44711102/article/details/127667616)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [YOLOV3源码学习](https://blog.csdn.net/weixin_51431157/article/details/130085903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值