数据集随机划分成train和val

 将图片和其对应标签按比例划分成对应的train和val。

划分后的文件格式如下:

- - -images

      - - - train

      - - - val

- - - labels

      - - - train

      - - - val

替换对应路径图片格式后缀标签后缀即可。

import os
import shutil
import numpy as np
from sklearn.model_selection import train_test_split

def split_and_save_dataset(images_folder, labels_folder, output_folder, validation_ratio=0.2, random_seed=None):
    """
    划分图像数据集为训练集和验证集,并保存到对应的目录

    参数:
    - images_folder: 包含图像文件的文件夹路径
    - labels_folder: 包含标签文件的文件夹路径
    - output_folder: 保存划分后数据集的目标文件夹路径
    - validation_ratio: 验证集所占比例,默认为0.2
    - random_seed: 随机数种子,可选
    """
    # 获取图像文件和标签文件的列表
    image_files = os.listdir(images_folder)
    label_files = os.listdir(labels_folder)

    # 获取文件名(不包含扩展名)作为图像和标签的标识符
    image_ids = [os.path.splitext(filename)[0] for filename in image_files if filename.endswith('.jpg')]
    label_ids = [os.path.splitext(filename)[0] for filename in label_files if filename.endswith('.txt')]

    # 确保图像和标签的标识符匹配
    common_ids = set(image_ids).intersection(label_ids)

    # 设置随机数种子以确保可复现性
    if random_seed is not None:
        np.random.seed(random_seed)

    # 划分数据集
    train_ids, val_ids = train_test_split(list(common_ids), test_size=validation_ratio, random_state=random_seed)

    # 创建输出目录
    os.makedirs(output_folder, exist_ok=True)

    # 将训练集和验证集的图像和标签复制到对应目录
    for data_split, split_ids in [('train', train_ids), ('val', val_ids)]:
        split_folder_images = os.path.join(output_folder, 'images', data_split)
        split_folder_labels = os.path.join(output_folder, 'labels', data_split)

        os.makedirs(split_folder_images, exist_ok=True)
        os.makedirs(split_folder_labels, exist_ok=True)

        for data_id in split_ids:
            # 复制图像文件
            image_src = os.path.join(images_folder, f"{data_id}.jpg")
            image_dest = os.path.join(split_folder_images, f"{data_id}.jpg")
            shutil.copy(image_src, image_dest)

            # 复制标签文件
            label_src = os.path.join(labels_folder, f"{data_id}.txt")
            label_dest = os.path.join(split_folder_labels, f"{data_id}.txt")
            shutil.copy(label_src, label_dest)

# 使用示例
# 假设有包含图像和标签的文件夹 images 和 labels
images_folder = "/path/to/images"
labels_folder = "/path/to/labels"
output_folder = "/path/to/output"

split_and_save_dataset(images_folder, labels_folder, output_folder, validation_ratio=0.2, random_seed=42)

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
变化检测数据集随机划分代码可以采用以下步骤来实现: 1. 导入所需的库和模块,例如numpy和random。 2. 定义变量,如数据集大小(图像对的数量)和划分比例(trainval和test的比例)。 3. 创建一个列表,用于存储图像对的索引。 4. 使用循环,将所有图像对的索引添加到列表中。 5. 使用random.shuffle函数对索引列表进行随机化,以实现随机划分。 6. 根据划分比例,计算各部分的图像对数量,并使用列表的切片功能将索引列表分割为trainval和test三部分。 7. 根据trainval和test的索引列表,将对应的图像对从原始数据集中提取出来,并分别保存到trainval和test文件夹中。 以下是一个示例代码: ```python import numpy as np import random dataset_size = 1000 # 数据集大小(图像对的数量) split_ratio = [0.6, 0.2, 0.2] # 划分比例(trainval和test的比例) # 创建索引列表 indices = [] for i in range(dataset_size): indices.append(i) # 随机化索引列表 random.shuffle(indices) # 计算各部分的图像对数量 train_size = int(dataset_size * split_ratio[0]) val_size = int(dataset_size * split_ratio[1]) test_size = dataset_size - train_size - val_size # 划分索引列表 train_indices = indices[:train_size] val_indices = indices[train_size:(train_size + val_size)] test_indices = indices[(train_size + val_size):] # 从原始数据集中提取图像对并保存到相应文件夹 for index in train_indices: # 从原始数据集中提取训练集图像对并保存到train文件夹 pass for index in val_indices: # 从原始数据集中提取验证集图像对并保存到val文件夹 pass for index in test_indices: # 从原始数据集中提取测试集图像对并保存到test文件夹 pass ``` 在实际使用中,你需要根据自己的数据集和文件路径进行适当的修改。这个示例代码仅为了演示随机划分的过程,具体的图像对提取和保存操作需要根据数据集的具体形式进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值