YOLOv10最详细全面讲解1- 目标检测-准备自己的数据集(YOLOv5,YOLOv8均适用)

YOLOv10没想到出来的如此之快,作为一名YOLO的爱好者,以YOLOv5和YOLOv8的经验,打算出一套从数据集装备->环境配置->训练->验证->目标追踪全系列教程。请大家多多点赞和收藏!!!YOLOv5和YOLOv8亲测全都适用
废话不多说,直接开搞!!!
系列文章:
YOLOv10最详细全面讲解2- 目标检测-环境搭建、训练自己的数据集

1.准备图片文件

这里也没什么好说的,关键要提一点就是,将所有图片文件先放入到一个目录文件夹中,便于后续划分训练集,测试集和验证集,同时不能有重复文件名,每一张图片最好取一个合适的名字,例如下图,我的每个图片前缀fish1表示来自fish1视频,后缀000001表示第一帧画面。图片文件jpg、png都可以,我这里是.jpg
在这里插入图片描述

2.准备labels标签文件

这里很关键,很多同学可能之前用的另外的模型训练,用的labels是coco格式或者其他格式,但是这里需要统一转成YOLO格式的labels。
准备一个目录,准备存放所有的labels标签文件。如下图,我的文件夹中已经准备好了所有的标签文件,可以看到,文件名与上述的图片文件名是一一对应的,只是这里都是.txt文件。
在这里插入图片描述
我们再来看每个txt文件里面到底是什么?下面是我的fish1_000001.txt文件内容:

0 0.441753 0.815461 0.061021 0.042763
0 0.395895 0.759868 0.066198 0.046053
0 0.497781 0.744737 0.060651 0.039474
0 0.575629 0.787171 0.059541 0.042763
0 0.566568 0.727303 0.059911 0.059868
0 0.561206 0.691447 0.058802 0.096053
0 0.523669 0.681908 0.054734 0.042763
0 0.549741 0.648355 0.061760 0.038816
0 0.622411 0.646382 0.051775 0.069079
0 0.700999 0.786184 0.056583 0.080263
0 0.688425 0.724671 0.041050 0.091447
0 0.679734 0.651974 0.062870 0.040789
0 0.669009 0.602632 0.044379 0.053947
0 0.614645 0.605263 0.049556 0.040789
0 0.568047 0.573355 0.049556 0.051974
0 0.529216 0.597697 0.052515 0.057237
0 0.470969 0.637171 0.057322 0.061184
0 0.452663 0.610197 0.063609 0.050658
0 0.396820 0.694408 0.054734 0.055921
0 0.340843 0.636322 0.053254 0.044737
0 0.280325 0.584211 0.051775 0.046053
0 0.346339 0.583553 0.057322 0.048684
0 0.711169 0.438158 0.024408 0.080263
0 0.681583 0.399342 0.023669 0.063158
0 0.367973 0.515132 0.036243 0.076316
0 0.353365 0.551645 0.042530 0.050658
0 0.296783 0.542763 0.029956 0.082895
0 0.249815 0.515461 0.024038 0.075658
0 0.286612 0.434868 0.035503 0.075000
0 0.286428 0.404276 0.019601 0.059868
0 0.375899 0.377303 0.040680 0.059868
0 0.560466 0.312171 0.030695 0.053289
0 0.538092 0.280592 0.011095 0.034868
0 0.543454 0.226316 0.028476 0.040789
0 0.357618 0.301974 0.017751 0.061842
0 0.386280 0.271711 0.037352 0.032895
0 0.397374 0.195395 0.040311 0.030263
0 0.280695 0.127632 0.035503 0.044737
0 0.338203 0.103289 0.041050 0.032895
0 0.405141 0.130263 0.043269 0.028947
0 0.429364 0.150987 0.043639 0.032237
0 0.429179 0.469079 0.038831 0.077632
0 0.427885 0.563158 0.048077 0.061842
0 0.482618 0.563487 0.064349 0.037500
0 0.551960 0.517105 0.051405 0.061842
0 0.549001 0.501316 0.040311 0.035526
0 0.718565 0.525329 0.028107 0.083553
0 0.655695 0.468750 0.023669 0.082237
0 0.697115 0.466776 0.025148 0.078289
0 0.526759 0.414306 0.034834 0.074178
0 0.533284 0.438158 0.039941 0.088158
0 0.506102 0.464145 0.029956 0.086184
0 0.477905 0.518336 0.045632 0.035868
0 0.387759 0.472039 0.049186 0.050658
0 0.381074 0.085451 0.036084 0.032638
0 0.394362 0.080737 0.032274 0.035539
0 0.323364 0.128533 0.037740 0.021592
0 0.435300 0.400431 0.040496 0.046112
0 0.372879 0.218283 0.038384 0.046645
0 0.337794 0.199641 0.031705 0.033257
0 0.291575 0.334826 0.022722 0.063849
0 0.245625 0.194227 0.015614 0.058296
0 0.644136 0.353197 0.014138 0.071395
0 0.589170 0.371263 0.016498 0.079026
0 0.627219 0.565461 0.063609 0.044079
0 0.626233 0.482260 0.031350 0.051836
0 0.630899 0.382102 0.019793 0.078401
0 0.561601 0.367086 0.024320 0.070987
0 0.585442 0.457530 0.034834 0.066480
0 0.255194 0.422036 0.016150 0.083941
0 0.314734 0.420063 0.017419 0.091270
0 0.268748 0.304063 0.033887 0.059151
0 0.266533 0.270260 0.033251 0.067046
0 0.326387 0.277299 0.022485 0.063099
0 0.318628 0.231951 0.022167 0.060283
0 0.258423 0.212891 0.034530 0.047336
0 0.274588 0.165941 0.032992 0.045776
0 0.358741 0.198010 0.014479 0.047928
0 0.367082 0.158563 0.041420 0.032928
0 0.601516 0.529605 0.061021 0.040789
0 0.301596 0.261954 0.022874 0.055553
0 0.312095 0.159832 0.032837 0.040757
0 0.334209 0.162372 0.036901 0.040559
0 0.367411 0.122694 0.033750 0.026086
0 0.411428 0.278618 0.014423 0.037500
0 0.389238 0.328289 0.026257 0.056579

