当前位置:   article > 正文

YOLOv9论文解析与VisDrone无人机目标检测训练_yolov9 visdrone

yolov9 visdrone


YOLOv9 论文解析

论文标题:YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
论文地址:YOLOv9
代码:YOLOv9官方代码

下面,我们来看看YOLOv9模型!

一、文章摘要

作者从数据逐层输入进行特征提取和空间变换时,会丢失大量信息的角度作为切入点,因此从信息瓶颈(information bottleneck)和可逆函数(reversible functions)作为出发点,提出PGI(Programmable gradient information)和GELAN结构(Generalized Efficient Layer Aggregation Network)。其中PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权重;与基于深度卷积开发的最先进方法相比,GELAN仅使用传统的卷积算子来实现更好的参数利用率,它结合了CSPNet和ELAN网络架构,综合考虑了模型轻量化、推理速度和准确性的问题。
从作者的论文中可以看出,在MS COCO2017的数据集,从头开始训练的模型可以获得比使用大型数据集预先训练的现有模型更好的结果。下面我们看看作者提供的与实时目标检测模型的对比
在这里插入图片描述

二、信息瓶颈(Information Bottleneck)和可逆函数(Reversible Functions)

1、信息瓶颈Information Bottleneck
根据信息瓶颈原则,当数据经过转换时,数据可能会出现损失。这就好比漏斗效应,指的是信息在传递过程中会呈现一种由上而下的衰减趋势。
在这里插入图片描述
从上述公式中可以看出,随着网络深度的加深,原始数据的信息将有可能丢失,也就是更深层次的神经网络的输出不太能够保留有关预测目标的完整信息,这将使网络训练过程中使用不完整的信息成为可能,导致梯度不可靠,收敛差

2、可逆函数Reversible Functions
在论文中,作者设定一个函数r有可逆变换函数v,原始数据X的信息没有丢失,可通过下列公式表示:
在这里插入图片描述
可见,当网络的变换函数由可逆函数组成时,能保留相对完整的数据信息,从而可以得到更可靠的梯度来更新模型。

三、方法论和思想:PGI(Programmable gradient information)和GELAN(Generalized Efficient Layer Aggregation Network)

1、PGI(Programmable Gradient Information)可编程的梯度信息
PGI,主要由三个部分组成:(1)main branch主分支:用于推理的体系结构,(2)Auxiliary Reversable branch辅助可逆分支:生成可靠的梯度,为后向传输提供主分支;(3)Multi-level Auxiliary branch多级辅助信息分支:控制主分支学习可规划的语义信息多层次
在这里插入图片描述
(1)main branch主分支:用于推理的体系结构
在推理阶段,PGI的过程仅使用了主分支结构,而不需要而外的推理时间;
(2)Auxiliary Reversable branch辅助可逆分支
针对主分支深层特征存在可能丢失重要信息的信息瓶颈问题,而导致的网络可能从不完整的前馈特征中找到与目标相关性较低的虚假相关性。作者提出了一个辅助可逆分支来辅助监督生成可靠的梯度并更新网络参数。辅助可逆分支可以接收到可靠的梯度信息,这些梯度信息将驱动参数学习,有助于提取正确且重要的信息,从而使主分支能够获得对目标任务更有效的特征。此外,可逆架构在浅层网络上的表现通常不如一般网络,因为复杂任务需要更深层次的网络转换。作者提出的方法并不强制主分支保留完整的原始信息,而是通过辅助监督机制生成有用的梯度来更新它。这种设计的优势在于,所提出的方法能够在不显著增加推理成本的情况下,提高模型的性能和准确性。同时,通过引入可逆分支,我们还能够更好地理解和控制模型的学习过程,从而更有效地指导模型的训练和优化。
(3)Multi-level Auxiliary branch多级辅助信息分支
对于目标检测任务,可以使用不同的特征金字塔来执行不同的任务,例如,它们可以一起检测不同大小的对象。因此,当连接到深度监督分支时,浅层特征将被引导去学习对小物体检测所需的特征,此时系统会将其他大小物体的位置视为背景。然而,这种做法会导致深层特征金字塔丢失很多用于预测目标物体所需的信息。针对这个问题,作者提出了多级辅助信息的概念,其在辅助监督和主分支的特征金字塔层次结构层之间插入一个集成网络,然后使用该网络来组合来自不同预测头的返回梯度,如图3(d)所示。多级辅助信息随后将聚合包含所有目标物体的梯度信息,并将其传递给主分支以更新参数。此时,主分支的特征金字塔层次结构的特性将不会被某些特定物体的信息所主导,可以缓解深度监督中的信息丢失问题。

