CIFAR数据集解读
CIFAR-10 数据集
CIFAR数据集由 Alex Krizhevsky,Vinod Nair 和 Geoffrey Hinton 收集整理自8000万张微型图像数据集,其中CIFAR数据集又根据所涉及的分类对象数量,可分为CIFAR-10和CIFAR-100。该数据集主要用于深度学习的图像分类,目前已被广泛应用。
CIFAR数据集官网:http://www.cs.toronto.edu/~kriz/cifar.html
基本介绍
如上图所示,CIFAR-10数据集包含了飞机、汽车、鸟等10个类别物体的32×32大小的彩色图片,每个类别有6000张图,计算可知,整个数据集一共有 6000×10=60000 张图。其中,automobiles (汽车)和 trucks(卡车)尽管都属于车类,但二者在分类时属于不同的类,不存在重叠。汽车主要包括轿车、越野车之类的车;而卡车则只包含大卡车,皮卡车这样的车则不属于上述任意类别。
数据集划分了训练集和测试集。训练集一共50000张图,每10000张作为一个批次(batch),每个批次包含了来自10个类别的1000张图片。训练集的批次是随机抽取的各个类中的图像,因此存在某一个类的图像数量多于另一个类的图像数量。测试集一共10000张图,也包含了随机从每个类中抽取的1000张图。
下载
CIFAR-10 数据集提供了供 python、matlab、c 读取的数据文件,具体如下:
版本 | 文件大小 | MD5检验码 |
---|---|---|
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 |
数据解读
python和matlab版本
对于python和matlab版本,下载得到文件解压后,会得到如下结构的文件:
即已经分好了的五个batch数据以及一个测试batch数据。
这些文件中的每一个都是用 cPickle 生成的 Python“ pickle”对象。 下面是一个 python 2例程,它将打开这样一个文件并返回一个字典:
def unpickle(file):
import cPickle
with open(file, 'rb') as fo:
dict = cPickle.load(fo)
return dict
对于python 3 而言:
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
利用上面这种方式读取批数据后,将返回以下元素的字典:
-
data
这是一个10000×3072的numpy数组,数据格式为unit8。其中每一行存储了一张32×32的彩色图像。即对于3072个值,每1024个值(32×32=1024)为图片的一个通道数据,一共按顺序包含了红绿蓝三个通道。
-
labels
这是一个长度为10000的数字列表,数字的取值范围为0到9之间的整数,表示图片所对应的标签值。
此外,对于 batches.meta
文件,读取后将返回字典:
-
label_names
这是一个10元素的列表,用于根据标签值获取对应的标签名字,例如:
label_names[0] == "airplane", label_names[1] == "automobile
二进制版本
二进制版本的文件解压后,将得到 data_batch_1.bin, data_batch_2.bin, ..., data_batch_5.bin,以及 test_batch.bin. 每个文件按照下面的格式生成:
<1 x label><3072 x pixel>
...
<1 x label><3072 x pixel>
换句话说,第一个字节是第一个图像的标签,它是一个范围为0-9的数字。 接下来的3072字节是图像的像素值。 前1024个字节是红色通道值,接下来的1024是绿色的,最后的1024是蓝色的。 这些值按照行大小顺序存储,因此前32个字节是图像第一行的红色通道值。
每个文件包含10000个这样的3073字节的“行”图像,尽管没有划分行。 因此,每个文件应该正好是30730000字节长。
还有一个名为 batches.meta.txt 的文件。 这是一个 ASCII 文件,它将0-9范围内的数字标签映射到有意义的类名。 它仅仅是10个类名的列表,每行一个。 行 i 上的类名对应于数字标签 i。
CIFAR-100 数据集
这个数据集就像 CIFAR-10,只不过它有100个类,每个类包含600张图像。 每个班级有500个训练图像和100个测试图像。 Cifar-100中的100个类被分成20个超类。 每个图像都带有一个“罚”标签(它所属的类)和一个“粗”标签(它所属的超类)。
与CIFAR-10类似,CIFAR-100包含了100个类别的物体,其中每个类别有600张图片。每个类取500张作为训练图像,100张作为测试图像。
在CIFAR-100 中,100各类别可以分类父类(Superclass)和子类(Classes)。一共有20个父类,其下又分子类。具体如下:
Superclass | Classes |
---|---|
aquatic mammals | beaver, dolphin, otter, seal, whale |
fish | aquarium fish, flatfish, ray, shark, trout |
flowers | orchids, poppies, roses, sunflowers, tulips |
food containers | bottles, bowls, cans, cups, plates |
fruit and vegetables | apples, mushrooms, oranges, pears, sweet peppers |
household electrical devices | clock, computer keyboard, lamp, telephone, television |
household furniture | bed, chair, couch, table, wardrobe |
insects | bee, beetle, butterfly, caterpillar, cockroach |
large carnivores | bear, leopard, lion, tiger, wolf |
large man-made outdoor things | bridge, castle, house, road, skyscraper |
large natural outdoor scenes | cloud, forest, mountain, plain, sea |
large omnivores and herbivores | camel, cattle, chimpanzee, elephant, kangaroo |
medium-sized mammals | fox, porcupine, possum, raccoon, skunk |
non-insect invertebrates | crab, lobster, snail, spider, worm |
people | baby, boy, girl, man, woman |
reptiles | crocodile, dinosaur, lizard, snake, turtle |
small mammals | hamster, mouse, rabbit, shrew, squirrel |
trees | maple, oak, palm, pine, willow |
vehicles 1 | bicycle, bus, motorcycle, pickup truck, train |
vehicles 2 | lawn-mower, rocket, streetcar, tank, tractor |
下载
版本 | 文件大小 | MD5校验码 |
---|---|---|
CIFAR-100 python version | 161 MB | eb9058c3a382ffc7106e4002c42a8d85 |
CIFAR-100 Matlab version | 175 MB | 6a4bfa1dcd5c9453dda6bb54194911f4 |
CIFAR-100 binary version (suitable for C programs) | 161 MB | 03b5dce01913d631647c71ecec9e9cb8 |
数据解读
python和matlab版本
这里和CIFAR-10的类似,不多做解释。
二进制版本
CIFAR-100的二进制版本与 CIFAR-10的二进制版本相似,只是每个图像有两个标签字节(粗和细)和3072个像素字节,因此二进制文件看起来像这样:
<1 x coarse label><1 x fine label><3072 x pixel>
...
<1 x coarse label><1 x fine label><3072 x pixel>