YOLOV9是今年(2024)发表的一篇文章,主要是基于YOLOV7进行改进,改进点主要是使用了一种叫做可编程梯度信息的辅助训练方法以及将YOLOV7中ELAN模块一般化,提出了一种计算效率更高的广义ELAN,即GELAN。
虽然yolov9是基于yolov7进行改进的,但是在backbone处的重参数方法跟yolov7有些不同,yolov7的重参数主要用在head处,而yolov9则是将重参数、CSP和ELAN3种方法结合在一起搞成了一种算子运用在backbone中,接下去让我们来看看yolov9主要的创新点吧。
- 可编程梯度信息
这个说的很高大上,其实就是一种变相的辅助训练,用于跳过FPN将梯度更快回传到backbone的各个层上。因为作者认为梯度最初从非常深层的网络传递出来后不久,就丢失了许多达成目标所需的信息,而这种损失随着网络的加深会不断累积。为了验证这一推断,作者对具有初始权重的不同架构的深度网络进行前馈处理。下图 对此进行了可视化说明。显然,PlainNet 在深层丢失了很多进行对象检测所需的重要信息。至于 ResNet、CSPNet 和 GELAN 能够保留的重要信息比例,确实与训练后能够获得的准确性正相关。研究者进一步设计了基于可逆网络的方法来解决上述问题的原因。
上图就是可编程梯度信息分支,可以看到它就是深度辅助监督的一种变体,训练完成后在实际推理时是去掉的,可以做到无损涨点。当然我从实际运用角度出发分析,这种结构应该是很消耗GPU计算资源的,相比前几个版本的YOLO,YOLOV9需要训练2个backbone。
-
GELAN 网络
此外,该研究还提出了一个新的网络架构 GELAN(如下图所示),具体而言,研究者把 CSPNet、 ELAN 这两种神经网络架构结合起来,从而设计出兼顾轻量级、推理速度和准确性的通用高效层聚合网络(generalized efficient layer aggregation network ,GELAN)。研究者将最初仅使用卷积层堆叠的 ELAN 的功能泛化到可以使用任何计算块的新架构。
ELAN是将vovnet和cspnet两种方法结合起来了,而GELA则是ELAN的一般形式,主要是将ELAN中的3x3卷积替换为了其他block,比如残差块、倒置残差块和稠密连接块等,这个方法我觉得是参照了YOLO-MS的思想去做的。