Windows YOLO v8训练自己的数据集

news2024/11/26 2:27:18

YOLO v8 训练自己的数据集

    • 环境准备
    • YOLO v8
    • 创建自己的数据集
      • 1.首先准备了VOC 格式的数据集
      • 2.然后确定用于训练、测试的数据
      • 3.将VOC格式标注转为YOLO 标注
      • 4.配置数据文件 yaml
    • 配置 YOLO v8
    • 安装和训练
      • 安装依赖包
      • 训练

环境准备

这里我的环境是Windows 环境
环境

YOLO v8

下载链接:https://github.com/ultralytics/ultralytics

官方教程链接:https://docs.ultralytics.com/quickstart/

预训练模型:https://github.com/ultralytics/assets/releases

创建自己的数据集

1.首先准备了VOC 格式的数据集

推荐使用labelImg 得到 Annotations
数据文件结构
-data
—images 所有图片(.jpg .png 等)
—Annotations VOC格式标注(.xml)
—ImageSets 目前为空
—labels 目前为空

2.然后确定用于训练、测试的数据

import os
from random import sample
from pathlib import Path

trainval_percent = 0
train_percent = 1
xml_file_path = Path('data/Annotations')
txt_save_path = Path('data/ImageSets')
total_xml = os.listdir(xml_file_path)

num = len(total_xml)
num_list = list(range(num))
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = sample(num_list, tv)
train = sample(trainval, tr)

with open(txt_save_path / 'trainval.txt', 'w') as ftrainval, \
        open(txt_save_path / 'test.txt', 'w') as ftest, \
        open(txt_save_path / 'train.txt', 'w') as ftrain, \
        open(txt_save_path / 'val.txt', 'w') as fval:

    for i in num_list:
        name = total_xml[i][:-4] + '\n'
        if i in trainval:
            ftrainval.write(name)
            if i in train:
                ftest.write(name)
            else:
                fval.write(name)
        else:
            ftrain.write(name)

3.将VOC格式标注转为YOLO 标注


import xml.etree.ElementTree as ET
import os

sets = ['train']
classes = ["WCF"]

def convert(size, box):
    dw = 1. / size[0]
    dh = 1. / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x *= dw
    w *= dw
    y *= dh
    h *= dh
    return (x, y, w, h)

