目标检测算法YOLOv9简介

news2024/11/8 22:44:57

      YOLOv9由Chien-Yao Wang等人于2024年提出,论文名为:《YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information》,论文见:https://arxiv.org/pdf/2402.13616 ;源码见: https://github.com/WongKinYiu/yolov9

      以下内容主要来自论文:

      1.Introduction

      近年来,深度学习领域的研究人员主要关注如何开发更强大的系统架构和学习方法(system architectures and learning methods),如CNN、Transformers、Perceivers、Mambas等。此外,一些研究人员尝试开发更通用的目标函数(objective functions),例如损失函数、标签分配和辅助监督(loss function, label assignment and auxiliary supervision)。上述研究都试图精确地找到输入和目标任务(input and target tasks)之间的映射。然而,过去大多数方法都忽略了输入数据在前馈过程中(feedforward process)可能会有不可忽略的信息损失。这种信息损失会导致梯度流出现偏差(lead to biased gradient flows),随后用于更新模型。上述问题可能导致深度网络在目标和输入之间建立错误的关联,从而导致训练后的模型产生错误的预测

      在深度网络中,输入数据在前馈过程中丢失信息的现象俗称信息瓶颈(information bottleneck),其示意图如下图所示。目前能够缓解这一现象的主要方法有:

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

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

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

      但上述方法在训练过程和推理过程中都存在不同的弊端(drawbacks)。例如,可逆架构需要额外的层来组合重复馈送(repeatedly fed)的输入数据,这将显著增加推理成本。此外,由于输入数据层到输出层不能有太深的路径(deep path),这个限制将导致在训练过程中难以对高阶语义(high-order semantic)信息进行建模。对于masked建模,其重构loss有时会和目标loss发生冲突。另外,大部分mask机制也会对数据产生不正确的关联。对于深度监督机制来说,会产生误差积累(error accumulation),而如果浅层监督(shallow supervision)在训练过程中丢失了信息,后面的层就无法检索到所需的信息。在困难任务(difficult tasks)和小模型上,上述现象会更加显著。

      为了解决上述问题,我们提出了一个新概念,即可编​​程梯度信息(Programmable Gradient Information, PGI)。该概念是通过辅助可逆分支(reversible branch)生成可靠的梯度,使深度特征仍能保持执行目标任务的关键特性(key characteristics)。辅助可逆分支的设计可以避免传统深度监督过程中融合多路径特征可能带来的语义损失,即在不同的语义层面(semantic levels)上编程梯度信息传播,从而达到最佳的训练效果。PGI的可逆架构建立在辅助分支上,因此没有额外的成本。由于PGI可以自由选择适合目标任务的损失函数,因此它还克服了masked建模遇到的问题。所提出的PGI机制可以应用于各种规模的深度神经网络,并且比深度监督机制更加通用,而深度监督机制仅适用于非常深的神经网络。

      本文还基于ELAN设计了广义ELAN(generalized ELAN, GELAN),GELAN的设计同时兼顾了参数数量、计算复杂度、准确率和推理速度。这种设计允许用户为不同的推理设备任意选择合适的计算块(computational blocks)。我们将提出的PGI与GELAN相结合,设计了新一代的YOLO系列目标检测系统,我们称之为YOLOv9。我们总结本文的贡献如下:

      (1).我们从可逆函数的角度对现有的深度神经网络架构进行了理论分析,并通过这一过程成功解释了很多过去难以解释的现象(phenomena),并在此基础上设计了PGI和辅助可逆分支,取得了优异的效果。

      (2).我们设计的PGI解决了深度监督只能用于极深的神经网络架构的问题,从而让新的轻量级架构真正地应用于日常生活中。

      (3).我们设计的GELAN仅仅使用了常规卷积(conventional convolution),就达到了比基于目前最先进技术的depth-wise convolution设计更高的参数利用率,同时展现出轻量、快速、准确的巨大优势。

      2.Related work

      (1).Real-time Object Detectors:目前主流的实时目标检测器是YOLO系列,这些模型大多以CSPNet或ELAN及其变种作为主要计算单元(computing units)。在特征融合(feature integration)方面,通常使用改进的PAN或FPN作为工具,然后使用改进的YOLOv3 head或FCOS head作为预测head。最近也有一些实时物体检测器被提出,比如以DETR为基础的RT DETR。然而,由于DETR系列目标检测器在没有相应领域预训练模型的情况下极难应用于新领域,目前使用最广泛的实时目标检测器仍然是YOLO系列。本文选择YOLOv7作为开发所提方法的基础(as a base to develop the proposed method)。我们使用GELAN改进了所提出的PGI的架构和训练过程。

      (2).Reversible Architectures:可逆架构的运算单元必须保持可逆转换的特性,这样才能保证每层运算单元的输出特征图能够保留完整的原始信息。此前,RevCol 将传统的可逆单元推广到多个层次(levels),这样做可以扩展不同层(layer)单元所表达的语义层次(semantic levels)。通过对各种神经网络架构的文献综述,我们发现有许多高性能架构(high-performing architectures)具有不同程度的可逆性。例如,Res2Net模块(module)以分层的方式(hierarchical manner)将不同的输入分区(input partitions)与下一个分区组合在一起,并将所有转换后的分区连接起来再向后传递。CBNet通过复合(composite)backbone重新引入原始输入数据,从而获得完整的原始信息,并通过各种组合方式获得不同层次的多级可逆信息。这些网络架构一般具有出色的参数利用率(parameter utilization),但是额外的复合层导致推理速度缓慢。DynamicDet结合了CBNet和YOLOv7,在速度、参数量和准确率之间取得了非常好的权衡。本文引入DynamicDet架构作为设计可逆分支的基础,并在提出的PGI中进一步引入可逆信息提出的新架构在推理过程中不需要额外的连接,因此可以充分保留速度、参数量和准确率的优势。

      (3).Auxiliary Supervision:深度监督是最常见的辅助监督方法,通过在中间层插入额外的预测层进行训练,尤其在基于Transformer的方法中引入多层解码器(multi-layer decoders)的应用是最常见的。另一种常见的辅助监督方法是利用相关的元信息(meta information)来引导中间层产生的特征图,使其具备目标任务所需的性质。这一类型的例子包括使用分割损失(segmentation loss)或深度损失(depth loss)来增强目标检测器的准确率。最近文献中有很多报道利用不同的标签分配(label assignment)方式生成不同的辅助监督机制,以加快模型的收敛速度,同时提高鲁棒性。然而辅助监督机制通常只适用于大模型,当应用于轻量级模型时,容易造成参数化不足的现象,使得性能变差。我们提出的PGI设计了一种对多层次语义信息(multi-level semantic information)进行重编程(reprogram)的方法,并且这种设计使得轻量级模型也能从辅助监督机制中受益

      3.Problem Statement

      通常人们将深度神经网络收敛困难问题归因于梯度消失或梯度饱和(gradient vanish or gradient saturation)等因素,而这些现象在传统的深度神经网络中确实存在。然而,现代深度神经网络已经通过设计各种规范化(various normalization)和激活函数从根本上解决了上述问题。尽管如此,深度神经网络仍然存在收敛(convergence)速度慢或收敛效果不佳的问题。本文对上述问题的本质进行了进一步的探究。通过对信息瓶颈(information bottleneck)的深入分析,我们推断出导致这一问题的根本原因是原本来自非常深的网络的初始梯度在传递出去后不久就丢失了大量实现目标所需的信息(initial gradient originally coming from a very deep network has lost a lot of information needed to achieve the goal soon after it is transmitted)。我们设计基于可逆网络的方法来解决上述问题

      (1).Information Bottleneck Principle:根据信息瓶颈原理,我们知道数据在经过转换时可能会造成信息丢失。随着网络层数的增加,原始数据丢失的可能性会更大。然而深度神经网络的参数是根据网络的输出以及给定的目标,通过计算损失函数产生新的梯度后更新网络。可以想象,更深的神经网络的输出更难保留有关预测目标的完整信息。这将使得在网络训练期间使用不完整的信息成为可能,从而导致梯度不可靠和收敛性较差。解决上述问题的方法之一是直接增加模型的尺寸(size)。当我们使用大量参数构建模型时,它更有能力对数据进行更完整的变换。上述方法使得即使在数据前馈过程中丢失了信息,仍然有机会保留足够的信息来执行到目标的映射。上述现象解释了为什么在大多数现代模型中,宽度比深度更重要。然而,上述结论并不能从根本上解决非常深的神经网络中梯度不可靠的问题。我们将利用可逆函数解决问题。

      (2).Reversible Functions:当函数有一个逆变换函数时,我们称这个函数为可逆函数。当网络的变换函数由可逆函数组成时,可以获得更可靠的梯度来更新模型。

      4.Methodology

      (1).Programmable Gradient Information:为了解决上述问题,我们提出了一种新的辅助监督框架,称为可编程梯度信息(PGI),如下图所示。PGI主要包括三个组件,分别是:主分支(main branch)、辅助可逆分支(auxiliary reversible branch)、多级辅助信息(multi-level auxiliary information)。PGI的推理过程只使用主分支,因此不需要任何额外的推理成本。至于另外两个组件,它们用于解决或减缓深度学习方法中的几个重要问题。其中辅助可逆分支是为了处理神经网络加深带来的问题而设计的。网络加深会造成信息瓶颈,导致损失函数无法产生可靠的梯度。至于多级辅助信息,是为了处理深度监督带来的误差积累问题而设计的,特别是多预测分支(multiple prediction branch)的架构和轻量级模型。

      Auxiliary Reversible Branch:在PGI中,我们提出辅助可逆分支来生成可靠的梯度并更新网络参数。通过提供从数据到目标(target)的映射信息,损失函数可以提供指导,避免从与目标相关性较低的不完整前馈特征(feedforward features)中找到虚假相关性的可能性。我们提出通过引入可逆架构来保持信息的完整,但将主分支添加到可逆架构中会消耗大量的推理成本。由于我们的目标是利用可逆架构获得可靠的梯度,因此"可逆"并不是推理阶段的唯一必要条件。鉴于此,我们将可逆分支视为深度监督分支的扩展,并设计辅助可逆分支,如上图(d)所示。对于主分支深度特征,由于信息瓶颈而丢失重要信息的特征,它们将能够从辅助可逆分支获得可靠的梯度信息。这些梯度信息会驱动参数学习,协助提取正确且重要的信息,上述动作可以使主分支获得对目标任务更有效的特征。此外,可逆架构在浅层网络(shallow networks)上的表现比在一般网络上更差,因为复杂任务需要在更深的网络中转换(conversion)。我们提出的方法并不强制主分支保留完整的原始信息,而是通过辅助监督机制生成有用的梯度来更新它。这种设计的优点是所提出的方法也可以应用于更浅的网络。最后,由于辅助可逆分支可以在推理阶段被移除,因此可以保留原有网络的推理能力。我们还可以选择PGI中的任意可逆架构来扮演辅助可逆分支的角色。

      Multi-level Auxiliary Information:包含多个预测分支的深度监督架构如上图(c)所示。对于目标检测,不同的特征金字塔(feature pyramids)可以用于完成不同的任务,比如它们可以组合在一起检测不同大小的目标。因此,在接入深度监督分支后,浅层特征会被引导去学习小目标检测所需的特征,此时系统会将其他尺寸的目标的位置视为背景。但上述做法会导致深度特征金字塔丢失大量预测目标所需的信息。针对这一问题,我们认为每个特征金字塔需要接收所有目标的信息,以便后续的主分支能够保留完整的信息来学习针对各类目标的预测。多级辅助信息的概念是在辅助监督的特征金字塔层次(feature pyramid hierarchy layers)和主分支之间插入一个集成网络,然后用它组合来自不同预测头(prediction heads)的返回梯度,如上图(d)所示。多级辅助信息则是将包含所有目标的梯度信息聚合起来,传递给主分支,然后更新参数。此时主分支的特征金字塔层次的特征将不会被某个特定目标的信息所主导。因此,我们的方法可以缓解深度监督中的信息断裂(broken)问题。此外,任何集成网络(integrated network)都可以在多层次的辅助信息中使用。因此,我们可以规划所需的语义层(semantic levels)来指导不同规模的网络架构的学习。

      (2).Generalized ELAN:新型网络架构--GELAN。通过结合两种采用梯度路径规划设计的神经网络架构CSPNet和ELAN,我们设计了兼顾轻量、推理速度和准确性的广义高效层聚合网络(generalized efficient layer aggregation network, GELAN)。其整体架构如下图所示。我们将ELAN的功能(最初仅使用卷积层堆叠)推广到可以使用任何计算块的新架构。

      GitHub:https://github.com/fengbingchun/NN_Test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

