[PYTHON] Ich habe versucht, das Lesen von Dataset mit PyTorch zu implementieren

Überblick

Es ist ein halbes Jahr her, seit ich angefangen habe, maschinelles Lernen zu studieren, und ich habe es geschafft, mit PyTorch einen Datensatz zu erstellen, also werde ich ihn als Erinnerung veröffentlichen. Als ich GAN studierte, lernte ich, indem ich den Code von GitHub ablegte. Da ich jedoch nur MNIST und CIFAR las, wollte ich ihn mit meinem eigenen Datensatz ausführen, also erstellte ich meinen eigenen Datensatz. (Ich weiß es nicht, weil das Posten von Artikeln für einige Zeit auch ein Artikel ist ...)

Umgebung

Datensatzvoraussetzungen

Die Grundkonfiguration ist also so.


class MyDataset(torch.utils.data.Dataset):

    def __init__(self, imageSize, dir_path, transform=None):
        pass

    def __len__(self):
        pass

    def __getitem__(self, idx):
        pass

Zusätzlich zum Pfad zu den Daten habe ich die Eingabegröße des Bildes und die Transformation für die Vorverarbeitung als Argumente an die Klasse übergeben.

Konstruktordefinition

Der Konstruktor, der beim Erstellen einer Klasse automatisch aufgerufen wird, führt die folgende Verarbeitung durch.

    def __init__(self, imageSize, dir_path, transform=None):
        self.transform = transforms.Compose([
            transforms.Resize(imageSize), #Bildgröße ändern
            transforms.ToTensor(), #Tensorisierung
            transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), #Standardisierung
        ])

        #Geben Sie hier die Eingabedaten und die Beschriftung ein
        self.image_paths = [str(p) for p in Path(dir_path).glob("**/*.png ")]

        self.data_num = len(self.image_paths) #Hier ist__len__Wird der Rückgabewert von sein
        self.classes = ['carpet', 'ceramic', 'cloth', 'dirt', 'drywall', 'glass', 'grass', 'gravel', 'leaf', 'metal']
        self.class_to_idx = {'carpet':0, 'ceramic':1, 'cloth':2, 'dirt':3, 'drywall':4, 'glass':5, 'grass':6,'gravel':7, 'leaf':8, 'metal':9}

Ich hatte mehrfach klassifizierte Materialdaten, also habe ich sie verwendet.

Definition von \ _ \ _ getitem \ _ \ _

Da \ _ \ _ getitem \ _ \ _ eine Methode zum Lesen von Daten und deren korrekter Antwortbezeichnung während des Trainings ist, werden wir sie unter Verwendung der vom Konstruktor gelesenen Informationen implementieren.


    def __getitem__(self, idx):
        p = self.image_paths[idx]
        image = Image.open(p)

        if self.transform:
            out_data = self.transform(image)

        out_label = p.split("\\")
        out_label = self.class_to_idx[out_label[3]]

        return out_data, out_label

Ich denke, es ist in Ordnung, die Bilddaten mit dem Konstruktor zu lesen, aber ich war besorgt über den Speicher, wenn es viele Daten gab, also habe ich beschlossen, sie jedes Mal zu lesen. Ich benutze auch eine etwas nervige Methode, um ein Wörterbuch für Klassenbeschriftungen zu erstellen.

Übergabe an DataLoader

Wenn Sie es tatsächlich im Code lesen, können Sie es zum Lernen verwenden, indem Sie es wie folgt verwenden. (DataLoader-Argument-Shuffle randomisiert, wie auf Daten verwiesen wird)

    data_set = MyDataset(32, dir_path=root_data)
    dataloader = torch.utils.data.DataLoader(data_set, batch_size=100, shuffle=True)

Zusammenfassung Quellcode

import torch.utils.data
import torchvision.transforms as transforms
from pathlib import Path
from PIL import Image

