目标检测-YOLOv9简介

论文链接: YOLOv9: Learning What You Want to Learn Using Programmable Gradient

代码链接:GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information

YOLOv9是由Chien-Yao Wang、I-Hau Yeh和Hong-Yuan Mark Liao共同提出的新一代目标检测系统,它是YOLO(You Only Look Once)算法系列的最新版本。YOLO系列算法以其速度快和准确性高而闻名,在实时目标检测领域有着广泛的应用。YOLOv9在前代版本的基础上进行了显著的改进,旨在解决深度学习中信息丢失的问题,并提高模型在各种任务上的性能。

YOLOv9的核心创新

  1. 可编程梯度信息(PGI):YOLOv9引入了PGI,这是一种辅助监督框架,用于解决深度学习模型中信息丢失的问题。PGI通过辅助可逆分支生成可靠的梯度信息,这些信息用于网络权重的更新,从而提高模型在复杂任务上的性能。

  2. 通用高效层聚合网络(GELAN):YOLOv9提出了GELAN,这是一种新型轻量级网络架构,它基于梯度路径规划,优化了信息流动和参数利用,减少了计算资源的需求,同时保持或提高了检测精度。

  3. 信息瓶颈缓解:YOLOv9通过PGI和GELAN的结合,有效减少了数据在传输过程中的信息损失,使模型能够更准确地学习到目标任务所需的特征。

  4. 多级辅助信息:PGI还包括多级辅助信息,它整合了不同预测头的梯度信息,帮助主分支学习到更全面的语义信息,提高模型对各种目标的检测能力。

  5. 损失函数的创新:YOLOv9在损失函数方面进行了创新,包括多种IoU损失函数的改进和变体,如CIoU、DIoU等,以及融合了“Focus”思想的一系列新损失函数,这些损失函数针对特定的目标检测挑战进行优化。

YOLOv9的性能评估

根据论文中的实验结果,YOLOv9在MS COCO数据集上的表现超越了之前的YOLO系列版本以及其他一些实时目标检测器。YOLOv9在准确性、参数效率、计算复杂度和推理速度方面都取得了显著的提升,是一个在多个方面都具有竞争力的目标检测模型,特别适用于需要实时处理的应用场景。

YOLOv9网络结构

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)
  ]

  • 26
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值