U-Mail:企业邮箱系统安全解决方案

在数字化浪潮的推动下,互联网技术正日新月异,企业的信息通信需求亦随之升华。作为企业沟通的重要媒介,企业邮箱已被广泛应用,然而随着其应用范围的不断扩展,也给企业带来了一系列挑战: 一、统一身份认证管…

MySQL-数据处理函数

026-distinct去重 select job from emp;加个 distinct 就行了 select distinct job from emp;注意:这个去重只是将显示的结果去重,原表数据不会被更改。 select 永远不会改变原数据 select distinct deptno, job from emp order by deptno asc;027-数…

Kubernetes入门-大简介

目录 何为微服务 何为云原生 何为编排器 “Kubernetes”这个名字来自希腊语,意思是“舵手”舵手是一个航海/航行术语,指掌舵的人从本质上说,Kubernetes是云原生微服务(cloud-native microservice)应用的编排器(orchestrator) 何为微服务 …

【C++类和对象中篇】(构造函数和析构函数)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🍩1.默认成员函数的概念: 🍩2.构造函数: 2.1特性&…

刚刚❗️德勤2025校招暑期实习测评笔试SHL测评题库已发(答案)

📣德勤 2024暑期实习测评已发,正在申请的小伙伴看过来哦👀 ㊙️本次暑期实习优先考虑2025年本科及以上学历的毕业生,此次只有“审计及鉴定”“税务与商务咨询”两个部门开放了岗位~ ⚠️测评注意事项: &#x1f44…

字节面试:CPU100% 如何处理?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的线上问题的场景题: 1.CPU100%,你是怎么处理的&…

写给大数据开发的,要给领导汇报什么?

上篇:写给大数据开发,如何去掌握数据分析 就像说经济学家不炒股一样,有些数据开发不喜欢讲数据📊,就很离谱…自己不讲数据,不相信数据,别人也不敢用了~ 所以找上级汇报&#xff0…

【上海大学计算机组成原理实验报告】七、程序转移机制

一、实验目的 学习实现程序转移的硬件机制。 掌握堆栈寄存器的使用。 二、实验原理 根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当LDPC有效时,如果此时DUBS上的值就是转移的目标地址,则此目标地址被打入PC&am…

LabVIEW电池测试系统

1. 背景 随着电动汽车、可再生能源等领域的迅速发展,电池作为能源储存和释放的核心组件,其性能评估变得尤为重要。电池的充放电性能、容量、循环寿命等参数直接影响着设备的工作性能和使用寿命。因此,设计一套全面、准确的电池测试系统对于提…

王学岗鸿蒙开发(北向)——————(十)子组件修改父组件的内容与 动画

子组件修改父组件的内容 使用类似Android的回调,父组件传递给子组件一个函数 import { MyComment } from ./component/MyComment import { MyContent } from ./component/MyComtent import { MyTitleComponent } from ./component/MyTitleComponentEntry Componen…

