YOLOv9:Learning What You Want to Learn Using Programmable Gradient Information

YOLOv9:Learning What You Want to Learn Using Programmable Gradient Information

摘要

今天的深度学习方法关注的是如何设计最合适的目标函数,使模型的预测结果最接近ground truth的真实情况。同时,必须设计一个适当的体系结构,以方便获取足够的预测信息。现有的方法忽略了一个事实,即输入数据在逐层进行特征提取和空间变换时,会丢失大量的信息本文将深入研究数据在深度网络中传输时的重要数据丢失问题,即信息瓶颈和可逆函数。我们提出了可编程梯度信息(PGI)的概念,以应对深度网络实现多个目标所需的各种变化。PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权重。此外,设计了一种新的基于梯度路径规划的轻量级网络结构——广义高效层聚合网络(GELAN)。GELAN的架构证实了PGI在轻量化模型上取得了卓越的成果。

介绍

深度学习领域的研究者主要集中在如何开发更强大的系统架构和学习方法,如CNNs、Transformer、Perceivers和Mambas。此外,一些研究者试图开发更一般的目标函数,如损失函数、标签分配和辅助监督。以上研究都试图精确寻找输入任务和目标任务之间的映射关系。然而,大多数过去的方法都忽略了输入数据在前馈过程中可能具有不可忽略的信息损失。这种信息的丢失会导致有偏差的梯度流,这些梯度流随后被用来更新模型。上述问题可能导致深度网络在目标和输入之间建立不正确的关联,从而导致训练模型产生不正确的预测。

在深度网络中,输入数据在前馈过程中丢失信息的现象通常被称为信息瓶颈,其示意图如图2所示。

image-20240229151440773

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

(1)使用可逆架构该方法主要利用重复输入数据,并以显式的方式维护输入数据的信息。

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

(3)深度监督概念的介绍:利用没有丢失太多重要信息的浅层特征,预先建立特征到目标的映射,保证重要信息可以传递到更深层。然而,上述方法在训练和推理过程中都有不同的缺点。例如,可逆架构需要额外的层来组合重复输入的数据,这将显著增加推理成本。此外,由于输入数据层到输出层不能有太深的路径,这一限制将使在训练过程中难以对高阶语义信息进行建模。对于掩模建模,其重建损失有时与目标损失相冲突。此外,大多数掩码机制也会与数据产生不正确的关联。对于深层监督机制,会产生误差积累,如果浅层监督在训练过程中丢失信息,后续层将无法检索到所需的信息。上述现象在难度极大的任务和较小的模型上更为明显。

为了解决上述问题,我们提出了一个新的概念,即可编程梯度信息(PGI)。其思想是通过辅助可逆分支生成可靠的梯度,使深层特征仍能保持关键特征以执行目标任务。辅助可逆分支的设计可以避免传统的多路径特征融合深度监督过程可能造成的语义损失。换句话说,我们在不同的语义层次上对梯度信息传播进行编程,从而获得最佳的训练结果。PGI的可逆结构为建在辅助分支上,所以没有额外的费用。由于PGI可以自由选择适合目标任务的损失函数,它也克服了掩模建模所遇到的问题。所提出的PGI机制可以应用于各种规模的深度神经网络,并且比深度监督机制更通用,而深度监督机制只适用于非常深度的神经网络。

在本文中,我们还基于ELAN设计了广义ELAN(GELAN),GELAN的设计同时考虑了参数数量、计算复杂度、精度和推理速度。这种设计允许用户为不同的推理设备任意选择合适的计算块。我们将提出的PGI与GELAN相结合,设计了新一代的YOLO系列目标检测系统,我们称之为YOLOv9。

贡献

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

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

3、我们设计的GELAN仅使用常规卷积,实现了比基于最先进技术的深度卷积设计更高的参数使用率,同时显示出轻、快、准的巨大优势。

相关工作

可逆的架构

可逆体系结构的操作单元必须保持可逆转换的特征,因此可以保证每层操作单元的输出特征图能够保留完整的原始信息。之前,RevCol将传统的可逆单元推广到多个层次,这样可以扩展不同层次单元所表达的语义层次。通过对各种神经网络架构的文献回顾,我们发现有很多高性能的架构具有不同程度的可逆性。例如,Res2Net模块以分层方式将不同的输入分区与下一个分区组合在一起,并在向后传递之前将所有转换的分区连接起来。CBNet通过复合主干重新引入原始输入数据,获得完整的原始信息,并通过各种复合方法获得不同层次的多级可逆信息。这些网络架构通常具有良好的参数利用率,但额外的复合层导致推理速度较慢。DynamicDet结合了CBNet和高效实时目标检测器YOLOv7,在速度、参数数量和精度之间实现了很好的权衡。本文介绍了DynamicDet体系结构作为设计可逆分支的基础。此外,在PGI中进一步引入了可逆信息。本文提出的新架构在推理过程中不需要额外的连接,因此可以充分保留速度、参数数量和准确性的优势。