2、GELAN(Generalized Efficient Layer Aggregation Network)通用高效层聚合网络
作者在ELAN和CSPNet网络基础上,设计了GELAN,同时也考虑了参数的数量、计算复杂性、准确性和推理速度。其模型结构图和不同网络架构下随机初始权值输出特征图的可视化结果如下:
在这里插入图片描述
在这里插入图片描述
从实验结果上看,GELAN在不同的计算块和深度设置下具有强大而稳定的性能。它确实可以广泛扩展为适用于各种推理设备的模型。
在这里插入图片描述

这里给出YOLOv9模型,针对实验细节问题和具体模型设计,有兴趣的同学再去细看原论文作者相关参数的设定,这里就不展开阐述。请添加图片描述

在VisDrone2019数据集的训练YOLOv9

一、VisDrone2019数据集

1、首先,先下载YOLOv9代码,这里就不过多展示;
2、针对VisDrone2019数据集的介绍,这里就不多阐述,这边给出VisDrone数据集下载链接: VisDrone2019 ;或者作者已经整理好相应百度网盘链接: VisDrone 提取码:htmg
3、将VisDrone.yaml配置文件放置到 yolov9-main/data 目录下,这里给出VisDrone.yaml文件配置:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/VisDrone  # dataset root dir  这里给出数据集的根目录
train: ../VisDrone/train\images  # train images (relative to 'path')  6471 images 训练数据集的路径
val: ..VisDrone\val\images  # val images (relative to 'path')  548 images  验证数据集的路径
#val: /root/datasets/VisDrone/VisDrone2019-DET-val/images  # val images (relative to 'path')  548 images  
test: E:\cbd\ICCV\datasets\VisDrone\test\images  # test images (optional)  1610 images  测试数据集的路径

# Number of Classes
nc: 10
# Classes
names: [
    'pedestrian',
    'people',
    'bicycle',
    'car',
    'van',
    'truck',
    'tricycle',
    'awning-tricycle',
    'bus',
    'motor'
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

注意:这里训练、验证和测试记得修改为自己数据集的路径!

二、实验的配置参数与训练

从原作者代码的README文件得知,训练yolov9模型的训练文件从train_dual.py入手。本文训练VisDrone数据集,借助预训练模型yolov9-c.pt,预训练模型的下载地址如下:yolov9-c.pt,将其模型放到根目录下即可
上述准备做好之后,基本上就可以训练了:

# train yolov9 models
python train_dual.py --workers 8 --device 0 --batch-size 4 --data data/VisDrone.yaml --cfg models/detect/yolov9-c.yaml --weights yolov9-c.pt --name yolov9-c-visdrone --hyp data/hyps/hyp.scratch-high.yaml --min-items 0 --epochs 200 --close-mosaic 15
  • 1
  • 2

对于一些配置参数的设定,根据自己的需求来哦!
在这里插入图片描述
如果训练过程中由于后台开启进程过多使得内存分配不够问题,导致训练中断,因此我们要从当前训练epoch继续训练:

python train_dual.py --workers 8 --device 0 --resume runs/train/yolov9-c-visdrone/weights/last.pt
  • 1

训练结果:
在这里插入图片描述

评估阶段:

python val.py --task test --data data/Visdrone.yaml --img 640 --batch 4 --conf 0.001 --iou 0.7 --device 0 --weights ./runs/train/yolov9-c-visdrone/weights/best.pt --save-json --name yolov9_c_visdrone_640_val
  • 1

总结

YOLOv9这篇文章的提出,其核心点在于从信息瓶颈和可逆函数概念入手,提出PGI和GELAN结构,解决解决了信息瓶颈问题和深度监督机制不适合轻量级神经网络的问题;与YOLOv8相比,其出色的设计使深度模型的参数数量减少了49%,计算量减少了43%,在MS COCO数据集上仍有0.6%的AP改进。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/991610
推荐阅读
相关标签
  

闽ICP备14008679号