深度学习目标检测数据集划分,首先将图片和标签文件夹存放在一个文件夹下,然后新建一个文件夹用来存放划分后的图片和标签,本代码只划分为训练集和验证集按照7:3的比例划分,比例可自行修改。

import os
import random
from shutil import copy2


def split_dataset(dataset_dir, output_dir, split_ratio=(0.7, 0.3)):
    """
    将数据集按照给定比例划分为训练集和验证集。

    :param dataset_dir: 数据集根目录,包含图片和标签文件
    :param output_dir: 输出目录,用于存放划分后的数据集
    :param split_ratio: 划分比例,例如(0.7, 0.3)表示70%训练集,30%验证集
    """
    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)

    # 创建train和val目录
    for subset in ['train', 'val']:
        subset_path = os.path.join(output_dir, subset)
        os.makedirs(subset_path, exist_ok=True)
        for folder in ['images', 'labels']:
            os.makedirs(os.path.join(subset_path, folder), exist_ok=True)

    # 获取所有图片文件名
    image_files = [f for f in os.listdir(dataset_dir) if f.endswith(('jpg', 'png', 'jpeg'))]
    # 构造标签文件名列表
    label_files = [f.replace('.jpg', '.txt').replace('.png', '.txt').replace('.jpeg', '.txt') for f in image_files]

    # 混洗索引
    indices = list(range(len(image_files)))
    random.shuffle(indices)

    train_stop_index = int(len(image_files) * split_ratio[0])

    train_count = 0
    val_count = 0

    for idx in indices:
        img_file = image_files[idx]
        label_file = label_files[idx]

        src_img_path = os.path.join(dataset_dir, img_file)
        src_label_path = os.path.join(dataset_dir, label_file)

        if idx < train_stop_index:
            dst_img_path = os.path.join(output_dir, 'train/images', img_file)
            dst_label_path = os.path.join(output_dir, 'train/labels', label_file)
            train_count += 1
        else:
            dst_img_path = os.path.join(output_dir, 'val/images', img_file)
            dst_label_path = os.path.join(output_dir, 'val/labels', label_file)
            val_count += 1

        copy2(src_img_path, dst_img_path)
        copy2(src_label_path, dst_label_path)

    print(f"数据集划分完成!训练集: {train_count} 张图片, 验证集: {val_count} 张图片")


# 示例使用
dataset_directory = r'E:\path'  # 数据集所在目录
output_directory = r'E:\path1'  # 划分后数据集的输出目录
split_dataset(dataset_directory, output_directory)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值