辅助监督

深度监督是最常见的辅助监督方法,它通过在中间层中插入额外的预测层来进行训练。尤其是基于Transformer的方法中引入的多层解码器的应用最为普遍。另一种常见的辅助监督方法是利用相关元信息对中间层生成的特征图进行引导,使其具有目标任务所需的属性。这种类型的例子包括使用分割损失或深度损失来提高目标检测器的准确性。最近,文献中有很多报道使用不同的标签分配方法来产生不同的辅助监督机制,以加快模型的收敛速度,同时提高鲁棒性。然而,辅助监督机制通常只适用于大型模型,因此当它应用于轻量级模型时,容易造成参数化不足的现象,从而使性能变差。我们提出的PGI设计了一种重新编程多层次语义信息的方法,这种设计允许轻量级模型也受益于辅助监督机制。

问题陈述

通常,人们将深度神经网络收敛问题的困难归因于梯度消失或梯度饱和等因素,这些现象在传统的深度神经网络中确实存在。而现代深度神经网络通过设计各种归一化和激活函数,已经从根本上解决了上述问题。然而,深度神经网络仍然存在收敛速度慢或收敛效果差的问题。

在本文中,我们进一步探讨了以上问题的本质。通过对信息瓶颈的深入分析,我们推断出这个问题的根本原因是原本来自非常深的网络的初始梯度在传输后不久就丢失了大量实现目标所需的信息。为了证实这一推断,我们对具有初始权重的不同架构的深度网络进行前馈,然后在图2中对其进行可视化和说明。显然,PlainNet丢失了许多深层目标检测所需的重要信息。至于ResNet、CSPNet和GELAN能保留的重要信息比例,确实与训练后能够获得的准确率呈正相关。我们进一步设计了基于可逆网络的方法来解决上述问题的原因。

信息瓶颈原理

根据信息瓶颈原理,我们知道数据X在进行变换时可能造成信息丢失,如下式所示:
I ( X , X ) ≥ I ( X , f θ ( X ) ) ≥ I ( X , g ϕ ( f θ ( X ) ) ) I(X,X) \geq I(X,f_\theta (X)) \geq I(X,g_\phi (f_\theta (X))) I(X,X)I(X,fθ(X))I(X,gϕ(fθ(X)))
式中,I表示互信息,f和g为变换函数,image-20240301121232790分别是f和g的参数。

在深度神经网络中,image-20240301121454302分别是深度神经网络中连续两层的操作。从Eq1可以预测,随着网络层数的加深,原始数据丢失的可能性也会增大。然而,深度神经网络的参数量是基于网络的输出以及给定的目标,然后通过计算损失函数产生新的梯度后更新网络。可以想象,深度神经网络的输出不太能够保留源于预测目标的完整信息。这将使得网络训练中使用不完全信息成为可能,从而导致梯度不可靠,收敛性差。

解决上述问题的一种方法是直接增加模型的大小。当我们使用大量的参数来构建模型时,它更有能力对数据进行更完整的转换。上述方法允许即使在数据前馈过程中丢失信息,仍然有机会保留足够的信息来执行到目标的映射。上述方法解释了为什么在大多数现代模型中,宽度比深度更重要。然而,上述结论不能解决极深神经网络中梯度不可靠的问题。下面,我们将介绍如何使用可逆函数来解决问题并进行相关分析。

可逆的功能

当一个函数r有一个可逆函数v时,我们称这个函数为可逆函数,如等式2所示
X = v ζ ( r ψ ( X ) ) X = v_\zeta(r_{\psi}(X)) X=vζ(rψ(X))
image-20240301133206270分别是r和v的参数,数据X用可逆函数变换,不丢失信息,如式3所示。
I ( X , X ) = I ( X , r ψ ( X ) ) = I ( X , v ζ ( r ψ ( X ) ) ) I(X,X) = I(X,r_\psi(X)) = I(X,v_\zeta(r_\psi(X))) I(X,X)=I(X,rψ(X))=I(X,vζ(rψ(X)))
当网络的变换函数由可逆函数组成时,可以得到更可靠的梯度来更新模型。几乎所有现在流行的深度学习方法是符合可逆特征的架构,如等式4所示:
X l + 1 = X l + f θ l + 1 ( X l ) X^{l+1} = X^l + f_\theta^{l+1}(X^l) Xl+1=Xl+fθl+1(Xl)
l表示PreAct ResNet的第l层,f表示第l层的变换函数。PreAct ResNet以显示的方式将原始数据X反复传递给后续层。虽然这样的设计可以使一千多层的深度神经网络很好地收敛,但它破坏了我们需要深度神经网络的一个重要原因。也就是说,对于困难的问题,我们很难直接找到简单的映射函数将数据映射到目标。这也解释了为什么PreAct ResNet在层数较少的情况下性能比ResNet差。

