YOLOV9训练集制作+Train+Val记录

一、YOLO数据集格式分布

        在YOLO中,数据集的分布如图,在dataset文件夹下有imags(图片)和labels(标签)。在images和labels文件夹下又分别存放三个文件夹,分别对应测试集、训练集、验证集:

        在images文件夹下面存放的是图片,在label文件夹下面存放的是TXT文件,每一个txt文件里面都是标注的信息。以下图为例,文件里面有三行,代表这张图片在标注的时候画了三个框。其中每一行数值代表意思是:类别、物体左上角坐标(x1,y1),右下角坐标(x2,y2)

二、数据集制作

        首先安装labelimg库,然后使用labelimg进行标注,标注好之后会生成xml文件(不详细叙述)。然后就是读取xml文件来获取标注的信息,再将这些信息存入txt文件中。

        把标注得到的xml文件放到一个文件夹中,比如要搞训练集(train)的就只把train的xml文件放到一个文件夹里,不要把val和test的放进来。。

        运行下面代码(路径修改为自己的),制作train、val、test的时候路径最好分开,避免弄混:

import os
import random
import xml.etree.ElementTree as ETimport numpy as npdef convert_annotation(xml_name, class_list, labels_folder):xml_path = os.path.join(XML_FOLDER, xml_name)print("xml_path:", xml_path)in_file = open(xml_path, encoding='utf-8')tree = ET.parse(in_file)root = tree.getroot()for SIZE in root.iter("size"):width = float(SIZE.find("width").text)height = float(SIZE.find("height").text)label_name = xml_name.split(".")[0]+".txt"label_path = os.path.join(labels_folder, label_name)if os.path.exists(label_path):os.remove(label_path)with open(label_path, "a", encoding="utf-8") as f:for obj in root.iter('object'):difficult = 0if obj.find('difficult') != None:difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in class_list or int(difficult) == 1:continuecls_id = classes_list.index(cls)xmlbox = obj.find('bndbox')x1, y1, x2, y2 = (float(xmlbox.find('xmin').text)/width, float(xmlbox.find('ymin').text)/height,float(xmlbox.find('xmax').text)/width, float(xmlbox.find('ymax').text)/height)print("cls:", cls_id)print("box:", x1, y1, x2, y2)f.write("%s %s %s %s %s\n"%(cls_id, x1, y1, x2, y2))if __name__ == "__main__":classes_list = ["point", "circle"]  # 对应类别名称XML_FOLDER = r"C:/Users/HJ/Desktop/demo/voc_format_file/xml"Labels_FOLDER = r"C:/Users/HJ/Desktop/demo/voc_format_file/labels"random.seed(0)if " " in os.path.abspath(XML_FOLDER):raise ValueError("数据集存放的文件夹路径与图片名称中不可以存在空格,否则会影响正常的模型训练,请注意修改。")# 1.读取xml文件for xml_name in os.listdir(XML_FOLDER):if xml_name.endswith(".xml"):convert_annotation(xml_name, classes_list, Labels_FOLDER)

运行完之后会在生成对应的txt文件,将文件复制粘贴到yolov9的dataset文件夹的对应位置就OK了。

三、训练部分

YOLOV9代码地址:https://github.com/WongKinYiu/yolov9/tree/main

将代码克隆到本地之后,在github下滑页面会看到下载预训练模型,目前只有yolov9-c何yolov9-e可以下载,以yolov9-c为例:

        下载完预训练模型之后将预训练模型放到工程目录下(也就是yolov9下)。然后再data文件夹下创建一个data.yaml文件。yaml文件里面分别是训练数据路径、类别数量、类别名称(类别名称要和标注时的顺序一致)

弄完之后,打开train.py文件,在train.py文件下面加上一行,防止报错。

os.environ['KMP_DUPLICATE_LIB_OK']='TRUE'

