【目标检测】将目标检测数据集划分为训练集、验证集与测试集 python代码
文件结构
- 数据集data_dir文件结构:
├── data_dir: 数据集图片所在目录(可包含其他合适文件,本脚本只对图片进行统计)├── 1.jpg: 图片1├── 2.jpg: 图片2└── n.jpg: 图片n
- 生成文件结构:划分后数据集保存save_dir下
├── save_dir: 划分后图片保存目录├── train: 训练集├── 1.jpg: 图片1└── n.jpg: 图片n├── val: 验证集└── test: 测试集(可根据需要选择是否划分测试集)
代码实现
- 检查数据集data_dir是否存在,否则报错;
assert os.path.exists(data_dir), \print('{} does not exist, please input again!'.format(data_dir))
- 检查保存路径是否存在,否则创建;
def mkdir(check_dir):if not os.path.exists(check_dir):os.makedirs(check_dir)
- 随机打乱数据集图片;
# 获取数据集中所有的图片路径
img_list = os.listdir(data_dir)
img_list = [os.path.join(data_dir, img) for img in img_list if img.endswith('.jpg')]
# 随机打乱数据集顺序
random.shuffle(img_list)
- 根据划分比例计算训练集、验证集和测试集(若需)大小;
# 计算划分后的数据集大小if len(proportion) == 1:train_size = int(len(img_list) * proportion[0])elif len(proportion) == 2:train_size = int(len(img_list) * proportion[0])val_size = int(len(img_list) * proportion[1])
- 将数据集划分并保存至对应目录
# 将数据集划分为训练集、验证集和测试集(若有)if len(proportion) == 1:train_list = img_list[:train_size]val_list = img_list[train_size:]for img in train_list:shutil.copy(img, os.path.join(save_dir, "train"))for img in val_list:shutil.copy(img, os.path.join(save_dir, "val"))elif len(proportion) == 2:train_list = img_list[:train_size]val_list = img_list[train_size:train_size+val_size]test_list = img_list[train_size+val_size:]for img in train_list:shutil.copy(img, os.path.join(save_dir, "train"))for img in val_list:shutil.copy(img, os.path.join(save_dir, "val"))for img in test_list:shutil.copy(img, os.path.join(save_dir, "test"))
完整代码
import os
import random
import shutildef mkdir(check_dir):if not os.path.exists(check_dir):os.makedirs(check_dir)def split_dataset(data_dir, proportion, save_dir):assert os.path.exists(data_dir), \print('{} does not exist, please input again!'.format(data_dir))# 检查保存路径是否存在,若不存在则创建mkdir(save_dir)mkdir(os.path.join(save_dir, "train"))mkdir(os.path.join(save_dir, "val"))if len(proportion) == 2:mkdir(os.path.join(save_dir, "test"))# 获取数据集中所有的图片路径img_list = os.listdir(data_dir)img_list = [os.path.join(data_dir, img) for img in img_list if img.endswith('.jpg')]# 随机打乱数据集顺序random.shuffle(img_list)# 计算划分后的数据集大小if len(proportion) == 1:train_size = int(len(img_list) * proportion[0])elif len(proportion) == 2:train_size = int(len(img_list) * proportion[0])val_size = int(len(img_list) * proportion[1])# 将数据集划分为训练集、验证集和测试集(若有)if len(proportion) == 1:train_list = img_list[:train_size]val_list = img_list[train_size:]for img in train_list:shutil.copy(img, os.path.join(save_dir, "train"))for img in val_list:shutil.copy(img, os.path.join(save_dir, "val"))elif len(proportion) == 2:train_list = img_list[:train_size]val_list = img_list[train_size:train_size+val_size]test_list = img_list[train_size+val_size:]for img in train_list:shutil.copy(img, os.path.join(save_dir, "train"))for img in val_list:shutil.copy(img, os.path.join(save_dir, "val"))for img in test_list:shutil.copy(img, os.path.join(save_dir, "test"))
if __name__ == "__main__":data_dir = './test_dir' # 数据集目录proportion = [0.6, 0.2] # 划分比例save_dir = './test_result_dir' # 保存路径split_dataset(data_dir, proportion, save_dir)print('finished!')
使用方法
- 修改参数
data_dir : str,指定为待划分数据集路径,需存在否则报错
proportion :list,元素为1代表训练集所占比例,剩余则划分至验证集;元素为2则代表训练集、验证集比例,剩余则划分至测试集
save_dir :str,指定为划分后数据集保存路径,不存在自动创建
【目标检测】将目标检测数据集划分为训练集、验证集与测试集 python代码相关推荐
- 【YOLOv5 数据集划分】训练和验证、训练验证和测试(train、val)(train、val、test)
[YOLOv5 数据集划分]训练和验证.训练验证和测试(train.val),(train.val.test) ①在已有测试集的情况下划分训练集和验证集 # 将图片和标注数据按比例切分为 训练集和测试 ...
- ML之FE:数据处理—特征工程之数据集划分成训练集、验证集、测试集三部分简介、代码实现、案例应用之详细攻略
ML之FE:数据处理-特征工程之数据集划分成训练集.验证集.测试集三部分简介.代码实现.案例应用之详细攻略 目录 数据集划分成训练.验证.测试三种数据的简介 1.训练集.验证集的作用 2.验证数据集 ...
- YOLOv5将自己数据集划分为训练集、验证集和测试集
在用自己数据集跑YOLOv5代码时候,需要将自己的VOC标签格式数据集转为yolo格式. 首先是要获取自己的数据集,然后再对数据集进行标注,保存为VOC(xml格式).然后再把标注完的数据集划分为训练 ...
- 图片数据集划分为训练集、测试集、验证集
原博文:link. 亲测有用 主要是用于天池学习项目:link. # -*- coding: utf-8 -*- """ 将数据集划分为训练集,验证集,测试集 " ...
- 第5章【思考与练习2】将数据集划分为训练集与测试集,查看决策树分类器的性能。 将例5-3中的分类器保存到文件中,然后重新加载预测给出的新数据。
P101思考与练习2 1.将数据集划分为训练集与测试集,查看决策树分类器的性能. #1. #划分为测试集与训练集 import pandas as pd data = pd.read_csv('dat ...
- 数据集切分(训练,验证,测试)
import os import random from shutil import copy2def data_set_split(src_data_folder, target_data_fold ...
- Python将数据集划分为训练集、验证集和测试集
将数据集(位置:D:/Code/Data/centerlinedata/tem_voc/JPEGImages/)下的621张图片按照划分比例(如 训练集(train):验证集(val):测试集(tes ...
- 训练集山准确率高测试集上准确率很低_拒绝DNN过拟合,谷歌准确预测训练集与测试集泛化差异,还开源了数据集 | ICLR 2019...
鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 深度神经网络(DNN)如今已经无处不在,从下围棋到打星际,DNN已经渗透到图像识别.图像分割.机器翻译等各种领域,并且总是表现惊艳. 然而, ...
- MATLAB算法实战应用案例精讲-【智能优化算法】多目标粒子群优化(MOPSO)(补充篇)(附MATLAB和python代码实现)
目录 前言 几个高频面试题目
最新文章
- $\be$-QGE 的弱强唯一性
- java中String,int,Integer,char、double类型转换
- 华为python工程师工资-华为百万年薪抢人工智能应届生,这个高薪行业你如何进入?...
- 果园种树java_Java版淘金果园系统
- pip安装python模块遇到一直出现retrying的问题
- Asp.Net Core--基于角色的授权
- 引用和指针-内存的分配方式有几种
- SAP 产品 UI 里的容器组件的概念和开发概述
- java 适用参数_Java功能的适用性
- java耗时操作阻塞_spring boot高并发下耗时操作的实现方法
- inkscape使用_使用Inkscape和咖啡渣DIY怪异的瓶子标签
- (51)蓝湖团队协作开发平台
- spring gateway 限流持久化_Spring Cloud Gateway网关如何快速实施限流方案?-Part 6
- vue 异步更新队列 Vue.nextTick(callback)
- php 获取文件给用户下载,让PHP更快的为用户提供文件下载_PHP教程
- FlasCC例子研究之bitmapdata
- Tableau安装与破解
- Apollo 的3D障碍物感知解析
- python 手机号码归属 ip地址查询
- 什么句型可以 让我说出 悲伤的文法