2024.4.23
简介
CIFAR-10 数据集
CIFAR-10是一个包含60000张32x32彩色图像的数据集,分为10个类别,每个类别有6000张图像。这些类别包括:
- 飞机(airplane)
- 汽车(automobile)
- 鸟类(bird)
- 猫(cat)
- 鹿(deer)
- 狗(dog)
- 青蛙(frog)
- 马(horse)
- 船(ship)
- 卡车(truck)
CIFAR-10数据集分为训练集和测试集,训练集包含50000张图像,测试集包含10000张图像。此外,还有一个可选的验证集,通常用于模型的超参数调整。
CIFAR-100 数据集
CIFAR-100数据集与CIFAR-10非常相似,但它的规模更大,也更具挑战性。它包含60000张32x32彩色图像,分为100个类别,每个类别有600张图像,总共分为50000张训练图像和10000张测试图像。
CIFAR-100的类别层次结构更细,每个类别的图像数量较少,这使得它比CIFAR-10更难分类。此外,CIFAR-100还提供了一个“细粒度”的20个类别的子集,每个类别有1000张图像,这些类别在视觉上更相似,因此分类任务更具挑战性。
下载地址
CIFAR-10 and CIFAR-100 datasets
python选择python版本
数据集结构
下载后可以用解压软件解压
5个训练batch+1个测试batch,每个batch10000张图片,一共是50000+10000张图片。
test_batch是由每一类图片随机抽取出1000张组成的集合。
batches.meta包含了数据集的相关元数据信息。
转换代码
import numpy as np
import cv2
import pickle
import os
def unpickle(file_path):
with open(file_path, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
def save_images(data, labels, label_names, save_dir):
if not os.path.exists(save_dir):
os.makedirs(save_dir)
for i, (image_data, label) in enumerate(zip(data, labels)):
# CIFAR-10图像数据是按照 [32, 32, 3] 的形状存储的,但数据是一维数组
# 首先将其转换为 [32, 32, 3] 形状的数组
image = image_data.reshape(32, 32, 3).astype(np.uint8) # 使用 uint8 类型
# OpenCV 默认使用 BGR 格式,所以我们需要将图像数据从 RGB 转换为 BGR
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
filename = f"{label_names[label]}_NO.{i}.png" # 使用标签和索引构建文件名
cv2.imwrite(os.path.join(save_dir, filename), image) # 保存图像
print(f"{len(data)} images saved to {save_dir}")
# 定义CIFAR-10的所有类别名称
label_name = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
# 定义CIFAR-10数据集的文件路径
base_path = "D:/cifar-10-batches-py/"
batch_files = ["data_batch_1", "data_batch_2", "data_batch_3", "data_batch_4", "data_batch_5", "test_batch"]
save_dir = "D:/cifar10_images_png/"
for batch_file in batch_files:
data_batch = unpickle(os.path.join(base_path, batch_file))
cifar_data = data_batch[b'data']
cifar_labels = data_batch[b'labels']
batch_save_dir = os.path.join(save_dir, batch_file.replace("data_batch_", "")) # 创建保存当前批次图片的文件夹
save_images(cifar_data, cifar_labels, label_name, batch_save_dir)
print(f"{batch_file} images saved to {batch_save_dir}")
print("All images have been saved.")
运行成功,文件生成。
问题
1.如果数据集文件和转换后保存的文件夹的绝对路径中包含中文,可能会产生运行成功但是无文件生成的情况,请将绝对路径修改后再运行。
纠正
2024.5.4
生成的图像并非数据集原图像,而是原图像3×3拼接而成,此处进行修改。
将
image = image_data.reshape(32, 32, 3).astype(np.uint8)
替换为
image = image_data.reshape(3, 32, 32).transpose(1, 2, 0).astype(np.uint8)
替换后运行结果:
解释:(来自kimi.ai)