[PYTHON] Créer un ensemble de données d'images à utiliser pour la formation

introduction

―― La taille totale de l'image d'entraînement, de l'image de test et de l'image rembourrée est cette fois d'environ «1,4 Go». ――Le chargement de ces images prendra un certain temps une fois le programme d'apprentissage mis en œuvre. —— De plus, lorsque vous exécutez un programme d'apprentissage dans un autre environnement, le temps de transfert se produit. De plus, il faut du temps pour redimensionner l'image et passer de la couleur au gris. «En créant un ensemble de données qui a été redimensionné et converti en gris à l'avance, nous avons pu en faire environ« 50 Mo ».

Bibliothèque

Réglage

config.py


DATASETS_PATH = os.path.join(DATA_PATH, 'datasets')

IMG_ROWS, IMG_COLS = 28, 28

Créer une liste de fichiers

--Créez une liste de fichiers d'images d'entraînement, d'images de test et d'images complétées. --query reçoit "CLASSES" dans l'ordre. --ʻAugmentL'argument est un indicateur de disponibilité des images remplies. --La dernière fois, l'image remplie a été créée pour chaquerequête`` 6000`. Si cela ne suffit pas, c'est une erreur.

def make_filesets(augment):
    """Créer un ensemble de fichiers."""

    filesets = {'train': dict(), 'test': dict(), 'augment': dict()}

    for query in CLASSES:

        train_path = os.path.join(TRAIN_PATH, query)
        test_path = os.path.join(TEST_PATH, query)
        augment_path = os.path.join(AUGMENT_PATH, query)

        if not os.path.isdir(train_path):
            print('no train path: {}'.format(train_path))
            return None
        if not os.path.isdir(test_path):
            print('no test path: {}'.format(test_path))
            return None
        if not os.path.isdir(augment_path):
            print('no augment path: {}'.format(augment_path))
            return None

        train_files = glob.glob(os.path.join(train_path, '*.jpeg'))
        train_files.sort()
        filesets['train'][query] = train_files

        test_files = glob.glob(os.path.join(test_path, '*.jpeg'))
        test_files.sort()
        filesets['test'][query] = test_files

        augment_files = glob.glob(os.path.join(augment_path, '*.jpeg'))
        random.shuffle(augment_files)
        filesets['augment'][query] = augment_files

        if augment and len(augment_files) < AUGMENT_NUM:
            print('less augment num: {}, path: {}'.format(len(augment_files), augment_path))
            return None

    return filesets

Fonction de chargement d'image

def read_image(filename):
    """Chargement d'image, redimensionnement, conversion de gris."""

    image = Image.open(filename)
    image = image.resize((IMG_ROWS, IMG_COLS), Image.LANCZOS)
    image = image.convert('L')
    image = np.array(image, dtype=np.uint8)

    return image

Créer un jeu de données

--Préparez un tableau d'images d'entraînement, d'étiquettes d'entraînement, d'images de test et d'étiquettes de test.

def make_datasets(augment, filesets):
    """Créer un jeu de données."""

    train_images = []
    train_labels = []
    test_images = []
    test_labels = []

