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

论文地址:YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information

GitHub:WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (github.com)


一、摘要

今天的深度学习方法侧重于如何设计最合适的目标函数,从而使模型的预测结果能够最接近真实标签。同时,设计一个合适的体系结构,可以获取足够的信息进行预测。现有的方法忽略了输入数据在进行分层特征提取和空间转换时,会丢失大量信息。

本文研究数据通过深度网络传输时数据丢失的重要问题,即信息瓶颈和可逆函数。并且提出了可编程梯度信息(PGI)的概念,以应对深度网络实现多个目标所需的各种变化。PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权值。

此外,还设计了一种基于梯度路径规划的新型轻量级网络体系结构——广义高效层聚合网络(GELAN)。GELAN的架构证实了PGI在轻量级模型上获得了更好的结果。并且基于MS COCO数据集的目标检测上验证了所提出的GELAN和PGI。结果表明,GELAN只使用传统的卷积算子来比基于深度卷积的先进方法获得更好的参数利用。

PGI可用于从轻量级到大型的各种模型。可以用来获得完整的信息,因此,从头开始训练的模型可以比使用大数据集预先训练的最先进的模型获得更好的结果。

在MS COCO数据集中,基于GELAN和PGI的目标检测方法在目标检测性能方面超过了以往所有的从头训练方法,在精度方面,新方法优于大数据集预训练的RT DETR,在参数利用方面也优于基于深度卷积的设计YOLO MS [7]。

上图中,横坐标表示模型的参数量,纵坐标表示MS COCO目标检测的AP值:

关于MS COCO数据集的介绍可参考:数据集 - 目标检测常见公开数据集之MS COCO

一、AP

AP(Average Precision)的计算涉及构建Precision-Recall曲线并对该曲线下的面积进行积分。

首先,需要了解几个关键概念:

- Precision(精确率):表示检测器输出的结果中正确个数的比例,计算公式为TP/(TP+FP),其中TP是真正例,FP是假正例。
- Recall(召回率):表示真实存在的目标中被正确检出的比例,计算公式为TP/(TP+FN),其中FN是假反例。
- IoU(Intersection over Union):交并比,用来衡量预测框和真实标注框的重叠程度。

具体计算步骤如下:

1. 计算每个预测框的置信度分数和其对应的真实框的IoU值。
2. 对置信度分数按照从大到小的顺序排序,得到一个分数列表,列表中每个分数对应一个预测框。
3. 从分数最高的预测框开始,依次将每个预测框作为正样本,并计算该预测框前面的所有预测框的真实框与其的IOU值,若IOU值大于一定的阈值,则将其视为负样本。
4. 根据计算的准确率和召回率,得到一个Precision-Recall曲线(PR曲线)。
5. 通过对PR曲线下面的面积进行积分,即可得到该类别的AP值。
6. 将所有类别的AP值进行平均,即得到mAP值。

  

二、计算多类别

针对多类别的目标检测任务,AP的计算可以通过以下步骤进行:

1. 单独计算每个类别的AP:
对于每个类别,设定一个IOU阈值(通常是0.5),统计该类别所有真实框(ground truth boxes)的数量M和检测到的框(detected boxes)的数量N。这一步是为了计算召回率和精确率。
根据预测框与真实框之间的匹配程度(通常基于IOU),确定哪些预测框是真正例(TP)、假正例(FP)和假反例(FN)。
利用这些信息,绘制出每个类别的Precision-Recall曲线。
对PR曲线下的面积进行积分,得到每个类别的AP值。
2. 计算mAP:
mAP是所有类别AP值的平均数。但这个平均可能不简单是算术平均,因为不同类别的难度可能不同,所以有时会采用加权平均的方法来计算mAP。
在实际应用中,mAP通常会配合一个IOU阈值来报告,例如mAP@0.5就是指在IOU阈值设定为0.5时的mAP。

  

三、mAP不同阈值下的计算

还有mAP@0.5和mAP@0.95都是目标检测中评估模型性能的指标,它们代表在不同IoU阈值下的平均mAP值。具体来说:

mAP@0.5:这是在IoU(交并比)阈值设定为0.5时计算的mAP(均值平均精度),它是所有类别的AP(平均精度)的平均值。这个指标通常用于评估模型在较为宽松的匹配标准下的性能。
mAP@0.5:0.95:这个指标表示在IoU阈值从0.5到0.95(包含0.95),以0.05为步长变化时,每个阈值下计算出的AP的平均值。这意味着它会综合考虑多个不同的IoU阈值,从而提供一个更全面的性能评估。

