使用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 分,共…

vscode中使用conda虚拟环境

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

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

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

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

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

JAVASE2

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

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

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

如何设置远程桌面连接?

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

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

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

代码随想录——最大二叉树(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加 由图可以了解到阿里云保护直播安全的方法…

【软件设计师】程序语言

1.程序设计语言基本概念 1.1 低级语言与高级语言 低级语言:机器语言和汇编语言称为低级语言 机器语言指0.,1组成的机器指令序列 汇编语言指用符号表示指令的语言,如MOV AX,2 高级语言:从人类的逻辑角度出发&#xff0…

numpy-mkl的下载地址

不要使用pip3直接在终端安装,因为pip3默安装的是numpy,而不是numpymkl。 采用在第三方库中手动下载后,再安装的方式。 第三方库网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 如果不能进入就可以选择去git里面&#x…

(三)MobaXterm、VSCode、Pycharm ssh连接服务器并使用

背景:根据前两篇文章操作完成后, 手把手教学,一站式安装ubuntu及配置服务器-CSDN博客 手把手教学,一站式教你实现服务器(Ubuntu)Anaconda多用户共享-CSDN博客 课题组成员每人都有自己的帐号了&#xff0…

互联网政务应用安全管理规定:使用安全连接方式访问

前几日,由中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部等4部门联合制定的《互联网政务应用安全管理规定》(以下简称规定)发布了,规定定义了互联网政务应用,也对互联网政务应用…

Android数据缓存框架 - 内存数据载体从LiveData到StateFlow

引言:所有成功者的背后,都有一份艰苦的历程,不要只看到了人前的风光,而低估了他们背后所付出的努力。 随着flow到流行度越来越高,有开发者呼吁我使用flow,于是我就如你们所愿,新增了StateFlow作…

智能时代下,人机交互和虚拟现实的机遇和挑战

智能时代下,人机交互和虚拟现实的机遇和挑战

多态(C++)

多态(C) 本文如果有错误或者不足的地方,希望各位大佬多多指点。 【本文目录】 1.多态的概念2.多态的定义及实现3.抽象类4.多态的原理5.单继承和多继承的虚函数表 1.多态的概念 多态的概念就是:多种形态 多态就是可以有多种的形态。不同的身份去实现同一…