YOLOv5另一种好用的数据集存放格式(附划分代码及查看每个类别分布情况)

2023-11-11

一、以前用的数据集格式:
在这里插入图片描述
在这里插入图片描述

训练集、测试集的图片和标签分别放在对应的文件夹里,这就导致一个问题,如果相对数据集多次随机划分的话,就要多次从总的图片和标签中选择出需要的图片和标签,并且保存到相应的文件夹中。这样会很麻烦,而且浪费时间。

二、改进
在这里插入图片描述在这里插入图片描述

将划分为训练集、测试集和验证集的文件路径分别写入对应的txt文件,YOLOV5的代码不用修改。
**注:**这我上面的两个文件夹名称最好还是换成images和labels;或者改一下程序里面两个位置,如下红框:
在这里插入图片描述

这里的脚本就是对数据集进行多少次随机划分。
脚本代码:

import os
import random
import argparse

parser = argparse.ArgumentParser()
# 1.xml/其他 文件的文件夹路径,根据自己的数据进行修改。 #1 改为自己的
parser.add_argument('--images_path', default='D:\\数据集\\dataset\\SeaShips(7000)\\SeaShip_data\\all_SeaShips\\images', type=str, help='input xml label path')
# 2.保存 数据集划分生成的txt文件 的文件夹路径。        #2 改为自己的
parser.add_argument('--txt_path', default='C:\\Users\\14667\\Desktop\\SeaShip_new\\txt', type=str, help='output txt label path')
opt = parser.parse_args()

trainval_percent = 1.0  # 3.训练+验证集一共所占的比例,剩下的就是测试集了。 #3 所占的比例
train_percent = 0.9     # 4.训练集在训练集和验证集总集合中占的比例         #4 所占的比例
xmlfilepath = opt.images_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
    os.makedirs(txtsavepath)

num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)


# file_trainval = open(txtsavepath + '/trainval.txt', 'w')
def txt_num(x): #进行x次随机划分
    for i1 in range(x):
        trainval = random.sample(list_index, tv)
        train = random.sample(trainval, tr)
        file_test = open(txtsavepath + '/test{}.txt'.format(i1), 'w')
        file_train = open(txtsavepath + '/train{}.txt'.format(i1), 'w')
        file_val = open(txtsavepath + '/val{}.txt'.format(i1), 'w')
        for i2 in list_index:
            # 5.total_xml[i2][:-4]:-4可以用来去掉文件后缀名
            name = "/tmp/pycharm_project_681/all_SeaShips/images/" + total_xml[i2][:] + '\n'  #5 路径改为自己的
            if i2 in train:
                file_train.write(name)
            else:
                file_val.write(name)
                file_test.write(name)
        file_train.close()
        file_val.close()
        file_test.close()

if __name__ == "__main__":
    txt_num(10) #进行10次随机划分   #6 次数改为自己的

一共改6处

查看每次划分后每个类别分布在训练集、测试集和验证集中是否与总的数据集分布相似,代码如下:

from utils.dataloaders import LoadImagesAndLabels 
import numpy as np