2、背景介绍

深度学习的研究都试图精确地找到输入任务和目标任务之间的映射。然而,过去的大多数方法都忽略了输入数据在前馈过程中可能有不可忽视的信息损失量。这种信息的丢失可能导致有偏差的梯度流,随后用于更新模型。上述问题会导致深度网络在目标和输入之间建立不正确的联系,导致训练后的模型产生不正确的预测。

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

不同网络架构的随机初始权值输出特征图的可视化结果:(a)输入图像,(b)PlainNet,(c)ResNet,(d)CSPNet,和(e)提出的GELAN

从图中可以看出,在不同的体系结构中,提供给目标函数计算损失的信息不同程度地丢失,我们的体系结构可以保留最完整的信息,为计算目标函数提供最可靠的梯度信息。上图主要是证明了提出的GELAN方法可以保留更多的图像信息。 

在神经网络中,特别是卷积神经网络(CNN)中,特征图是输入图像经过神经网络卷积层运算后产生的结果

特征图(Feature Map)是卷积核在原始输入数据上进行卷积操作得到的结果。每个卷积核负责提取输入数据的某种特定特征,因此不同的卷积核会产生不同的特征图。这些特征图可以被认为是从不同角度分析图片后得到的抽象表示。

特征图的具体含义和作用如下:

1. 特征提取:每个特征图代表了输入数据中某种特征的分布情况,例如边缘、角点或特定的纹理等(这种都是深层网络的浅层特征)。
2. 多角度分析:通过使用不同的卷积核(不同kernel size)对同一输入执行卷积操作,可以从多个角度分析输入数据,从而生成不同的特征图。
3. 通道交互:在深层网络中,特征图也被称为通道。卷积层可以在不同通道之间进行信息交互,生成新的特征图。例如,Inception-Net中使用的1x1卷积就是一种在不同通道间进行信息整合的操作。
4. 空间分辨率:特征图的空间分辨率大小取决于先前卷积核的步长以及是否使用了池化层等操作。随着网络层次的加深,特征图的空间分辨率通常会逐渐降低,而表征的特征则更加抽象。

总的来说,特征图是卷积神经网络中的核心概念,它不仅承载了输入数据的特征信息,而且是网络学习和做出决策的基础。通过对特征图的不断学习和组合,CNN能够有效地识别和处理图像等复杂数据。

目前,缓解这一现象的主要方法如下:

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

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

(3)深度监督概念:使用没有丢失太多重要信息的浅层特征预先建立从特征到目标的映射,以确保重要信息可以转移到更深的层次;

然而,上述方法在训练过程和推理过程中存在不同的缺点:

(1)一个可逆的体系结构需要额外的层来组合重复馈入的输入数据,这将显著增加推理成本;

(2)由于输入数据层到输出层不能有太深的路径,这一限制使得在训练过程中难以建模高阶语义信息;

(3)在掩模建模中,其重构损失有时与目标损失相冲突。此外,大多数掩码机制也会产生与数据的不正确关联;

对于深度监督机制,它会产生错误积累,如果浅层监督在训练过程中丢失信息,后续的各层将无法检索到所需的信息。上述现象在困难的任务和小的模型中会更为重要。

2.1、Real-time Object Detectors

目前主流的实时物体探测器是YOLO系列,这些模型大多数使用CSPNet 或ELAN 及其变体作为主要的计算单元。在特征集成方面,通常使用改进的PAN 或FPN 作为工具,然后使用改进的YOLOv3 head 或FCOS head 作为预测头。最近也提出了一些实时目标探测器,如RT DETR ,它将其应用于DETR 上。然而,由于DETR系列中没有相应领域预训练模型的对象检测器很难应用于新的领域,目前应用最广泛的实时对象检测器仍然是YOLO系列。本文选择YOLOv7 作为基础,该方法在各种计算机视觉任务和各种场景中都被证明是有效的,本文使用GELAN来改进所提出的PGI的架构和训练过程。上述新方法使所提出的YOLOv9成为新一代的顶级实时对象检测器。

2.3.Reversible Architectures

