[PYTHON] Zeigen Sie das Bild nach der Datenerweiterung mit PyTorch an

Hier sind einige häufig verwendete Pytorch zur Bildvergrößerung: cherry_blossom: Bitte beziehen Sie sich darauf, wenn Sie "Ich möchte einen Teil des Bildes löschen, aber ich habe den Namen der Person vergessen, die es tut ..." mögen.

Einige von ihnen werden auch hier gezeigt. Weitere Informationen finden Sie im Original Dokumentation zu PyTorch-Transformationen.

Vorbereitung

Importieren Sie zunächst die erforderlichen Bibliotheken und laden Sie das CIFAR10-Dataset herunter, mit dem wir uns diesmal befassen. Wir haben auch eine Funktion zur Visualisierung des Bildes vorbereitet.

#Modulimport
import torch
from torchvision import transforms, datasets
import matplotlib.pyplot as plt
#Funktionen zum Herunterladen für den CIFAR10-Datensatz
def load_cifar10(transform):
    cifar10_dataset = datasets.CIFAR10(
                        root='./',
                        transform=transform,
                        download=True)
    return cifar10_dataset
#Funktion zur Visualisierung des Bildes von CIFAR10
def show_img(dataset):
    plt.figure(figsize=(15, 3))
    for i in range(5):
        image, label = dataset[i]
        image = image.permute(1, 2, 0)
        plt.subplot(1, 5, i+1)
        plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
        plt.tick_params(bottom=False, left=False, right=False, top=False)
        plt.imshow(image)
    plt.savefig('a.png')

CIFAR10-Datensatz

Werfen wir einen Blick auf den CIFAR10-Datensatz. CIFAR10 ist (32, 32) groß und besteht aus 50.000 Zugbildern und 10.000 Testbildern. Es gibt 10 Klassenbezeichnungen. Flugzeug (Flugzeug), Auto (Auto), Vogel (Vogel), Katze (Katze), Hirsch (Hirsch), Hund (Hund), Frosch (Frosch), Pferd (Pferd), Schiff (Schiff), LKW (LKW) ..

#Bildverarbeitung, Pytorch macht es zu einem Tensortyp.
transform = transforms.Compose([
    transforms.ToTensor()
])
#Laden Sie CIFAR10 herunter und visualisieren Sie Bilder
cifar10_dataset = load_cifar10(transform)
show_img(cifar10_dataset)

a.png

Risize Ändern Sie die Auflösung des Bildes. Die ursprüngliche Größe von CIFAR10 ist (32, 32). Dieses Mal wird die Größe des Bildes auf (16, 16) reduziert.

transform = transforms.Compose([
    transforms.Resize(16),
    transforms.ToTensor()
])
cifar10_dataset = load_cifar10(transform)
show_img(cifar10_dataset)

a.png

CenterCrop Schneiden Sie den Mittelteil aus. Die ursprüngliche Größe von CIFAR10 ist (32, 32). Dieses Mal ist die Größe (24, 24) und der Mittelteil ist ausgeschnitten. Wird oft auf Testdaten angewendet. (Da es redundant sein wird, werde ich den Visualisierungscode ab diesem Zeitpunkt weglassen. Der Code selbst ist der gleiche wie oben.)

transform = transforms.Compose([
    transforms.CenterCrop(24),
    transforms.ToTensor()
])

a.png

RandomCrop Dies wird zufällig in (24, 24) Größe ausgeschnitten. In CenterCrop wurde der zentrale Teil immer herausgenommen, in RandomCrop kann es sich jedoch um den zentralen Teil handeln, den Teil näher oben links oder den Teil näher rechts unten. Wird oft auf Trainingsbilder angewendet.

transform = transforms.Compose([
    transforms.RandomCrop(24),
    transforms.ToTensor()
])

a.png

RandomHorizontalFlip Kippt zufällig horizontal mit der angegebenen Wahrscheinlichkeit (p). Da der Standardwert von p 0,5 ist, besteht eine halbe Wahrscheinlichkeit einer horizontalen Inversion, wenn Sie den Wert von p nicht festlegen. Dieses Mal werden das 1., 2. und 3. Blatt horizontal invertiert.

transform = transforms.Compose([
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.ToTensor()
])

a.png

