CIFAR-10 数据集使用介绍

CIFAR-10 数据集介绍

  1. CIFAR-10 数据由 60000 32 × 32 的图片组成,共有 10 个种类,每一种 6000 张。CIFAR-10 本身已经把图片分成了 6 份,每份 10000 张,其中 5 份是训练图片,1 份是测试图片。测试图片集中每一种恰有 1000 张,而训练图片集中剩余的图片随机分布。下图是其中一些图片示例:

01.png

CIFAR-10 数据集下载

  1. 官方提供了 3 种版本的数据集,如下:
Version Size md5sum
CIFAR-10 python version 163 MB c58f30108f718f92721af3b95e74349a
CIFAR-10 matlab version 175 MB 70270af85842c9e89bb428ec9976c926
CIFAR-10 binary version (suitable for C programs) 162 MB c32a1d4ab5d03f1284b67883e8d87530
  1. 这里我们选择 python 版本的数据集进行下载。下载完解压后,文件结构如下图所示,其中 data_batch_1 data_batch_5 分别存放了每一份训练数据集,test_batch 中存放了测试数据集,batches.meta 则存放了标签信息。

02.png

CIFAR-10 数据集解析

  1. 数据集中提供的数据是经过 pickle 包压缩过的,根据官网提供的资料,可以用以下代码进行解压:

python 2:

  1. def unpickle(file):
  2. import cPickle
  3. with open(file, 'rb') as fo:
  4. dict = cPickle.load(fo)
  5. return dict

python 3:

  1. def unpickle(file):
  2. import pickle
  3. with open(file, 'rb') as fo:
  4. dict = pickle.load(fo, encoding='bytes')
  5. return dict
  1. 解压后的数据是一个字典结构,对于六个图片数据集,结构如下:
Key Description
b’batch_label’ 这一份数据的名称
b’labels’ 一个长为 10000 的 list ,对应每一张图片的 label 序号
b’data’ 一个 10000 × 3072 的 array ,对应每一张图片的 32 ×32 × 3 通道形式
b’filenames’ 一个长为 10000 的 list ,对应每一张图片的文件名
  1. 对于 batches.meta ,其解压后的字典结构如下:
Key Description
b’num_cases_per_batch’ 一个 int ,表示每一个数据集中的数据量
b’label_names’ 一个长为 10 的list ,表示每一个 label 序号对应的标签名
b’num_vis’ 一个 int ,表示每一张图的大小(即 3072 )
  1. b'data' 中的每一张图片是以展开形式存储的(即一张 32 × 32 × 3的图片被展开为一个长为 3072 list ),每一个数据的格式为 uint8 。在这个 list 中,前 1024 个数据表示红色通道,中间 1024 个数据表示绿色通道,最后 1024 个数据表示蓝色通道。根据这样的组成,可以根据需要来进行处理。例如以下代码可以将每一张图片还原为 32 × 32 × 3 的图片:
  1. def getPhoto(pixel):
  2. assert len(pixel) == 3072
  3. r = pixel[0: 1024]
  4. r = np.reshape(r, [32, 32, 1])
  5. g = pixel[1024: 2048]
  6. g = np.reshape(g, [32, 32, 1])
  7. b = pixel[2048: 3072]
  8. b = np.reshape(b, [32, 32, 1])
  9. photo = np.concatenate([r, g, b], -1)
  10. return photo