可逆架构的操作单元必须保持可逆转换的特性,这样才能保证每层操作单元的输出特征图能够保留完整的原始信息。

RevCol将传统的可逆单元推广到多个层次,这样做可以扩展由不同层单元表示的语义层次。

Res2Net模块以分层的方式将不同的输入分区与下一个分区结合起来,并将所有转换后的分区连接起来。

CBNet 通过复合主干重新引入原始输入数据,获得完整的原始信息,并通过各种组合方法获得不同层次的多级可逆信息。

这些网络架构通常具有很好的参数利用率,但是额外的复合层会导致推理速度较慢。(可逆网络的缺点)

DynamicDet 结合了CBNet 和高效实时目标探测器YOLOv7 ,在速度、参数数量和精度之间实现了非常好的权衡,

本文介绍了DynamicDet网络体系结构作为设计可逆分支的基础。此外,在所提出的PGI中还进一步引入了可逆信息。所提出的新架构在推理过程中不需要额外的连接,因此它可以完全保留速度、参数量和精度等方面的优点。

在目标检测领域,Reversible Architectures 指的是一种网络架构,它允许信息在网络中正向和反向流动时保持原始信息的完整性。这种架构的关键特点包括:

1. 可逆性:网络中的运算单元必须保持可逆转换的特性,这意味着在进行前向传播时,每一层都能保留完整的原始信息,从而在反向传播时可以恢复这些信息。
2. 多尺度目标定位:通过设计反向连接(reverse connection),网络能够在多层CNN中检测到不同尺度的目标对象。
3. 负样本挖掘:利用目标先验(objectness prior)来引导目标对象的搜索,并通过多任务损失函数优化整个网络,使网络能够直接预测最终的检测结果。

总的来说,Reversible Architectures在目标检测中的应用旨在提高模型的性能和准确性,同时保持网络结构的灵活性和可逆性。这种架构的设计使得网络能够在不丢失关键信息的情况下进行有效的特征提取和目标定位,从而在目标检测任务中达到更高的精度和效率。

2.3、Auxiliary Supervision

深度监督是最常见的辅助监督方法,它通过在中间层插入额外的预测层来进行训练

特别是在基于transformer的方法中引入的多层解码器的应用是最常见的一种。另一种常见的辅助监督方法是利用相关的元信息来引导中间层产生的特征图,使其具有目标任务所需的属性。这种类型的例子包括使用分割损失或深度损失来提高目标检测器的准确性

近年来,很多方法中使用不同的标签分配方法生成不同的辅助监督机制,以加快模型的收敛速度,同时提高鲁棒性。

但是,辅助监督机制通常只适用于大型模型,所以当应用于轻量级模型时,很容易出现欠参数化现象,导致性能下降

于是本文提出的PGI设计了一种重编程多层次语义信息的方法,该设计允许轻量级模型也受益于辅助监督机制。

Auxiliary Supervision在目标检测中通常指的是辅助监督,它利用额外的信息或任务来帮助模型学习。

在深度学习和计算机视觉任务中,特别是目标检测领域,Auxiliary Supervision 常用于以下方面:

1. 增强特征表示:通过辅助任务引导网络关注特定类型的特征或结构,从而提高模型对主要任务的识别能力。例如,可以设计一个辅助任务来特别识别图像中的小目标,这有助于模型在主任务中更好地处理这些难以检测的小尺寸物体。
2. 多尺度学习:在目标检测网络中使用不同层次的特征图来检测不同尺度的对象。辅助监督可以帮助网络更好地融合这些特征,提升对小目标的检测性能。
3. 深度监督:在网络的不同层上添加监督信号,以确保从浅层到深层每一层都能得到充分的训练,并且梯度流能够更有效地传播至网络较深的部分。
4. 改善数据不平衡问题:针对数据集中大目标和小目标数量不平衡的问题,辅助监督可以帮助网络更加均衡地学习各种尺寸的目标。
5. 标签分配:使用辅助任务来改进标签分配器的性能,确保每个目标都被正确地标记,从而提供更准确的训练信号。
6. 损失函数设计:设计合适的损失函数作为辅助任务的损失,以优化特定的网络部分或鼓励网络学习某些特性。

总的来说,Auxiliary Supervision 是提高目标检测模型性能的重要策略之一,特别是在面对复杂场景和小目标时,其作用尤为显著。通过合理设计和使用辅助监督,可以显著提升模型的泛化能力和精度。

3、 问题陈述

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

先看一下正则化:

在深度学习中,Normalization(正则化)是指通过特定的技术来限制或规范模型参数的取值范围,从而防止模型过拟合,并提高模型的泛化能力。

以下是几种常见的正则化方法:

1. L1 正则化(Lasso Regularization):通过向损失函数添加一个与权重系数绝对值成正比的项来推动权重系数的稀疏性。这种方法可以产生一个更简单的模型,因为它将一些权重系数缩减到零。
2. L2 正则化(Ridge Regularization):通过向损失函数添加一个与权重系数平方成正比的项来惩罚模型的复杂性。这种方法有助于防止权重系数变得过大,从而避免过拟合。
3. Elastic Net 正则化:结合了 L1 和 L2 正则化的特点,允许在特征选择和惩罚权重系数大小之间取得平衡。
4. Dropout 正则化:在训练过程中随机“丢弃”网络的一部分神经元,使得每次更新时网络结构都在变化。这强迫网络不过分依赖于任何一组特征,并能够提高模型的泛化能力。
5. 数据增强(Data Augmentation):通过对训练数据进行变换(如旋转、缩放、剪切等),生成新的训练样本,从而增加数据的多样性,减少过拟合的风险。
6. 早停(Early Stopping):在验证集误差开始增大时停止训练,以防止过拟合。
7. Batch Normalization(批量归一化):在深度神经网络中用于加速学习过程,它通过减小内部协变量偏移来稳定网络的学习,并允许使用较大的学习率。
8. Layer Normalization:与 Batch Normalization 类似,但适用于样本数量不足的情况,通过对每一层的激活进行归一化来加速训练过程。
9. Instance Normalization:通常用于风格迁移等任务中,对每个实例的特征进行归一化处理。
10. Group Normalization:对神经网络中的通道组进行归一化,当批次大小较小时尤其有效。
11. 谱归一化(Spectral Normalization):通过限制网络层权重的谱范数来稳定训练过程,常用于生成对抗网络(GANs)中。
12. Semantic Normalization:在某些任务中,可以通过引入语义信息来指导正则化的进程,例如在图像分类任务中利用类别间的语义关系。

这些正则化方法可以单独使用,也可以结合使用,以达到最佳的模型性能。选择合适的正则化策略取决于具体问题、数据集和模型架构。

激活函数在神经网络中扮演着至关重要的角色,具体作用如下:

1. 引入非线性:激活函数能够解决线性模型表达能力不足的问题。通过非线性变换,神经网络能够学习和模拟更复杂的数据关系。
2. 决定神经元激活:类似于人类大脑中的神经元,激活函数决定了一个神经元是否应该被激活。它根据输入的加权和来产生输出信号。
3. 增加模型容量:使用激活函数后,神经网络可以表达更多的函数,从而增加了模型的容量。这意味着网络可以适应更复杂的任务和数据集。
4. 多样化的激活函数:不同的激活函数有不同的特性,例如Sigmoid函数能够将输出限制在0到1之间,而ReLU(Rectified Linear Unit)函数则能够在正值域内保持梯度不饱和,加速学习过程。选择合适的激活函数对于特定任务的性能至关重要。
5. 实现复杂映射:如果没有激活函数,无论增加多少隐藏层,神经网络仍然只能表示线性映射。激活函数使得多层神经网络能够表示更加复杂的函数映射。
6. 改善学习效率:某些激活函数如ReLU能够在正区间内保持梯度不衰减,这有助于解决深层网络训练中的梯度消失问题,提高学习效率。
7. 提供连续梯度:对于基于梯度的优化算法,激活函数需要提供连续可微的梯度,以便计算每个参数的梯度并更新网络权重。

总的来说,激活函数是神经网络中不可或缺的组成部分,它们通过引入非线性因素,使得神经网络能够处理复杂的数据模式,并通过不断调整权重来学习这些模式。

在深度学习中,常用的激活函数有以下几种:

