当前位置: 首页 > news >正文

训练YOLOv9-S(注意:官方还没有提供YOLOv9-S的网络,我这是根据网络博客进行的步骤,按照0.33、0.50比例调整网络大小,参数量15.60M,计算量67.7GFLOPs)

文章目录

  • 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

  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'

在这里插入图片描述

解决方案:

在这里插入图片描述

验证结果:

在这里插入图片描述

http://www.lryc.cn/news/352510.html

相关文章:

  • 视觉检测实战项目——九点标定
  • android git提交代码命令以及常见命令的使用
  • 类图的六大关系
  • 家政项目day2 需求分析(模拟入职后熟悉业务流程)
  • 面试总结之:socket线路切换
  • 002 递归评论 mongodb websocket消息推送
  • 高开高走的续作,可不止《庆余年2》
  • uniapp android使用uni.chooseLocation,app云打包后,定位地址列表一直在加载中
  • 详解http协议
  • 台湾省军事演习路径规划:A*算法在复杂地形中的应用
  • OpenHarmony鸿蒙软总线使用mbedtls数据加密详解
  • 【JavaEE】Servlet
  • SpringBoot——整合Redis
  • 2024全新Langchain大模型AI应用与多智能体实战开发
  • 【JavaEE 初阶(十)】JVM
  • 【Flutter】AspectRatio组件Card组件按钮组件Wrap组件
  • 【IDEA软件应用篇】IDEA基础开发设置和开发快捷键
  • 机器学习--数学部分笔记
  • 基于springboot的在线宠物用品交易网站源码数据库
  • 【Pytorch】13.搭建完整的CIFAR10模型
  • 护目镜佩戴自动识别预警摄像机
  • keep-alive的使用
  • 【Linux】中的常见的重要指令(中)
  • 营收净利双降、股东减持,大降价也救不了良品铺子
  • 【设计模式】设计模式的分类
  • TCP/UDP的连接机制
  • 供应链金融模式学习资料
  • 代码随想录-算法训练营day50【动态规划12:最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费、股票问题总结】
  • Dilworth 定理
  • BUUCTF---web---[BJDCTF2020]ZJCTF,不过如此