if __name__ == '__main__':
    for i in range(10):
        class0, class1, class2, class3, class4, class5 = 0, 0, 0, 0, 0, 0    # 1
        names = ['ore carrier', 'bulk cargo carrier', 'fishing boat', 'container ship', 'passenger ship', 'general cargo ship'] #2
        # 存放txt文件的路径
        dataset = LoadImagesAndLabels(path=["C:/Users/14667/Desktop/SeaShip_new/txt1/train{}.txt".format(i)])   #3
        labels = np.concatenate(dataset.labels, 0) # 相当于把每张图片中的多个标签转化为了一个个的标签
        # print(len(labels))
        for label in labels:
            if label[0] == 0:
                class0 += 1
            if label[0] == 1:
                class1 += 1
            if label[0] == 2:
                class2 += 1
            if label[0] == 3:
                class3 += 1
            if label[0] == 4:
                class4 += 1
            if label[0] == 5:
                class5 += 1
        print("{:.2f}".format(class0/class0), "{:.2f}".format(class1/class0), "{:.2f}".format(class2/class0), "{:.2f}".format(class3/class0), "{:.2f}".format(class4/class0), "{:.2f}".format(class5/class0), class0+class1+class2+class3+class4+class5)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLOv5另一种好用的数据集存放格式(附划分代码及查看每个类别分布情况) 的相关文章

  • 检测骰子的上侧

    是否可以检测骰子的上面 虽然从顶部看这将是一项简单的任务 但从许多角度来看 可以看到多个侧面 Here is an example of a dice feel free to take your own pictures 您通常想知道自己
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 将 Poetry 与 PyEnv 一起使用并遇到 Python 版本问题

    我正在使用 WSL2 Ubuntu 我一直在学习使用 Fastapi 进行后端 API 开发的课程 我相信我的 Ubuntu 默认 python 是 3 8 我正在尝试使用 python 3 10 0 进行开发 我做了以下事情 pyenv安
  • 根据另一个数据框中找到的范围填充数据框中的列

    我试图根据该记录的索引值是否落在另一个数据框中的两列定义的范围内来填充数据框中的列 df1 看起来像 a 0 4 1 45 2 7 3 5 4 48 5 44 6 22 7 89 8 45 9 44 10 23 df2 是 START ST
  • 如何使用 .pth 文件添加 Python 导入路径

    如果我将 pth 文件放入 site packages 中 则会给出一个ImportError 我不知道如何通过创建 pth 文件来导入 指在Python中导入 https stackoverflow com questions 69728
  • 从 Python 将分层 JSON 数据写入 Excel xls?

    我想将一些数据从 python 写入 xlsx 我目前将其存储为 JSON 但它从 Python 中输出什么并不重要 单个文章的 JSON 如下所示 Word Count 50 Key Words Blah blah blah Foo Fr
  • Colab 的使用限制持续多久?

    当我对同一帐户的两个笔记本同时使用两个 GPU 约半小时后 Colab 已 12 小时未运行 此消息不断弹出 由于 Colab 中的使用限制 您当前无法连接到 GPU 自从我上次使用 colab 以来已经过去了大约两个小时 但该消息仍然弹出
  • 在 Python 中使用类作为命名空间是个好主意吗

    我正在将一堆相关的东西放入一个类中 主要目的是将它们组织到命名空间中 class Direction north 0 east 1 south 2 west 3 staticmethod def turn right d return tu
  • 从 Spark 数据帧中过滤大量 ID

    我有一个大型数据框 其格式类似于 ID Cat date 12 A 201602 14 B 201601 19 A 201608 12 F 201605 11 G 201603 我需要根据大约 500 万个 Is 的列表来过滤行 最直接的方
  • 如何在python mechanize中设置cookie

    向服务器发送请求后 br open http xxxx br select form nr 0 br form MESSAGE 1 2 3 4 5 br submit 我得到了响应标题 其中包含 set cookie Set Cookie
  • Scapy:如何将新层(802.1q)插入现有数据包?

    我有一个数据包转储 想要将 VLAN 标记 802 1q 标头 注入到数据包中 怎么做 为了找到答案 我查看了Scapy 插入新层和记录问题 https stackoverflow com q 17259592 1381638 这确实很有帮
  • Python 可选参数对

    我正在使用argparse模块获取两个可选的命令行参数 parser add argument start date nargs metavar START DATE help start date in YYYY MM DD parser
  • telethon 库:如何通过电话号码添加用户

    我正在研究 Telegram 的 Telethon 库 它可以使用 Telegram API 充当 Telegram 客户端 重要提示 这是电报客户端 API https core telegram org telegram api 而不是
  • 在 Qt 5 中嵌入 Python

    我想将 Python 解释器嵌入到 Qt 5 应用程序中 我在 Qt 5 中有一个工作应用程序 但是当我把 include
  • 使用 os.forkpty() 创建一个伪终端以 ssh 到远程服务器并与其通信

    我正在尝试编写一个 python 脚本 它可以 ssh 到远程服务器 并可以从 python 客户端执行 ls cd 等简单命令 但是 在成功 ssh 到服务器后 我无法读取伪终端的输出 任何人都可以在这里帮助我 以便我可以在服务器上执行一
  • 使用 conda 安装额外功能

    With pip我们可以使用方括号安装子包 例如与阿帕奇气流 https pythonhosted org airflow installation html pip install airflow all 有类似的东西吗conda或者我必
  • 如何输入可变的默认参数

    Python 中处理可变默认参数的方法是将它们设置为无 https stackoverflow com a 366430 5049813 例如 def foo bar None bar if bar is None else bar ret
  • “yield item”与 return iter(items) 相比有何优点?

    在下面的示例中 resp results 是一个迭代器 版本1 items for result in resp results item process result items append item return iter items
  • 如何通过 Selenium 内部的文本查找按钮(Python)?

    我有以下三个按钮 我不知道如何获取其中的文本 例如异常值 我试过browser find element by link text Outliers click 但出现 无法找到元素 错误 我该怎么做 See find element by
  • gnuplot:第 1 行:无效命令

    stackoverflow 上可爱的人们大家好 我正在尝试使用 gnuplot 绘制数据 我首先阅读表格并提取我想要的数据 我将此数据写入 dat 文件 截至目前 我只是尝试通过命令行绘制它 但会添加必要的代码以在 python 脚本工作后

