[PYTHON] Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen

Einführung

――Die Gesamtgröße des Trainingsbilds, des Testbilds und des gepolsterten Bildes beträgt diesmal etwa 1,4 GB. ――Das Laden dieser Bilder dauert einige Zeit, wenn das Lernprogramm implementiert ist. —— Wenn Sie ein Lernprogramm in einer anderen Umgebung ausführen, tritt eine Übertragungszeit auf. ―― Außerdem dauert es einige Zeit, die Bildgröße zu ändern und von Farbe in Grau umzuwandeln. ――Durch die Erstellung eines Datensatzes mit geänderter Größe und Graukonvertierung im Voraus konnten wir einen Wert von ca. 50 MB erreichen.

Bibliothek

Aufbau

config.py


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

IMG_ROWS, IMG_COLS = 28, 28

Erstellen einer Dateiliste

--Erstellen Sie eine Dateiliste mit Trainingsbildern, Testbildern und aufgefüllten Bildern.

def make_filesets(augment):
    """Erstellen einer Dateigruppe."""

    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

Bildladefunktion

def read_image(filename):
    """Laden, Ändern der Größe, Graukonvertierung."""

    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

Erstellen eines Datensatzes

def make_datasets(augment, filesets):
    """Erstellen eines Datensatzes."""

    train_images = []
    train_labels = []
    test_images = []
    test_labels = []
    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

――Die Verwendung aufgeblähter Bilder wird mit den folgenden Optionen umgeschaltet.

$ 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

abschließend

――Wir haben einen Datensatz erstellt, dessen Größe geändert und die Bilddaten grau skaliert wurden, damit sie problemlos aus dem Lernprogramm verwendet werden können. ――Sie können verschiedene Datensätze erstellen, indem Sie die Anzahl der aufgefüllten Bilder und mehrere Größen ändern und sie beim Wechseln nach Dateinamen verwenden. ――Nächstes Mal plane ich, ein Teil zu erstellen, um den Datensatz aus dem Trainingsprogramm zu lesen.

Recommended Posts

Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Wie nutzt man maschinelles Lernen für die Arbeit? 02_AI Entwicklungsprojektübersicht
Laden Sie eine große Anzahl von Bildern in Wordpress hoch
Erstellen Sie einen Datensatz, indem Sie zufällig MNIST-Daten auswählen
Erstellen Sie einen Sub-Sub-Befehl mit dem Klick --netsted-Sub-Sub-Befehl -
Hinweise zur Verwendung von AIST Spacon ABCI
[Go] So erstellen Sie einen benutzerdefinierten Fehler für Sentry
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
So erstellen Sie ein lokales Repository für Linux
Verwenden Sie den Scikit-Learn-Trainingsdatensatz mit Chainer (für Training / Vorhersage).
Praktisch, um Matplotlib-Unterzeichnungen in for-Anweisungen zu verwenden
Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen
[Teil 4] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Erstellen Sie eine Funktion zum Anzeigen von Bildern wie Jupyter / RStudio [Docker]
Die Verwendung von icrawler zum Sammeln von Daten zum maschinellen Lernen wurde vereinfacht
Wie nutzt man maschinelles Lernen für die Arbeit? 03_Python-Codierungsverfahren
[Teil 2] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Ich habe versucht, einen Bot für die Ankündigung eines Wiire-Ereignisses zu erstellen
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben - OpenCV-Port Python zu C ++ -
Ich möchte vorerst eine Docker-Datei erstellen.
Passende App Ich habe versucht, Statistiken über starke Leute zu erstellen und ein Modell für maschinelles Lernen zu erstellen
Übersicht über das Erstellen eines Server-Sockets und das Einrichten eines Client-Sockets
Zusammenfassung der Verwendung von pandas.DataFrame.loc
Schritte zum Erstellen eines Django-Projekts
So erstellen Sie ein Conda-Paket
Zusammenfassung der Verwendung von pyenv-virtualenv
Ich suchte mit Deep Learning nach einer ähnlichen Karte von Hearthstone
TensorFlow Aus einer großen Anzahl von Bildern lernen ... ~ (fast) Lösung ~
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
So erstellen Sie eine virtuelle Brücke
[Los] Erstellen Sie einen CLI-Befehl, um die Erweiterung des Bildes zu ändern
So erstellen Sie eine Bezeichnung (Maske) für die Segmentierung mit labelme (semantische Segmentierungsmaske)
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Untersuchung zur praktischen Anwendung von BlockChain
Wie erstelle ich eine Docker-Datei?
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Python vba zum Erstellen einer Datumszeichenfolge zum Erstellen eines Dateinamens
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Web-API
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken ((1) Implementierung von Blackjack)
5 Möglichkeiten zum Erstellen eines Python-Chatbots
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Zusammenfassung der Verwendung von csvkit
[Python] Verwendung der for-Anweisung. Eine Methode zum Extrahieren durch Angabe eines Bereichs oder von Bedingungen.
So erstellen Sie eine Konfigurationsdatei
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
Verwenden Sie shutil, um alle Ordner mit einer kleinen Anzahl von Dateien zu löschen
Latein lernen zum Schreiben eines lateinischen Satzanalyseprogramms (Teil 1)
Verschiedene Methoden zum numerischen Erstellen der Umkehrfunktion einer bestimmten Funktion Einführung
Eine Sammlung von Tipps zur Beschleunigung des Lernens und Denkens mit PyTorch
[Python / Tkinter] Suche nach Pandas DataFrame → Erstellen Sie ein einfaches Suchformular zur Anzeige
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben. 3-Überlassen Sie die grafische Darstellung matplotlib-