使用YOLOv9训练和测试自己的数据集

任务:检测舌头上的裂纹和齿痕

已经有了labelme标注的数据集,并且转为了coco格式

参考:

详细!正确!COCO数据集(.json)训练格式转换成YOLO格式(.txt)_coco数据集的train.txt-CSDN博客

coco数据集转yolo数据集(简单易懂)_coco转yolo-CSDN博客

【模型复现】自制数据集上复现刚发布的最新 yolov9 代码_yolov9复现-CSDN博客

数据集转换

首先将coco格式转为YOLO格式

参考:coco数据集转yolo数据集(简单易懂)_coco转yolo-CSDN博客

我自己备份一下

转换代码

#COCO 格式的数据集转化为 YOLO 格式的数据集
#--json_path 输入的json文件路径
#--save_path 保存的文件夹名字,默认为当前目录下的labels。import os
import json
from tqdm import tqdm
import argparseparser = argparse.ArgumentParser()
#这里根据自己的json文件位置,换成自己的就行
parser.add_argument('--json_path', default='D:/workSpace/pycharm/yolov5/MyTest/SAR_coco/annotations/instances_val2017.json',type=str, help="input: coco format(json)")
#这里设置.txt文件保存位置
parser.add_argument('--save_path', default='D:/workSpace/pycharm/yolov5/MyTest/SAR_coco/Lable/val2017', type=str, help="specify where to save the output dir of labels")
arg = parser.parse_args()def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = box[0] + box[2] / 2.0y = box[1] + box[3] / 2.0w = box[2]h = box[3]
#round函数确定(xmin, ymin, xmax, ymax)的小数位数x = round(x * dw, 6)w = round(w * dw, 6)y = round(y * dh, 6)h = round(h * dh, 6)return (x, y, w, h)if __name__ == '__main__':json_file =   arg.json_path # COCO Object Instance 类型的标注ana_txt_save_path = arg.save_path  # 保存的路径data = json.load(open(json_file, 'r'))if not os.path.exists(ana_txt_save_path):os.makedirs(ana_txt_save_path)id_map = {} # coco数据集的id不连续!重新映射一下再输出!with open(os.path.join(ana_txt_save_path, 'classes.txt'), 'w') as f:# 写入classes.txtfor i, category in enumerate(data['categories']):f.write(f"{category['name']}\n")id_map[category['id']] = i# print(id_map)#这里需要根据自己的需要,更改写入图像相对路径的文件位置。list_file = open(os.path.join(ana_txt_save_path, 'train2017.txt'), 'w')for img in tqdm(data['images']):filename = img["file_name"]img_width = img["width"]img_height = img["height"]img_id = img["id"]head, tail = os.path.splitext(filename)ana_txt_name = head + ".txt"  # 对应的txt名字,与jpg一致f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')for ann in data['annotations']:if ann['image_id'] == img_id:box = convert((img_width, img_height), ann["bbox"])f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))f_txt.close()#将图片的相对路径写入train2017或val2017的路径list_file.write('./images/train2017/%s.jpg\n' %(head))print("convert successful!")list_file.close()

 修改json和txt地址即可

转换完成打开相关文件,检查一下路径、文件名之类的有没有问题。

根目录/my_datasets/
├─train.txt
├─val.txt
|─test.txt # 这个没有也OK
├─images
│	├──train2017
│	│	├──xxx.jpg		
│	│	└──xxx.jpg		
│	└──val2017
│		├──xxx.jpg		
│		└──xxx.jpg
│	└──test2017
│		├──xxx.jpg		
│		└──xxx.jpg		
└──labels├──train2017│	├──xxx.txt	│	└──xxx.txt			|──val2017|	├──xxx.txt			|	└──xxx.txt			└──classes.txt

YOLOv9的复现

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

下载预训练文件:YOLOv9-C

 点这儿下载的是yolov9-c-converted.pt,点下面将yolov9-c.pt下载到根目录即可。

 搭建虚拟环境

# 创建环境
conda create -n yolov9 python=3.8# 激活环境
conda activate yolov9 # torch 安装
# 本机 CUDA 为 11.8,故安装了符合要求的 pytorch==1.13,这里需要自行根据 CUDA 版本安装适配的 torch 版本
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117pip install Pillow==9.5.0
# pip 包
cd yolov9
pip install -r requirements.txt

 修改数据文件

在 yolov9/data 路径下新建 my_datasets.yaml 文件,以路径下的 coco.yaml 为标准进行参数配置,
修改 path 为数据存储路径
修改 names 为对应的标签名,编号名称要对应path: ./datasets  # dataset root dir
train: train.txt  
val: val.txt  
test: test.txt  # optional# Classes
names:0: chihen1: liewen22: liewen1

 修改模型配置文件

./models/detect/yolov9-c.yaml

--nc        类别数量改一下就行

 

 配置训练的超参数

我们使用的是train_dual.py,val_dual.py,detect_dual.py都有_dual,使用train.py的话

修改train_dual.py,当然更妥当的方式应该是重写这个py文件

--weights        yolov9-c.pt 预训练权重文件的地址

--cfg       yolov9-c.yaml 文件的地址

--data        my_datasets.yaml文件的地址

--hyp        data/hyps/hyp.scratch-high.yaml   这个文件夹里面应该只有一个high没有low

--epochs

--batch-size

--imgsz

--dedvice        看你有几张卡,改一下

--optimizer        

 开始训练

终端输入命令

单卡训练指令python train_dual.py多卡训练指令python -m torch.distributed.launch --nproc_per_node 8 train_dual.py

 看到下述界面,即成功开始训练!!!

 训练完

 exp里面会有训练的一些数据,exp15为例

配置验证超参数

