在目标检测任务中,数据集的划分通常分为训练集和验证集,以便在训练模型时评估模型的性能。这个过程对于有效训练和评估目标检测模型非常重要。下面是划分目标检测数据集的一般步骤:``

  1. 数据集组织:

    确保你的数据集中包含图像文件(通常为 ".jpg" 或 ".png")和相应的标签文件,用于描述图像中的目标位置和类别。标签文件可以是类似于 YOLO 格式的 ".txt" 文件,也可以是其他目标检测任务中使用的格式。

  2. 划分比例选择:

    确定训练集和验证集的划分比例。通常,常见的比例为 80-90% 的数据用于训练,而剩下的 10-20% 用于验证。这个比例可以根据你的数据量和任务的特性进行调整。

  3. 数据集划分代码:

    编写代码来将数据集划分为训练集和验证集。这通常涉及将图像文件和相应的标签文件分别移动到两个不同的文件夹中。

  4. 文件夹结构:

    为了方便管理,创建一个包含两个子文件夹(例如 "images" 和 "labels")的文件夹,分别用于存储图像和标签文件。训练集和验证集各自都应该有这样的文件夹结构。

  5. 随机化和保持一一对应:

    在划分数据集之前,通常会对数据集进行随机化处理,以确保训练集和验证集中的样本都是随机选择的。在划分过程中,要保持图像和标签的一一对应关系,以确保训练和验证的一致性。

  6. 数据集划分结果验证:

    验证划分的结果是否符合预期。你可以检查训练集和验证集的文件数量,确保图像和标签仍然保持一一对应,并且确保文件夹结构正确。

import os
import random
import shutil def split_dataset(srcDir, trainDir, valDir, split_ratio=0.9):
"""
将数据集划分为训练集和验证集,并保存到相应的文件夹中。 Parameters:
- srcDir: 原始数据集文件夹路径,包含图像和标签文件。
- trainDir: 训练集文件夹路径,包含 'images' 和 'labels' 子文件夹。
- valDir: 验证集文件夹路径,包含 'images' 和 'labels' 子文件夹。
- split_ratio: 数据集划分比例,默认为 0.9,表示将 90% 的数据用于训练集,10% 用于验证集。
"""
os.makedirs(os.path.join(trainDir, 'images'), exist_ok=True)
os.makedirs(os.path.join(trainDir, 'labels'), exist_ok=True)
os.makedirs(os.path.join(valDir, 'images'), exist_ok=True)
os.makedirs(os.path.join(valDir, 'labels'), exist_ok=True) # 获取数据集中所有文件的列表
file_list = os.listdir(srcDir)
random.shuffle(file_list) # 根据划分比例计算训练集和验证集的边界索引
split_index = int(len(file_list) * split_ratio)
train_files = file_list[:split_index]
val_files = file_list[split_index:] # 将训练集数据移动到相应文件夹
for file in train_files:
if file.endswith('.jpg'):
img_src = os.path.join(srcDir, file)
label_src = os.path.join(srcDir, file[:-4] + '.txt')
shutil.move(img_src, os.path.join(trainDir, 'images', file))
shutil.move(label_src, os.path.join(trainDir, 'labels', file[:-4] + '.txt')) # 将验证集数据移动到相应文件夹
for file in val_files:
if file.endswith('.jpg'):
img_src = os.path.join(srcDir, file)
label_src = os.path.join(srcDir, file[:-4] + '.txt')
shutil.move(img_src, os.path.join(valDir, 'images', file))
shutil.move(label_src, os.path.join(valDir, 'labels', file[:-4] + '.txt')) if __name__ == '__main__':
# 输入文件夹路径
srcDir = r"C:\Users\86159\Desktop\hat\all_data"
trainDir = r'C:\Users\86159\Desktop\hat\train'
valDir = r'C:\Users\86159\Desktop\hat\val' # 调用函数划分数据集
split_dataset(srcDir, trainDir, valDir)