--query reçoit "CLASSES" dans l'ordre. --Num reçoit une étiquette séquentielle. ――Par exemple, au début de «CLASSES», le libellé «Abe Otsu» est comme «0». --Déterminez s'il faut utiliser l'image gonflée avec «augmentation». Si vous voulez l'utiliser, définissez uniquement le nombre décrit dans ʻAUGMENT_NUM sur train_files`.

    for num, query in enumerate(CLASSES):
        print('create dataset: {}'.format(query))

        if augment:
            train_files = filesets['augment'][query][:AUGMENT_NUM]
        else:
            train_files = filesets['train'][query]
        test_files = filesets['test'][query]

        for train_file in tqdm.tqdm(train_files, desc='create train', leave=False):
            train_images.append(read_image(train_file))
            train_labels.append(num)
        for test_file in tqdm.tqdm(test_files, desc='create test', leave=False):
            test_images.append(read_image(test_file))
            test_labels.append(num)
    datasets = ((np.array(train_images), (np.array(train_labels))), (np.array(test_images), (np.array(test_labels))))

    datasets_path = os.path.join(DATASETS_PATH, ','.join(CLASSES))
    os.makedirs(datasets_path, exist_ok=True)
    train_num = AUGMENT_NUM if augment else 0
    datasets_file = os.path.join(datasets_path, '{}x{}-{}.pickle'.format(IMG_ROWS, IMG_COLS, train_num))
    with open(datasets_file, 'wb') as fout:
        pickle.dump(datasets, fout)
    print('save datasets: {}'.format(datasets_file))

image.png

――L'utilisation d'images gonflées est permutée avec les options suivantes.

$ python save_datasets.py

$ python save_datasets.py --augment
$ du -d1 -h .
115M	./train
 33M	./test
 51M	./datasets
1.4G	./augment


$ ls
3.2M 12 15 23:22 28x28-0.pickle
46M 12 15 22:24 28x28-6000.pickle

en conclusion

――Nous avons créé un ensemble de données qui a redimensionné et mis à l'échelle les données d'image afin qu'il puisse être facilement utilisé à partir du programme d'apprentissage. ―― Vous pouvez créer divers ensembles de données en modifiant le nombre d'images remplies et plusieurs tailles, et les utiliser tout en changeant par nom de fichier. ――La prochaine fois, je prévois de créer une pièce pour lire l'ensemble de données du programme d'apprentissage.

Recommended Posts

Créer un ensemble de données d'images à utiliser pour la formation
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
Comment utiliser l'apprentissage automatique pour le travail? 02_Aperçu du projet de développement AI
Téléchargez un grand nombre d'images sur Wordpress
Créer un ensemble de données en échantillonnant au hasard les données MNIST
Créez une sous-sous-commande à l'aide de la commande click --netsted sub-sub -
Remarques sur l'utilisation d'AIST Spacon ABCI
[Go] Comment créer une erreur personnalisée pour Sentry
Créez un lot d'images et gonflez avec ImageDataGenerator
Comment créer un référentiel local pour le système d'exploitation Linux
Utilisez l'ensemble de données d'entraînement scikit-learn avec chainer (pour l'entraînement / la prédiction)
Pratique pour utiliser les sous-graphiques matplotlib dans l'instruction for
J'ai essayé de créer un environnement d'apprentissage amélioré pour Othello avec Open AI gym
[Partie 4] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Créer une fonction pour afficher des images comme Jupyter / RStudio [Docker]
Utilisation d'icrawler plus simple pour la collecte de données d'apprentissage automatique
Comment utiliser l'apprentissage automatique pour le travail? 03_Procédure de codage Python
[Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
J'ai essayé de créer un bot pour annoncer un événement Wiire
Utilisez un langage de script pour une vie C ++ confortable-OpenCV-Port Python vers C ++ -
Je veux créer un Dockerfile pour le moment.
Application correspondante, j'ai essayé de prendre des statistiques de personnes fortes et j'ai essayé de créer un modèle d'apprentissage automatique
Présentation de la création d'un socket serveur et de la création d'un socket client
Résumé de l'utilisation de pandas.DataFrame.loc
Étapes pour créer un projet Django
Comment créer un package Conda
Résumé de l'utilisation de pyenv-virtualenv
J'ai recherché une carte similaire de Hearthstone avec Deep Learning
TensorFlow Pour apprendre d'un grand nombre d'images ... ~ (presque) solution ~
J'ai essayé de créer une liste de nombres premiers avec python
Comment créer un pont virtuel
[Go] Créez une commande CLI pour changer l'extension de l'image
Comment créer une étiquette (masque) pour la segmentation avec labelme (masque de segmentation sémantique)
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Enquête pour l'utilisation pratique de BlockChain
Comment créer un Dockerfile (basique)
Comment créer une grande quantité de données de test dans MySQL? ??
Python vba pour créer une chaîne de date pour créer un nom de fichier
Je souhaite créer un service d'apprentissage automatique sans programmation! API Web
Essayez de faire une stratégie de blackjack en renforçant l'apprentissage ((1) Implémentation du blackjack)
5 façons de créer un chatbot Python
Créez une fonction pour obtenir le contenu de la base de données dans Go
Résumé de l'utilisation de csvkit
[Python] Comment utiliser l'instruction for. Une méthode d'extraction en spécifiant une plage ou des conditions.
Comment créer un fichier de configuration
Comment créer une API de machine learning sans serveur avec AWS Lambda
Créez un bot qui publie sur Slack le nombre de personnes positives pour le nouveau virus corona à Tokyo
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
Utilisez shutil pour supprimer tous les dossiers avec un petit nombre de fichiers
Apprendre le latin dans le but d'écrire un programme d'analyse de phrases latines (partie 1)
Diverses méthodes pour créer numériquement la fonction inverse d'une certaine fonction Introduction
Une collection de conseils pour accélérer l'apprentissage et le raisonnement avec PyTorch
[Python / Tkinter] Rechercher Pandas DataFrame → Créer un formulaire de recherche simple à afficher
Utilisez un langage de script pour une vie confortable en C ++ 3-Laissez le graphique à matplotlib-