yolo数据集从一种文件夹格式转话成另外一种

news2024/9/19 16:44:57

1、转化前yolo格式数据集路径结构

在这里插入图片描述

2、转化后yolo格式数据集路径结构

在这里插入图片描述

3、转化脚本(可以直接复制使用)


import os
import argparse
import shutil
def makdirs(opt,tests_flag):
    images_train = os.path.join(opt.save_root_path, 'images/train')
    images_val = os.path.join(opt.save_root_path ,'images/val')

    label_train = os.path.join(opt.save_root_path, 'labels/train')
    label_val = os.path.join(opt.save_root_path,'labels/val')



    os.makedirs(images_train,exist_ok=True)
    os.makedirs(images_val, exist_ok=True)
    os.makedirs(label_train, exist_ok=True)
    os.makedirs(label_val, exist_ok=True)
    if tests_flag:
        images_test = os.path.join(opt.save_root_path, 'images/test')
        label_test = os.path.join(opt.save_root_path, 'labels/test')
        os.makedirs(images_test, exist_ok=True)
        os.makedirs(label_test, exist_ok=True)
    else:
        images_test, label_test=0,0
    return images_train,images_val,label_train,label_val,images_test,label_test

def transform_dic(opt):
    train_img=[]
    train_label=[]

    val_img=[]
    val_label=[]

    test_img=[]
    test_label=[]

    # if os.listdir(os.path.join(opt.ori_root_path,'train')))
    if os.path.exists(os.path.join(opt.ori_root_path,'train')):
        base_train_images=os.path.join(os.path.join(opt.ori_root_path,'train'),'images')
        base_train_labels = os.path.join(os.path.join(opt.ori_root_path, 'train'), 'labels')
        train_img=[os.path.join(base_train_images,img_name) for img_name in os.listdir(base_train_images)]
        train_label=[os.path.join(base_train_labels,label_name) for label_name in os.listdir(base_train_labels)]

    if os.path.exists(os.path.join(opt.ori_root_path, 'valid')):
        base_val_images=os.path.join(os.path.join(opt.ori_root_path,'valid'),'images')
        base_val_labels = os.path.join(os.path.join(opt.ori_root_path, 'valid'), 'labels')
        val_img=[os.path.join(base_val_images,img_name) for img_name in os.listdir(base_val_images)]
        val_label=[os.path.join(base_val_labels,label_name) for label_name in os.listdir(base_val_labels)]

    if os.path.exists(os.path.join(opt.ori_root_path, 'test')):
        base_test_images = os.path.join(os.path.join(opt.ori_root_path, 'test'), 'images')
        base_test_labels = os.path.join(os.path.join(opt.ori_root_path, 'test'), 'labels')
        test_img = [os.path.join(base_test_images, img_name) for img_name in os.listdir(base_test_images)]
        test_label = [os.path.join(base_test_labels, label_name) for label_name in os.listdir(base_test_labels)]
        tests_flag = True
    else:
        tests_flag = False


    images_train,images_val,label_train,label_val,images_test,label_test = makdirs(opt, tests_flag)
    train_len,val_len,test_len= len(train_img),len(val_img),len(test_img)
    for train_index in range(train_len):
        #在windows里面,split时用'\\',在linux里面,请用'\/'
        shutil.copy2(train_img[train_index],os.path.join(images_train,train_img[train_index].split('\\')[-1]))
        shutil.copy2(train_label[train_index],os.path.join(label_train,train_label[train_index].split('\\')[-1]))
        print(os.path.join(images_train,train_img[train_index].split('\\')[-1]))
    for val_index in range(val_len):
        #在windows里面,split时用'\\',在linux里面,请用'\/'
        shutil.copy2(val_img[val_index],os.path.join(images_val,val_img[val_index].split('\\')[-1]))
        shutil.copy2(val_label[val_index],os.path.join(label_val,val_label[val_index].split('\\')[-1]))
    if len(images_test)!=0 and len(label_test)!=0:
        for test_index in range(test_len):
            #在windows里面,split时用'\\',在linux里面,请用'\/'
            shutil.copy2(test_img[test_index],os.path.join(images_test,test_img[test_index].split('\\')[-1]))
            shutil.copy2(test_label[test_index],os.path.join(label_test,test_label[test_index].split('\\')[-1]))




if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--ori_root_path', nargs='+', type=str, default='./Roadsyolo', help='原始数据')
    parser.add_argument('--save_root_path', nargs='+', type=str, default='./newyolodatas',help='新的数据集保存路径')
    opt = parser.parse_args()
    transform_dic(opt)

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

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

相关文章

编程入门:大学新生的指南与策略

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

SSH访问控制:精确管理你的服务器门户

“ 在数字世界中,服务器的安全性是任何网络管理员的首要任务。特别是对于远程登录协议如SSH,确保只有授权用户可以访问是至关重要的。 今天,记录两种有效的方法来控制用户对特定服务器的访问:通过sshd_config实现黑/白名单机制和利…

论文解析——Character Region Awareness for Text Detection,字符级文本检测CRAFT算法

这篇论文来自CVPR2019,paper地址:Character Region Awareness for Text Detection。 代码:CRAFT-pytorch。 这篇论文主要解决之前的文本检测是基于word-level的检测框,不能识别任意形状的文本的问题。与之前的方法不同&#xff0…

HID类报表描述符深入理解(需要完善)

参考资料 一篇博文, USB中文网, USB中文网1, HID有关资源, HID报告描述符的基本组成(短)item 长的item几乎没使用过,和短的item使用方法类似,可根据HID协议查看,使用方式可以参考item介绍 三…