然后下滑找到参数配置文件,修改配置参数。参数介绍:           

                weights:下载的预训练模型

                cfg:对应模型的参数配置文件

                data:前面创建的data.yaml文件

显存比较小的可以把batchsize设小一点,这里设置1,电脑CPU不好的可以把wokers设为0

配置参数搞完之后,再修改一下代码。打开utils文件夹下面的loss_tal.py文件,修改如下参数,不修改运行会报错。修改完之后就可以直接运行train.py文件了。

四、验证部分

训练完之后模型以及训练的其他输出结果文件会保存在runs/weights里。打开val.py文件,

在import os后面加上

os.environ['KMP_DUPLICATE_LIB_OK']='TRUE'

然后开始修改配置参数:

修改完之后直接运行会报错,代码有个小bug需要修改。打开utils文件夹下的general.py文件第903行修改。然后就可以直接运行val.py文件了

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

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

相关文章

使用postman测试若依其他业务接口API—3

请求方式 如上,使用Get请求来获取练习题库中的所有习题数据。 请求地址 在请求路径栏输入请求地址,以下图为例: 参数体与鉴权 在Parms键入所需参数,其中key为键,value为键的值:如下图所示: 认证成功与失…

持续集成(CICD)- gogs仓库的部署和使用

文章目录 一、gogs的介绍二、部署gog仓库三、首次启动gogs四、登录五、创建一个非空仓库六、从仓库拉取代码到本地七、把本地编辑的代码上传到仓库 一、gogs的介绍 Gogs作为一个轻量级、易于部署和使用的自托管Git服务,为小型团队和个人开发者提供了一个简单而强大…

【AIGC】如何提高Prompt准确度

前言 随着人工智能的迅猛进展,AIGC(通用人工智能聊天工具)已成为多个行业中不可或缺的自然语言处理技术。Prompt作为AIGC系统的一项关键功能,在工具的有效运作中发挥了举足轻重的作用。本篇文章将深入探讨Prompt与AIGC之间的紧密…

python笔记_程序流程控制2

C&#xff0c;循环控制 1&#xff0c;for循环 功能&#xff1a;让代码循环运行 语法&#xff1a; for <变量> in <范围、序列>&#xff1a; <循环操作语句> 例 nums &#xff08;1,2,3,4&#xff09; <class list> for i in nums&#xff1a; print&…

Java中文件的相关知识及文件IO操作

在我们日常生活中&#xff0c;会把许多东西都称之为文件。比如&#xff0c;一份纸质报告&#xff0c;或u盘中的一些文档&#xff0c;都会把它们称为文件。那么&#xff0c;这里说的文件是以操作系统的角度出发的。在操作系统中&#xff0c;会把许多硬件设备和软件资源都抽象成“…

机器学习:主成分分析笔记

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种无监督的机器学习算法&#xff0c;通常用于高维数据的降维、提取主要特征、数据降噪和可视化。PCA的基本思想是将原始数据的多个变量转换为少数几个相互独立的变量&#xff08;即主成分&a…

shadertoy 游戏《来自星尘》摇杆复刻

正确的做法应该是上 noise 而不是叠加 sin 波&#xff0c;不过如果不想麻烦的话叠波还是一个不错的选择&#xff1a;整体效果如下&#xff0c;已经非常形似 直接上链接&#xff1a;Shader - Shadertoy BETA float radiusScale 0.9; float variation(vec2 v1, vec2 v2, float …

传感器---触摸传感器

一、模块选型概述 芯片型号&#xff1a;TTP223B 供电电压&#xff1a;3-5V 控制接口&#xff1a;共三个引脚&#xff08;GND、VCC、SIG&#xff09;&#xff0c;GND为地&#xff0c;VCC为供电电源&#xff0c;SIG为数字信号输出脚&#xff1b; PCB尺寸&#xff1a;24 x 24 mm 触…

Linux中服务端开发