class MyDataset(torch.utils.data.Dataset):

    def __init__(self, imageSize, dir_path, transform=None):
        self.transform = transforms.Compose([
            transforms.Resize(imageSize),
            transforms.ToTensor(),
            transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
        ])

        self.image_paths = [str(p) for p in Path(dir_path).glob("**/*.png ")]

        self.data_num = len(self.image_paths)
        self.classes = ['carpet', 'ceramic', 'cloth', 'dirt', 'drywall', 'glass', 'grass', 'gravel', 'leaf', 'metal']
        self.class_to_idx = {'carpet':0, 'ceramic':1, 'cloth':2, 'dirt':3, 'drywall':4, 'glass':5, 'grass':6,'gravel':7, 'leaf':8, 'metal':9}


    def __len__(self):
        return self.data_num

    def __getitem__(self, idx):
        p = self.image_paths[idx]
        image = Image.open(p)

        if self.transform:
            out_data = self.transform(image)

        out_label = p.split("\\")
        out_label = self.class_to_idx[out_label[3]]

        return out_data, out_label

if __name__ == "__main__":
    root_data = 'Pfad zu Daten'
    data_set = MyDataset(32, dir_path=root_data)
    dataloader = torch.utils.data.DataLoader(data_set, batch_size=100, shuffle=True)

Referenzseite

Ich habe es implementiert, als ich mir die folgende Seite angesehen habe. Vielen Dank. Erläuterung von Transformationen, Datasets, Dataloader von pyTorch und Erstellung und Verwendung von selbst erstellten Datasets PyTorch: Dataset und DataLoader (Bildverarbeitungsaufgabe)

Recommended Posts

Ich habe versucht, das Lesen von Dataset mit PyTorch zu implementieren
Ich habe versucht, SSD jetzt mit PyTorch zu implementieren (Dataset)
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, Pytorchs Datensatz zu erklären
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, SSD jetzt mit PyTorch zu implementieren (Modellversion)
Ich habe versucht, die Satzklassifizierung durch Self Attention mit PyTorch zu implementieren
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, Faster R-CNN mit Pytorch auszuführen
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
[Einführung in Pytorch] Ich habe versucht, Cifar10 mit VGG16 ♬ zu kategorisieren
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, Deep VQE zu implementieren
Ich habe versucht, eine kontroverse Validierung zu implementieren
Ich habe versucht, DeepPose mit PyTorch zu implementieren
Ich habe versucht, Realness GAN zu implementieren
Ich habe versucht, mit Quantx einen Ausbruch (Typ der Täuschungsvermeidung) zu implementieren
Ich habe versucht, MNIST nach GNN zu klassifizieren (mit PyTorch-Geometrie).
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Ich habe versucht, Harry Potters Gruppierungshut mit CNN umzusetzen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, ADALINE in Python zu implementieren
[Einführung in Pytorch] Ich habe mit sinGAN ♬ gespielt
Ich habe versucht, DeepPose mit PyTorch PartⅡ zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Ich habe versucht, Deep Learning zu implementieren, das nicht nur mit NumPy tiefgreifend ist
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Ich habe versucht, GAN (mnist) mit Keras zu bewegen
Ich habe versucht, eine Blockchain zu implementieren, die tatsächlich mit ungefähr 170 Zeilen funktioniert
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, mit OpenCV Bewegungen schnell zu erkennen
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht zu debuggen.
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, ein Objekt mit M2Det zu erkennen!
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, das Überleben der Titanic mit PyCaret vorherzusagen
Ich habe versucht, Linux mit Discord Bot zu betreiben
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Ich habe versucht, DP mit Fibonacci-Sequenz zu studieren
Ich habe versucht, Jupyter mit allen Amazon-Lichtern zu starten
Ich habe versucht, Tundele mit Naive Bays zu beurteilen
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe versucht, die Zusammenführungssortierung in Python mit möglichst wenigen Zeilen zu implementieren
Ich habe versucht, Cifar10 mit der SONY Deep Learning Library NNabla [Nippon Hurra] zu implementieren.