yolo格式数据集划分代码

yolo格式数据集划分代码

一、描述

目前只有两个文件夹,image—存放图像,labels----存放txt格式的标签文件。
需要划分为训练集、验证集和测试集。
手动划分的话,一个费时费力,还无法保证随机性。

二、按图像划分代码

####从图像文件夹中随机抽取一定比例的图像,并根据图像名字,抽取对应的txt标签
import os
import random
import shutil
def moveFile(Imgdir):
        pathDir = os.listdir(Imgdir)    #获取图像列表
        filenumber=len(pathDir)
        rate=0.1    #定义抽取图片的比例
        random_imgnum=int(filenumber*rate) #按照比例从文件夹中取一定数量图片
        sample = random.sample(pathDir, random_imgnum)  #随机选取random_imgnum数量的样本图片
        print (sample)
        for imgname in sample:
                #name0 = os.path.join(outdir1,os.path.basename(name))
                nametxt=os.path.splitext(imgname)[0]
                shutil.move(Imgdir+imgname, img_target_dir+imgname)
                shutil.move(Txtdir+nametxt+'.txt', Txt_target_dir+nametxt+'.txt')
        return


if __name__ == '__main__':
    
    Imgdir = "/home/jun/work/img/"#图像文件夹
    img_target_dir = "/home/jun/work/img1/"#划分目标图像文件夹
    Txtdir = "/home/jun/work//txt/"#标签文件夹
    Txt_target_dir="/home/jun/work/txt1/"#划分目标标签文件夹
    moveFile(Imgdir)

三、按标签划分代码

####从txt标签文件夹中随机抽取一定比例的txt标签,并根据txt标签名字,抽取对应的图像
import os
import random
import shutil
def moveFile(Txtdir):
        pathDir = os.listdir(Txtdir)    #获取标签列表
        filenumber=len(pathDir)
        rate=0.2    #定义抽取图片的比例
        random_imgnum=int(filenumber*rate) #按照比例从文件夹中取一定数量标签
        sample = random.sample(pathDir, random_imgnum)  #随机选取random_imgnum数量的样本标签
        print (sample)
        for labelname in sample:
            nameimg = os.path.splitext(labelname)[0]
            shutil.move(Txtdir+labelname, Txt_target_dir+labelname)
            shutil.move(Imgdir+nameimg+'.jpg', img_target_dir+nameimg+'.jpg')

        '''
        for imgname in sample:
                #name0 = os.path.join(outdir1,os.path.basename(name))
                nametxt=os.path.splitext(imgname)[0]
                shutil.move(Imgdir+imgname, img_target_dir+imgname)
                shutil.move(Txtdir+nametxt+'.txt', Txt_target_dir+nametxt+'.txt')
        '''
        return


if __name__ == '__main__':
    
    Imgdir = "/images/"#图像文件夹
    img_target_dir = "/img/"#划分目标图像文件夹
    Txtdir = "/labels/"#标签文件夹
    Txt_target_dir="/ann/"#划分目标标签文件夹
    #moveFile(Imgdir)
    moveFile(Txtdir)


YOLO (You Only Look Once) 是一种流行的物体检测算法,它的训练过程通常涉及到图像分类和边界框预测的数据集划分。对于 YOLO数据集划分一般是在准备阶段完成的,并不是直接通过某个特定的代码文件去打开。 首先,你需要下载预先标注好的数据集,比如 PASCAL VOC、COCO 等,它们通常包含图片及其对应标签信息。然后,根据 YOLO 的需求,数据需要按照类别进行划分,包括训练集、验证集和测试集。 在 Python ,常用的数据集划分库如 `imgaug` 或 `torch.utils.data.Dataset` 可以帮助你对数据进行随机分割。如果你使用的是 Darknet(YOLO 的原始框架),它可能会提供一些脚本用于处理数据集,例如 `data.split.py`。 下面是一个简化版的示例,说明如何使用 Python 划分数据集: ```python import os import random # 假设你有一个images目录和labels目录,其包含标注文件 train_ratio = 0.8 val_ratio = 0.1 test_ratio = 0.1 def load_data(dir_path): # 加载所有图片标签 images = [os.path.join(dir_path, f) for f in os.listdir(dir_path) if f.endswith('.jpg')] labels = [f.replace('.jpg', '.txt') for f in images] return images, labels def split_dataset(images, labels, train_set_size, val_set_size): shuffled_indices = list(range(len(images))) random.shuffle(shuffled_indices) train_indices = shuffled_indices[:int(train_set_size * len(images))] val_indices = shuffled_indices[int(train_set_size * len(images)):int((train_set_size + val_ratio) * len(images))] test_indices = shuffled_indices[int((train_set_size + val_ratio) * len(images)):] return images[i] for i in train_indices], labels[train_indices], \ images[val_indices], labels[val_indices], images[test_indices], labels[test_indices] # 调用函数划分并保存数据集 train_images, train_labels, val_images, val_labels, _, _ = split_dataset(images_dir, labels_dir, train_ratio, val_ratio) # 现在你可以将这些数据存储到相应的文件夹,以便后续模型训练 ``` 请注意,这只是一个基础示例,实际操作可能需要更复杂的错误检查和处理。如果你使用的是 Darknet,你还需要遵循其文档的指导进行数据预处理和转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小俊俊的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值