脚本工具库】划分图像数据集(附源码)

在机器学习和深度学习任务中,数据集的划分是非常重要的一步。我们通常需要将数据集划分为训练集、验证集和测试集,以便进行模型训练和评估。手动操作不仅耗时,而且容易出错。为了解决这个问题,我们可以编写一个Python脚本,使用os、shutil和glob库来自动化这个过程。本文将详细介绍如何编写一个划分图像数据集的脚本。

准备工作

在开始之前,请确保你的系统上已经安装了Python环境。os、shutil和glob是Python标准库,自带无需安装。

脚本源码

以下是完整的Python脚本源码,该脚本可以从指定的源文件夹中按比例随机划分图像数据集,并将其复制到目标文件夹中。

import os
import shutil
import random
from glob import globdef split_images(source_dir, train_dir, val_dir=None, test_dir=None, train_ratio=0.8, val_ratio=None, test_ratio=None):# 确保目标文件夹存在os.makedirs(train_dir, exist_ok=True)if val_dir:os.makedirs(val_dir, exist_ok=True)if test_dir:os.makedirs(test_dir, exist_ok=True)# 获取所有图像文件路径image_paths = glob(os.path.join(source_dir, '*'))# 打乱图像文件顺序random.shuffle(image_paths)# 计算分割点total_images = len(image_paths)train_split_index = int(total_images * train_ratio)if val_dir and test_dir:val_split_index = train_split_index + int(total_images * val_ratio)# 分割图像路径到训练集、验证集和测试集train_images = image_paths[:train_split_index]val_images = image_paths[train_split_index:val_split_index]test_images = image_paths[val_split_index:]elif test_dir:# 如果只有测试集,将剩余部分分为训练集和测试集train_images = image_paths[:train_split_index]test_images = image_paths[train_split_index:]val_images = []else:# 只分割为训练集和验证集train_images = image_paths[:train_split_index]val_images = image_paths[train_split_index:]test_images = []# 复制训练集图像到目标文件夹for image_path in train_images:shutil.copy(image_path, train_dir)# 复制验证集图像到目标文件夹for image_path in val_images:shutil.copy(image_path, val_dir)# 复制测试集图像到目标文件夹for image_path in test_images:shutil.copy(image_path, test_dir)print(f"总图像数: {total_images}")print(f"训练集图像数: {len(train_images)}")if val_dir:print(f"验证集图像数: {len(val_images)}")if test_dir:print(f"测试集图像数: {len(test_images)}")# 使用示例
source_directory = r'D:\A_Data\VOCdevkit\VOC2007\JPEGImages'  # 替换为源图像文件夹路径
training_directory = r'D:\A_Data\VOCdevkit\VOC2007\JPEGImages1'  # 替换为训练集目标文件夹路径
validation_directory = r'D:\A_Data\VOCdevkit\VOC2007\JPEGImages2'  # 替换为验证集目标文件夹路径
test_directory = r'D:\A_Data\VOCdevkit\VOC2007\JPEGImages3'  # 替换为测试集目标文件夹路径# 示例:划分为训练集和测试集,比例分别为0.8和0.2
split_images(source_directory, training_directory, test_dir=test_directory, train_ratio=0.8, test_ratio=0.2)# 示例:划分为训练集、验证集和测试集,比例分别为0.7、0.2和0.1
# split_images(source_directory, training_directory, validation_directory, test_directory, train_ratio=0.7, val_ratio=0.2, test_ratio=0.1)
使用说明
  1. 修改source_directory为源图像文件夹路径,training_directoryvalidation_directorytest_directory为目标文件夹路径。
  2. 调整train_ratioval_ratiotest_ratio以设置训练集、验证集和测试集的划分比例。
  3. 运行脚本,程序会按设定比例随机选择图像文件,并将其复制到对应的目标文件夹中。
总结

这个脚本可以帮助你轻松地按比例随机划分图像数据集,节省了大量的时间和精力。希望这个教程对你有所帮助。如果你有任何问题或建议,欢迎在评论区留言讨论。

感谢阅读!

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

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

相关文章

python-登录界面-demo

文章目录 前言python-登录界面-demo 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!! python-…

Flask之表单

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、HTML表单 二、使用Flask-WTF处理表单 2.1、定义WTForms表单类 2.2、输出HTML代码 2.3、在模板中渲染表单 三、处理表单数据 3.1、提…

geojson文件默认已有的style会导致webGL渲染错误处理办法