RandomVerticalFlip Kippt zufällig vertikal mit einer bestimmten Wahrscheinlichkeit (p). Da der Standardwert von p 0,5 ist, besteht eine halbe Wahrscheinlichkeit einer vertikalen Inversion, wenn Sie den Wert von p nicht festlegen. Dieses Mal werden das 1., 4. und 5. Blatt vertikal invertiert.

transform = transforms.Compose([
    transforms.RandomVerticalFlip(p=0.5),
    transforms.ToTensor()
])

a.png

RandomRotation Dreht sich zufällig innerhalb eines bestimmten Grades. Da diesmal Grad = 30 ist, wird der Bereich von -30 Grad bis +30 Grad zufällig gewählt. Sie können auch den Wert der Mitte der Rotationsachse (Standard ist die Mitte) und den Wert des Teils ändern, das durch Drehen angezeigt wird (Standard ist Schwarz).

transform = transforms.Compose([
    transforms.RandomRotation(degrees=30),
    transforms.ToTensor()
])

a.png

RandomErasing p: Wahrscheinlichkeit des Löschens. Maßstab: Die Anzahl der zu löschenden Bereiche geteilt durch die Gesamtfläche. Standardmäßig kann es von 1/50 bis 1/3 der Gesamtsumme gelöscht werden. Verhältnis: Das Seitenverhältnis des zu löschenden Rechtecks. Sie reichen von horizontal langen Rechtecken bis zu vertikal langen Rechtecken. value: Ein Wert, der für den Bereich Erased gilt. Der Standardwert ist 1 und wird schwarz.

transform = transforms.Compose([
    transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0),
    transforms.ToTensor()
])

a.png

Normalize Normalisiert das Tensorbild mit Mittelwert und Standardabweichung. Für n Kanäle sind Mittelwert (M1, ..., Mn) und Standardabweichung: (S1, ..., Sn) für n Kanäle angegeben. In einem allgemeinen RGB-Farbbild gibt es 3 Kanäle, sodass jeweils 3 für Mittelwert und Standard angegeben sind. Die diesmal verwendeten Werte beziehen sich auf gültige Werte im CIFAR10-Dataset. (Hinweis) Normalisieren unterscheidet sich von den vorherigen und wird nach dem Wechsel zum Tendor-Typ angewendet.

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
])

a.png

Grayscale In ein graues Bild konvertieren. Mit num_output_channels können Sie 1 Kanal oder 3 Kanäle für das Ausgabebild auswählen. Wenn Sie 3 Kanäle einstellen, wird in 3 Kanälen jedes Pixels der gleiche Wert eingegeben.

transform = transforms.Compose([
    transforms.Grayscale(num_output_channels=3)
    transforms.ToTensor()
])

a.png

RandomApply Legt die Wahrscheinlichkeit für die Anwendung der Transformation fest. Wenden Sie als Beispiel die obige Graustufe mit einer Wahrscheinlichkeit von 0,5 an. Dieses Mal wurden das 1., 2. und 5. Blatt in Graustufen umgewandelt.

transform = transforms.Compose([
    transforms.RandomApply([transforms.Grayscale(num_output_channels=3)], p=0.5),
    transforms.ToTensor()
])

a.png

Am Ende

Ich bin neu in Pytorch, also lass es mich wissen, wenn du einen Fehler machst. Ich vergesse oft den Namen von Transformationen, deshalb dachte ich, es wäre schön, eine Liste auf Japanisch zu haben, also habe ich sie im Artikel zusammengefasst. Ich würde mich freuen, wenn mir jemand helfen könnte! !! : entspannt: Wenn Sie Bedenken haben, kommentieren Sie bitte!

Recommended Posts

Zeigen Sie das Bild nach der Datenerweiterung mit PyTorch an
Zeigen Sie das Bild nach der Datenerweiterung mit Pytorch an
[PyTorch] Datenerweiterung zur Segmentierung
Aufblasen von Daten (Datenerweiterung) mit PyTorch
Holen Sie sich ein Panoramabild in Google Street View
Lesen von Zeitreihendaten in PyTorch
Trainieren Sie MNIST-Daten mit PyTorch mithilfe eines neuronalen Netzwerks
Abtastung in unausgeglichenen Daten
Bilder mit Matplotlib anzeigen
Bildformat in Python
Datenerweiterung mit openCV
Bild-Uploader mit Flasche