可以看到里面是一行一行的数据组成,那么每行数据的每个数据分别表示什么意思呢?
以第一行数据0 0.441753 0.815461 0.061021 0.042763为例,第一个0表示目标框框住物体的类别,我的数据集中只有鱼一个类别,因此都是每一行的第一个数据都是0,如果你自己的数据集有四类,假设有猫,狗,人,鱼,那么你可以将0-猫,1-狗,2-人,3-鱼。
再看后面几个小数, 0.441753 0.815461表示的目标框的中心点,0.061021 0.042763表示的是目标框的长和宽。这里又有同学要问了,为什么中心点和长宽都是小数?这就和YOLO创始人定义的labels格式有关了,这是人家定义的规则,我们照着做就行。那么具体是什么规则呢?
解释如下:
在这里插入图片描述
因此请各位自己根据自己标注的目标框转换成对应的YOLO目标框格式数据。上述我的该label文件中有87行数据,表示的是这一张图片中有87个目标框,每个目标框对应的类别都是0-鱼。如果有不知道如何转数据的同学,点赞收藏该博客然后关注我私聊,单独一对一教学

3.按比例划分数据集

在各位同学按照前三步准备好了图片和labels标签的前提下,按照YOLO系列的官方推荐比例训练集:验证集:测试集=7:2:1划分。
首先提前定义好存放训练集、验证集和测试集的空文件夹:
文件夹目录如下:
在这里插入图片描述
train、valid和test目录中都是如下结构:
在这里插入图片描述

提供以下脚本:

import os
import random
import shutil

# 设置目录路径
image_dir = 'D:/ModelsDatas/test/allimgs'  # 改成你自己的原图片目录
label_dir = 'D:/ModelsDatas/test/alllables'  # 改成你自己的原标签目录

# 获取图片和txt文件列表
images = os.listdir(image_dir)
labels = os.listdir(label_dir)

# 随机打乱图片列表
random.shuffle(images)

# 计算训练集、验证集和测试集的数量
total_images = len(images)
train_count = int(total_images * 0.7)
val_count = int(total_images * 0.2)
test_count = total_images - train_count - val_count

# 分配文件到训练集、验证集和测试集
train_images = images[:train_count]
val_images = images[train_count:train_count + val_count]
test_images = images[train_count + val_count:]

# 移动文件到对应的目录
for image in train_images:
    # 移动图片和标签到训练集目录
    shutil.move(os.path.join(image_dir, image), 'D:/ModelsDatas/YOLO_datasets/train/images') # 请改成你自己的训练集存放图片的文件夹目录
    shutil.move(os.path.join(label_dir, image[:-4]+'.txt'), 'D:/ModelsDatas/YOLO_datasets/train/labels')# 请改成你自己的训练集存放标签的文件夹目录

