变化检测原始数据划分按比例为训练集、验证机和测试集

import os
import random
import shutil
from tqdm import tqdm


# 功能:将变化检测原始数据划分按比例为训练集、验证机和测试集

def split_dataset(
    input_dir, output_dir, train_ratio=0.7, val_ratio=0.15, test_ratio=0.15
):
    """
    要求变化检测原始数据集子目录格式为:
    --DATASET_DIR
        --A
        --B
        --label
    生成结果为:
    --OUT_DATASET_DIR
        --train
            --A
            --B
            --label
        --val
            --A
            --B
            --label
        --test
            --A
            --B
            --label
    要求对应前景影像、后景影像以及变化标签的名称一致!
    """

    # 创建输出文件夹
    train_dir = os.path.join(output_dir, "train")
    val_dir = os.path.join(output_dir, "val")
    test_dir = os.path.join(output_dir, "test")
    os.makedirs(train_dir, exist_ok=True)
    os.makedirs(val_dir, exist_ok=True)
    os.makedirs(test_dir, exist_ok=True)

    # 获取文件列表
    files = os.listdir(os.path.join(input_dir, "A"))
    num_files = len(files)
    num_train = int(num_files * train_ratio)
    num_val = int(num_files * val_ratio)
    num_test = num_files - num_train - num_val

    # 随机打乱文件列表
    random.shuffle(files)

    # 划分数据集并复制文件
    for i, file in enumerate(tqdm(files, desc="copying files")):
        if i < num_train:
            dest_dir = train_dir
        elif i < num_train + num_val:
            dest_dir = val_dir
        else:
            dest_dir = test_dir

        # 复制A、B、label文件夹中的内容
        for folder in ["A", "B", "label"]:
            src_path = os.path.join(input_dir, folder, file)
            dest_path = os.path.join(dest_dir, folder, file)
            os.makedirs(os.path.dirname(dest_path), exist_ok=True)
            shutil.copy(src_path, dest_path)

    print("Dataset split completed.")


if __name__ == "__main__":
    # 输入和输出文件夹路径
    input_dir = r"ccc"
    output_dir = r"ccc_out"

    # 划分数据集并保存到输出文件夹
    split_dataset(input_dir, output_dir)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卖报的大地主

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

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

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

打赏作者

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

抵扣说明:

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

余额充值