[Python] Comment lire les données de CIFAR-10 et CIFAR-100

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é

Screenshot from 2015-12-05 01:56:04.png

Screenshot from 2015-12-05 01:56:39.png

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()

figure_1.png

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

[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment récupérer des données d'image de Flickr avec Python
[Python] Comment FFT des données mp3
Comment lire les données de la sous-région e-Stat
Lire et utiliser des fichiers Python à partir de Python
Comment accéder à wikipedia depuis python
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
[python] Lecture de données
Comment empaqueter et distribuer des scripts Python
De Python à l'utilisation de MeCab (et CaboCha)
Comment installer et utiliser pandas_datareader [Python]
Comment mettre à jour Google Sheets à partir de Python
Portage et modification du solveur de doublets de python2 vers python3.
Comment accéder à RDS depuis Lambda (python)
Lire Python csv et exporter vers txt
python: Comment utiliser les locals () et globals ()
Comment utiliser "deque" pour les données Python
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Compressez les données python et écrivez sur sqlite
Comment lire les données de problème avec Paiza
Comment utiliser is et == en Python
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Comment éviter la duplication des données lors de la saisie de Python vers SQLite.
Python --Lisez des données à partir d'un fichier de données numériques pour trouver des matrices, des valeurs propres et des vecteurs propres distribués co-distribués
Notation canonique Python: comment déterminer et extraire uniquement les expressions de date valides des données d'entrée
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
Comment lire un fichier CSV avec Python 2/3
Comment ouvrir un navigateur Web à partir de python
Comment installer Python
Comment générer une séquence en Python et C ++
Comment lire PyPI
[Kaggle] De la lecture des données au prétraitement et au codage
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Étude de Python Hour7: Comment utiliser les classes
[Python] Comment lire des fichiers Excel avec des pandas
Comment installer python
Comment lire JSON
Comment générer un objet Python à partir de JSON
[Introduction à Python] Comment gérer les données au format JSON
Récupération des données de MacNote3 et migration vers Write
Comment bien gérer les commandes Linux à partir de Python
[Python] Flux du scraping Web à l'analyse des données
[Python] Comment utiliser la fonction de hachage et taple.
Comment lire les données de séries chronologiques dans PyTorch
Nettoyage des données Comment gérer les valeurs manquantes et aberrantes
[Python] Lire depuis Stdin
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
[Python] De l'analyse morphologique des données CSV à la sortie CSV et à l'affichage graphique [GiNZA]
Résumé de la lecture des données numériques avec python [CSV, NetCDF, Fortran binary]
[Python] Comment nommer les données de table et les sortir avec csv (méthode to_csv)
Python --Lisez les données d'un fichier de données numériques et recherchez la ligne de régression multiple.
[Python] Comment supprimer les valeurs en double de la liste
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
[Pour les débutants] Comment étudier le test d'analyse de données Python3
Envoyer des données de Python au traitement via une communication socket
[Python] Comment gérer l'erreur de lecture pandas read_html
[Python] Comment trier un dict dans une liste et une instance dans une liste
Comment télécharger des fichiers depuis Selenium of Python dans Chrome