在论文中,提出使用PGI(可编程梯度信息)
来解决信息瓶颈问题以及深度监督机制不适用于轻量级神经网络的问题。我们设计了GELAN(通用高效层聚合网络
),一种高效且轻量的神经网络。在目标检测方面,GELAN在不同的计算模块和深度设置下都有稳定的强大性能。它确实可以广泛扩展为适用于各种推理设备的模型。针对上述两个问题,PGI的引入使得轻量模型和深度模型都能在准确性上实现显著提升。结合PGI和GELAN设计的YOLOv9展现了强劲的竞争力。其卓越的设计使得深度模型相比于YOLOv8,参数数量减少了49%,计算量减少了43%,但在MS COCO数据集上仍有0.6%的AP(平均精度)提升。
简介
论文地址:https://arxiv.org/abs/2402.13616
代码地址:https://github.com/WongKinYiu/yolov9
摘要:
当今的深度学习方法侧重于如何设计最适合的目标函数,以使模型的预测结果尽可能接近真实情况。同时,还需要设计能够促进获取足够预测信息的适当架构。现有方法忽视了一个事实:当输入数据经过逐层的特征提取和空间转换时,大量信息会丢失。本文将深入探讨数据在深度网络中传输时数据丢失的重要问题,即信息瓶颈和可逆函数问题。我们提出了可编程梯度信息(PGI)
的概念,以应对深度网络要实现多个目标所需的各种变化。PGI可以为目标任务提供完整的输入信息以计算目标函数,从而获得可靠的梯度信息来更新网络权重。另外,我们还设计了一种新的轻量级网络架构——通用高效层聚合网络(GELAN)
,基于梯度路径规划。GELAN的架构证实了PGI在轻量级模型上取得了优越的结果。我们在基于MS COCO数据集的目标检测上验证了所提出的GELAN和PGI。结果表明,GELAN只使用传统的卷积运算符就比基于深度卷积开发的最先进方法实现了更好的参数利用率。PGI可以用于从轻量型到大型的各种模型。它可以用来获取完整的信息,使得从零开始训练的模型可以取得比使用大型数据集预训练的最先进模型更好的结果。
核心网络结构
YOLOv9网络结构配置文件:
# YOLOv9 # parameters nc: 80 # number of classes depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple #activation: nn.LeakyReLU(0.1) #activation: nn.ReLU() # anchors anchors: 3 # YOLOv9 backbone backbone: [ [-1, 1, Silence, []], # conv down [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 # conv down [-1, 1, Conv, [128, 3, 2]], # 2-P2/4 # elan-1 block [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]], # 3 # conv down [-1, 1, Conv, [256, 3, 2]], # 4-P3/8 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]], # 5 # conv down [-1, 1, Conv, [512, 3, 2]], # 6-P4/16 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 7 # conv down [-1, 1, Conv, [512, 3, 2]], # 8-P5/32 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 9 ] # YOLOv9 head head: [ # elan-spp block [-1, 1, SPPELAN, [512, 256]], # 10 # up-concat merge [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 7], 1, Concat, [1]], # cat backbone P4 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 13 # up-concat merge [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 5], 1, Concat, [1]], # cat backbone P3 # elan-2 block [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]], # 16 (P3/8-small) # conv-down merge [-1, 1, Conv, [256, 3, 2]], [[-1, 13], 1, Concat, [1]], # cat head P4 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 19 (P4/16-medium) # conv-down merge [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 22 (P5/32-large) # routing [5, 1, CBLinear, [[256]]], # 23 [7, 1, CBLinear, [[256, 512]]], # 24 [9, 1, CBLinear, [[256, 512, 512]]], # 25 # conv down [0, 1, Conv, [64, 3, 2]], # 26-P1/2 # conv down [-1, 1, Conv, [128, 3, 2]], # 27-P2/4 # elan-1 block [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]], # 28 # conv down fuse [-1, 1, Conv, [256, 3, 2]], # 29-P3/8 [[23, 24, 25, -1], 1, CBFuse, [[0, 0, 0]]], # 30 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]], # 31 # conv down fuse [-1, 1, Conv, [512, 3, 2]], # 32-P4/16 [[24, 25, -1], 1, CBFuse, [[1, 1]]], # 33 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 34 # conv down fuse [-1, 1, Conv, [512, 3, 2]], # 35-P5/32 [[25, -1], 1, CBFuse, [[2]]], # 36 # elan-2 block [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 37 # detect [[31, 34, 37, 16, 19, 22], 1, DualDDetect, [nc]], # DualDDetect(A3, A4, A5, P3, P4, P5) ]
性能对比
从对比曲线可以发现,无论是从参数到校和计算来那个上看,对比已有的SOTA模型,YOLOv9都还是有不小的优势的。
论文主要亮点:
- 从可逆函数的角度对现有的深度神经网络架构进行了理论分析,并通过这一过程成功解释了过去难以解释的许多现象。我们还基于这一分析设计了PGI和辅助可逆分支,并取得了出色的结果。
- 设计的PGI解决了深度监督只能用于极深神经网络架构的问题,因此允许新的轻量架构真正应用于日常生活中。
- 设计的GELAN仅使用传统卷积就比基于最先进技术的深度卷积设计实现了更高的参数利用率,同时展现了轻、快、准的巨大优势。
- 结合所提出的
PGI和GELAN
,YOLOv9在MS COCO数据集上的目标检测性能在各个方面大大超越了现有的实时目标检测器。