此外,我们尝试使用屏蔽建模,使Transformer模型实现重大突破。我们使用近似方法,如等式5,试图找到r的逆变换v,使变换后的特征使用稀疏特征保留足够的信息。等式(5)的形式如下:
X = v ζ ( r ψ ( X ) × M ) X = v_\zeta (r_\psi(X) \times M) X=vζ(rψ(X)×M)
M为动态二进制掩码。通常用于执行上述任务的其他方法是扩散模型和变分自编码器,它们都具有查找反函数的功能。然而,当我们将上述方法应用于轻量级模型时,将存在缺陷,因为轻量级模型将被参数化为大量的原始数据。由于上述原因,将数据X映射到目标Y的重要信息I(Y,X)也会面临同样的问题。对于这个问题,我们将使用信息瓶颈的概念进行探讨。信息瓶颈的计算公式为:
I ( X , X ) ≥ I ( Y , X ) ≥ I ( Y , f θ ( X ) ) ≥ . . . . ≥ I ( Y , Y ^ ) I(X,X) \geq I(Y,X) \geq I(Y,f_\theta (X)) \geq ....\geq I(Y,\hat{Y}) I(X,X)I(Y,X)I(Y,fθ(X))....I(Y,Y^)
一般来说,I(Y,X)只会占据I(X,X)很小的一部分,但它对目标任务至关重要。因此,即使前馈阶段丢失的信息量并不显著,但只要覆盖了I(Y,X),训练效果就会收到很大影响,轻量化模型本身处于参数化不足的状态,在前馈阶段容易丢失大量重要信息。因此,我们对轻量化模型的目标是如何准确地从I(X,X)中过滤出I(Y,X),而要完全保留X的信息,这是很难做到的。基于以上分析,我们希望提出一种新的深度神经网络训练方法,既能生成可靠的梯度来更新模型,又能适用于浅量和轻量神经网络。

方法

可编程梯度信息

为了解决上述问题,我们提出了一种新的辅助监督框架,称为可编程梯度信息(PGI),如图3(d)所示。PGI主要包括三部分:即(1)主分支,(2)辅助可逆分支,(3)多辅助信息。

image-20240301180925127

从图3(d)可以看出,PGI的推理过程只使用了主干分支,因此不需要额外的推理成本。至于其他两个组件,他们用于解决或减缓深度学习方法中的几个重要问题。其中,设计了辅助可逆分支来解决神经网络深度化带来的问题。网络深度会造成信息瓶颈,使损失函数无法产生可靠的梯度。对于多级辅助信息,设计用于处理深度监督带来的误差积累问题,特别是针对多预测分支的架构和轻量化模型。接下来,我们将逐步介绍这两个组件。

辅助可逆支路

在PGI中,我们提出了辅助可逆分支来生成可靠的梯度和更新网络参数。通过提供从数据到目标的映射信息,损失函数可以提供指导,并避免从与目标不太相关的不完整前馈特征中发现虚假关联的可能性。我们提出通过引入可逆体系结构来维护完整的信息,但是在可逆体系结构中增加分支会消耗大量的推理成本。我们分析了图3(b)的架构,发现当添加从深层到浅层的额外连接时,推理时间将增加20%。当我们将输入数据反复添加到网络的高分辨率计算层(黄色框)时,推理时间甚至超过了时间的两倍。

由于我们的目标是使用可逆架构来获得可靠的梯度,因此“可逆”并不是推理阶段的唯一必要条件。鉴于此,我们将可逆分支视为深度监督分支的扩展,然后设计辅助可逆分支,如图3(d)所示。对于因信息瓶颈而丢失重要信息的主分支深度特征,将能够从辅助可逆分支接收到可靠的梯度信息。这些梯度信息将驱动参数学习,帮助提取正确的重要信息,以上的动作可以使主分支获得对目标任务更有效的特征。此外,可逆结构在浅层网络上的表现比一般网络差,因为复杂的任务需要在深层网络中进行转换。我们提出的方法并不强制主分支保留完整的原始信息,而是通过辅助监督机制生成有用的梯度来更新原始信息。这种设计的优点是,所提出的方法也可以应用于较浅的网络。

