paddleseg数据集自定义比例划分为测试集test.txt,训练集train.txt,验证集val.txt

将语义分割的数据集标注好后如下所示:

在这里插入图片描述

整理好图片和标签文后需要按照比例划分为训练集,验证集,测试集。

具体划分代码见下:

import glob
import os.path
import argparse
import warnings
import numpy as npdef parse_args():parser = argparse.ArgumentParser(description='A tool for proportionally randomizing dataset to produce file lists.')parser.add_argument('dataset_root', help='the dataset root path', type=str)               # 数据集根目录路径parser.add_argument('images_dir_name', help='the directory name of images', type=str)     # 图片所在的文件路径parser.add_argument('labels_dir_name', help='the directory name of labels', type=str)     # 标签所在的文件路径parser.add_argument('--split', help='', nargs=3, type=float, default=[0.7, 0.3, 0])     # 此代码为默认比例7 :3 :1   可以自定义修改比例parser.add_argument('--separator',dest='separator',help='file list separator',default=" ",type=str)parser.add_argument('--format',help='data format of images and labels, e.g. jpg, tif or png.',type=str,nargs=2,default=['jpg', 'png'])parser.add_argument('--postfix',help='postfix of images or labels',type=str,nargs=2,default=['', ''])return parser.parse_args()def get_files(path, format, postfix):pattern = '*%s.%s' % (postfix, format)search_files = os.path.join(path, pattern)search_files2 = os.path.join(path, "*", pattern)  # 包含子目录search_files3 = os.path.join(path, "*", "*", pattern)  # 包含三级目录filenames = glob.glob(search_files)filenames2 = glob.glob(search_files2)filenames3 = glob.glob(search_files3)filenames = filenames + filenames2 + filenames3return sorted(filenames)def generate_list(args):separator = args.separatordataset_root = args.dataset_rootif abs(sum(args.split) - 1.0) > 1e-8:raise ValueError("The sum of input params `--split` should be 1")image_dir = os.path.join(dataset_root, args.images_dir_name)label_dir = os.path.join(dataset_root, args.labels_dir_name)image_files = get_files(image_dir, args.format[0], args.postfix[0])label_files = get_files(label_dir, args.format[1], args.postfix[1])if not image_files:warnings.warn("No files in {}".format(image_dir))if not label_files:warnings.warn("No files in {}".format(label_dir))num_images = len(image_files)num_label = len(label_files)if num_images != num_label:raise Exception("Number of images = {}, number of labels = {}.""The number of images is not equal to number of labels, ""Please check your dataset!".format(num_images, num_label))image_files = np.array(image_files)label_files = np.array(label_files)state = np.random.get_state()np.random.shuffle(image_files)np.random.set_state(state)np.random.shuffle(label_files)start = 0num_split = len(args.split)dataset_name = ['train', 'val', 'test']for i in range(num_split):dataset_split = dataset_name[i]print("Creating {}.txt...".format(dataset_split))if args.split[i] > 1.0 or args.split[i] < 0:raise ValueError("{} dataset percentage should be 0~1.".format(dataset_split))file_list = os.path.join(dataset_root, dataset_split + '.txt')with open(file_list, "w") as f:num = round(args.split[i] * num_images)end = start + numif i == num_split - 1:end = num_imagesfor item in range(start, end):left = image_files[item].replace(dataset_root, '')if left[0] == os.path.sep:left = left.lstrip(os.path.sep)try:right = label_files[item].replace(dataset_root, '')if right[0] == os.path.sep:right = right.lstrip(os.path.sep)line = left + separator + right + '\n'except:line = left + '\n'f.write(line)print(line)start = endif __name__ == '__main__':args = parse_args()generate_list(args)

将上面代码保存到一个英文路径下,并命名为:split_dataset_list.py,通过cmd进入到保存此.py文件的终端界面,运行以下命令:

python split_dataset_list.py <dataset_root> <images_dir_name> <labels_dir_name> ${FLAGS}