修改val_dual.py

类似train_ dual.py,额外多一个

task:验证数据集选择,如val,test

开始验证

单卡验证指令python val_dual.py多卡验证指令python -m torch.distributed.launch --nproc_per_node 8 val_dual.py

验证成功

配置推理超参数

修改detect_dual.py

 开始推理

单卡推理指令python detect_dual.py多卡推理指令python -m torch.distributed.launch --nproc_per_node 8 detect.py

只要把需要推理的图片放在./datasets/images/test2017文件夹中,运行推理命令即可

推理的结果保存在runs\detect\exp 

可以查看评估一下

一些问题

遇到问题首先去官方issues里面查查

  我的问题都能在这里解决

Q1

Q2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—服务器raid常见故障表现原因解决方案

RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对于单独的物理硬…

2023年全国青少年人工智能创新挑战赛真题

为了大家备考2024年第七届全国青少年人工智能创新挑战赛,今天分享2023年第6届全国青少年人工智能创新挑战赛C信息学专项真题,图形化编程及Python编程基本大同小异,参考6547网的Python及图形化编程题库。 一、单项选择题(共 15 题,每题 2 分,共…

jpom linux发布前端 ruoyi

前置条件 辅助安装 一键安装maven curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 一键安装node curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 服务下载启动 下载安装 安装服务 安装服…

vscode中使用conda虚拟环境

每一次配置环境,真的巨烦,网上的资料一堆还得一个个尝试,遂进行整理 1.准备安装好Anaconda 附带一篇测试教程,安装anaconda 2.准备安装vscode 安装地址:Visual Studio Code 3.创建Conda环境 搜索框搜索Anaconda…

位运算符——原码-反码-补码(重点 难点)【二进制在运算中的说明】

如果连二进制的知识还没搞懂, 那么计算机最基础的你都还没明白, 所以2进制对我们程序员来说, 是必会, 必学的知识 二进制在运算中的说明: 一. 二进制是逢2进位的进位制, 0,1是基本算符 二. 现代的电子计算机技术全部采用的是二进制, 因为它只使用0, 1两个数字符号,非常简单…

Nginx添加访问密码

安装密码生成工具 yum -y install httpd-tools生成用户和密码文件 [rootlocalhost nginx]# htpasswd -c /usr/local/nginx/password web01 New password: 这里输入密码 Re-type new password: 再次输入密码 Adding password for user web01参数说明: web01 是自定…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及液态空气储能与综合需求响应的综合能源系统低碳经济调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

HTML静态网页成品作业(HTML+CSS)——游戏阴阳师介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

Android ANR简介

ANR(App not respond)是Android定义的一种稳定性问题类型;系统发出关键消息,同时发出此消息的超时消息。处理逻辑有两种情况: 关键消息被执行,超时消息被清除;ANR不会发生超时消息被执行&#x…

JAVASE2

封装的步骤: 1、所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问 2、对外提供简单入口:比如说被private修饰的成员变量,在其他类中只能通过getXxx/setXxx方法…

网络风暴:揭秘DDoS攻击的幕后黑手

在数字化时代的浪潮中,网络攻击已成为一种新型的战争手段。其中,分布式拒绝服务攻击(DDoS)以其强大的破坏力和隐蔽性,成为网络安全领域的一大挑战。DDoS攻击通过发动海量的恶意流量,如同狂风暴雨般席卷目标…

如何设置远程桌面连接?

远程桌面连接是一种方便快捷的远程访问工具,可以帮助用户在不同地区间快速组建局域网,解决复杂网络环境下的远程连接问题。本文将针对使用远程桌面连接的操作步骤进行详细介绍,以帮助大家快速上手。 步骤一:下载并安装远程桌面连接…

芯片丝印反查

芯片丝印反查网 - IC芯片丝印,IC芯片代码,IC芯片印字,IC芯片顶标,SMD code,marking code,top mark芯查查-电子信息产业数据引擎 ic/芯片丝印反查网-芯查查

各种情况下的线缆大小选择

开口线鼻子和导线对应大小 开口铜鼻子对应线径大小 变压器容量对应高压侧电流大小 开关电流线缆功率对照表 家庭/工业最常用电线铜线电流承载功率 电工常用名词对应符号 导线面积承载的安全载流量及允许负荷对照表 漏电保护器选择参考表 电动机功率换算电流 电机功…

Python正则模块re方法介绍

Python 的 re 模块提供了多种方法来处理正则表达式。以下是一些常用的方法及其功能介绍: 1. re.match() 在字符串的开始位置进行匹配。 import repattern r\d string "123abc456"match re.match(pattern, string) if match:print(f"匹配的字符…

代码随想录——最大二叉树(Leetcode654)

题目链接 递归 二叉树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode rig…

.NET 轻量级、高效任务调度器:ScheduleTask

前言 至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简易的任务调度,如果只是到分钟级别的粒…

全能集成开发平台Team·IDE

三甲医院的床位太难等了。反正也是小手术,老苏周五在附近找了家二甲医院,幸运的是,门诊迅速为我开具了入院证。周六早晨就接受了手术,周日挂了一天水,周一下午就出院了。准备在家先休息两天。 2~4 周之后把支架取出来…

阿里云海外视频安全的DRM加密

随着科技的进步,视频以直播或录播的形式陆续开展海外市场,从而也衍生出内容安全的问题,阿里云在这方面提供了完善的内容安全保护机制,适用于不同的场景,如在视频安全提供DRM加 由图可以了解到阿里云保护直播安全的方法…

Java的 File类

Java的 File类 File类:相关方法:构造方法:创建文件/目录:重命名:判断:获取:删除: 路径:相关操作:操作1:目录存在:一层级的目录不存在:…