CIFAR-10 et CIFAR-100 sont un ensemble de données de 80 millions d'images couleur étiquetées d'une taille de 32x32.
Téléchargez les données du fournisseur de données. https://www.cs.toronto.edu/~kriz/cifar.html
Téléchargez depuis "CIFAR-10 python version" et "CIFAR-100 python version" et décompressez vers un emplacement approprié
input_cifar.py
import cPickle
import numpy as np
import os
def unpickle(file):
fo = open(file, 'rb')
dict = cPickle.load(fo)
fo.close()
return dict
def conv_data2image(data):
return np.rollaxis(data.reshape((3,32,32)),0,3)
def get_cifar10(folder):
tr_data = np.empty((0,32*32*3))
tr_labels = np.empty(1)
'''
32x32x3
'''
for i in range(1,6):
fname = os.path.join(folder, "%s%d" % ("data_batch_", i))
data_dict = unpickle(fname)
if i == 1:
tr_data = data_dict['data']
tr_labels = data_dict['labels']
else:
tr_data = np.vstack((tr_data, data_dict['data']))
tr_labels = np.hstack((tr_labels, data_dict['labels']))
data_dict = unpickle(os.path.join(folder, 'test_batch'))
te_data = data_dict['data']
te_labels = np.array(data_dict['labels'])
bm = unpickle(os.path.join(folder, 'batches.meta'))
label_names = bm['label_names']
return tr_data, tr_labels, te_data, te_labels, label_names
def get_cifar100(folder):
train_fname = os.path.join(folder,'train')
test_fname = os.path.join(folder,'test')
data_dict = unpickle(train_fname)
train_data = data_dict['data']
train_fine_labels = data_dict['fine_labels']
train_coarse_labels = data_dict['coarse_labels']
data_dict = unpickle(test_fname)
test_data = data_dict['data']
test_fine_labels = data_dict['fine_labels']
test_coarse_labels = data_dict['coarse_labels']
bm = unpickle(os.path.join(folder, 'meta'))
clabel_names = bm['coarse_label_names']
flabel_names = bm['fine_label_names']
return train_data, np.array(train_coarse_labels), np.array(train_fine_labels), test_data, np.array(test_coarse_labels), np.array(test_fine_labels), clabel_names, flabel_names
if __name__ == '__main__':
datapath = "./data/cifar-10-batches-py"
datapath2 = "./data/cifar-100-python"
tr_data10, tr_labels10, te_data10, te_labels10, label_names10 = get_cifar10(datapath)
tr_data100, tr_clabels100, tr_flabels100, te_data100, te_clabels100, te_flabels100, clabel_names100, flabel_names100 = get_cifar100(datapath2)
Collez le code ci-dessus dans input_cifar.py, créez un dossier de données dans le dossier où se trouve input_cifar.py et placez-y le jeu de données Lorsque input_cifar.py est exécuté, cela devient comme suit.
CIFAR-10
ipython
In [1]: %run input_cifar.py
In [2]: tr_data10.shape
Out[2]: (50000, 3072)
In [3]: tr_labels10.shape
Out[3]: (50000,)
In [4]: te_data10.shape
Out[4]: (10000, 3072)
In [5]: te_labels10.shape
Out[5]: (10000,)
In [6]: label_names10
Out[6]:
['airplane',
'automobile',
'bird',
'cat',
'deer',
'dog',
'frog',
'horse',
'ship',
'truck']
Dans CIFAR-10 et CIFAR-100, les données sont divisées en 50 000 données d'entraînement et 10 000 données de test. Pour extraire les 0èmes données d'entraînement, procédez comme suit.
ipython
In [7]: img0 = tr_data10[0]
L'image est une image couleur d'une taille de 32x32. Les données sont stockées au format Avion dans l'ordre R, V, B. Du début à 1024 est le plan R, de là à 1024 est le plan G, et de là à la fin est le plan B.
Lors de l'affichage d'une image, les données sont dans une colonne, vous devez donc les trier en 32x32x3. Lorsque vous utilisez imshow de scikit-image, il peut être organisé dans l'ordre de R, V, B, R, V, B, procédez comme suit.
ipython
In [8]: img0 = img0.reshape((3,32,32))
In [9]: img0.shape
Out[9]: (3, 32, 32)
In [10]: import numpy as np
In [11]: img1 = np.rollaxis(img0, 0, 3)
In [12]: img1.shape
Out[12]: (32, 32, 3)
In [13]: from skimage import io
In [14]: io.imshow(img1)
In [15]: io.show()
Le 0e est grenouille quand on regarde l'étiquette, mais il n'est pas clair même si on le regarde car il est réduit à 32x32.
CIFAR-100 Dans CIFAR-100, les images sont divisées en 100 catégories de classe, et les 100 classes sont ensuite regroupées en 20 super classes. La super classe et la classe sont les suivantes. La méthode de stockage des données est la même que CIFAR-10.
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 |
Le nom d'étiquette de Superclass est dans clabel_names100 et le nom d'étiquette de classe est dans flabel_names100.
ipython
In [6]: len(clabel_names100)
Out[6]: 20
In [7]: len(flabel_names100)
Out[7]: 100
In [8]: clabel_names100
Out[8]:
['aquatic_mammals',
'fish',
'flowers',
'food_containers',
'fruit_and_vegetables',
'household_electrical_devices',
'reptiles',
'small_mammals',
'trees',
'vehicles_1',
'vehicles_2']
In [9]: flabel_names100
Out[9]:
['apple',
'aquarium_fish',
'baby',
'bear',
'beaver',
'bed',
'bee',
'beetle',
'bicycle',
'bottle',
'willow_tree',
'wolf',
'woman',
'worm']
In [10]:
Recommended Posts