1、自己动手制造一个YOLOv9-S网络结构

1.1 改前改后的网络结构(参数量、计算量)对比

改前的yolov9.yaml参数量58.35M,计算量267.1GFLOPs

改后的yolov9-S.yaml参数量15.60M,计算量67.7GFLOPs

  • 这是修改调用的yolo.py测试的yolov9.yaml的打印网络情况,包含参数量、计算量

在这里插入图片描述

  • 这是修改调用的yolo.py测试的yolov9-S-lwd.yaml的打印网络情况,包含参数量、计算量

在这里插入图片描述

1.2 一些发现,YOLOv9代码打印的参数量计算量和Github上提供的并不一致,甚至yolov9-c.yaml代码打印出来是Github的两倍

在这里插入图片描述

1.3 开始创造YOLOv9-S

  1. models/yolo.py文件中,Ctrl+F定位到args = [c1, c2, *args[1:]],然后再如下位置添加代码

在这里插入图片描述

            # --------------------------添加的代码--------------------------- #
            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       
            # --------------------------添加的代码--------------------------- #
  1. 还是在models/yolo.py中,定位到elif m is CBLinear,然后做如下更改

在这里插入图片描述

            c2 = [int(x * gw) for x in args[0]]
  1. 修改模型配置文件:直接拷贝models/detect/yolov9.yaml然后重命名为yolov9-S.yaml,并做以下更改

在这里插入图片描述

2、开始训练

根据需求修改train.py中的以下参数:

在这里插入图片描述

需要注意的是,这里只能写成这样,因为官方只给了这一个超参数设置文件:

在这里插入图片描述

键入以下命令开始训练:

python train.py --name yolov9-S

在这里插入图片描述

报错了

在这里插入图片描述

⭐然后就根据这个博客yolov9训练自己的数据集+验证+报错修改里面参考的YOLOV9保姆级教程,在utils/loss_tal.py中进行了如下修改:

在这里插入图片描述

Okay!开始训练,坐等结果~

在这里插入图片描述

保姆级的大佬真的好啊,给我的回答很详细,贴上来!

在这里插入图片描述

3、验证

3.1 修改val.py中的以下参数

在这里插入图片描述

另外为了多显示几位精度,在val.py中进行如下更改:

在这里插入图片描述

3.2 命令验证

python val.py --name yolov9-S

报错:AttributeError: 'list' object has no attribute 'device'

在这里插入图片描述

解决方案:

在这里插入图片描述

验证结果:

在这里插入图片描述

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