YOLO目标检测数据集划分代码

server/2025/2/7 22:09:23/

使用自制数据集训练YOLO目标检测算法前,需要对数据集进行划分,以下代码可以将数据集的图片和标签分别保存

import os
import shutil
import numpy as np
from tqdm import tqdmdef split_dataset(images_dir, labels_dir, train_ratio=0.7, val_ratio=0.2, test_ratio=0.1, random_seed=None):# # 检查比例是否合法# if train_ratio + val_ratio + test_ratio!= 1.0:#     raise ValueError("The sum of train_ratio, val_ratio, and test_ratio must be 1.0")# 获取所有图片文件的名称列表image_files = [f for f in os.listdir(images_dir) if os.path.isfile(os.path.join(images_dir, f))]num_images = len(image_files)# 使用 numpy 的随机排列函数if random_seed is not None:np.random.seed(random_seed)# 先将图片文件列表按照比例分成三个部分,而不是先随机打乱train_indices = np.random.choice(num_images, size=int(num_images * train_ratio), replace=False)remaining_indices = np.setdiff1d(np.arange(num_images), train_indices)val_indices = np.random.choice(remaining_indices, size=int(num_images * val_ratio), replace=False)test_indices = np.setdiff1d(remaining_indices, val_indices)# 创建存储划分结果的目录os.makedirs('train/images', exist_ok=True)os.makedirs('train/labels', exist_ok=True)os.makedirs('val/images', exist_ok=True)os.makedirs('val/labels', exist_ok=True)os.makedirs('test/images', exist_ok=True)os.makedirs('test/labels', exist_ok=True)# 复制文件到相应目录def copy_files(indices, target_image_dir, target_label_dir):progress_bar = tqdm(indices, desc=f"Copying files to {target_image_dir.split('/')[-1]}")for index in progress_bar:image_file = image_files[index]label_file = os.path.splitext(image_file)[0] + '.json'  # 修改标签文件后缀为.jsonshutil.copy(os.path.join(images_dir, image_file), os.path.join(target_image_dir, image_file))if os.path.exists(os.path.join(labels_dir, label_file)):shutil.copy(os.path.join(labels_dir, label_file), os.path.join(target_label_dir, label_file))copy_files(train_indices, 'train/images', 'train/labels')copy_files(val_indices, 'val/images', 'val/labels')copy_files(test_indices, 'test/images', 'test/labels')if __name__ == "__main__":images_dir = 'dataset\\images'labels_dir = 'dataset\\labels'split_dataset(images_dir, labels_dir, random_seed=42)

只需要修改对应的原始未划分的数据集图片和标签路径即可

    images_dir = 'dataset\\images'labels_dir = 'dataset\\labels'

今天不学习,明天变垃圾!


http://www.ppmy.cn/server/165775.html

相关文章

(脚本学习)BUU18 [CISCN2019 华北赛区 Day2 Web1]Hack World1

自用 题目 考虑是不是布尔盲注,如何测试:用"1^1^11 1^0^10,就像是真真真等于真,真假真等于假"这个测试 SQL布尔盲注脚本1 import requestsurl "http://8e4a9bf2-c055-4680-91fd-5b969ebc209e.node5.buuoj.cn…

docker安装es及分词器ik

系统是macos,docker是docker-desktop 拉取镜像 docker pull bitnami/elasticsearch 启动docker镜像 docker create -e "discovery.typesingle-node" \ --name elasticsearch1 -p 9200:9200 -p 9300:9300 \ bitnami/elasticsearch:8.17.1 测试是否好…

并行计算、分布式计算与云计算:概念剖析与对比研究(表格对比)

什么是并行计算?什么是分布计算?什么是云计算?我们如何更好理解这3个概念,我们采用概念之间的区别和联系的方式来理解,做到切实理解,深刻体会。 1、并行计算与分布式计算 并行计算、分布式计算都属于高性…

vue文档01

什么是vue 构建用户界面的js框架,提供了一套声明式,组件化的编程模版 声明式 :关注结果,vuejs帮我们封装了过程 vuejs内部是命令式的,暴露给用户的是更声明式的响应式:数据变化自动更新视图 渐进式框架 不同的使用者在web上构建的东西,在形式上和规模上有很大的不同,vue设计…

WPS计算机二级•幻灯片放映与会议

听说这是目录哦 放映PPT时常用的快捷技巧🥬设置放映模式🥕演讲备注的添加和隐藏🫚在PPT中插入附件并放映时打开🫛隐藏幻灯片 不被放映和打印🍄‍🟫演讲计时模式🥦能量站😚 放映PPT时…

Python基础-使用list和tuple

目录 list tuple 练习 小结 list Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出班里所有同学的名字,就可以用一个list表示: >>> classmates …

NGINX-RTMP 框架详解及与SRS对比

NGINX-RTMP 框架详解及与SRS对比 1. 概述 NGINX-RTMP 是基于 Nginx 的第三方模块(由社区开发维护),专注于 RTMP 协议的流媒体处理,适用于直播推流、点播分发等场景。它通过扩展 Nginx 的能力,支持 RTMP 流接收、转码、录制及多协议输出(如 HLS)。核心特点如下: 2. 核…

2025年最新Stable Diffusion 新手入门教程,安装使用及模型下载

一、安装要求: ① 操作系统:Windows10以后的系统 ② CPU:不做强制性要求 ③ 内存:推荐8G以上 ④ 显卡:必须是Nvidia的独立显卡,显存最低4G,推荐20系以后;A卡、核显只能用CPU跑 …