如何从两个目录导入图像数据集并生成类CIFAR-10格式的训练测试集
自定义数据集加载为CIFAR-10格式实现方案
完全可以将你的本地数据集处理成和CIFAR-10完全一致的格式,以下是可直接运行的实现代码:
依赖安装
先安装需要用到的第三方库:
pip install numpy pandas pillow
完整实现代码
import os import numpy as np import pandas as pd from PIL import Image # -------------------------- 请修改以下路径配置 -------------------------- TRAIN_IMG_DIR = "你的训练图像文件夹路径" # 示例:"./train_images" TEST_IMG_DIR = "你的测试图像文件夹路径" # 示例:"./test_images" TRAIN_LABEL_PATH = "你的训练标签csv路径" # 示例:"./train_labels.csv" TARGET_IMG_SIZE = (32, 32) # 和CIFAR-10一致的尺寸,可根据实际需求调整 # ------------------------------------------------------------------------ def load_single_img(img_path, target_size): """加载单张图像并转成numpy数组""" img = Image.open(img_path).convert("RGB") # 统一为3通道RGB格式 img = img.resize(target_size) return np.array(img) # 1. 加载训练标签并转成ID到标签的映射字典 label_df = pd.read_csv(TRAIN_LABEL_PATH, header=0) # 假设csv第一行是表头:样本ID,标签 id2label = dict(zip(label_df.iloc[:, 0], label_df.iloc[:, 1])) # 2. 加载训练集 trainX = [] trainy = [] for img_id in range(50000): # 可根据你的图像命名规则修改文件名拼接逻辑,示例适配{id}.jpg的命名格式 img_path = os.path.join(TRAIN_IMG_DIR, f"{img_id}.jpg") img_arr = load_single_img(img_path, TARGET_IMG_SIZE) trainX.append(img_arr) trainy.append(id2label[img_id]) # 3. 加载测试集 testX = [] # 如有测试标签可按训练集逻辑加载testy,无测试标签可忽略testy部分 for img_id in range(10000): img_path = os.path.join(TEST_IMG_DIR, f"{img_id}.jpg") img_arr = load_single_img(img_path, TARGET_IMG_SIZE) testX.append(img_arr) # 4. 转成numpy数组,对齐CIFAR-10的格式 trainX = np.array(trainX) trainy = np.array(trainy).reshape(-1, 1) testX = np.array(testX) # 如有测试标签可加这行:testy = np.array(testy).reshape(-1, 1) # 验证格式 print('Train: X=%s, y=%s' % (trainX.shape, trainy.shape)) print('Test: X=%s' % (testX.shape,)) # 如有测试标签可打印:print('Test: X=%s, y=%s' % (testX.shape, testy.shape))
注意事项
- 输出的
trainX像素取值范围和原生CIFAR-10完全一致,为0-255的uint8类型,无需额外调整即可适配原有CIFAR-10训练代码 - 6万张32*32的图像内存占用仅200M左右,不需要分批加载,直接全量加载即可
内容的提问来源于stack exchange,提问作者Hermi
相关产品推荐
相关产品推荐