def convert_annotation(image_id):
    in_file = open(f'data/Annotations/{image_id}.xml')
    out_file = open(f'data/labels/{image_id}.txt', 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (
            float(xmlbox.find('xmin').text),
            float(xmlbox.find('xmax').text),
            float(xmlbox.find('ymin').text),
            float(xmlbox.find('ymax').text)
        )
        bb = convert((w, h), b)
        out_file.write(f'{cls_id} {" ".join(str(a) for a in bb)}\n')
    in_file.close()
    out_file.close()

wd = os.getcwd()
print(wd)
for image_set in sets:
    os.makedirs('data/labels/', exist_ok=True)
    with open(f'data/ImageSets/{image_set}.txt') as f:
        image_ids = f.read().strip().split()
    with open(f'data/{image_set}.txt', 'w') as list_file:
        for image_id in image_ids:
            list_file.write(f'data/images/{image_id}.jpg\n')
            convert_annotation(image_id)

4.配置数据文件 yaml

自己创建 data.yaml

# train val test 集合
train: .../data/train.txt
val: .../data/train.txt
test: .../data/train.txt

# 类别标签
names:
  0: tree

# nc: 类别数
nc: 1

配置 YOLO v8

需要找到yolo v8 的yaml 文件
通常地址为:ultralytics\models\v8
修改类别数
也可改动里面其他的信息
在这里插入图片描述

安装和训练

安装依赖包

pip install ultralytics

训练

Win 上workers 尽量改为1

if __name__ == '__main__':
    from ultralytics import YOLO

    # Load a model

    model = YOLO('.../ultralytics/models/v8/yolov8m.yaml').load('models/yolov8m.pt')  # build from YAML and transfer weights

    # Train the model
    model.train(data='data/data.yaml', batch=3, epochs=300, imgsz=640,workers=1)

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

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

相关文章

dma-fence使用demo

dma-fence是内核中一种比较常用的同步机制,本身的实现和使用并不复杂,其只有两种状态signaled和unsignaled。可能正是因为其本身的精简,在融入其他概念中时,在不同的环境下,赋予了dma-fence不同的含义。所以通常需要根据dma-fence…

DragGAN论文阅读

文章目录 摘要问题3. 算法:3.1 基于点的交互式操作3.2 运动监督3.3 点跟踪 4. 实验4.1 质量评估4.2 量化评估4.3 讨论 结论 论文: 《Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold》 github: htt…

一文学会Git管理代码仓库

文章目录 一、预备知识1.Linux常用指令2.vim编辑器基本使用 二、Git基础1.工作区、暂存区、本地仓库和远程仓库2.git init3.git add4.git status5.git commit6.git push7.git pull8.git 分支管理(branch、checkout、merge)9.git clone和log10.git diff11.git fetch12.git rm13.…

汽车IVI中控开发入门及进阶(九):显示屏

前言: 显示屏Display panel和触控屏Touch panel,可以说随着汽车四化的进展,屏越来越多,越来越大,越来越高清,成为IVI中控、智能座舱系统的重要组成部分。比如如下一个电阻触摸屏。 正文: 显示屏 主要功能就是显示,车载内容和信息的传递全靠显示屏,目前车载显示屏的…

Java企业级开发学习笔记(4.4)Spring Boot加载自定义配置文件

一、使用PropertySource加载自定义配置文件 1.1 创建Spring Boot项目 创建Spring Boot项目 单击【创建】按钮 1.2 创建自定义配置文件 在resources里创建myconfig.properties文件 设置文件编码 设置学生的四个属性值 1.3 创建自定义配置类 在cn.kox.boot包里创建confi…

毕业季Android开发面试,有哪些常见的题?

前言 对于计算机行业早已烂大街,随之而来的毕业季。还会有大批的程序员涌进来,而我们想要继续进入Android开发岗位的人员,最先考虑的是面试。面试题是我们决定踏进工作的重要环节。 对于刚毕业的实习生来说,如何在应聘中脱颖而出…

uniapp 使用app-plus自定义导航栏(titleNView)右侧自定义图标+文字按钮

前言 最近在使用uni-app写H5移动端时候,在pages.json文件配置导航栏的图标时发现不生效 去官网查阅了很久,意思是不支持本地图片,支持iconfont.ttf(iconfont本地下载)格式图片 意思是在导航栏的图标需要在iconfont图…

Synchronized 偏向锁、轻量级锁、自旋锁、锁消除

一、重量级锁 上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实…

【从Spring Cloud到Spring Cloud Alibaba,这些改变你都知道吗?】—— 每天一点小知识

💧 从 S p r i n g C l o u d 到 S p r i n g C l o u d A l i b a b a ,这些改变你都知道吗? \color{#FF1493}{从Spring Cloud到Spring Cloud Alibaba,这些改变你都知道吗?} 从SpringCloud到SpringCloudAlibaba&#…

【LeetCode训练营 189】轮转数组详解

💯 博客内容:【LeetCode训练营 189】轮转数组详解 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大…

Tensorflow训练代码1.x接口自动升级2.x踩坑记录

Tensorflow训练代码1.x接口自动升级2.x踩坑记录 TF准备工作环境问题解决自动升级脚本,从TF1.0调通到TF2.0 一起学AI系列博客:目录索引 本文小结Tensorflow训练代码1.x接口自动升级2.x踩坑过程和问题解决的方法。 TF准备工作 Tensorflow环境准备 前提已…

【MySQL高级篇笔记-多版本并发控制MVCC(下) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、什么是MVCC 二、快照读与当前读 1、快照读 2、当前读 三、复习 1、再谈隔离级别 2、隐藏字段、Undo Log版本链 四、MVCC实现原理之ReadView 1、什么是ReadView 2、设计思路 3、ReadView的规则 4、MVCC整体操作流程…

操作系统(5.2)--请求分页储存管理模式

目录 请求分页的硬件支持 1.页表机制 2.缺页中断机构 3.地址变换机构 请求分页中的内存分配 1.最小物理块数的确定 2.内存分配策略 3.物理块分配算法(采用固定分配策略时) 页面调度策略 1.何时调入页面 2.从何处调入页面 3.页面调入过程 请求分页的硬件支持 内存、…

基础知识学习---牛客网C++面试宝典(四)C/C++基础之STL

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程; 2、个人经历: 研究生期间课题是SLAM在无人机上的应…

TCP协议流程详解,抓包分析

目录 TCP概念TCP工作层TCP协议头部解析TCP抓包解析TCP三次握手,数据收发,四次挥手抓包TCP状态迁移 TCP概念 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议&…

MyBatis操作数据库(查询功能)

目录 一、MyBatis的概念 二、配置MyBits环境 三、 MyBatis连接数据库查询操作(示例) 创建MySQL数据库表 配置MyBatis 配置连接数据库和MyBatis xml文件 ​编辑 四、添加业务代码 实体类entity 数据持久层mapper 创建接口类 创建xml文件 服务层…

偏向锁、轻量级锁、重量级锁、自旋锁、自适应自旋锁

1. 偏向锁 偏向锁就是在运行过程中,对象的锁偏向某个线程。即在开启偏向锁机制的情况下,某个线程获得锁,当该线程下次再想要获得锁时,不需要重新申请获得锁(即忽略synchronized关键词),直接就可…

python 房价数据可视化以数据缺失处理、及回归算法

基本信息概述 房价数据为他国地区使用工具为JupyterLab、python3用到的包 绘图包:seaborn、matplotlib数据处理包:numpy、pandas统计计算包:math、scipy回归模型包:make_pipeline、 RobustScaler、ElasticNet,Lasso、KernelRidge…

设计模式(十四):行为型之策略模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

Python使用最新版pyinstaller将项目或程序打包成exe或者mac中的可执行文件

1、pyinstaller的说明: pyinstaller 能够在 Windows、Linux、Mac 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个独立文件方便传递和管理。 PyInstaller 支…