- ReLU (Rectified Linear Unit):这是最常用的激活函数之一,它的特点是计算简单,且能够加速收敛过程。ReLU的计算公式为f(x)=max(0, x),即当输入值小于0时输出为0,大于0时输出等于输入值。
- Sigmoid:Sigmoid函数将输入值压缩到0和1之间,它的公式为f(x)=1 / (1 + exp(-x))。这个函数在早期的神经网络中使用较多,但由于它在输入值很大或很小的时候会出现梯度消失的问题,所以现在使用得较少。
- Tanh (Hyperbolic Tangent):Tanh函数将输入值压缩到-1和1之间,其公式为f(x)=2 / (1 + exp(-2x)) - 1。相比于Sigmoid函数,Tanh函数的输出范围更宽,因此在某些情况下性能更好。
- Leaky ReLU:Leaky ReLU是ReLU的一个变种,它允许负输入有一个非零的梯度,这有助于解决ReLU在负输入时梯度为零的问题。Leaky ReLU的公式为f(x)=x if x > 0, αx if x ≤ 0,其中α是一个很小的常数。
- PReLU (Parametric Rectified Linear Unit):PReLU是Leaky ReLU的参数化版本,它与Leaky ReLU相似,但α是一个可学习的参数,而不是一个固定的值。
- ELU (Exponential Linear Unit):ELU试图通过引入负值输入的非线性来克服ReLU的缺点,其公式为f(x)=x if x > 0, α(exp(x) - 1) if x ≤ 0。
- RReLU (Randomized Rectified Linear Unit):RReLU是在训练过程中随机选择α的值,而在测试时使用固定的α值。
- Gelu (Gaussian Error Linear Unit):Gelu是最近提出的一种新的激活函数,它被设计为近似于神经网络层输出的误差分布,其公式为f(x)=0.5 * x * (1 + tanh(sqrt(2 / pi)(x + 0.044715 * x^3)))。
- Swish:Swish是一个新的激活函数,它的设计灵感来自于神经元的生物物理模型,其公式为f(x)=x * sigmoid(x)。
- Selu (Scaled Exponential Linear Unit):Selu是ELU的缩放版本,它通过在正区间内进行缩放来保持单位方差,其公式为f(x)=λα(exp(x) - 1) if x ≤ 0, x if x > 0,其中λ是一个缩放因子。

总的来说,选择合适的激活函数取决于具体的应用场景和网络架构。例如,ReLU因其简单性和高效性而广泛应用于各种网络中,而Sigmoid和Tanh可能在需要特定输出范围的场合中使用。随着深度学习研究的深入,新的激活函数不断被提出以解决特定的问题,如Gelu和Swish等。在实际应用中,通常需要根据任务的需求和实验结果来选择最合适的激活函数。

在本文中,进一步探讨了上述问题的性质。通过对信息瓶颈的深入分析,我们推断出这个问题的根本原因是最初来自一个非常深的网络的初始梯度在传输后不久就失去了为实现目标所需的大量信息。

为了确认这一推断,通过具有初始权值的不同体系结构的深度网络,然后在下图中对它们进行可视化和说明:

从图中可以看出,PlainNet已经丢失了大量的深层目标检测所需的重要信息。至于ResNet、CSPNet和GELAN能够保留的重要信息的比例,它确实与训练后可以获得的准确性呈正相关。本文进一步设计了基于可逆网络的方法来解决上述问题的原因。

未完待续......

相关推荐

  1. Yolov9比其他yolo版本的改进

    2024-03-29 04:18:01       7 阅读
  2. YOLOv9算法原理简介】

    2024-03-29 04:18:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 04:18:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 04:18:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 04:18:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 04:18:01       20 阅读

热门阅读

  1. unity中 鼠标按下移动端与pc端的位置

    2024-03-29 04:18:01       18 阅读
  2. 设置火狐浏览器打开unity开发的webGL

    2024-03-29 04:18:01       20 阅读
  3. 蓝桥集训之小国王

    2024-03-29 04:18:01       19 阅读
  4. 数据仓库——无事实的事实表

    2024-03-29 04:18:01       20 阅读
  5. 31-4 命令执行漏洞 - RCE原理

    2024-03-29 04:18:01       20 阅读
  6. Day29:学习SpringCloud

    2024-03-29 04:18:01       21 阅读
  7. 学会这10个Python脚本来完成你的日常任务

    2024-03-29 04:18:01       19 阅读
  8. 突然断电导致git损坏修复

    2024-03-29 04:18:01       19 阅读
  9. 算法日记————对顶堆(4道题)

    2024-03-29 04:18:01       18 阅读