代码地址:https://github.com/WongKinYiu/yolov9
论文小结
本文所提出方法YOLOv9的设计理念,基本是基于梯度的角度来设计和解释的。
从模型设计上来说,YOLOv8的ELAN结构的效率和效果是能够让人满意的,作者在ELAN的理念上做了泛化性的魔改,得到的结构命名为 GELAN,也就是Generalized ELAN的意思。如下图
4
4
4所示。
本文的重点,是一个PGI(Programmable Gradient Information)的设计。实际上,PGI是只在训练阶段使用的辅助分支,从输入图像开始直接构建的辅助分支,意在获得“完整的输入信息,从而获得可靠的梯度信息来更新权重”。作者认为逐步抽象的深层特征中会丢失原始的定位信息。网络结构设计如下图
3
d
3d
3d 所示。
另外,在作者提供的代码中,无PGI相关结构代码。默认的训练代码也是无PGI分支的普通的辅助预测头,类似于下图
3
c
3c
3c。
PGI作为一个即插即用的模块,可用于各种从小到大的模型中。使用PGI可获得完整的信息,因此可以让从头训练的模型比那些使用大数据集预训练的模型指标更好。
从效率方向上,YOLOv9是从参数量上考虑的,和其他模型的对比如下图 1 1 1所示。
论文简介
作者认为,当前的方法都忽略了前向过程中的信息损失。这会导致生成偏差的梯度流,而这些偏差梯度流会用来更新网络。
如下图
2
2
2所示 ,不同网络结构使用随机初始化参数,特征图的可视化展示。
有几种方法可以缓解这种现象:
- 使用可逆架构。该方法主要使用重复的输入数据,并以显式的方式保留输入数据的信息;
- 使用掩码建模。该方法主要使用重构损失,采用隐式的方式最大化提取的特征并保留输入信息;
- 引入深度监督。该方法使用没有丢失太多重要信息的浅层特征来预先建立从特征到目标的映射,以确保重要信息能够传递到更深的层。
但上述方法也分别存在一些问题:
- 可逆架构方法,需要额外的Layer来重复馈送输入消息,对推理速度有害。而且,输入层到输出层不能有太深的路径,这限制将导致在训练中难以对高级语义特征进行建模;
- 掩码建模方法,使用的重构损失有时候会与目标损失冲突;
- 深度监督方法,误差可能会累积。如果在浅层监督中的训练就丢失了信息,后面的层将无法检索。这在小模型和困难任务重更加显著。
PGI使用辅助可逆分支来产生可依赖的梯度,使深度特征仍能保持执行目标任务的关键特征。辅助可逆分支的设计可以避免传统深度监督中融合多路径特征可能造成的语义损失。换句话说,在不同语义层面上变成梯度信息传播,因而得到最好的训练效果。从图 3 d 3d 3d可以看出,PGI分支的检测头输入特征是不包含多尺度特征的,不同语义层面可能是这个意思?
论文方法
可逆函数的演化
设计理念。实际上,下面公式在代码都是是没有应用的。
由信息-瓶颈的原理可知,数据
X
X
X经过变换可能产生信息损失,如下面公式
(
1
)
(1)
(1)所示:其中
f
f
f和
g
g
g是转换函数,
θ
\theta
θ和
ϕ
\phi
ϕ是对应的参数。
I
(
X
,
X
)
≥
I
(
X
,
f
θ
(
X
)
)
≥
I
(
X
,
g
ϕ
(
f
θ
(
X
)
)
)
(1)
I(X,X)\geq I(X,f_\theta(X))\geq I(X,g_\phi(f_\theta(X)))\tag{1}
I(X,X)≥I(X,fθ(X))≥I(X,gϕ(fθ(X)))(1)
由公式 ( 1 ) (1) (1)可知,网络越深,原始信息越有可能丢失。参数又由目标和Loss产生新梯度来更新。这进而导致深层网络的预测目标不可能使用完整的信息,故产生不可靠的梯度。在如此恶性循环下,网络学习到有偏差的结果。这个现象,也是大多数现代网络设计中,宽度的重要性比深度高的原因。
当函数 r r r有逆变换函数 v v v时,我们称该函数为可逆函数。下面公式 ( 2 ) (2) (2)中 ψ \psi ψ和 ζ \zeta ζ为参数。 X = v ζ ( r ψ ( X ) ) (2) X=v_\zeta(r_\psi(X))\tag{2} X=vζ(rψ(X))(2)
数据 X X X经过可逆函数转换时不会有信息损失。理想情况下,如果 r ψ r_\psi rψ 是可逆的,那么信息的保留会是最优的。 I ( X , X ) = I ( X , r ψ ( X ) ) = I ( X , v ζ ( r ψ ( X ) ) ) (3) I(X,X)=I(X,r_\psi(X))=I(X,v_\zeta(r_\psi(X)))\tag{3} I(X,X)=I(X,rψ(X))=I(X,vζ(rψ(X)))(3)
当网络的变换函数都是由可逆函数组成的时候,就会有更可靠的梯度信息用来更新模型。当今流行的深度学习方法都是符合可逆性结构的,如图 4 4 4 所示,都由残差分支的理念构成,公式如下: X l + 1 = X l + f θ l + 1 ( X l ) (4) X^{l+1}=X^l+f_\theta^{l+1}(X^l)\tag{4} Xl+1=Xl+fθl+1(Xl)(4)
虽然残差设计能让我们训练超过1000层的网络,并且能收敛地很好。但这也让我们偏离了需要深层网络的初衷:对于困难问题,我们很难找到从数据到目标的直接映射。
作者通过如下公式 ( 5 ) (5) (5)来寻找和学习可逆函数,这样变换的特征可以使用稀疏特征保留足够的信息。其中 M M M是二元mask。 X = v ζ ( r ψ ( X ) ⋅ M ) (5) X=v_\zeta(r_\psi(X)\cdot M)\tag{5} X=vζ(rψ(X)⋅M)(5)
由于在大数据情况下,轻量网络中的参数量不足。在轻量网络中简单地应用公式 ( 5 ) (5) (5)会出现问题。因此,作者使用信息瓶颈的概念进行了探索: I ( X , X ) ≥ I ( Y , X ) ≥ I ( Y , f θ ( X ) ) ≥ ⋯ ≥ I ( Y , Y ^ ) (6) I(X,X)\geq I(Y,X)\geq I(Y, f_\theta(X))\geq \cdots \geq I(Y, \hat{Y})\tag{6} I(X,X)≥I(Y,X)≥I(Y,fθ(X))≥⋯≥I(Y,Y^)(6)
一般情况下, I ( Y , X ) I(Y,X) I(Y,X)只占据 I ( X , X ) I(X,X) I(X,X)很小一部分。但那是对目标任务至关重要的一部分。即使在前馈过程中信息丢失不大,只要 I ( Y , X ) I(Y,X) I(Y,X)被覆盖,那么训练效果就会收到很大影响。
轻量级网络是处于参数量不足的状态的。所以,在前馈阶段很容易丢失大量的重要信息。我们的目标是如何准确地从 I ( X , X ) I(X,X) I(X,X)中提取出I(Y,X)。
作者的目标是提出一个新的神经网络的训练方法。不仅可以产生可靠的梯度来更新模型,而且适用于浅层轻量级的网络。
论文方法设计
如上图 3 3 3d所示,PGI提出了一个新的辅助监督框架。PGI主要包含 3 3 3个组件:(1)主要分支;(2)辅助可逆分支;(3)多级辅助信息;
辅助可逆分支是为了解决深层网络的问题。网络加深会造成信息瓶颈,导致损失函数无法产生可靠的梯度。
多级辅助信息是为了处理深度监督带来的累积误差而设计的。特别针对多预测分支的架构和轻量级网络。
如果在主干网络上加入可逆分支,则会导致推理成本的大量增加,如上图 3 b 3b 3b所示。由于本文的目标是利用可逆架构获得可靠的梯度,所以作者将可逆分支视为辅助监督分支的扩展,如上图 3 d 3d 3d所示。
可逆网络在浅层网络中效果较差,因为复杂任务需要再更深的网络中转换。本文提出的方法不强制主干网络保持完整的输入信息,而是通过辅助监督机制生成有用的梯度。因为是额外从输入图像开始的分支,所以说这个可逆分支不需要在意浅层特征的问题。
在目标检测任务中,不同Level的特征被用于不同的任务,比如不同Size的目标。在浅层特征中,目标任务为小目标检测,同时将其他Size的目标设置为背景。但这样的操作会让深层特征金字塔丢失预测其目标的信息。如果浅层检测头只预测小目标,则会在一定程度上抑制深层检测头预测大目标。
因此,作者认为,每个特征金字塔需要接收所有对象的信息。如此处理的情况下,后续的主干分支能够保留完整的信息来学习多种目标的预测。
多级辅助信息的概念是在辅助监督的特征金字塔和主分支之间加入一个集成网络。然后用它来组合来自不同检测头的返回梯度,如上图 3 d 3d 3d的紫红色框所示。具体来说,辅助检测头不会直接在主干提供的特征预测,而是在辅助分支添加一个FPN结构来组合特征,然后再进行预测。
论文实验
论文实验参数组如YOLOv7,本文所有模型都是从头开始训练的,每个模型训练 500 500 500个epoch。WarmUp学习率策略使用线性方法,在训练后期的epoch中会依据模型尺寸设置对应的decay。最后 15 15 15个epoch移除mosaic数据增强策略。
在YOLOv7和动态YOLOv7基础上建设出普通YOLOv9和扩展YOLOv9。使用GELAN代替ELAN,将CSPNets块和planned RepConv为计算块。
此外,作者简化了下采样模块(原本的是CSP-DOWN模块,现在是Size为
2
2
2,Stride为
1
1
1的池化层 + Size为
3
3
3,Stride为
2
2
2的卷积层),优化了anchor-free检测头(解耦检测头,分离cls和reg分支)。PGI的辅助Loss,遵循YOLOv7的辅助头设置。
和其他从头训练的实时目标检测器对比:
和在ImageNet预训练的目标检测器对比:
消融实验
GELAN模块组成的消融实验:Rep块、Dark块和CSP块都有不错的效果,其中CSP块表现最为出色,不仅减少了参数量和计算量,还提高了 0.7 % 0.7\% 0.7%的AP。所以作者选择CSPELAN作为YOLOv9中GELAN的组成单元。
ELAN和CSP深度的消融实验:ELAN深度从 1 1 1到 2 2 2有巨大提升。当depth大于 2 2 2时,无论是无论是提升ELAN还是CSP深度,参数计算量和A都呈线性状,意味着GELAN对深度不敏感,可自由组合。YOLOv9-{S, M, C}对应的ELAN和CSP深度为{{2, 3}, {2, 1}, {2, 1}}。
PGI,在辅助可逆分支,多级辅助信息上进行消融实验:从实验结果可以看出,PFH只对深层模型有效,而本文PGI可在不同组合下提升准确率。设计辅助可逆分支ICN,利用DHLC连接来获得多级可逆信息。多级辅助信息,使用FPN和PAN进行消融实验。
在不同模型大小上探索PGI和深度监督:PGI让辅助监督可以应用于浅层模型;
以YOLOv7为baseline的基础下,看各组件的作用,其中GELAN和PGI有全方面的提升。
不同backbone架构下使用随机权重进行前馈过程中得到特征图的可视化:随着层数的增加,所有架构的原始信息都在逐渐减少。
GELAN网络没使用PGI时,检测物体边界有点离散。YOLOv9(GELAN + PGI)的对比如下: