论文:YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (2024.2.21)
作者:Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao
链接:https://arxiv.org/abs/2402.13616
代码:https://github.com/WongKinYiu/yolov9
YOLO系列算法解读:
YOLOv1通俗易懂版解读、SSD算法解读、YOLOv2算法解读、YOLOv3算法解读、YOLOv4算法解读、YOLOv5算法解读、YOLOR算法解读、YOLOX算法解读、YOLOv6算法解读、YOLOv7算法解读、YOLOv8算法解读、YOLOv9算法解读、YOLOv10算法解读
PP-YOLO系列算法解读:
PP-YOLO算法解读、PP-YOLOv2算法解读、PP-PicoDet算法解读、PP-YOLOE算法解读、PP-YOLOE-R算法解读
1、算法概述
YOLOv9和YOLOv7的一作是同一个人,所以均采用同一个检测框架;文章出发点可归因于论文的这句话:
作者先表明现如今检测算法主要集中在设计目标函数及有效的框架,但却忽略了输入数据逐层进行特征提取和空间变换时,会丢失大量的信息,这些丢失的信息会造成梯度偏差影响模型参数的更新。如下图所示是各个网络的特征图细节展示;
目前,可以缓解这一现象的主要方法如下:
1.使用可逆架构:这种方法主要使用重复的输入数据,并以显式的方式维护输入数据的信息;缺点是需要额外的层来组合重复馈送的输入数据,增加推理成本,且受限不能有太深的路径,网络很难捕获高阶语义信息进行建模;
2.Mask建模:主要利用重建损失,采用隐式方法最大化提取的特征,保留输入信息;缺点是重建损失有时与目标损失相冲突或者与输入数据产生不正确的关联;
3.引入深度监督概念:它使用没有丢失太多重要信息的浅层特征来预先建立从特征到目标的映射,以确保重要信息可以转移到更深的层;缺点是若在浅层丢失信息,后续层无法检索到所需信息,容易造成错误积累。
本文将深入研究数据在深度网络中传输时的重要数据丢失问题,即信息瓶颈和可逆函数。为此,作者提出了可编程梯度信息(programmable gradient information, PGI)应对深度神经网络中多目标的各种变化,PGI可针对目标任务提供完整的输入信息,因此网络可以根据完整的梯度信息更新网络权重。此外,作者还基于梯度路径规划在ELAN结构的基础上设计了一个轻量高效的网络结构GELAN(Generalized Efficient Layer Aggregation Network),而YOLOv9正是利用GELAN结构来设计的。它们在COCO数据集上的表现如下图:
2、YOLOv9细节
YOLOv9网络结构如下
2.1 Programmable Gradient Information
为了解决数据在深度网络中传输时信息丢失的问题,作者提出了一种新的辅助监督框架,称为可编程梯度信息(PGI),如图下图(d)所示。
PGI主要包括三个部分,即(1)主分支、(2)辅助可逆分支、(3)多级辅助信息。从上图(d)中,我们可以看到PGI的推理过程只使用主分支,因此不需要任何额外的推理成本。至于其他两个组成部分,它们用于解决或减缓深度学习方法中的几个重要问题。其中,设计了辅助可逆分支来处理神经网络深化所带来的问题。网络深化会造成信息瓶颈,使损失函数无法生成可靠的梯度。对于多级辅助信息,它是为了处理深度监督引起的误差积累问题而设计的,特别是对于多预测分支的架构和轻量级模型。
辅助可逆分支(Auxiliary Reversible Branch)
在PGI结构中,作者提出了辅助可逆分支来生成可靠的梯度。但是作者通过实验得到在网络主分支中增加可逆结构(如上图(b)黄色虚线框部分)会带来推理时间的急剧上升,增加上图(b)黄色框部分,推理时间能增加一倍。
作者意识到,我们要的目标是使用可逆结构来获得可靠的梯度,因此“可逆”并不是推理阶段的唯一必要条件。作者将可逆分支视为深度监督分支的扩展部分,设计了辅助可逆分支,如上图(d)蓝色虚线框部分。这样一来,深层主分支中可能因信息瓶颈而丢失的重要信息,可以通过辅助可逆分支获得补充的梯度信息,这些信息有助于网络学习到更准确、更关键的特征,以更有效地完成目标任务。作者进一步指出,由于复杂的任务需要在深层网络中进行转换,因此可逆结构在浅层网络中的表现比一般网络差。因此提出的方法不追求在主分支上保留完整原始信息,而是通过辅助监督机制提供有用的梯度更新。
多级辅助信息(Multi-level Auxiliary Information)
包含深度监督信息的多级预测分支结构如上图©所示。对于目标检测任务而言,可以使用不同的特征金字塔来检测不同大小的目标。因此,在连接到深度监督分支后,将引导浅层特征学习小物体检测所需的特征,此时模型将其他大小目标的位置作为背景。然而,上述行为会导致深层特征金字塔丢失大量预测目标物体所需的信息。在这里,作者认为每个特征金字塔都需要接收到所有目标物体的信息,以便后续的主干分支能够保留完整的信息来学习对各种目标的预测。因此,作者引入了一种多级辅助信息架构,通过在辅助监督特征金字塔层和主分支之间加入集成网络,如上图(d)粉色虚线框部分所示。这个集成网络的角色是整合来自不同预测分支的梯度信息,并将这一聚合的信息传递给主分支,以促进参数的更新。
2.2 Generalized ELAN
通过结合CSPNet和ELAN这两种采用梯度路径规划设计的神经网络架构,作者设计了一种考虑轻量级、推理速度和准确性的通用高效层聚合网络(GELAN)。它的整体架构如下图所示,ELAN是卷积层的堆叠结构,而GELAN适用范围更广,是任何block的堆叠。
3、实验
实验设置:实验都用COCO2017训练集训练,用其验证集选择最佳模型,用COCO2017测试集评估模型性能。作者在YOLOv7的基础上把v7中的ELAN替换成了GELAN,其中GELAN的block用的是CSPNet blocks和planned RepConv。并简化了下采样模块以及优化了Anchor-Free预测头。对于PGI的辅助损失部分,作者完全采用了YOLOv7的辅助头设置。
与现如今其他检测算法对比
模型参数量和计算量flops方面的比较
消融实验:略