安卓逆向经典案例——XX牛

安卓逆向经典案例——XX牛 按钮绑定方式 1.抓包 2.查看界面元素,找到控件id 通过抓包,发现点击登录后,才会出现Encrpt加密信息,所以我们通过控件找到对应id:btn_login 按钮绑定方法——第四种 public class LoginA…

把文件从一台linux机器上传到另一台linux机器上

文章目录 1,第一种情况1.1 先测试2台机器是否可以互相通信1.2 对整个文件夹里面的所有内容进行传输的命令1.3 检查结果 2,第二种情况2.1,单个文件传输的命令 1,第一种情况 我这里有2台linux机器, 机器A:19…

uni-app uni-swipe-action 滑动操作状态恢复

按照uni-app官方文档的写法 当前同一条滑动确认之后 页面列表刷新 但是滑动的状态还在 入下图所示: 我们需要在滑动确认之后 页面刷新 滑动状态恢复 那么我们就来写一下这部分的逻辑: 首先,配置一下:show"isOpened[item.id]" chan…

基于JSP的医院远程诊断系统

开头语: 你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言: Java 数据库: MySQL 技术: JSP Servlet JSPBean 工具: IDEA/Eclipse、Navica…

ChatTTS - 用于对话场景的文本转语音

大家好,我是小麦,今天给大家分享一款免费,可用于对话场景的文本转语音工具。 阅读感悟 不知道大家在日常的学习、工作中是否有这样的一个情况,当我们阅读完一篇文章,很快就能读完,但印象不会很深&#xf…

Python学习打卡:day01

day1 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 1、Python 软件(PyCharm) 安装:在 Linux 环境下安装 Pycharm 插件:汉化、翻译 设置字体大小 常用快捷…

Django ListView 列表视图类

ListView是Django的通用视图之一,它用于显示一个对象列表。这个视图将所有的对象作为一个上下文变量传递给模板。 1,创建应用 python manage.py startapp app3 2,注册应用 Test/Test/settings.py Test/Test/urls.py 3,添加模型 …

车联网安全入门——CAN总线模糊测试

文章目录 车联网安全入门——CAN总线模糊测试介绍主要特点使用场景 模糊测试(Fuzz Testing)CAN 总线模糊测试(CAN Packet Fuzzing)主要步骤工具和软件主要目标 Can-Hax安装使用获得指纹模糊测试 SavvyCAN 总结参考 车联网安全入门…

深入理解 C++ 智能指针

文章目录 一、引言二、 原始指针的问题1、原始指针的问题2、智能指针如何解决这些问题 三、智能指针的类型四、std::shared_ptr1、shared_ptr使用2、shared_ptr的使用注意事项3、定制删除器4、shared_ptr的优缺点5、shared_ptr的模拟实现 五、std::unique_ptr1、unique_ptr的使…

端午节到了,祝大家粽子甜甜,生活美满!愿粉丝们心想事成,健康平安,阖家幸福!

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …