# 将数据集随机划分为训练集和验证集,测试集

news2024/11/8 4:53:47
# 将数据集随机划分为训练集和验证集,测试集
import os
import random
import shutil

from tqdm import tqdm

image_path = r'F:\Dissertation\3.Sub-Topic-C\Datasets\0.Ship Detection from Aerial Images_datasets\images\\'  # 源图片文件夹路径
mask_path = r'F:\Dissertation\3.Sub-Topic-C\Datasets\0.Ship Detection from Aerial Images_datasets\annotations\\'  # 标签文件夹路径

train_images = r'F:\Dissertation\3.Sub-Topic-C\Datasets\0.Ship Detection from Aerial Images_datasets\VOC\train\images'  # 划分后训练集图片的保存路径
train_labels = r'F:\Dissertation\3.Sub-Topic-C\Datasets\0.Ship Detection from Aerial Images_datasets\VOC\train\labels'
val_images = r'F:\Dissertation\3.Sub-Topic-C\Datasets\0.Ship Detection from Aerial Images_datasets\VOC\val\images'
val_labels = r'F:\Dissertation\3.Sub-Topic-C\Datasets\0.Ship Detection from Aerial Images_datasets\VOC\val\labels'
# test_images = r'E:\DCI(first)_3\DCI_Split2\test\images'
# test_labels = r'E:\DCI(first)_3\DCI_Split2\test\labels'

if not os.path.exists(train_images):
    os.makedirs(train_images)
if not os.path.exists(train_labels):
    os.makedirs(train_labels)
if not os.path.exists(val_images):
    os.makedirs(val_images)
if not os.path.exists(val_labels):
    os.makedirs(val_labels)
# if not os.path.exists(test_images):
#     os.makedirs(test_images)
# if not os.path.exists(test_labels):
#     os.makedirs(test_labels)
train_rate = 0.8  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
val_rate = 0.2
#test_rate = 0.15
# 求训练集
pathDir = os.listdir(image_path)  # 取图片的原始路径
print('数据集总共有图片:', len(pathDir))
print(
    '划分比例如下:训练集:{},验证集:{}'.format(int(len(pathDir) * train_rate), int(len(pathDir) * val_rate),
                                         )) #,测试集:{}   int(len(pathDir) * test_rate)
picknumber = int(len(pathDir) * train_rate)  # 按照rate比例从文件夹中取一定数量图片
train_sample = random.sample(pathDir, picknumber)  # 随机选取picknumber数量的样本图片
print('训练集的大小为:', len(train_sample))

# 复制为训练集
for name in tqdm(train_sample):
    shutil.copy(image_path + name, train_images + "\\" + name)
    shutil.copy(mask_path + name[:-3] + "xml", train_labels + "\\" + name[:-3] + "xml")

# 求出原数据集不含训练集
all_images = os.listdir(image_path)
remaining_image = []
for file in all_images:
    if file not in train_sample:
        remaining_image.append(file)
# 求验证集
picknumber2 = int(len(remaining_image) * val_rate / (val_rate ))  # 按照rate比例从文件夹中取一定数量图片 + test_rate
val_sample = random.sample(remaining_image, picknumber2)  # 随机选取picknumber数量的样本图片
print('验证集的大小为:', len(val_sample))
# 复制为验证集
for file in tqdm(val_sample):
    shutil.copy(image_path + file, val_images + "\\" + file)
    shutil.copy(mask_path + file[:-3] + "xml", val_labels + "\\" + file[:-3] + "xml")

# test_sample = []
# for file in remaining_image:
#     if file not in val_sample:
#         test_sample.append(file)
# print('测试集的大小为:', len(test_sample))
# # 复制为测试集
# for file in tqdm(test_sample):
#     shutil.copy(image_path + file, test_images + "\\" + file)
#     shutil.copy(mask_path + file, test_labels + "\\" + file)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/672143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定义一个一维数组存放10个整数,要求从键盘输入10个数,对其进行求和、求平均、求最大值/最小值及其位置的下标

目录 题目 分析思路 法一:在主函数直接编程 法二:用 调用函数 实现 代码 法一:在主函数直接编程 法二:用 调用函数 实现 题目 定义一个一维数组存放10个整数,要求从键盘输入10个数,对其进行求和、求…

新华三H3C无线控制器AC对接网络准入实现定制化Portal短信认证

随着企业办公信息化的不断发展,企业内网安全也面临着诸多挑战。在包含了无线 WiFi、有线网络的混合网络环境中,员工或访客、外包人员、合作伙伴等用户在接入网络时,如果无需进行身份验证及访问权限的管理,则很可能给不法分子可乘之…

一起Talk Android吧(第五百四十八回:如何创建垂直版SeekBar)

文章目录 概念介绍创建方法示例程序 各位看官们大家好,上一回中咱们说的例子是"蓝牙广播中的厂商数据",本章回中介绍的例子是" 如何创建垂直版SeekBar"。闲话休提,言归正转,让我们一起Talk Android吧! 概念介…

基于深度学习的高精度绵羊检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度绵羊检测识别系统可用于日常生活中或野外来检测与定位绵羊目标,利用深度学习算法可实现图片、视频、摄像头等方式的绵羊目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

Java基础知识之异常处理

目录 1.Java 异常处理 2.Exception 类的层次 3.Java 内置异常类 4.异常方法 5.捕获异常 6.多重捕获块 7.throws/throw 关键字 7.1 throw 关键字 7.2 throws 关键字 8.finally关键字 8.1 实例--ExcepTest.java 文件代码: 9.try-with-resources 9.1 try-…

