赞
踩
大家好,本文给大家带来的是2024年2月21日全新发布的SOTA模型YOLOv9的补全教程(算是一种补全吧我个人认为),了解V7的读者都知道V7系列是不支持模型深度和宽度的修改的也就是没有办法像YOLOv8那样有多个版本(例如:V9n、V9s、V9m、V9l、V9x这样),所以我也是在YOLOv9最新版本的基础上给大家把这个共功能添加上了(修改模型的深度和宽度从而产生达到不同版本的效果),本文的内容均为我个人整理和撰写,创作不易,大家可以帮忙点赞评论支持一下!
目录
在开始之前大家肯定要学会训练自己的YOLOv9模型(比较特殊)所以我这里给大家总结了教程,大家有需要的可以点击下面的链接进行跳转到我另一篇的文章里(文章里详细介绍了如何训练、验证、导出、推理等功能)。
YOLOv9已经开源在Github上了,地址如下->
官方论文地址: 官方论文地址点击即可跳转
官方代码地址: 官方代码地址点击即可跳转
下面给大家添加上教程,修改教程很简单大家看着修改即可。
首先我们下载完YOLOv9的官方代码之后,我们找到如下的文件'models/yolo.py'文件,在其中找到'def parse_model(d, ch): # model_dict, input_channels(3)'。
下面的代码就是红框内的代码大家复制即可,省的自己可能打错字!
-
- if m in (RepNCSPELAN4,):
- args[1] = make_divisible(args[1] * gw, 8)
- args[2] = make_divisible(args[2] * gw, 8)
- args[3] = max(round(args[3] * gd), 1) if n > 1 else n
同样还是同一个文件我们往下翻一下找到'elif m is CBLinear:'然后按照我给的图片内修改即可,修改后的代码我以及提供了大家复制替换下即可。
c2 = [int(x * gw) for x in args[0]]
修改完上面之后我们可以找到我们的模型配置文件进行修改了,我这里以'models/detect/gelan.yaml'为例。进行修改,
修改后的yaml文件提供给大家!
- # YOLOv9
-
- # parameters
- nc: 80 # number of classes
- depth_multiple: 0.33 # model depth multiple
- width_multiple: 0.25 # layer channel multiple
- #activation: nn.LeakyReLU(0.1)
- #activation: nn.ReLU()
-
- # anchors
- anchors: 3
-
- # gelan backbone
- backbone:
- [
- # conv down
- [-1, 1, Conv, [64, 3, 2]], # 0-P1/2
-
- # conv down
- [-1, 1, Conv, [128, 3, 2]], # 1-P2/4
-
- # elan-1 block
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]], # 2
-
- # avg-conv down
- [-1, 1, Conv, [256, 3, 2]], # 3-P3/8
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]], # 4
-
- # avg-conv down
- [-1, 1, Conv, [512, 3, 2]], # 5-P4/16
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 6
-
- # avg-conv down
- [-1, 1, Conv, [512, 3, 2]], # 7-P5/32
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 8
- ]
-
- # gelan head
- head:
- [
- # elan-spp block
- [-1, 1, SPPELAN, [512, 256]], # 9
-
- # up-concat merge
- [-1, 1, nn.Upsample, [None, 2, 'nearest']],
- [[-1, 6], 1, Concat, [1]], # cat backbone P4
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 12
-
- # up-concat merge
- [-1, 1, nn.Upsample, [None, 2, 'nearest']],
- [[-1, 4], 1, Concat, [1]], # cat backbone P3
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]], # 15 (P3/8-small)
-
- # avg-conv-down merge
- [-1, 1, Conv, [256, 3, 2]],
- [[-1, 12], 1, Concat, [1]], # cat head P4
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 18 (P4/16-medium)
-
- # avg-conv-down merge
- [-1, 1, Conv, [512, 3, 2]],
- [[-1, 9], 1, Concat, [1]], # cat head P5
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 21 (P5/32-large)
-
- # detect
- [[15, 18, 21], 1, DDetect, [nc]], # Detect(P3, P4, P5)
- ]