for image in val_images:
    # 移动图片和标签到验证集目录
    shutil.move(os.path.join(image_dir, image), 'D:/ModelsDatas/YOLO_datasets/valid/images')# 请改成你自己的验证集存放图片的文件夹目录
    shutil.move(os.path.join(label_dir, image[:-4] + '.txt'), 'D:/ModelsDatas/YOLO_datasets/valid/labels')# 请改成你自己的验证集存放标签的文件夹目录

for image in test_images:
    # 移动图片和标签到测试集目录
    shutil.move(os.path.join(image_dir, image), 'D:/ModelsDatas/YOLO_datasets/test/images')# 请改成你自己的测试集存放图片的文件夹目录
    shutil.move(os.path.join(label_dir, image[:-4] + '.txt'), 'D:/ModelsDatas/YOLO_datasets/test/labels')# 请改成你自己的测试集存放标签的文件夹目录

4.准备yaml文件,用于后续训练

文件命名为data.yaml,建议先放在与train、test和valid同级目录下,如下所示:
在这里插入图片描述
data.yaml中文件内容和说明如下:

names: # class names
  - 0:fish # 类别号: 类别名称 (需要改成自己的)
  #-1:cat #如果还有其他类别,以此往下加就行了,类别号请认真和自己当时目标框labels文件中的一一对应
  #-2:dog
nc: 1 # number of classes 数据集中一共有几个类别,参考上面说的
path: ultralytics/datasets/det/fish2 # 数据集路径(需要改成自己的,也就是train、test和valid目录的上级目录)
train: train/images # 训练集路径(相对于数据集路径)
val: valid/images # 验证集路径(相对于数据集路径)
test: test/images # 测试集路径(相对于数据集路径)

如上,YOLO需要的自己数据集就构建完成了,接下来就是训练啦!!!还请各位同学多多点赞收藏,你们的认可是我继续更新更好文章的最大动力!!!

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

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

相关文章

Simulink从0搭建模型06-P7模型中结构体的使用

Simulink从0搭建模型06-P7模型中结构体的使用 本节课学习内容1. 结构体的创建 Bus Creator(多输入单输出)2. 结构体的引用 Bus Selector(单输入多输出)3. 结构体的赋值 Bus Assignment4. 结构体对象的创建 Bus object5. 结构体数组…

10分钟掌握FL Studio21中文版,音乐制作更高效!

FL Studio 21中文版是Image Line公司推出的一款深受欢迎的数字音频工作站软件,在音乐制作领域享有盛誉。这个版本特别针对中文用户进行了本地化处理,旨在提供更加便捷的用户体验和操作界面。本次评测将深入探讨FL Studio 21中文版的功能特点、使用体验及…

Java RMI

RMI - 安全篇 RMI分为三个主体部分: *Client-客户端*:客户端调用服务端的方法 *Server-服务端*:远程调用方法对象的提供者,也是代码真正执行的地方,执行结束会返回给客户端一个方法执行的结果。 *Registry-注册中心…

防火墙技术基础篇:配置主备备份的双机热备

防火墙技术基础篇:配置主备备份的双机热备 防火墙双机热备(High Availability, HA)技术是网络安全中的一个关键组成部分,通过它,我们可以确保网络环境的高可靠性和高可用性。下面我们一起来了解防火墙双机热备的基本原…

第二十三届中国科学家论坛盛大开幕,星医联董事长杨星荣获“十四五”科技创新先锋人物

2024年5月25-26日,第二十三届中国科学家论坛在北京召开,北京星医联科技有限公司(以下简称“星医联”)董事长杨星女士受邀出席并荣获“十四五科技创新先锋人物”称号。同时星医联专利“一种靶向协同降脂的纳米双药制备及应用”荣获…

[CVPR-24] HUGS: Human Gaussian Splats

本文提出一种新的数字人表征Human Gaussian Splats (HUGS),可以实现新姿态和新视角生成;本文提出一种新的前向形变模块(forward deformation module),在标定空间基于Gaussians表征数字人,并基于LBS学习如何…

从 ASCII 到 UTF-8 - Unicode 码的诞生与实现