外设驱动库开发笔记54:外设库驱动设计改进的思考

不知不觉中我们已经发布了五十多篇外设驱动的文章。前段时间有一位网友提出了一些非常中肯的建议,这也让我们开始考虑怎么优化驱动程序设计的问题。在这一篇中我们将来讨论这一问题。 1、问题分析 首先我们来分析一下网友提出的几点问题。第一点是说在驱动设计时&a…

[年中总结]真正的精彩都在海里

时间过得可真的是快啊,一眨眼就是六月底了 这半年的经历也是挺多彩 二月底的时候,跟老大提出了离职申请,经过 老大/hr/部门 leader 的谈话之后,依然决定离职 四月底拿到离职证明之后,就出去玩了一圈,六月份刚回来,哈哈哈哈 我不知道有没有人和我一样,非常在意能不能在一份工作…

2023个人简历的范文参考(合集)

2023个人简历的范文参考【篇1】 基本信息 姓名:__ 性别:__ 出生日期:__ 籍贯:__市 目前城市:__市 联系电话:__ E-mail:__ 应聘方向 求职行业:金融/投资/证券,银行&#x…

Python 标准库-CSV 文件读写

目录 【1】读取CSV 【2】字典方式写入 【3】常用自定义 csv --- CSV 文件读写 — Python 3.10.11 文档 涉及方法: csv.DictReadercsv.DictWriter 【1】读取CSV def readToCsvFile(csv_path, u_delimiter,, u_doublequoteTrue):read_file []try:with open(cs…

计算机网络23年6月期末复习【更新】

计算机网络23年6月期末复习 题型分布 循环冗余码(CRC校验码)子网划分IP数据报分片滑动窗口拥塞避免和快速重传TCP三次握手和四次握手路由选择(更新路由表)1.(简答题)网络体系结构为什么要采用分层次的结构&…

签约新闻 | 南方传媒携手AMT企源开启各项管理优化工作

南方出版传媒股份公司(本文简称“南方传媒”)成立于2009年,2016年在上交所挂牌上市,是广东省文化产业第一股、广东文化产业龙头企业、中国出版业重要力量。 在数字化发展浪潮下,为支撑业务数字化转型变革,…

FreeBSD 开源操作系统 30周年纪念特刊

FreeBSD是一种类UNIX操作系统,是经由 BSD、386BSD 和 4.4BSD 发展而来的Unix的一个重要分支。由一些原来 BSD UNIX 的开发者后来转到 FreeBSD 的开发,使得 FreeBSD 在内部结构和系统 API 上和 UNIX 有很大的兼容性。FreeBSD 是开源Free。 FreeBSD 项目庆…

车间现场管理难!车间主管如何掌握管理进阶?

车间是企业的基本层,搞好车间现场管理,有利于企业增强竞争力,提高产品质量和员工素质,保证安全生产,而车间班组长是生产线的主要管理者,是直接“当家人”,对生产现场状况了如指掌,对…

边缘智能:边缘计算驱动实时深度学习

边缘智能 作为人工智能领域的当红炸子鸡,深度学习技术近年来得到了学术界与产业界的大力追捧。目前,深度学习技术已在计算机视觉、自然语言处理以及语音识别等领域大放异彩,相关产品正如雨后春笋般涌现。由于深度学习模型需要进行大量的计算…

【VulnHub系列】DC4

因为是从PDF转换过来偶尔可能会出现内容缺少,可以看原版PDF:有道云笔记 实验环境 Kali:192.168.10.102 MyFileServer:192.168.10.106 实验过程 通过arp-scan来发现靶机的IP地址 sudo arp-scan --interface eth0 192.168.10.1…

【Flutter】Flutter 状态管理 Provider 包使用概述

文章目录 一、 前言二、 Provider 包简介三、 安装 Provider 包四、 Provider 包的基本使用五、 示例代码:一个简单的状态管理实例六、 版本信息七、 总结 一、 前言 🎉想要精通 Flutter,掌握更多技巧和最佳实践?好消息来了&…

layui时间控件单击双击改变状态

文章目录 1️⃣ layui单击隐藏弹出的时间窗2️⃣ layui双击隐藏弹出的时间窗2.1 找到官方的插件2.2 改变引用,加上change函数 优质资源分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418 layui时间控件单击双击改变状态&…

计算机的工作过程和主要性能指标

一、计算机的工作过程 为使计算机按预定要求工作,首先要编制程序。 程序是一个特定的指令序列,它告诉计算机要做哪些事,按什么步骤去做。 指令是一组二进制信息的代码,用来表示计算机所能完成的基本操作。 编制好的程序放在主存中…

【030】C++类和对象之友元(friend)详解

C类和对象之友元(friend)详解 引言一、友元概述二、友元的语法三、友元的应用举例3.1、普通全局函数作为类的友元3.2、类的某个成员函数作为另一个类的友元3.3、整个类作为另一个类的友元 四、友元的注意事项五、友元案例总结 引言 💡 作者简…

大数值使用BitSet存储导致的内存溢出

背景: 在日常的工作中,使用Redis的bitmap统计每天的登录用户数,使用java的BitSet进行统计总数或者与或非等操作时,我们可以看到BitSet/Redis的Bitmap操作的身影,他们也的确能减少内存的使用量以及操作的性能&#xff…