上面命令的参数解释:

dataset_root: 数据集根目录
images_dir_name: 原始图像目录名
labels_dir_name: 标注图像目录名

此代码为默认比例7 :3 :1 可以自定义修改比例

!!!!!注意:导入路径时一定要用绝对路径才行!!!!!

具体样纸如下:

在这里插入图片描述

在这里插入图片描述

到数据集根目录下查看划分后的结果,如下:

在这里插入图片描述
在这里插入图片描述

以上就是paddleseg数据集自定义比例划分为测试集test.txt,训练集train.txt,验证集val.txt的详细划分过程,谢谢!

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

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

相关文章

“清凉计划”KCOFFEE来了,华为天气和肯德基携手提升你的冰凉咖位

八月的热浪席卷着城市&#xff0c;开启了高温酷暑的“闷烤”模式&#xff0c;此时“怕热星人”急需一杯冰爽的冷饮&#xff0c;为了拯救热热热亻七的你们&#xff0c;华为天气联手肯德基带着超强冷势力&#xff0c;发起“清凉计划”&#xff0c;送上一杯KCOFFEE现磨冰咖啡&…

Debian10:安装PHPVirtualBox

PHPVirtualBox 是一个用 PHP 编写&#xff0c;用于管理 VirtualBox 的 Web 前端&#xff08;由AJAX实现&#xff09;。 参考文章&#xff1a;VirtualBoxPHPVirtualBox部署_骡子先生的博客-CSDN博客php virualbox,浏览器远程控制VBox 虚拟机phpVirtualBox_weixin_39815879的博客…

编写一个指令(v-focus2end)使输入框文本在聚焦时焦点在文本最后一个位置

项目反馈输入框内容比较多时候&#xff0c;让鼠标光标在最后一个位置&#xff0c;心想什么奇葩需求&#xff0c;后面试了一下&#xff0c;是有点影响体验&#xff0c;于是就有了下面的效果&#xff0c;我目前的项目都是若依的架子&#xff0c;用的是vue2版本。vue3的朋友想要使…

JVM—编译器、类加载的过程、双亲委派机制这些你还记得吗?

背景介绍 这两天在对JVM的知识进行回顾&#xff0c;顺便来分享分享&#xff0c;接下来也会有系列文章&#xff0c;欢迎大家一起讨论。 过程 为什么叫JVM&#xff1f; Java Virtual Machine&#xff0c;java虚拟机。可以理解成一个以字节码为机器指令的CPU 有哪些特点呢&#…

【Flutter】【packages】simple_animations 简单的实现动画

package&#xff1a;simple_animations 导入包到项目中去 可以实现简单的动画&#xff0c; 快速实现&#xff0c;不需要自己过多的设置 有多种样式可以实现[ ] 功能&#xff1a; 简单的用例&#xff1a;具体需要详细可以去 pub 链接地址 1. PlayAnimationBuilder PlayAnima…

递归神经网络简介

一、说明 说起递归神经网络&#xff0c;递归神经网络&#xff08;RNN&#xff09;主要包括以下几种类型&#xff1a; 简单的RNN&#xff08;Simple RNN&#xff09;&#xff1a;最基本的RNN类型&#xff0c;每个时刻的输出都与前面时刻的状态有关。 循环神经网络&#xff08;R…

Blazor前后端框架Known-V1.2.10

V1.2.10 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

Kafka:springboot集成kafka收发消息

kafka环境搭建参考Kafka&#xff1a;安装和配置_moreCalm的博客-CSDN博客 1、springboot中引入kafka依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><…

Python-OpenCV中的图像处理-形态学转换

Python-OpenCV中的图像处理-形态学转换 形态学转换腐蚀膨胀开运算闭运算形态学梯度礼帽黑帽形态学操作之间的关系 形态学代码例程 形态学转换 形态学操作:腐蚀&#xff0c;膨胀&#xff0c;开运算&#xff0c;闭运算&#xff0c;形态学梯度&#xff0c;礼帽&#xff0c;黑帽等…

