关于图像分割任务中按照比例将数据集随机划分成训练集和测试集

本文介绍了如何使用Python脚本对图像分类和目标检测任务的数据进行划分,包括随机划分训练集和测试集,并提及了可能的可视化需求。作者分享了完整的代码示例,以及注意事项,如根据目录调整mask文件路径。
摘要由CSDN通过智能技术生成

1. 前言

之前写了分类和检测任务划分数据集的脚本,三大任务实现了俩,基于强迫症,也实现一下图像分割的划分脚本

分类划分数据:关于图像分类任务中划分数据集,并且生成分类类别的josn字典文件

检测划分数据:关于目标检测中按照比例将数据集随机划分成训练集和测试集

之前写了目标检测的可视化脚本,明天看看要不要把分类和分割的可视化也实现一下,之前的博文里实现过,但都是大项目里的一个环节,看看能不能单独实现一下

 

这里的脚本和未划分数据的目录在同一路径

2. 完整代码

如下:

import random
import os
import shutil
from tqdm import tqdm


# 划分数据函数
def split_data(root, test_rate):
    images_path = [os.path.join(root, i) for i in os.listdir(root)]  # 获取所有图片路径
    test_split_path = random.sample(images_path, k=int(len(images_path) * test_rate))  # 随机采样测试集

    # 遍历所有图片
    for image_path in tqdm(images_path, desc='loading...'):
        # 获取相应的标注文件,这里需要根据目录、后缀更改
        mask_path = image_path.replace('images', 'masks')

        # 划分数据
        if image_path in test_split_path:  # 在测试集
            shutil.copy(image_path, './data/test/images')
            shutil.copy(mask_path, './data/test/masks')
        else:
            shutil.copy(image_path, './data/train/images')
            shutil.copy(mask_path, './data/train/masks')


if __name__ == '__main__':
    rawDataSet = './rawDataSet/images'  # 原始数据的图片路径

    if os.path.exists('./data'):  # 如果之前有,那么删除
        shutil.rmtree('./data')

    os.makedirs('./data/train/images')  # 训练集图片
    os.makedirs('./data/train/masks')   # 训练集标签
    os.makedirs('./data/test/images')  # 测试集图片
    os.makedirs('./data/test/masks')   # 测试集标签

    # 划分数据
    split_data(root=rawDataSet, test_rate=0.2)

运行过程:这里测试五个数据

运行结果:

 

3. 注意的点

根据训练图片找到对应mask模板的时候,这里要根据目录更换

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MATLAB可以通过使用内置函数或编写自定义函数来进行随机分割数据集。 一种常用的方法是使用MATLAB的内置函数`cvpartition`。该函数可以将给定的数据集随机训练集测试集,可以根据需求设置分割比例。例如,可以使用以下代码将一个数据集按照70:30的比例分为训练集测试集: ```matlab data = [1 2 3 4 5 6 7 8 9 10]; % 假设数据集为一个行向量 n = length(data); % 获取数据集的长度 cv = cvpartition(n, 'HoldOut', 0.3); % 设置分割比例为70:30 trainIdx = training(cv); % 获取训练集的索引 testIdx = test(cv); % 获取测试集的索引 trainData = data(trainIdx); % 通过索引获取训练集 testData = data(testIdx); % 通过索引获取测试集 ``` 另一种方法是编写自定义函数来实现数据集随机分割。一种常用的方法是使用`randperm`函数来生随机索引,然后根据这些索引将数据集分为训练集测试集。以下是一个简单的示例代码: ```matlab data = [1 2 3 4 5 6 7 8 9 10]; % 假设数据集为一个行向量 n = length(data); % 获取数据集的长度 randomIdx = randperm(n); % 生随机索引 trainSize = round(n * 0.7); % 计算训练集大小,比例为70% trainIdx = randomIdx(1:trainSize); % 获取训练集随机索引 testIdx = randomIdx(trainSize+1:end); % 获取测试集随机索引 trainData = data(trainIdx); % 通过随机索引获取训练集 testData = data(testIdx); % 通过随机索引获取测试集 ``` 这些方法都可以方便地在MATLAB实现随机分割数据集。具体使用哪种方法取决于个人的需求和偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

听风吹等浪起

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

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

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

打赏作者

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

抵扣说明:

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

余额充值