最后,由于在推理阶段可以去除辅助分支,因此可以保留原始网络的推理能力。我们也可以在PGI中选择任意可逆体系结构来充当辅助可逆分支的角色。

多级辅助信息

在本节中,我们将讨论多层辅助信息是如何工作的。包含多个预测分支的深度监督架构如图3©所示。对于对象检测,可以使用不同的特征金字塔来执行不同的任务,例如它们可以一起检测不同大小的对象。因此,在连接到深度监督分支后,将引导浅层特征学习小目标检测所需的特征,此时系统将其他大小目标的位置作为背景。然而,上述行为会导致深层特征金字塔丢失大量预测目标物体所需的信息。对于这个问题,我们认为每个特征金字塔都需要接收到所有目标对象的信息,这样后续的主干分支才会保留完整的信息来学习对各种目标的预测。

多级辅助信息的概念是在辅助监督的特征金字塔层次层和主分支之间插入一个集成网络,然后利用它来组合来自不同预测头的返回梯度,如图3 (d)所示。多级辅助信息就是将包含所有目标对象的梯度信息进行聚合,传递给主分支,然后更新参数。此时,主要分支的特征金字塔层次结构的特征就不会被某些特定对象的信息所支配。因此,该方法可以缓解深度监督中的信息破碎问题。此外,任何集成网络都可以使用多层次的辅助信息。因此,我们可以规划所需的语义层次来指导不同规模的网络架构的学习。

广义的ELAN

在本节中,我们描述了提出的新网络架构- GELAN。通过结合CSPNet[64]和ELAN[65]这两种采用梯度路径规划设计的神经网络架构,我们设计了兼顾轻量级、推理速度和准确性的广义高效层聚合网络(GELAN)。它的整体架构如图4所示。我们将最初仅使用卷积层堆叠的ELAN[65]的能力推广到可以使用任何计算块的新架构

实验结果

image-20240301184713543

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Vue3】函数式编程(h 函数)

h 函数的原理就是 createVNode。可以使用 h 函数封装一些小组件。 <template><table border><tr><th>name</th><th>age</th><th>操作</th></tr><tr v-for"item in list" :key"item.age"&…

基于 LLaMA 和 LangChain 实践本地 AI 知识库

有时候,我难免不由地感慨,真实的人类世界,本就是一个巨大的娱乐圈,即使是在英雄辈出的 IT 行业。数日前,Google 正式对外发布了 Gemini 1.5 Pro,一个建立在 Transformer 和 MoE 架构上的多模态模型。可惜,这个被 Google 寄予厚望的产品并未激起多少水花,因为就在同一天…

免费的ChatGPT网站( 7个 )

ChatGPT 是由 OpenAI 公司研发的一款大型语言模型&#xff0c;它可以实现智能聊天、文本生成、语言翻译等多种功能。以下是 ChatGPT 的详细介绍&#xff1a; 智能聊天&#xff1a;ChatGPT 可以与用户进行自然语言对话&#xff0c;回答用户的问题&#xff0c;提供相关的信息和建…

(Linux学习三)用户管理相关文件详解,用户以及用户组的基本操作命令

一. 用户管理相关文件介绍 /etc/passwd 文件里面存 储了用户信息&#xff0c;一共7列数据 冒号分割列 /etc/shadow 用户密码加密信息&#xff0c;9列数据 /etc/group 用户组信息&#xff0c;4列数据 1. /etc/passwd文件7列数据详解&#xff1a; root:x:0:0:root:/root:/bin/…

[伴学笔记]01-操作系统概述 [南京大学2024操作系统]

文章目录 前言jyy:01-操作系统概述 [南京大学2024操作系统]为什么要学操作系统?学习操作系统能得到什么? 什么是操作系统?想要明白什么是操作系统:时间线:1940s1950s-1960s1960-1970s年代. 信息来源: 前言 督促自己,同时分享所得,阅读完本篇大约需要10分钟,希望为朋友的技术…

Tomcat -2

1. 动静分离 ① 单机反向代理 7-2 代理服务器 7-5 tomcat 设置 7-3 测试&#xff1a; 代理服务器那里写什么就显示什么

git代码上库流程(一篇就够了)

