图像分类数据集划分(创建ImageNet格式的数据集)

原始数据文件夹如下:
├──data
    ├── 0  类别1
    ├── 1  类别2

制作数据集格式如下所示:
├──datasets
    ├── meta
        │   ├── test.txt     # 测试数据集的标注文件
        │   ├── train.txt    # 训练数据集的标注文件
        │   └── val.txt      # 验证数据集的标注文件
        ├── train
        │   ├── 0
        │   ├── 1
        │   
        ├── test
        │   ├── 0
        │   ├── 1
        │
        └── val
        │   ├── 0
        │   ├── 1

划分数据集比例,训练集:验证集:测试集=0.6:0.2:0.2

划分数据集代码如下:

import os
import shutil
import random
from tqdm import tqdm

# 定义原始数据文件夹和目标数据集文件夹
data_dir = 'data'
target_dir = 'datasets'

# 定义数据集划分比例
train_split_ratio = 0.6
val_split_ratio = 0.2
test_split_ratio = 0.2

# 创建目标数据集文件夹及其子目录结构
os.makedirs(target_dir, exist_ok=True)
os.makedirs(os.path.join(target_dir, 'meta'), exist_ok=True)
os.makedirs(os.path.join(target_dir, 'train'), exist_ok=True)
os.makedirs(os.path.join(target_dir, 'test'), exist_ok=True)
os.makedirs(os.path.join(target_dir, 'val'), exist_ok=True)

# 获取原始数据文件夹下的子目录列表
categories = os.listdir(data_dir)

# 遍历每个子目录
for category in categories:
    # 获取该类别下的所有文件
    files = os.listdir(os.path.join(data_dir, category))

    # 随机打乱文件顺序
    random.shuffle(files)

    # 计算划分数据集的索引
    total_files = len(files)
    train_split = int(train_split_ratio * total_files)
    val_split = int(val_split_ratio * total_files)

    # 划分数据集并复制到目标文件夹,使用tqdm添加进度条
    for file in tqdm(files[:train_split], desc=f'Copying train data for {category}'):
        src = os.path.join(data_dir, category, file)
        dst = os.path.join(target_dir, 'train', category)
        os.makedirs(dst, exist_ok=True)
        shutil.copy(src, os.path.join(dst, file))

    for file in tqdm(files[train_split:train_split + val_split], desc=f'Copying validation data for {category}'):
        src = os.path.join(data_dir, category, file)
        dst = os.path.join(target_dir, 'val', category)
        os.makedirs(dst, exist_ok=True)
        shutil.copy(src, os.path.join(dst, file))

    for file in tqdm(files[train_split + val_split:], desc=f'Copying test data for {category}'):
        src = os.path.join(data_dir, category, file)
        dst = os.path.join(target_dir, 'test', category)
        os.makedirs(dst, exist_ok=True)
        shutil.copy(src, os.path.join(dst, file))

# 创建标注文件(train.txt、val.txt、test.txt)
with open(os.path.join(target_dir, 'meta', 'train.txt'), 'w') as train_txt:
    for category in categories:
        train_files = os.listdir(os.path.join(target_dir, 'train', category))
        for file in train_files:
            train_txt.write(f'{os.path.join("train", category, file)} {category}\n')

with open(os.path.join(target_dir, 'meta', 'val.txt'), 'w') as val_txt:
    for category in categories:
        val_files = os.listdir(os.path.join(target_dir, 'val', category))
        for file in val_files:
            val_txt.write(f'{os.path.join("val", category, file)} {category}\n')

with open(os.path.join(target_dir, 'meta', 'test.txt'), 'w') as test_txt:
    for category in categories:
        test_files = os.listdir(os.path.join(target_dir, 'test', category))
        for file in test_files:
            test_txt.write(f'{os.path.join("test", category, file)} {category}\n')

print("数据集划分完成!")
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要制作一个ResNet图像分类数据集,你需要遵循以下步骤: 1. 确定你的图像分类任务:决定你要训练模型来识别哪些类别的图像。例如,你可以选择动物、食物、车辆等类别。 2. 收集图像数据:收集大量属于各个类别的图像。你可以从互联网上搜索并下载图像,或者使用开放的图像数据库(如ImageNet、COCO等)。 3. 数据预处理:对收集到的图像进行预处理,以便与ResNet模型的输入要求相匹配。常见的预处理步骤包括:调整图像大小、归一化图像像素值、剪裁或填充图像等。 4. 数据标注:为每个图像分配正确的类别标签。标签应该与你在第一步中确定的类别一致。 5. 数据集划分:将数据集划分为训练集、验证集和测试集。通常,大部分数据用于训练,一小部分用于验证和测试。划分比例取决于你的数据集规模和任务要求。 6. 数据增强(可选):为了增加数据样本的多样性和模型鲁棒性,你可以应用一些数据增强技术,如旋转、翻转、裁剪、缩放等。 7. 数据加载:使用适当的库(如PyTorch、TensorFlow等)来加载和处理数据集。这些库可以帮助你以批处理的方式高效地加载数据。 8. 模型训练:使用ResNet模型或其变种,将数据集用于训练。你可以使用已有的预训练模型作为起点,或者从头开始训练一个新模型。 9. 模型评估:使用验证集对训练的模型进行评估,并根据性能指标(如准确率、精确率、召回率等)选择最佳模型。 10. 模型测试:使用测试集对最佳模型进行最后的性能评估。可以计算模型在测试集上的准确率或其他指标,以衡量其在真实环境中的表现。 11. 模型部署:将经过训练和测试的模型部署到实际应用中,如移动应用、网站或其他系统,以进行实时图像分类任务。 总之,制作一个ResNet图像分类数据集需要收集、处理、标注和划分数据,并在训练和测试过程中使用适当的技术和工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Make_magic

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

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

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

打赏作者

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

抵扣说明:

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

余额充值