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