训练YOLOv9-S(注意:官方还没有提供YOLOv9-S的网络,我这是根据网络博客进行的步骤,按照0.33、0.50比例调整网络大小,参数量15.60M,计算量67.7GFLOPs)
孟孟单单 2024-06-24 08:37:02 阅读 59
文章目录
1、自己动手制造一个YOLOv9-S网络结构1.1 改前改后的网络结构(参数量、计算量)对比1.2 一些发现,YOLOv9代码打印的参数量计算量和Github上提供的并不一致,甚至yolov9-c.yaml代码打印出来是Github的两倍1.3 开始创造YOLOv9-S 2、开始训练3、验证3.1 修改val.py中的以下参数3.2 命令验证
1、自己动手制造一个YOLOv9-S网络结构
重点参考的链接:YOLOv9改进 | 提供YOLOv9全系列支持YOLOv9n、YOLOv9s、V9m、V9l、V9x的修改方式(全网独家首发)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
在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 # --------------------------添加的代码--------------------------- #
还是在models/yolo.py
中,定位到elif m is CBLinear
,然后做如下更改
c2 = [int(x * gw) for x in args[0]]
修改模型配置文件:直接拷贝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'
解决方案:
验证结果:
上一篇: Ubuntu 24.04 apt 更换国内镜像站源
下一篇: 计算机网络——高效校园网络设计与实现(华为模拟器eNSP实现)
本文标签
计算量67.7GFLOPs) 按照0.33、0.50比例调整网络大小 参数量15.60M 训练YOLOv9-S(注意:官方还没有提供YOLOv9-S的网络 我这是根据网络博客进行的步骤
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。