geojson文件默认已有的style会导致webGL渲染错误处理办法 相关链接: 功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 代码: export function showDraw(isFlyTo) {removeLayer()graphicLayer new mars3d.layer.GeoJsonLayer({data: {type: &quo…

有两个长方柱,其高、宽、长分别为12,20,25;10,14,20。求它们的体积。编写一个基于对象的程序,在类中用带参数的构造函数对数据成员初始化

在上一篇文章中的构造函数不带参数,在函数体中对数据成员赋初值。这种方式使该类的每一个对象的数据成员都得到同一组初值(例中各个对象的数据成员的初值均为0)。但有时用户希望对不同的对象赋予不同的初值,这时就无法使用上面的办法来解决了…

Open AI 前 Superalignment部门研究员Leopold Aschenbrenner的关于Superintelligence担忧的真挚长文

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

理解MySQL数据库主键:从基础概念到实践

一、前言 在关系型数据库中,主键(Primary Key)是一个至关重要的概念。它不仅用于唯一标识表中的每一行数据,还在保证数据完整性和执行高效查询方面发挥着重要作用。本篇文章将深入探讨MySQL数据库主键的相关知识,包括…

基于ESP8266串口WIFI模块ESP-01S在Station模式(即接收无线信号( WiFi))下实现STC单片机与手机端网路串口助手相互通信功能

基于ESP8266串口WIFI模块ESP-01S在Station模式(即接收无线信号( WiFi))下实现STC单片机与手机端网路串口助手相互通信功能 ESP8266_01S引脚功能图ESP8266_01S原理图ESP8266_01S尺寸图检验工作1、USB-TTL串口工具(推荐使用搭载CP2102芯片的安信可USB-T1串口)与ESP8266_01S…

基于前馈神经网络的姓氏分类任务(基础)

1、认识前馈神经网络 What is it 图1-1 前馈神经网络结构 人们大多使用多层感知机(英语:Multilayer Perceptron,缩写:MLP)作为前馈神经网络的代名词,但是除了MLP之外,卷积神经网络&#xff08…

Orangepi Zero2使用外设驱动库wiringOP驱动蜂鸣器

目录 一、安装外设驱动库 1.1 wiringPi外设SDK安装: 二、使用wiringOP库驱动蜂鸣器 2.1 蜂鸣器的硬件连接: 2.2 使用wiringOP库实现蜂鸣器滴滴响: 2.3 设置vim代码显示格式: 一、安装外设驱动库 1.1 wiringPi外设SDK安装&a…

Scala的Actor模型:并发编程的革新

引言 在现代软件开发中,尤其是涉及到大数据和分布式系统时,处理并发问题变得至关重要。Scala语言以其强大的并发模型——Actor模型,为开发者提供了一种高效、可伸缩的方式来构建并发应用程序。本文将深入探讨Scala的Actor模型,包…

Free Pascal语言基础学习:定义变量、数据类型、循环语句、case语句、条件判断、with语句、运算符

Pascal是一种结构化编程语言,而Free Pascal作为其现代编译器,不仅支持跨多种操作系统和处理器架构,还提供了高效的内存使用和函数重载等先进功能。Free Pascal继承了Pascal语言的核心特性,同时进行了扩展和优化,使其成…

zdppy_api+vue3+antd实现文件上传功能

后端代码 因为zdppy框架是一个低代码框架,所以后端接口是特别简单的一句话就能搞定。 import api import upload from api.middleware import corssave_dir "uploads"app api.Api(routes[upload.upload("/upload", save_dir)],middleware[c…

Driver.js 轻量级、互动式的功能引导效果

主要功能和特点 1. 高亮显示:高亮显示网页上的特定元素,吸引用户注意。 2. 多步骤引导:支持创建多个步骤的引导,每一步都可以高亮不同的元素并提供相应的说明。 3. 弹出提示:在高亮元素旁边显示弹出提示&#xff0c…

顺序结构程序设计(python)

文章目录 1.python运算符1.1 python算数运算1.2python比较运算符1.3 Python赋值运算符1.4 python逻辑运算符1.5 python成员运算符1.6python身份运算符1.7python运算符优先级 2.python数据类型2.1Python 数字类型转换2.2 Python 数字运算2.3 python数学函数2.4 python随机数函数…

开源大模型:技术革新与未来展望

开源大模型:技术革新与未来展望 随着开源程序的发展,越来越多的程序员开始关注并加入开源大模型的行列。开源不仅推动了技术的进步,也创造了一个共享与合作的生态系统。在这个背景下,开源大模型成为了众多技术爱好者和专业人士的…

基于Java+MySQL停车场车位管理系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

PHP护照识别API、护照识别设备

我国经济发展迅速,更多人已经不局限在国内旅游,去国外游玩的人越来越多。巴厘岛是度假胜地,自然也吸引了许多我国的游客。近期,受阿贡火山喷发影响,巴厘岛伍拉莱国际机场于11月27日7时起临时关闭。我国南京的谢女士和朋…

vrrp与mstp

简单实验步骤

「C系列」C 命令行参数

文章目录 一、C 命令行参数二、C 命令行参数-应用场景1. 指定配置选项2. 处理文件3. 传递参数值 三、相关链接 一、C 命令行参数 C语言命令行参数是在运行程序时通过命令行传递给程序的额外信息或数据,用于自定义程序的行为,使程序能够执行不同的操作或…

Aiseesoft Screen Recorder v2解锁版安装教程 (屏幕录像工具)

前言 Aiseesoft Screen Recorder 是一个易于使用的屏幕捕捉工具,可以在您的计算机上录制任何视频或音频并以高质量保存它们。这款功能强大的视频屏幕录制应用程序可以帮助您在 Windows 11/10/8/7 上抓取在线电影和广播、捕捉游戏、制作视频教程、录制网络摄像头视频…