文件结构

  1. 数据集data_dir文件结构:
├── data_dir: 数据集图片所在目录(可包含其他合适文件,本脚本只对图片进行统计)├── 1.jpg: 图片1├── 2.jpg: 图片2└── n.jpg: 图片n
  1. 生成文件结构:划分后数据集保存save_dir下
├── save_dir: 划分后图片保存目录├── train: 训练集├── 1.jpg: 图片1└── n.jpg: 图片n├── val:   验证集└── test:  测试集(可根据需要选择是否划分测试集)

代码实现

  1. 检查数据集data_dir是否存在,否则报错;
assert os.path.exists(data_dir), \print('{} does not exist, please input again!'.format(data_dir))
  1. 检查保存路径是否存在,否则创建;
def mkdir(check_dir):if not os.path.exists(check_dir):os.makedirs(check_dir)
  1. 随机打乱数据集图片;
# 获取数据集中所有的图片路径
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)
  1. 根据划分比例计算训练集、验证集和测试集(若需)大小;
    # 计算划分后的数据集大小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])
  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!')

使用方法

  1. 修改参数
    data_dir : str,指定为待划分数据集路径,需存在否则报错
    proportion :list,元素为1代表训练集所占比例,剩余则划分至验证集;元素为2则代表训练集、验证集比例,剩余则划分至测试集
    save_dir :str,指定为划分后数据集保存路径,不存在自动创建

【目标检测】将目标检测数据集划分为训练集、验证集与测试集 python代码相关推荐

  1. 【YOLOv5 数据集划分】训练和验证、训练验证和测试(train、val)(train、val、test)

    [YOLOv5 数据集划分]训练和验证.训练验证和测试(train.val),(train.val.test) ①在已有测试集的情况下划分训练集和验证集 # 将图片和标注数据按比例切分为 训练集和测试 ...

  2. ML之FE:数据处理—特征工程之数据集划分成训练集、验证集、测试集三部分简介、代码实现、案例应用之详细攻略

    ML之FE:数据处理-特征工程之数据集划分成训练集.验证集.测试集三部分简介.代码实现.案例应用之详细攻略 目录 数据集划分成训练.验证.测试三种数据的简介 1.训练集.验证集的作用 2.验证数据集 ...

  3. YOLOv5将自己数据集划分为训练集、验证集和测试集

    在用自己数据集跑YOLOv5代码时候,需要将自己的VOC标签格式数据集转为yolo格式. 首先是要获取自己的数据集,然后再对数据集进行标注,保存为VOC(xml格式).然后再把标注完的数据集划分为训练 ...

  4. 图片数据集划分为训练集、测试集、验证集

    原博文:link. 亲测有用 主要是用于天池学习项目:link. # -*- coding: utf-8 -*- """ 将数据集划分为训练集,验证集,测试集 " ...

  5. 第5章【思考与练习2】将数据集划分为训练集与测试集,查看决策树分类器的性能。 将例5-3中的分类器保存到文件中,然后重新加载预测给出的新数据。

    P101思考与练习2 1.将数据集划分为训练集与测试集,查看决策树分类器的性能. #1. #划分为测试集与训练集 import pandas as pd data = pd.read_csv('dat ...

  6. 数据集切分(训练,验证,测试)

    import os import random from shutil import copy2def data_set_split(src_data_folder, target_data_fold ...

  7. Python将数据集划分为训练集、验证集和测试集

    将数据集(位置:D:/Code/Data/centerlinedata/tem_voc/JPEGImages/)下的621张图片按照划分比例(如 训练集(train):验证集(val):测试集(tes ...

  8. 训练集山准确率高测试集上准确率很低_拒绝DNN过拟合,谷歌准确预测训练集与测试集泛化差异,还开源了数据集 | ICLR 2019...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 深度神经网络(DNN)如今已经无处不在,从下围棋到打星际,DNN已经渗透到图像识别.图像分割.机器翻译等各种领域,并且总是表现惊艳. 然而, ...

  9. MATLAB算法实战应用案例精讲-【智能优化算法】多目标粒子群优化(MOPSO)(补充篇)(附MATLAB和python代码实现)

    目录 前言 几个高频面试题目

最新文章

  1. $\be$-QGE 的弱强唯一性
  2. java中String,int,Integer,char、double类型转换
  3. 华为python工程师工资-华为百万年薪抢人工智能应届生,这个高薪行业你如何进入?...
  4. 果园种树java_Java版淘金果园系统
  5. pip安装python模块遇到一直出现retrying的问题
  6. Asp.Net Core--基于角色的授权
  7. 引用和指针-内存的分配方式有几种
  8. SAP 产品 UI 里的容器组件的概念和开发概述
  9. java 适用参数_Java功能的适用性
  10. java耗时操作阻塞_spring boot高并发下耗时操作的实现方法
  11. inkscape使用_使用Inkscape和咖啡渣DIY怪异的瓶子标签
  12. (51)蓝湖团队协作开发平台
  13. spring gateway 限流持久化_Spring Cloud Gateway网关如何快速实施限流方案?-Part 6
  14. vue 异步更新队列 Vue.nextTick(callback)
  15. php 获取文件给用户下载,让PHP更快的为用户提供文件下载_PHP教程
  16. FlasCC例子研究之bitmapdata
  17. Tableau安装与破解
  18. Apollo 的3D障碍物感知解析
  19. python 手机号码归属 ip地址查询
  20. 什么句型可以 让我说出 悲伤的文法

热门文章

  1. dos命令获取当前日期并格式化
  2. 高级的python 后端程序员, 应该掌握哪些技能点 ?
  3. node.js + express + mysql 简单运用
  4. QQ2012如何恢复“合并会话窗口”为多个聊天窗口?
  5. python 文件命令_python中写入文件数据及文件定位操作命令
  6. 【unity】性能优化之——视锥体剔除(Frustum Culling)(一)
  7. 使用KaTeX渲染数学公式
  8. 史上最暖2月谁制造?
  9. 事务的基本特性是什么
  10. 渗透实战-JSP上传webshell报错500