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 ET

import numpy as np

def 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 = 0
            if obj.find('difficult') != None:
                difficult = obj.find('difficult').text
            cls = obj.find('name').text
            if cls not in class_list or int(difficult) == 1:
                continue
            cls_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文件了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Python Flask发布web页面至公网并实现远程访问【内网穿透】

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…

Java中的排序算法

引言: 当谈到编程语言中的排序,Java 作为一种广泛使用的编程语言,提供了许多强大的排序算法来满足不同的需求。排序是一种将一组数据按照特定顺序重新排列的过程,通常是按照升序或降序排列。在 Java 中,我们可以利用内…

【airtest】自动化入门教程(二)airtest操作

目录 一、touch 二、wait 三、swipe 四、exists 五、text 六、keyevent 七、snapshot 八、sleep 九、断言 9.1 assert_exists 9.2 assert_not_exists 9.3 assert_equal 9.4 assert_not_equal 前言:本文主要针对aritest部分的基础操作,aritest是一个跨平…

AJAX 学习笔记(Day3)

「写在前面」 本文为黑马程序员 AJAX 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. AJAX 学习笔记(Day1) 目录 3 AJAX 原理 3.1 XMLHttpRequest 3…

遭遇CC攻击如何做防护策略

CC(Challenge Collapsar)攻击是一种常见而具有破坏力的拒绝服务攻击(DDoS),对网络安全造成威胁。为了保护网络免受这类恶意攻击,采取有效的防护策略至关重要。本文将介绍一些可以帮助保护您的网络免受CC攻击…

appium环境搭建

一.appium环境搭建 1.python3 python3的下载安装这里就不多做介绍了,当然你也可以选择自己喜欢的语音,比如java… 2.jdk 1)下载地址 官网(需登录账号): https://www.oracle.com/java/technologies/downloads/ 百度网盘&…

windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案

错误描述: windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败”:“安装一个或多个角色、角色服务或功能失败错误: 0x800f0950” 。 错误原因: windows 2019 server系统…

【C语言】指针详细解读2

1.const 修饰指针 1.1 const修饰变量 变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。 但是如果我们希望⼀个变量加上⼀些限制,不能被修改,怎么做呢?这就是const的作⽤。 …

力扣hot100:1.两数之和

输入中可能存在重复值 。 分析&#xff1a; 本题需要返回的是数组下标&#xff0c;因此如果需要使用排序然后双指针的话&#xff0c;需要用到哈希表&#xff0c;但是由于输入中可能存在重复值&#xff0c;因此哈希表的value值必须是vector<int>。 使用双指针求目标值targ…

Deep Learning相关概念介绍

工具&#xff1a; Anaconda: anaconda.com/products/individual。我理解是一个基于Python的AI程序开发环境&#xff0c;其作用类似于google notebook。区别是google notebook是在网页上&#xff0c;而Anaconda一般是安装在自己的服务器上。Jupyter Notebooks Anaconda激活深度…

vscode使用git

更改的文件 点击号 &#xff0c; 相当于git add 添加到暂存区 -号 取消暂存区内容 可以查看更改的前后对比 编辑器左下角点击分支&#xff0c;可以创建新分支 提交到暂存区后&#xff0c;点击 提交 &#xff0c; 编辑备注内容 &#xff0c;相当于git commit -m 提交备注内容 同…

Leaflet 初始化地图

前言 &#x1f914;&#x1f914; Leaflet系列搁置了好久&#xff0c;趁着deadline来临之际&#xff0c;我会在两周内将这个专栏的内容基本更新完毕&#xff0c;并随着项目的精进将更多优质的文章内容提供给本专栏的订阅者&#xff1b;说正事&#xff0c;在本文中&#xff0c;我…

《精益DevOps》:填补IT服务交付的认知差距,实现高效可靠的客户期望满足

写在前面 在当今的商业环境中&#xff0c;IT服务交付已经成为企业成功的关键因素之一。然而&#xff0c;实现高效、可靠、安全且符合客户期望的IT服务交付却是一项艰巨的任务。这要求服务提供商不仅具备先进的技术能力&#xff0c;还需要拥有出色的组织协作、流程管理和态势感…

IMAP和SMTP的区别与联系是什么?如何区分?

IMAP和SMTP的区别有哪些&#xff1f;IMAP和SMTP选择哪个更好&#xff1f; 在电子邮件通信的过程中&#xff0c;两个关键协议扮演着不可或缺的角色&#xff0c;它们就是IMAP和SMTP。这两个协议各有特色&#xff0c;但又紧密相连&#xff0c;共同维护着电子邮件系统的稳定运行。…

Neo4j从入门到放弃

前言 本文记录前公司在开发社交应用时&#xff0c;探索Neo4j数据库记录的一些关键信息和常见问题。希望这篇文章的一些信息能对你有所帮助。少走一些弯路。Neo4j的学习最好在搭建完后&#xff0c;它的web管理界面有一个引导教程&#xff0c;跟着它的指导手册走下教程&#xff…

内网穿透的应用-如何修改Nginx服务location代理转发规则结合cpolar实现无公网ip环境访问内网站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

【FastChat】用于训练、服务和评估大型语言模型的开放平台

FastChat 用于训练、服务和评估大型语言模型的开放平台。发布 Vicuna 和 Chatbot Arena 的存储库。 隆重推出 Vicuna&#xff0c;一款令人印象深刻的开源聊天机器人 GPT-4&#xff01; &#x1f680; 根据 GPT-4 的评估&#xff0c;Vicuna 达到了 ChatGPT/Bard 90%* 的质量&…

HQL,SQL刷题,尚硅谷

目录 相关表数据&#xff1a; ​编辑 题目及思路解析&#xff1a; 复杂查询&#xff0c;子查询 1、查询所有课程成绩均小于60分的学生的学号、姓名 2、查询没有学全所有课的学生的学号、姓名 3、查询出只选修了三门课程的全部学生的学号和姓名 总结归纳&#xff1a; 知识补充&a…

端口号被占用时的解决办法

1、查看端口占用的进程号 netstat -ano |findstr 8080 2、 找到占用端口的程序 tasklist |findstr 2264 3、kill端口 taskkill /pid 2264 /f

如何在飞书接入ChatGPT并结合内网穿透实现公网远程访问智能AI助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…