文章目录
CIFAR-10 数据集的简介
CIFAR-10 数据集是一个广泛使用的图像数据集,具体可见CIFAR-10 和 CIFAR-100 数据集,它包含 60,000 张 32x32 像素的彩色(3 channels)图像,分为 10 个类别,每个类别有 6,000 张图像。每个类别的图像数量分布如下:
- 飞机 (airplane): 6,000 张
- 汽车 (automobile): 6,000 张
- 鸟类 (bird): 6,000 张
- 猫 (cat): 6,000 张
- 鹿 (deer): 6,000 张
- 狗 (dog): 6,000 张
- 蛙 (frog): 6,000 张
- 马 (horse): 6,000 张
- 船 (ship): 6,000 张
- 卡车 (truck): 6,000 张
文件结构
CIFAR-10 数据集通常以二进制文件的形式提供,每个类别的图像存储在一个单独的文件中。文件名通常遵循以下格式:
data_batch_1
,data_batch_2
, …,data_batch_5
:每个文件包含 10,000 张图像,总共 50,000 张图像用于训练。test_batch
:包含 10,000 张图像,用于测试。
每个二进制文件包含以下结构:
- 一个描述符,通常是一个小的文本块,说明文件中数据的类型和数量。
- 紧随其后的是实际的图像数据。
图像数据结构
每张图像由以下部分组成:
- 一个 32x32 像素的 RGB 图像,每个像素由 3 个字节表示红色、绿色和蓝色通道的强度(范围通常是 0-255)。
- 一个标签,表示图像的类别,通常是一个整数(0-9)。
访问数据
要访问 CIFAR-10 数据集中的图像,通常需要执行以下步骤:
- 下载数据集:从官方网站或数据集提供者处下载 CIFAR-10 数据集的二进制文件。
- 读取二进制文件:使用适当的编程语言(如 Python)和库(如
PIL
或opencv
)读取二进制文件。 - 解析图像数据:从二进制文件中解析图像数据,并将其转换为图像矩阵或张量。
- 解析标签数据:从文件中读取标签,并将其转换为适合机器学习模型的格式。
Python代码
编辑器 | 解释器 |
---|---|
Pycharm Pro 2024.1 | Python3.10 |
使用 PIL
库加载 CIFAR-10 数据集中的图像:
ps
:可查看cifar10数据集读取和显示
from matplotlib import pyplot as plt
# 数据集读取
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
# 输出数据格式
dict = unpickle('E:\Deep Learning\cifar-10-python\cifar-10-batches-py\data_batch_1')
# print(dict)
img = dict[b'data']
print(img.shape)
# 显示图片
show_image = img[666]
img_reshape = show_image.reshape(3, 32, 32)
pic = img_reshape.transpose(1, 2, 0) # (3, 32, 32) --> (32, 32, 3)
plt.imshow(pic)
plt.show()
# 输出label
label = dict[b'labels']
image_label = label[666]
print(image_label)
输出(output):
{b'batch_label': b'training batch 1 of 5',
b'labels': [6, 9 ... 1, 5],
b'data': array([[ 59, 43, 50, ..., 140, 84, 72],
...
[ 62, 61, 60, ..., 130, 130, 131]], dtype=uint8),
b'filenames': [b'leptodactylus_pentadactylus_s_000004.png', b'camion_s_000148.png',
...
b'estate_car_s_001433.png', b'cur_s_000170.png']}
CIFAR-10 数据集的数据格式
在 CIFAR-10 数据集的二进制文件中,标签数据并不是直接存储在图像数据的旁边。相反,标签是以单独的数字形式存储的,通常在图像数据块之后。每个标签代表一个图像所属的类别,并以整数形式给出,范围从 0 到 9,对应于数据集中的 10 个类别。
在解析 CIFAR-10 数据集的二进制文件时,你需要按照数据集的格式说明来读取和解析这些标签。以下是 CIFAR-10 数据集文件中标签数据存储的一般结构:
- 描述符:文件开始处有一个魔术数字(magic number),一个 32 位的整数,表示文件中数据块的数量。对于 CIFAR-10 的训练批次文件,这个数字通常是 1000,意味着每个批次包含 1000 张图像。
- 数据记录:每个数据块紧跟在魔术数字之后,每个数据块包含一张图像的数据以及对应的标签。
- 标签数据:紧接着描述符的是一系列整数,每个整数代表一个图像的标签。
- 图像数据:标签数据之后是实际的图像数据,每张图像的像素值以某种顺序(通常是连续的)存储在文件中。
在 CIFAR-10 的 data_batch
文件中,每个批次包含 10,000 张图像的数据,图像数据和标签数据是交错存储的。具体来说,文件中的前 10,000 个整数是标签,紧接着的大量数据是图像的像素值。
在 CIFAR-10 的 data_batch
文件中,每个批次包含 10,000 张图像的数据,图像数据和标签数据是交错存储的。具体来说,文件中的前 10,000 个整数是标签,紧接着的大量数据是图像的像素值。