1 创建socket,返回一个文件描述符lfd---socket(); 2 将lfd和IP&#xff0c;PROT进行绑定---bind(); 3 将lfd由主动变成被动监听---listen(); 4 接收一个新的连接&#xff0c;得到一个的文件描述符cfd--accept() --该文件描述符用于与客户端通信 5 while(1) { 接受数据&a…

网络安全: Kali Linux 使用 docker-compose 部署 openvas

目录 一、实验 1.环境 2.Kali Linux 安装docker与docker-compose 3.Kali Linux 使用docker-compose方式部署 openvas 4. KaliLinux 使用openvas 二、问题 1. 信息安全漏洞库 2.信息安全漏洞共享平台 3.Windows 更新指南与查询 4.CVE 查询 5.docker-compose 如何修改o…

前后端分离项目Docker部署指南(上)

目录 前言 一.搭建局域网 1.搭建net-ry局域网&#xff0c;用于部署若依项目 2.注意点 二.安装redis 创建目录 将容器进行挂载 ​编辑 测试是否安装成功 ​编辑 三. 安装MySQL 创建文件夹 上传配置文件并且修改 .启动MySQL容器服务 充许远程连接 四.部署后端 使用…

LLVM clang_tokenize 的示例

1&#xff0c; 环境搭建 如同上篇 git clong llvm-project git checkout llmvorg-3.4.0 # or llvmorg-18.1.rc /bin/bash ./confiure --prefix....... # or cmake Debug make -j32 make -j install 2&#xff0c; 示例代码 Makefile&#xff1a;如同上篇 LLVM_CON…

NOIP 2010普及组初赛试题及解析

NOIP 2010普及组初赛试题及解析 一. 单项选择题 &#xff08;共20题&#xff0c;每题1.5分&#xff0c;共计30分。每题有且仅有一个正确答案.&#xff09;。二. 问题求解&#xff08;共2题&#xff0c;每题5分&#xff0c;共计10分&#xff09;三. 阅读程序写结果&#xff08;共…

基于YOLOv8深度学习的农作物幼苗与杂草检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

kafka启动命令、查看topic命令、查看消息内容命令

kafka启动命令 cd /opt/kafka/kafka_2.12-3.5.1/bin ./kafka-server-start.sh ../config/server.properties Windows环境下用kafka Tool 连不上虚拟机的broker报了unable to connect broker 0&#xff0c; 但是zookeeper可以连接上 server.properties的listeners改为listene…

006-CSS-常见问题汇总

常见问题汇总 1、伪元素与伪类2、偏门但好用的样式3、文字溢出三个点展示4、空白折叠问题5、文字的垂直居中6、 Vue项目中 在父组件中修改子组件样式7、BFC 概念7.1、兄弟元素外边距合并7.2、父子元素外边距塌陷 8、box-sizing8.1、box-sizing: border-box8.2、box-sizing: con…

Vue.js 深度解析:nextTick 原理与应用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

英特尔/ARM/国产化EMS储能控制器解决方案

新型储能是建设新型电⼒系统、推动能源绿⾊低碳转型的重要装备基础和关键⽀撑技术&#xff0c;是实现碳达峰、碳中和⽬标的重要⽀撑。说到储能&#xff0c;大众首先想到的就是电池&#xff0c;其好坏关系到能量转换效率、系统寿命和安全等重要方面&#xff0c;但储能要想作为一…

三、Distributed DataParallel分布式数据并行原理与应用

帮up宣传一下&#xff0c;优质up值得信赖&#xff01; B站UP&#xff1a;你可是处女座啊 文章目录 原理一、 DDP二、基本概念三、分布式训练中的通信 实战初始化进程组当前 进程 到底使用哪些数据&#xff1f;模型处理启动改造 loss 打印改造准确率改造数据划分训练前数据打乱…

网络编程 24/3/4 作业

1、广播 发送端 #include <myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//设置当前套接字允许广播属性int broadcast1;if(setsockopt(sfd,SOL_SOCKET…