YOLO数据集划分(测试集和验证集)的更多相关文章

  1. 【ML入门系列】(一)训练集、测试集和验证集

    训练集.验证集和测试集这三个名词在机器学习领域极其常见,但很多人并不是特别清楚,尤其是后两个经常被人混用. 在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(train ...

  2. Matlab划分测试集和训练集

    % x是原数据集,分出训练样本和测试样本 [ndata, D] = size(X); %ndata样本数,D维数 R = randperm(ndata); %1到n这些数随机打乱得到的一个随机数字序列 ...

  3. 9. 获得图片路径,构造出训练集和验证集,同时构造出相同人脸和不同人脸的测试集,将结果存储为.csv格式 1.random.shuffle(数据清洗) 2.random.sample(从数据集中随机选取2个数据) 3. random.choice(从数据集中抽取一个数据) 4.pickle.dump(将数据集写成.pkl数据)

    1. random.shuffle(dataset) 对数据进行清洗操作 参数说明:dataset表示输入的数据 2.random.sample(dataset, 2) 从dataset数据集中选取2 ...

  4. LUA中将未分类数据分为测试集和训练集

    require 'torch' require 'image' local setting = {parent_root = '/home/pxu/image'} function list_chil ...

  5. 使用KFold进行训练集和验证集的拆分,使用准确率和召回率来挑选合适的阈值(threshold) 1.KFold(进行交叉验证) 2.np.logical_and(两bool数组都是正即为正) 3.np.logical_not(bool数组为正即为反,为反即为正)

    ---恢复内容开始--- 1. k_fold = KFold(n_split, shuffle) 构造KFold的索引切割器 k_fold.split(indices) 对索引进行切割. 参数说明:n ...

  6. csv数据集按比例分割训练集、验证集和测试集,即分层抽样的方法

    一.一种比较通俗理解的分割方法 1.先读取总的csv文件数据: import pandas as pd data = pd.read_csv('D:\BaiduNetdiskDownload\weib ...

  7. 使用sklearn进行数据挖掘-房价预测(2)—划分测试集

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  8. sklearn数据集划分

    sklearn数据集划分方法有如下方法: KFold,GroupKFold,StratifiedKFold,LeaveOneGroupOut,LeavePGroupsOut,LeaveOneOut,L ...

  9. ML基础 : 训练集,验证集,测试集关系及划分 Relation and Devision among training set, validation set and testing set

    首先三个概念存在于 有监督学习的范畴 Training set: A set of examples used for learning, which is to fit the parameters ...

  10. [DeeplearningAI笔记]改善深层神经网络1.1_1.3深度学习使用层面_偏差/方差/欠拟合/过拟合/训练集/验证集/测试集

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 训练/开发/测试集 对于一个数据集而言,可以将一个数据集分为三个部分,一部分作为训练集,一部分作为简单交叉验证集(dev)有时候也成为验 ...

随机推荐

  1. 体验有礼 | 1 分钟 Serverless 极速部署个人网盘,真网盘真好用!

    你想自己搭一个无敌好用的网盘吗? 想 接着看,还有奖品呢! -- 当前,网盘几乎已成为现代人的标配,而市面上的网盘功能.费用各异,让用户们陷入了对比价格和功能的迷阵中.别对比了,动手吧!作为对存储.流 ...

  2. <vue 基础知识 2、插值语法> v-once,v-html,v-text,v-pre,v-cloak

    代码结构 一.     Mustache 1.效果 展示如何将数据展示在页面上 2.代码 01-Mustache.html <!DOCTYPE html> <html lang=&q ...

  3. d3生成器--line,area,diagonal

    https://blog.csdn.net/qq_31396185/article/details/78147612

  4. Android之AMS原理分析

    在学习android框架原理过程中,ams的原理非常重要,无论是在面试中还是在自己开发类库过程中都会接触到. 1 简述 ActivityManagerService是Android最核心的服务,负责管 ...

  5. 2023年春秋杯网络安全联赛冬季赛-CRYPTO MISC WP

    浅谈:*代表未做出的,赛后复现了一下.本次题目还是挺有意思的,比赛期间做啦俩.题目有很多值得学习的东西.顺便在此记录一下.继续努力吧!! CRYPTO not_wiener(中等) 题目附件 查看代码 ...

  6. K8s集群CoreDNS监控告警最佳实践

    本文分享自华为云社区<K8s集群CoreDNS监控告警最佳实践>,作者:可以交个朋友. 一 背景 coreDNS作为K8s集群中的关键组成部分.主要负责k8s集群中的服务发现,域名解析等功 ...

  7. [转帖]Nginx 反向代理解决跨域问题

    https://juejin.cn/post/6995374680114741279 编写代码两分钟,解决跨域两小时,我吐了. 如果对跨域还不了解的朋友,可以看这篇:[基础]HTTP.TCP/IP 协 ...

  8. 【转帖】Linux中如何取消ln链接?(linuxln取消)

    https://www.dbs724.com/163754.html Linux系统使用ln命令可以快速创建链接,ln链接是指把文件和目录链接起来,当改变源时可以快速地改变整个目录下的文件和目录.有时 ...

  9. [转帖]Linux查看raid1和raid10分别由哪些盘组成,在哪个槽位

    查找有问题的盘 MegaCli64 -PDList -aALL |grep "Firmware state" 6个盘,2个坏了 查看raid级别和硬盘的状态 MegaCli64 - ...

  10. [转帖] Strace的介绍与使用

    https://www.cnblogs.com/skandbug/p/16264609.html Strace简介 strace命令是一个集诊断.调试.统计于一体的工具,常用来跟踪进程执行时的系统调用 ...