当前位置: 首页 > news >正文

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

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

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

相关文章:

  • clickhouse——ck目录介绍
  • 嵌入式要卷成下一个Java了吗?
  • Java高级面试问题及答案
  • 中科驭数驭云、超低时延网络案例双双入选第七届数字中国建设峰会数字化转型典型应用案例
  • C++ (week5):Linux系统编程3:线程
  • 数组-捡石子小游戏
  • 新零售数据中台:打造智能商业运营的核心引擎_光点科技
  • Owinps静态IP代理:跨境电商的优选解决方案
  • 【头歌】计算机网络DHCP服务器配置第二关access口配置答案
  • Linux shell命令
  • 容器是什么
  • 网络智能化的发展对仿真环境的需求
  • 04_前端三大件JS
  • 调整表格大小
  • 2024年社会发展、人文艺术与文化国际会议(ICSDHAC 2024)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 11111111
  • Angular 2 DI - IoC DI - 1
  • angular组件开发
  • echarts的各种常用效果展示
  • EOS是什么
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Js基础知识(四) - js运行原理与机制
  • Python学习之路13-记分
  • socket.io+express实现聊天室的思考(三)
  • springboot_database项目介绍
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue2 SSR 的优化之旅
  • 彻底搞懂浏览器Event-loop
  • 记一次用 NodeJs 实现模拟登录的思路
  • 使用Gradle第一次构建Java程序
  • 手机端车牌号码键盘的vue组件
  • 微信开放平台全网发布【失败】的几点排查方法
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • (1)Nginx简介和安装教程
  • (12)Hive调优——count distinct去重优化
  • (3) cmake编译多个cpp文件
  • (二)斐波那契Fabonacci函数
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)人的集合论——移山之道
  • (转)项目管理杂谈-我所期望的新人
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ******之网络***——物理***
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET IoC 容器(三)Autofac
  • .net MySql
  • .NET 反射的使用
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例