当前位置: 首页 > news >正文

目标检测算法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

相关文章:

目标检测算法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/W…...

达梦数据库搭建守护集群

前言 DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾&#xff09…...

OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建

OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…...

Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。

文章目录 前言一、项目初始化搭建1、创建项目:test_models_django2、创建应用app01 二、配置mysql三、创建model实例,自动创建数据库表1、创建对象User类2、执行命令 四、思考问题(****)1、是否会生成新表呢(答案报错&…...

对象创建的4种模式

1. 工厂模式 这种模式抽象了创建具体对象的过程,用函数来封装以特定接口创建对象的细节 缺点:没有解决对象识别的问题(即怎样知道一个对象的类型) function createPerson(name, age, job) {var o new Object();o.name name;o.ag…...

如何判断 是否 需要 CSS 中的媒体查询

以下是一些常见的使用媒体查询的场景: 响应式布局:当设备的屏幕尺寸变化时,我们可以使用媒体查询来调整布局,以适应不同的屏幕尺寸。 设备特性适配:我们可以使用媒体查询来检测设备的特性,如设备方向、分辨…...

设计模式-装饰器模式(结构型)

装饰器模式 装饰器模式是一种结构模式,通过装饰器模式可以在不改变原有类结构的情况下向一个新对象添加新功能,是现有类的包装。 图解 角色 抽象组件:定义组件的抽象方法具体组件:实现组件的抽象方法抽象装饰器:实现…...

升级HarmonyOS 4.2,开启健康生活篇章

夏日来临,华为智能手表携 HarmonyOS 4.2 版本邀您体验,它不仅可以作为时尚单品搭配夏日绚丽服饰,还能充当你的健康管家,从而更了解自己的身体,开启智能健康生活篇章。 高血糖风险评估优化,健康监测更精准 …...

给gRPC增加负载均衡功能

在现代的分布式系统中,负载均衡是确保服务高可用性和性能的关键技术之一。而gRPC作为一种高性能的RPC框架,自然也支持负载均衡功能。本文将探讨如何为gRPC服务增加负载均衡功能,从而提高系统的性能和可扩展性。 什么是负载均衡? …...

【优选算法】详解target类求和问题(附总结)

目录 1.两数求和 题目: 算法思路: 代码: 2.!!!三数之和 题目 算法思路: 代码: 3.四数字和 题目: 算法思路: 代码: 总结&易错点&…...

【数据结构】图论入门

引入 数据的逻辑结构: 集合:数据元素间除“同属于一个集合”外,无其他关系线性结构:一个对一个,例如:线性表、栈、队列树形结构:一个对多个,例如:树图形结构&#xff1…...

11_1 Linux NFS服务与触发挂载autofs

11_1 Linux NFS服务与触发挂载服务 文章目录 11_1 Linux NFS服务与触发挂载服务[toc]1. NFS服务基础1.1 示例 2. 触发挂载autofs2.1 触发挂载基础2.2 触发挂载进阶autofs与NFS 文件共享服务:scp、FTP、web(httpd)、NFS 1. NFS服务基础 Netwo…...

开发uniapp 小程序时遇到的问题

1、【微信开发者工具报错】routeDone with a webviewId XXX that is not the current page 解决方案: 在app.json 中添加 “lazyCodeLoading”: “requiredComponents” uniapp的话加到manifest.json下的mp-weixin 外部链接文章:解决方案文章1 解决方案文章2 &qu…...

怎样快速获取Vmware VCP 证书,线上考试,voucher报名优惠

之前考一个VCP证书,要花大一万的费用,可贵了,考试费不贵,贵就贵在培训费,要拿到证书,必须交培训费,即使vmware你玩的很溜,不需要再培训了,但是一笔贵到肉疼的培训费你得拿…...

LeetCode 1141, 134, 142

目录 1141. 查询近30天活跃用户数题目链接表要求知识点思路代码 134. 加油站题目链接标签普通版思路代码 简化版思路代码 142. 环形链表 II题目链接标签思路代码 1141. 查询近30天活跃用户数 题目链接 1141. 查询近30天活跃用户数 表 表Activity的字段为user_id&#xff0c…...

华为FPGA工程师面试题

FPGA工程师面试会涉及多个方面,包括基础知识、项目经验、编程能力、硬件调试和分析等。以下是一些必问的面试题: 基础知识题: 请解释FPGA的基本组成和工作原理。描述FPGA中的可编程互联资源以及它们在构建复杂数字电路中的作用。请解释嵌入式多用途块(如BRAM、DSP slices、…...

Windows11上安装docker(WSL2后端)和使用docker安装MySQL和达梦数据库

Windows11上安装docker(WSL2后端)和使用docker安装MySQL和达梦数据库 1. 操作系统环境2. 首先安装wsl2.1 关于wsl2.2 安装wsl2.3 查看可用的wsl2.4 安装ubuntu-22.042.5 查看、启动ubuntu-22.04应用2.6 上面安装开了daili2.7 wsl的更多参考 3. 下载Docke…...

UnityXR Interactable Toolkit如何实现Climb爬梯子

前言 在VR中,通常会有一些交互需要我们做爬梯子,爬墙的操作,之前用VRTK3时,里面是还有这个Demo的,最近看XRI,发现也除了一个爬的示例,今天我们就来讲解一下 如何在Unity中使用XR Interaction Toolkit实现爬行(Climb)操作 环境配置 步骤 1:设置XR环境 确保你的Uni…...

sqli-labs 靶场 less-11~14 第十一关、第十二关、第十三关、第十四关详解:联合注入、错误注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。Less 11 SQLI DUMB SERIES-11判断注入点 尝试在用户名这个字段实施注入,且试出SQL语句闭合方式为单…...

国内外网络安全现状分析

一、国内网络安全现状 1.1 国内网络安全威胁 国内的网络安全威胁主要表现在以下几个方面: 恶意软件:包括计算机病毒、蠕虫、木马和间谍软件等,它们能感染计算机系统、窃取敏感信息或破坏系统功能。网络钓鱼:通过伪装成可信任的…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...