B树的插入与删除过程

B树的插入 原树&#xff1a; 插入key后&#xff0c;若导致原节点关键字数超过上限&#xff0c;则从中间位置&#xff08; ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil ⌈2m​⌉&#xff09;将关键字分成两部分&#xff0c;左部分包含的关键字放在原节点中&#xff0c;右部分包含的关键…

前端下载文化部几种方法(excel,zip,html,markdown、图片等等)和导出 zip 压缩包

文章目录 1、location.href2、location.href3、a标签4、请求后端的方式5、文件下载的方式6、Blob和Base647、下载附件方法(excel,zip,html,markdown)8、封装下载函数9、导出 zip 压缩包相关方法(流方式) 总结 1、location.href //get请求 window.location.href url;2、locati…

死锁的成因,和解决方案总结

何为死锁 死锁是多线程或并发程序中的一种情况&#xff0c;当多个线程因为竞争资源而相互等待&#xff0c;并且无法继续执行的情况。在死锁中&#xff0c;每个线程都在等待其他线程释放资源&#xff0c;从而导致所有线程都陷入无限等待状态&#xff0c;无法继续向前执行&#…

0805hw

1. #include <myhead.h> void Bub_sort(int *arr,int n)//冒泡排序 {for(int i1;i<n;i){int count0;for(int j0;j<n-i;j){if(arr[j]>arr[j1]){int temparr[j];arr[j]arr[j1];arr[j1]temp;count;}}if(count0){break;}}printf("冒泡排序后输出结果:\n"…

uni-app离线打包高德地图导入android studio不能正常显示

本人使用的uni-app SDK版本&#xff1a;Android-SDK3.8.7.81902_20230704 1.导入以上文件&#xff0c;依赖已经自动添加了 2.确保这个正常引入 3.修改AndroidMainifest.xml,添加自己的密钥

整理mongodb文档:删

个人博客 整理mongodb文档:删 求关注&#xff0c;哪儿不足&#xff0c;求大佬们指出&#xff0c;哪儿写的不够通俗易懂跟清晰&#xff0c;也求指出 文章概叙 本文主要是介绍了删除数据的几个方法&#xff0c;主要还是在介绍deleteMany、deleteOne以及remove&#xff0c;对于…

JAVA基础之放弃使用Random

随机是日常生活中经常遇到的非常有趣的东西&#xff0c;比如说抛硬币&#xff0c;他的不可预知性总是让我们特别着迷&#xff0c;在拿不定主意时&#xff0c;有些人就喜欢用抛硬币的方式来帮助我们做决定。体育领域也喜欢用喜欢用抛硬币的方式来猜先。随机数功能是Java非常非常…

14个前端开发者应该知道的实用网站

在本文中&#xff0c;我将分享一些非常有用的网站合集&#xff0c;这些网站可以在你的日常工作中极大地帮助你。这些网站已经成为我各种任务的首选资源&#xff0c;节省了我的时间&#xff0c;提高了工作效率 文档自动化 Documatic 是一款专为开发人员设计的非常高效的搜索引擎…

Pytorch深度学习-----现有网络模型的使用及修改(VGG16模型)

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

STM32 CubeMX USB_MSC(存储设备U盘)

STM32 CubeMX STM32 CubeMX USB_MSC(存储设备U盘&#xff09; STM32 CubeMX前言 《使用内部Flash》——U盘一、STM32 CubeMX 设置USB时钟设置USB使能UBS功能选择FATFS功能 二、代码部分修改代码"usbd_storage_if.c"修改代码"user_diskio.c"main函数初始化插…

每天一道leetcode:剑指 Offer 27. 二叉树的镜像(适合初学者递归树)

今日份题目&#xff1a; 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 4 / \ 2 7 / \ / \ 1 3 6 9 镜像输出&#xff1a; 4 / \ 7 2 / \ / \ 9 6 3 1 示例 输入&#xff1a;root [4,2,7…