到此就修改完了,此时我们的模型就支持修改深度和宽度系数了,修改的教程也很简单不知道为什么YOLOv7的作者不提供,所以这里我也是给其做了一个补全,其中修改一的修改方法主要是因为其yaml文件配置的参数都放到了args的位置所以不能直接插入到下面的判断里,所以大家注意不要修改错了!
上面我们提供了修改的教程,下面提供几个版本的yaml文件和运行截图供大家参考。
下面的两个参数是X版本对应的深度和宽度系数。
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.25 # layer channel multiple
- # YOLOv9
-
- # parameters
- nc: 80 # number of classes
- depth_multiple: 0.33 # model depth multiple
- width_multiple: 0.25 # layer channel multiple
- #activation: nn.LeakyReLU(0.1)
- #activation: nn.ReLU()
-
- # anchors
- anchors: 3
-
- # gelan backbone
- backbone:
- [
- # conv down
- [-1, 1, Conv, [64, 3, 2]], # 0-P1/2
-
- # conv down
- [-1, 1, Conv, [128, 3, 2]], # 1-P2/4
-
- # elan-1 block
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]], # 2
-
- # avg-conv down
- [-1, 1, Conv, [256, 3, 2]], # 3-P3/8
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]], # 4
-
- # avg-conv down
- [-1, 1, Conv, [512, 3, 2]], # 5-P4/16
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 6
-
- # avg-conv down
- [-1, 1, Conv, [512, 3, 2]], # 7-P5/32
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 8
- ]
-
- # gelan head
- head:
- [
- # elan-spp block
- [-1, 1, SPPELAN, [512, 256]], # 9
-
- # up-concat merge
- [-1, 1, nn.Upsample, [None, 2, 'nearest']],
- [[-1, 6], 1, Concat, [1]], # cat backbone P4
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 12
-
- # up-concat merge
- [-1, 1, nn.Upsample, [None, 2, 'nearest']],
- [[-1, 4], 1, Concat, [1]], # cat backbone P3
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]], # 15 (P3/8-small)
-
- # avg-conv-down merge
- [-1, 1, Conv, [256, 3, 2]],
- [[-1, 12], 1, Concat, [1]], # cat head P4
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 18 (P4/16-medium)
-
- # avg-conv-down merge
- [-1, 1, Conv, [512, 3, 2]],
- [[-1, 9], 1, Concat, [1]], # cat head P5
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 21 (P5/32-large)
-
- # detect
- [[15, 18, 21], 1, DDetect, [nc]], # Detect(P3, P4, P5)
- ]

下面的两个参数是X版本对应的深度和宽度系数。
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
- # YOLOv9
-
- # parameters
- nc: 80 # number of classes
- depth_multiple: 0.33 # model depth multiple
- width_multiple: 0.50 # layer channel multiple
- #activation: nn.LeakyReLU(0.1)
- #activation: nn.ReLU()
-
- # anchors
- anchors: 3
-
- # gelan backbone
- backbone:
- [
- # conv down
- [-1, 1, Conv, [64, 3, 2]], # 0-P1/2
-
- # conv down
- [-1, 1, Conv, [128, 3, 2]], # 1-P2/4
-
- # elan-1 block
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]], # 2
-
- # avg-conv down
- [-1, 1, Conv, [256, 3, 2]], # 3-P3/8
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]], # 4
-
- # avg-conv down
- [-1, 1, Conv, [512, 3, 2]], # 5-P4/16
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 6
-
- # avg-conv down
- [-1, 1, Conv, [512, 3, 2]], # 7-P5/32
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 8
- ]
-
- # gelan head
- head:
- [
- # elan-spp block
- [-1, 1, SPPELAN, [512, 256]], # 9
-
- # up-concat merge
- [-1, 1, nn.Upsample, [None, 2, 'nearest']],
- [[-1, 6], 1, Concat, [1]], # cat backbone P4
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 12
-
- # up-concat merge
- [-1, 1, nn.Upsample, [None, 2, 'nearest']],
- [[-1, 4], 1, Concat, [1]], # cat backbone P3
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]], # 15 (P3/8-small)
-
- # avg-conv-down merge
- [-1, 1, Conv, [256, 3, 2]],
- [[-1, 12], 1, Concat, [1]], # cat head P4
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 18 (P4/16-medium)
-
- # avg-conv-down merge
- [-1, 1, Conv, [512, 3, 2]],
- [[-1, 9], 1, Concat, [1]], # cat head P5
-
- # elan-2 block
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 21 (P5/32-large)
-
- # detect
- [[15, 18, 21], 1, DDetect, [nc]], # Detect(P3, P4, P5)
- ]

下面的两个参数是X版本对应的深度和宽度系数。
depth_multiple: 0.67 # model depth multiple
width_multiple: 0.75 # layer channel multiple
- # YOLOv5 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/312841推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。