自修室预约小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,公告通知管理,自修室管理,座位预约管理,预约取消管理,管理员管理,系统管理 微信端账号功能包括:系统首页&a…

代码随想录训练营 Day17打卡 二叉树 part05 654. 最大二叉树 617. 合并二叉树 700. 二叉搜索树中的搜索 98. 验证二叉搜索树

代码随想录训练营 Day17打卡 二叉树 part05 一、 力扣654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归…

基于Raft算法的分布式KV数据库:一、开篇

项目描述:本项目是基于Raft算法的分布式KV数据库,保证了分布式系统的数据一致性和分区容错性,在少于半数节点发生故障时仍可对外提供服务。使用个人实现的分布式通信框架mpRPC和跳表数据库skipList提供RPC服务和KV存储服务。 github地址&…

如何在数据埋点中发现和修复数据上报逻辑错误

如何发现和处理数据埋点中的逻辑错误 在大数据分析中,数据埋点是至关重要的一环。然而,当我们遇到数据上报逻辑错误时,该如何应对呢?本文将为你揭示解决这一棘手问题的有效方法。 目录 如何发现和处理数据埋点中的逻辑错误什么是数据上报逻辑错误?如何发现数据上报逻辑错误…

Python酷库之旅-第三方库Pandas(060)

目录 一、用法精讲 231、pandas.Series.reorder_levels方法 231-1、语法 231-2、参数 231-3、功能 231-4、返回值 231-5、说明 231-6、用法 231-6-1、数据准备 231-6-2、代码示例 231-6-3、结果输出 232、pandas.Series.sort_values方法 232-1、语法 232-2、参数…

Flink-StarRocks详解:第三部分StarRocks分区分桶(第53天)

文章目录 前言2.3 数据分布2.3.1 数据分布概览2.3.1.1 常见的数据分布方式2.3.1.2 StarRocks的数据分布方式2.3.1.3 分区2.3.1.4 分桶 2.3.2 创建分区2.3.2.1 表达式分区2.3.2.1.1 时间函数表达式分区(自v3.1)2.3.2.1.2 列表达式分区(自v3.1&…

EAK水冷电阻60kW负载制动电阻器

描述 EAK制动电阻器 液冷电阻器将多余的制动能量转化为有用的热量,因此非常适合电动或混合动力驱动。与传统的风冷制动电阻器相比,水冷可节省高达 88% 的额外空间。作为一个额外的功能,电阻器可以很容易地与无滴漏的快速紧固件连接。由于即使…

注意力特征融合

摘要 https://arxiv.org/pdf/2009.14082 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。它通常通过简单的操作来实现,如求和或拼接,但这可能不是最佳选择。在这项工作中,我们提出了一种…

【Mybatis】浅谈Mybatis的缓存机制,一级缓存和二级缓存

目录 1. 缓存机制介绍 2. 一级缓存 3. 二级缓存 4. mybatis缓存执行流程 1. 缓存机制介绍 MyBatis 的缓存机制是为了提高应用程序的性能而设计的,通过缓存策略来减少数据库的查询次数。MyBatis 提供了两种类型的缓存:一级缓存和二级缓存。 默认情况下…

web框架:Django进阶(二)

文章目录 Django进阶(二)1.orm1.1 基本操作1.2 连接数据库1.3 连接池1.4 多数据库1.4.1 读写分离1.4.2 分库(多个app ->多数据库)1.4.3 分库(单app)1.4.4 注意事项 1.5 表关系1.6 数据操作单表一对多正向…

IIS解析漏洞~ IIS7.漏洞分析

IIS解析漏洞 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本),配合文件上传漏洞进行GetShell的漏洞! 1.2:IIS7.X 在IIS7.0和IIS7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在一个文…

Modbus通讯协议

Modbus通讯协议 Modbus协议是一种用于电子控制器之间的通信协议,‌它允许不同类型的设备之间进行通信,‌以便进行数据交换和控制。‌Modbus协议最初为可编程逻辑控制器(‌PLC)‌通信开发,‌现已广泛应用于工业自动化领…

Error: No module factory available for dependency type: CssDependency

本篇主要用来记录VUE打包的问题点,今天使用npm run build:prod 打包VUE出现如下问题: Error: No module factory available for dependency type: CssDependency 因为测试和预发布都挺正常的,正式环境竟然出问题,废话不多说&…

用 Python 编写的井字游戏

一.介绍 在本文中,我将向您展示如何使用 Python 创建一个非常简单的井字游戏。 井字游戏是一种非常简单的双人游戏。因此每次只能有两个玩家玩。该游戏也称为井字游戏或 Xs 和 Os 游戏。一个玩家玩 X,另一个玩家玩 O。在这个游戏中,我们有一…

java+springboot+mysql疾病查询网站01548-计算机毕业设计项目选题推荐(附源码)

摘 要 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的疾病查询网站,会使疾病查询工作系统化、规范化,也会提高医院形象,提高管理效率。 本疾病查…

最强开源模型 Llama 3.1 部署推理微调实战大全

目录 引言一、Llama 3.1简介二、Llama 3.1性能评估三、Llama 3.1模型推理实战1、环境准备2、安装依赖3、模型下载4、模型推理 四、Llama 3.1模型微调实战1、数据集准备2、导入依赖包3、读取数据集4、处理数据集5、定义模型6、Lora配置7、配置训练参数8、开始Trainer训练9、合并…