文章目录 一、前言二、创建新分支三、修改代码四、合并分支 一、前言 多人协同开发一个项目&#xff0c;为了方便管理代码&#xff0c;每个人代码提交不冲突。git代码仓库管理是不可或缺的。对于新手来说&#xff0c;既不懂git原理又不懂底层逻辑&#xff0c;还经常错误提交代码…

腾讯云学生服务器使用教程_申请腾讯云学生机详细流程

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

哪个超声波清洗机品牌值得入手?销量榜品牌值得选购!

在科技日益发展的今天&#xff0c;超声波清洗技术以其高效、便捷和深度清洁的特点&#xff0c;已经深入到生活的诸多领域&#xff0c;从精密仪器到珠宝首饰&#xff0c;从眼镜框到假牙&#xff0c;甚至是厨房用品的日常护理&#xff0c;都能见到超声波清洗机的身影。面对市场上…

DataSpell 2023:专注于数据,加速您的数据科学之旅 mac/win版

JetBrains DataSpell 2023是一款专为数据科学家和数据分析师设计的集成开发环境&#xff08;IDE&#xff09;。这款IDE提供了强大的数据分析和可视化工具&#xff0c;旨在帮助用户更快速、更高效地进行数据科学工作。 DataSpell 2023软件获取 DataSpell 2023在保持其一贯的数…

Android 签名机制

V1是内部文件单个签 但是增加apk文件目录下面随意增加文件并不会有影响,它只关心meta-info文件 mf汇总清单的各个文件sha256 V2 整个APK文件,按文件进行hash 那么便不能随便在这里面增加文件了,增加了签名分块&#xff08;不然签名信息存哪里&#xff09;这里涉及一个文件概念 …

【BUUCTF web】通关 2.0

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

第六讲:函数

函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return语句6. 数组做函数参数7.…

java基础-mysql

文章目录 mysql基础面试题什么是mysql什么是事务并发事务带来的影响事物的隔离级别索引大表优化什么是池化思想&#xff0c;什么是数据库连接池&#xff0c;为什么要用数据库连接池⾏锁&#xff0c;表锁&#xff1b;乐观锁&#xff0c;悲观锁MySQL主备同步的基本原理SQL什么情况…

AcWing 1241. 外卖店优先级 解题思路及代码

先贴个题目&#xff1a; 以及原题链接&#xff1a;1241. 外卖店优先级 - AcWing题库https://www.acwing.com/problem/content/1243/ 然后讲讲思路&#xff0c; 这题原来我想用一个二维数组&#xff0c;一个表示id&#xff0c;一个表示时间&#xff0c;然后读入数据最后遍历处理…

【零基础入门TypeScript】类 - class

目录 创建类 句法 示例&#xff1a;声明一个类 创建实例对象 句法 示例&#xff1a;实例化一个类 访问属性和函数 示例&#xff1a;将它们放在一起 类继承 句法 示例&#xff1a;类继承 例子 输出 TypeScript ─ 类继承和方法重写 静态关键字 例子 实例操作符…

kettle开发-Day43-加密环境下运行作业

前言&#xff1a; 金三银四&#xff0c;开年第一篇我们来介绍下&#xff0c;怎么在加密情况下运行我们的kettle作业及任务。无疑现在所有企业都认识到加密的重要性&#xff0c;加密后的文件在对外传输的时候不能被访问&#xff0c;访问时出现一堆乱码&#xff0c;同时正常的应用…

RISC-V特权架构 - 特权模式与指令

RV32/64 特权架构 - 特权模式与指令 1 特权模式2 特权指令2.1 mret&#xff08;从机器模式返回到先前的模式&#xff09;2.2 sret&#xff08;从监管模式返回到先前的模式&#xff09;2.3 wfi&#xff08;等待中断&#xff09;2.4 sfence.vma&#xff08;内存屏障&#xff09; …

2024年春招小红书前端实习面试题分享

文章目录 导文面试重点一、方便介绍一下&#xff0c;你之前实习都做了什么嘛&#xff1f;二、 可以讲一下封装组件相关逻辑嘛&#xff1f;1. 为什么要封装组件&#xff1f;2. 封装组件的步骤3. 封装组件的原则4. 组件的复用和扩展5. 组件的维护和文档 三、项目的性能优化你有什…

【C++精简版回顾】16.虚函数,多态

1.虚函数与多态 以下为AI生成 虚函数是C中实现多态性的一种机制。多态性允许一个类的对象可以以多种不同的方式工作&#xff0c;即同一个函数可以根据对象的不同类型表现出不同的行为。 在C中&#xff0c;通过在基类中声明虚函数&#xff0c;并在派生类中进行重写&#xff0c;可…