前言:最近我在整理过往笔记时,发现涉及到了 UTF-8、Unicode 的相关内容,相信大家中的很多人和之前的我一样,在过去的很长一段时间里,并没有搞清楚什么是 Unicode、什么是 UTF-8,于是就有了这篇文章&#xf…

SSL证书:守护个人信息安全的坚固盾牌

在数字化浪潮汹涌的今天,我们的个人信息如同一座座宝藏,吸引着不法分子的贪婪目光。数据泄露事件频发,让信息安全问题日益凸显。而在这个信息爆炸的时代,如何保护我们的个人信息安全,成为了一个亟待解决的问题。幸运的…

【第三节】类的构造和析构函数

目录 一、数据成员的初始化 二、构造函数 2.1 什么是构造函数 2.2 构造函数的注意事项 三、析构函数 四、带参数的构造函数 五、缺省构造函数 六、构造函数初始化列表 七、拷贝构造函数和调用规则 八、深拷贝和浅拷贝 九、总结 一、数据成员的初始化 定义普通变量&am…

java智慧工厂制造生产管理MES系统saas模式Java+ idea+ uniapp全套MES系统源码,多端展示

java智慧工厂制造生产管理MES系统saas模式Java idea uniapp全套MES系统源码,多端展示 MES 系统源码(生产制造执行系统)能够帮助企业实现全生产过程的可视化,数据分析智能化、构建高效智能工厂,MES系统通过控制指令、人…

大气污染溯源算法及其技术实现

污染溯源基础概念知识 大气污染溯源是指识别并追踪污染物的来源及其传输过程,以确定造成大气污染的根本原因和污染物传播路径的技术和方法。这对于制定有效的控制和减轻污染策略至关重要。大气污染的溯源主要涉及以下几个方面: 污染源识别:…

Facebook开户 | 如何检查公共主页的状态

想要了解你的Facebook公共主页的状态吗? Facebook公共主页是让广告主与粉丝互动、传播信息的绝佳平台,但是大家知道如何检查并维护自己的主页状态吗?别担心,Facebook提供了一系列简单易用的工具来帮助大家实现这一目标。 *Page Q…

RedHat9网络配置设计

目录 一、实验目的 二、实验过程 1、配置新网络接口 2、多网卡配置网络 3、网络接口的绑定,进行远程访问 4、配置网络接口的组合 一、实验目的 本次实验的目的是使用nmcli命令工具配置网络,ens160配置多个网卡,进行网络接口的绑定与组合…

一文搞懂Java8 Lambda表达式、方法引用

Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口。Lambda表达式本质是一个匿名函数; 体验Lambda表达式 我们通过一个小例子来体验下L…

单元测试框架Pytest的基本操作

Pytest基本操作 1. 详解1.1 命名规则:1.2 自定义查找规则:1.3 3种运行方式1.4 执行顺序2. 断言2.1 定义2.2 断言的规则3. mark3.1 mark的作用3.2 mark的标记方式3.3 注册标签名3.4 skip跳过标记4. pytest的参数化5. pytest的夹具(fixture测试夹具)5.1. 作用5.2. 夹具应用场…

Java网络编程:UDP通信篇

目录 UDP协议 Java中的UDP通信 DatagramSocket DatagramPacket UDP客户端-服务端代码实现 UDP协议 对于UDP协议,这里简单做一下介绍: 在TCP/IP协议簇中,用户数据报协议(UDP)是传输层的一个主要协议之一&#xf…

LeetCode hot100-57-G

17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。不会,放IDEA里执行了一下大概理解了流程 …

《Ai企业知识库》-rasa-初步使用

根据上面的环境准备之后: 《Ai企业知识库》-模型实践-rasa开源学习框架-搭建简易机器人-环境准备(针对windows)-02-CSDN博客 基础的使用: rasa项目初始化: rasa init 首先进入目标文件夹 在dos窗口(目标文件夹下&#xff09…

10Django项目--用户管理系统--改

对应视频链接点击直达 10Django项目--用户管理系统--改 对应视频链接点击直达改a,本质b,修改(更新) 页面相关a,index页面新增操作按钮b,修改(更新)页面c,路由和函数 OVER,不会有人不会吧不会的加Q139400651…

pdf只要其中一页 pdf只要第一页怎么办 pdf只要前几页怎么弄

在现代办公环境中,PDF文件已经成为我们日常工作中不可或缺的一部分。然而,有时我们可能只需要PDF文件中的某一页,而不是整个文件。这时,我们该如何操作才能只获取所需的那一页呢?本文将详细操作方法,帮助大…