随机推荐

  • IDEA 中设置自动补全方法

    最近转用 IDEA 但习惯于 Eclipse 的快捷键和快捷输入 以下是在 IDEA 中增添快捷键和快捷输入的方法 1 File Settings 2 Editor Live Templates Add Template Group gt
  • Ant Design Pro新增页面步骤

    新增页面步骤 根据页面结构规范创建页面文件后 接着在项目根目录寻找config文件夹下的routes js中添加该页面项的路由配置 如创建子路由则在父路由下定义routes属性 值为一个数组 数组中为该路由的子路由路由配置项 如下图 exp
  • 微信隐藏功能系列3:微信关闭朋友圈广告推送

    我们使用微信好多年了 这个工具不仅仅在社交上为我们带来许多好处 工作 消费中也是给我们带来不少方便之处 大家对微信隐藏功能了解多少 本期分享 微信关闭朋友圈广告推送 虽然微信为我们带来许多方便 但令人不适的东西也是有的 广告就是其中之一 特
  • python如何创建二维数组

    关于python中的二维数组 主要有list和numpy array两种 好吧 其实还有matrices 但它必须是2维的 而numpy arrays ndarrays 可以是多维的 两者可以相互转化 下边是两者区别 数组list gt g
  • linux va_start 编译,如何把unix 下的c程序移植到suse linux下,编译出错?

    FILE gfp out stdout 第45行 报 err c 45 error initializer element is not constant include int err set info char ps error typ
  • c++:STL容器及其接口(string、vector、deque、stack、queue、list、set/multiset、map/multimap)

    STL Standard Template Library 标准模板库 目录 一 STL 六大组件简介 二 string容器 2 1 string容器基本概念 2 2 string 构造函数 2 3 string基本赋值操作 2 4 str
  • 第五章可视化

    1散点图 1 代码 A 未处理异常值 import ggplot as gp import pandas as pd import numpy as np crime pd read csv crimeRatesByState2005 cs
  • git交互式暂存 git add -i 这个骚操作存在的意义为何

    文章目录 启用交互暂存 暂存常用的命令 交互暂存的意义在哪 应该场景的进一步说明 你已经能非常熟练的使用 git了 暂存是其中最基本的操作了 交互暂存是暂存的高级用法 虽然可以不用 但是在某些特定场景下 可以提高我们的工作效率 下边请看详细
  • Opencv3.1+python2.7的CentOS7安装

    time Jan 13 2016 20 29 author duanxxnj 163 com 花了两天时间才把Openv3 1的Python安装完成 中间遇到了好多奇怪的错误 在这里记录下整个安装过程 系统环境 Duanxx CentOS
  • js debugger的两种方式

    第一种 在js代码中加上debugger class ReactiveEffect constructor fn scheduler this fn fn this scheduler scheduler this active true
  • HDU - 6126 Give out candies

    Give out candies 题解 第一次遇见这样处理的网络流模型 将问题转换成最小割问题 具体的题解参考自 传送门 先将每个人的拆成m个人 然后s向第1人连边流量为inf 第i个人向第i 1个人连边 流量为 3000 w 将t视为每组
  • 自用IdeaVim配置

    具体配置如下 nnoremap
  • STL之set集合容器

    set集合容器实现了红黑树 Red Black Tree 的平衡二叉检索树的的数据结构 在插入元素时 它会自动调整二叉树的排列 把该元素放到适当的位置 以确保每个子树根节点的键值大于左子树所有节点的键值 而小于右子树所有节点的键值 另外 还
  • 校门外的树C语言详解

    题目描述 某校大门外长度为 l 的马路上有一排树 每两棵相邻的树之间的间隔都是 1 米 我们可以把马路看成一个数轴 马路的一端在数轴 0 的位置 另一端在 l 的位置 数轴上的每个整数点 即 0 1 2 l 都种有一棵树 由于马路上有一些区
  • 自动化办公:4、 Python操作PDF

    1 相关介绍 PyPDF2 读取 写入 分割 合并PDF文件 pdfplumber 读取 PDF 文件中内容和提取 PDF 中的表格 pip install PyPDF2 pip install pdfplumber 2 批量拆分 将一个完
  • 2017“编程之美”终章:AI之战勇者为王

    编者按 8月15日 第六届微软 编程之美 挑战赛在选手的火热比拼中圆满落下帷幕 编程之美 挑战赛是由微软主办 面向高校学生开展的大型编程比赛 自2012年起 微软每年都在革新比赛命题 紧跟时代潮流 如今的 编程之美 挑战赛已成为优秀学子切磋
  • 火爆科研圈的三维重建技术:Neural radiance fields (NeRF)

    如果说最近两年最火的三维重建技术是什么 相信NeRF 1 是一个绝对绕不过去的名字 这项强到逆天的技术 一经提出 就被众多研究者所重视 对该技术进行深入研究并提出改进已经成为一个热点 仅仅过了不到两年的时间 NeRF及其变种已经成为重建领域
  • 【golang基础】校验和计算

    首先 IP ICMP UDP和TCP报文头都有检验和字段 大小都是16bit 算法基本上也是一样的 在发送数据时 为了计算数据包的检验和 应该按如下步骤 1 把校验和字段设置为0 2 把需要校验的数据看成以16位为单位的数子组成 依次进行二
  • UE4 读取Json

    UE4 读取Json 添加模块 Json JsonUtilities PublicDependencyModuleNames AddRange new string Core CoreUObject Engine InputCore Jso
  • YOLOv5另一种好用的数据集存放格式(附划分代码及查看每个类别分布情况)

    一 以前用的数据集格式 训练集 测试集的图片和标签分别放在对应的文件夹里 这就导致一个问题 如果相对数据集多次随机划分的话 就要多次从总的图片和标签中选择出需要的图片和标签 并且保存到相应的文件夹中 这样会很麻烦 而且浪费时间 二 改进 将