YOLO测试集划分(多进程版)

多进程分割YOLO数据集:自定义比例训练验证划分
本文介绍了一个GitHub项目,用于将LabelImg生成的YOLO格式数据集按9:1的比例进行训练集和验证集的划分。通过Python脚本实现并支持多线程处理,提供了配置文件路径和分割比率的灵活性。

介绍

GitHub:https://github.com/Eagle104fred/YOLOSplitDataset
本项目只用于分割labelimg生成的yolo格式的数据集, 默认进程池为逻辑核数量, 每个进程处理的任务个数为(单个数据集数量/逻辑核数量)
目录结构:

  • root
    • A Dataset
      • images
      • labels
    • B Dataset
      • images
      • labels
    • C Dataset
      • images
      • labels

Getstarted

开始前请按照目录结构建立好文件夹和规范命名, 本程序放在root目录下运行, 生成的混合数据生成于 root/outFile 。

  • 分割比率为 train:val => 9:1,需要修改的可以修改splitRatio这个参数。
  • 如果不需要生成混合的train和val数据集请把(def CreateFilePath(self,doNotMixFlag=False): 下的doNotMixFlag设置为True,那样的话会分别为每个数据集生产image和label)
Warning: 程序运行前默认清除root/outFile, 请注意酌情备份!!!
Warning: 每个数据集下的文件名禁止同名, 否则会相互覆盖!!!
import os
import sys
import random
import shutil
from multiprocessing import Pool,cpu_count
import time

class RootFile:
    def __init__(self,path="./"):
        self.path=path

    def SplitSubRoot(self):
        def GetSubRootList(path):
            originDirList = os.listdir(path)

            originDirList.sort()
            filetedDirList = []
            for dir in originDirList:
                if dir == "outFile":
                    shutil.rmtree(os.path.join(path,dir))
                if os.path.isdir(os.path.join(path, dir)) == True and dir[0]!=".":
                    '''筛选出文件夹'''
                    filetedDirList.append(dir)
            return filetedDirList


        subRootList=GetSubRootList(self.path)

        for subRoot in subRootList:
            print("=========================================")
            print(subRoot + " Spliting")
            print("=========================================")

            subSplit = CreateValFile(subRoot)
            subSplit.Split()



class CreateValFile:
    def __init__(self,path="./",saveFile="outFile",splitRatio=0.1):
        self.path 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值