cifar10数据集可视化、转化成jpg和png

2024.4.23

简介

CIFAR-10 数据集

CIFAR-10是一个包含60000张32x32彩色图像的数据集,分为10个类别,每个类别有6000张图像。这些类别包括:

  1. 飞机(airplane)
  2. 汽车(automobile)
  3. 鸟类(bird)
  4. 猫(cat)
  5. 鹿(deer)
  6. 狗(dog)
  7. 青蛙(frog)
  8. 马(horse)
  9. 船(ship)
  10. 卡车(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)

参考资料

CIFAR-10数据集(介绍、下载读取、可视化显示、另存为图片)_cifar10数据集-CSDN博客文章浏览阅读3.7w次,点赞37次,收藏320次。常用cv2、numpy函数复习,了解CIFAR-10数据集底层并测试_cifar10数据集https://blog.csdn.net/qq_40755283/article/details/125209463

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值