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.rhkb.cn/news/268629.html

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

相关文章

2023全球软件开发大会-上海站:探索技术前沿,共筑未来软件生态(附大会核心PPT下载)

随着信息技术的迅猛发展,全球软件开发大会(QCon)已成为软件行业最具影响力的年度盛会之一。2023年,QCon再次来到上海,汇聚了众多业界精英、技术领袖和开发者,共同探讨软件开发的最新趋势和实践。 一、大会…

Frontend - Boostrap 消息弹窗

目录 一、下载 (一)中文官网 (二)bootstrap v3 依赖 jQuery 插件 二、解压并安装 (一)解压 1. 压缩包解压 2. 简化文件 (二)安装 三、配置 (一)bas…

【重要公告】对BSV警报系统AS的释义

​​发表时间:2024年2月15日 由BSV区块链协会开发并管理的BSV警报系统(Alert System,以下简称“AS”)是BSV网络的重要组件。它是一个复杂的系统,主要职能是在BSV区块链网络内发布信息。这些信息通常与网络访问规则NAR相…

深入了解 JavaScript 混淆加密和环境检测

JavaScript混淆加密是一种通过修改代码结构和命名约定来增加代码的复杂性,使其难以被理解和逆向工程的技术。在这篇文章中,我们将深入探讨JS混淆加密的一些逻辑,并介绍如何通过环境检测来提高代码的安全性。我们将使用案例代码演示这些概念。…

osi模型,tcp/ip模型(名字由来+各层介绍+中间设备介绍)

目录 网络协议如何分层 引入 osi模型 tcp/ip模型 引入 命名由来 介绍 物理层 数据链路层 网络层 传输层 应用层 中间设备 网络协议如何分层 引入 我们已经知道了网络协议是层状结构,接下来就来了解了解下网络协议如何分层 常见的网络协议分层模型是OSI模型 和 …

C++之结构体以及通讯录管理系统

1,结构体基本概念 结构体属于自定义的数据概念,允许用户存储不同的数据类型 2,结构体的定义和使用 语法:struct 结构体名{ 结构体成员列表}; 通过结构体创建变量的方式有三种: 1,struct …

python+Django+Neo4j中医药知识图谱与智能问答平台

文章目录 项目地址基础准备正式运行 项目地址 https://github.com/ZhChessOvO/ZeLanChao_KGQA 基础准备 请确保您的电脑有以下环境:python3,neo4j 在安装目录下进入cmd,输入指令“pip install -r requirement.txt”,安装需要的python库 打…

【LeetCode】升级打怪之路 Day 12:单调队列

今日题目: 239. 滑动窗口最大值 | LeetCode 今天学习了单调队列这种特殊的数据结构,思路很新颖,值得学习。 Problem:单调队列 【必会】 与单调栈类似,单调队列也是一种特殊的数据结构,它相比与普通的 que…

Linux入门到入土

Linxu Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口&#xff09…

Onenote软件新建笔记本时报错:无法在以下位置新建笔记本

报错现象: 当在OneNote软件上,新建笔记本时: 然后,尝试重新登录微软账户,也不行,提示报错: 解决办法: 打开一个新的记事本,复制粘贴以下内容: C:\Users\Adm…

Windows上构建一个和Linux类似的Terminal

感谢大佬批评指正,现已更新 preview Target:致力打造最赏心悦目Window下的终端,同时能够很接近Linux的使用习惯 key word:windows终端美化 windows terminal windows powershell 类似Linux下的Window终端 Window也能用ll windows…

本地如何配置支付宝模拟支付场景并结合内网穿透实现公网环境调试开发?

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候,往往沙箱环境部署在本地,局限性大,在沙箱环境…

【java】final、finally和finalize的区别

例题: package com.overload;public class ExceptionTest {public static void main(String[] args) {int result test();System.out.println(result); //100}public static int test(){int i 100;try {return i;} finally {i;}} }结果为:100 造成结果…

计算机专业大学四年应该如何规划(Java方向)

计算机专业的学生,如何在大学四年内提高自己的竞争力,毕业之后直接进大厂工作? 以下将从大学四年计算机专业的学习规划、课程设置、能力提升、参考书籍等方面,为同学们提供一些建议和指导。 大一: 主攻技能学习并且达…

lv20 QT事件5

1 事件模型 2 事件处理 virtual void keyPressEvent(QKeyEvent *event) virtual void keyReleaseEvent(QKeyEvent *event) virtual void mouseDoubleClickEvent(QMouseEvent *event) virtual void mouseMoveEvent(QMouseEvent *event) virtual void mousePressEvent(QMou…

NACOS在Windows和Linux下的安装教程

目录 1、Windows安装 1.1、下载安装包 1.2、解压 1.3、端口配置 1.4、启动 1.5、访问 2、Linux安装 2.1、安装JDK 2.2、上传安装包 2.3、解压 2.4、端口配置 2.5、启动 3、Nacos的依赖 1、Windows安装 开发阶段采用单机安装即可。 1.1、下载安装包 在Nacos的Git…

C++ sort排序

sort函数接受两个迭代器作为参数&#xff0c;分别表示要排序的范围的起始和结束位置。 请注意&#xff0c;sort函数默认使用小于运算符&#xff08;<&#xff09;来比较元素的顺序&#xff0c;默认从小到大排。 在这里&#xff0c;使用str.begin()和str.end()来表示整个字符…

水豚鼠标助手 强大的鼠标美化工具

水豚鼠标助手 水豚鼠标助手是一款 鼠标换肤、屏幕画笔、放大镜、聚光灯、屏幕放大、倒计时功能的强大屏幕演示工具。 软件助手获取 水豚鼠标助手1.0.0 安装教程 第一步&#xff1a;下载后&#xff0c;双击软件安装包 第二步&#xff1a;Windows可能会出现提示弹窗&#xff…

前端同时传递文件数据+非文件数据,前后端解决方案

之前录制视频《文件上传组件》的时候有位观众提了个问题&#xff0c;如果我没有理解错的话&#xff0c;应该就是前后同时传递文件数据 非文件数据&#xff0c;前后端数据该如何接收&#xff0c;这里我给出我自己的解决方案 tip:下文在编写前端代码的时候&#xff0c;用到了这篇…

【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、仿函数1.1 仿函数的介绍1.2 仿函数的优势 二、priority_queue2.1 push2.2 pop2.3 top2.4 size2.5 empty 三、…