目标检测算法YOLOv9简介

      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.mzph.cn/news/851340.shtml

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

相关文章

一文带你轻松掌握Java数组定义和声明

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

Java_Map集合

认识Map集合 Map集合称为双列集合,格式:{key1value,key2value2,key3value3,…},一次需要存一对数据作为一个元素。 Map集合的每个元素“Keyvalue” 称为一个键值对/键值对对象/一个Entry对象,Map集合也被叫做“键值对集合” Map集…

Vue笔记(二)

Vue(一):Vue笔记(一)-CSDN博客 综合案例:水果购物车 项目功能: 视频链接:034-水果购物车-基本渲染_哔哩哔哩_bilibili 目录结构: index.css .app-container {padding-…

已解决Error || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10]

已解决Error || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10] 原创作者: 猫头虎 作者微信号: Libin9iOak 作者公众号: 猫头虎技术团队 更新日期: 2024年6月6日 博主猫头虎的技术世界 🌟 欢迎来…

第十一篇——信息增量:信息压缩中的保守主义原则

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 通过信息中的保守主义,我想到了现实中人的保守主义一样&#…

汇编语言作业(五)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 四、实验结果与分析 五、 实验总结 一、实验目的 1.熟悉掌握汇编语言的程序结构,能正确书写数据段、代码段等 2,利用debug功能,查看寄存器(CS,IP,AX,DS..)及数据段的…

基于AI大文本模型的智慧对话开发设计及C#源码实现,实现智能文本改写与智慧对话

文章目录 1.AI 大模型发展现状2.基于AI服务的智慧对话开发2.1 大模型API选择2.2 基于C#的聊天界面开发2.3 星火大模型API接入2.4 优化开发界面与显示逻辑 3.源码工程Demo及相关软件下载参考文献 1.AI 大模型发展现状 端午假期几天,关注到国内的AI大模型厂商近乎疯狂…

计算机网络期末考试知识点(关键词:江中)

目录 大家端午节快乐呀!又到了一年两度的期末考试月了,这里给大家整理了一些复习知识点,大家可以边吃粽子边复习,事半功倍哈哈哈。祝各位期末过!过!过!。 1 第一章 计算机网络体系结构 计算机…

Kaggle -- Digit Recognizer 98.57%

使用卷积神经网络进行模型构建,代码如下: import pandas as pd import numpy as np import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torch.utils.data import DataLoader, Dataset, random_spl…

【MySQL】聊聊唯一索引是如何加锁的

首先我们要明确,加锁的对象是索引,加锁的基本单位是next-key lock,由记录锁和间隙锁组成。next-key是前开后闭区间,间隙锁是前开后开区间。根据不同的查询条件next-key 可能会退化成记录锁或间隙锁。 在能使用记录锁或者间隙锁就…

电路防护-贴片陶瓷气体放电管

贴片陶瓷气体放电管 GDT工作原理GDT主要特性参数典型电路压敏电阻与 TVS 管的区别 GDT工作原理 陶瓷气体放电管是一种电子器件,其工作原理基于气体放电现象。这种管子的内部填充了一种特定的气体,通常是氖气或氩气。当管子两端施加足够的电压时&#xf…

vivado HW_ILA_DATA、HW_PROBE

HW_ILA_DATA 描述 硬件ILA数据对象是ILA调试核心上捕获的数据的存储库 编程到当前硬件设备上。upload_hw_ila_data命令 在从ila调试移动捕获的数据的过程中创建hw_ila_data对象 核心,hw_ila,在物理FPGA上,hw_device。 read_hw_ila_data命令还…

nginx优化与防盗链【☆☆☆】

目录 一、用户层面的优化 1、隐藏版本号 方法一:修改配置文件 方法二:修改源码文件,重新编译安装 2、修改nginx用户与组 3、配置nginx网页缓存时间 4、nginx的日志切割 5、配置nginx实现连接超时 6、更改nginx运行进程数 7、开启网…

1 c++多线程创建和传参

什么是进程? 系统资源分配的最小单位。 什么是线程? 操作系统调度的最小单位,即程序执行的最小单位。 为什么需要多线程? (1)加快程序执行速度和响应速度, 使得程序充分利用CPU资源。 (2&…

Python 全栈体系【四阶】(五十八)

第五章 深度学习 十三、自然语言处理(NLP) 3. 文本表示 3.1 One-hot One-hot(独热)编码是一种最简单的文本表示方式。如果有一个大小为V的词表,对于第i个词 w i w_i wi​,可以用一个长度为V的向量来表示…

npm install 的原理

1. 执行命令发生了什么 ? 执行命令后,会将安装相关的依赖,依赖会存放在根目录的node_modules下,默认采用扁平化的方式安装,排序规则为:bin文件夹为第一个,然后是开头系列的文件夹,后…

Linux网络诊断工具mtr命令详解

目录 一、mtr概述 二、mtr的特点 1、动态路由显示 2、数据包类型 3、显示延迟和丢包 4、过滤和日志 5、网络探测 三、基本用法 1、基本语法 2、帮助 3、常用选项 四、输出解释 1、常见mtr命令及其输出 2、输出解释 四、命令实例 1. 最基本的用法 2. 显示报告形式…

SpringBoot 配置事务

SpringBoot 在启动时已经加载了事务管理器,所以只需要在需要添加事务的方法/类上添加Transactional即可生效,无需额外配置。 TransactionAutoConfiguration 事务的自动配置类解析: SpringBoot 启动时加载/META-INF/spring/org.springframewor…

帕友的小贴士,锻炼

帕金森病作为一种慢性神经系统疾病,对患者的生活质量产生了深远的影响。虽然医学界对于帕金森病的治疗仍在不断探索,但合理的锻炼已经被证实是改善患者症状、提高生活质量的有效途径之一。本文旨在为帕金森病患者推荐一些适合的锻炼方法,帮助…

c#未能加载基类System错误 这台计算机上缺少此项目引用的 NuGet 程序包

拷贝代码到另一台计算机运行,打开Form1.cs报错 首先确认package的框架 如果是472,则更换472的框架 打开项目->xx属性,进行修改 如果框架正确,就是未识别到程序包 可以参考: https://www.cnblogs.com/txwtech/p/1…