So blasen Sie Ihre Daten mit PyTorch auf. In Bezug auf PyTorch selbst habe ich bereits einen Einführungsartikel im Blog geschrieben. Wenn Sie möchten, lesen Sie bitte Folgendes.
Einführung in das vorgestellte Deep Learning Framework "PyTorch"
Im folgenden Artikel finden Sie die Gründe für die Implementierung des Datenauffüllens und spezifische Beispiele.
Darüber hinaus wird dieser Artikel unter der Annahme verfasst, dass er in "Google Colaboratory (Google Colab)" ausgeführt wird. Google Colab selbst geht über den Rahmen dieses Artikels hinaus. Wenn Sie es nicht wissen, lesen Sie bitte den folgenden Artikel.
Der in diesem Artikel verwendete Code ist im folgenden Notizbuch zusammengefasst.
pytorch_data_preprocessing.ipynb
Klicken Sie in der Mitte auf das Symbol "In Colab öffnen", um es in Google Colab zu öffnen und unverändert auszuführen.
Lassen Sie uns zunächst den Umgang mit Daten in PyTorch überprüfen.
Laden Sie zuerst die Lehrerdaten herunter. Die Erklärung wird weggelassen.
!git clone https://github.com/karaage0703/janken_dataset datasets
!rm -rf /content/datasets/.git
!rm /content/datasets/LICENSE
Das Verzeichnis hat die folgende Struktur. Choki, gu, pa, jedes Verzeichnis enthält Bilder von Choki-, Goo- und Par-Hand-Formen.
datasets
├── choki
├── gu
└── pa
Definieren Sie dataset_root_dir
wie folgt:
dataset_root_dir = '/content/datasets'
Importieren Sie zunächst die erforderlichen Bibliotheken.
import torch
from torchvision import transforms, datasets
import matplotlib.pyplot as plt
import PIL
Verwenden Sie ImageFolder, um die Bilder als Dataset in den Ordner zu laden.
dataset = datasets.ImageFolder(root=dataset_root_dir)
Sie können den Inhalt des Datensatzes mit getitem überprüfen. (# Unten ist das Ausführungsergebnis).
print(dataset.__getitem__(0))
print(dataset.__getitem__(100))
print(dataset.__getitem__(150))
# (<PIL.Image.Image image mode=RGB size=320x240 at 0x7F11DB6DC160>, 0)
# (<PIL.Image.Image image mode=RGB size=320x240 at 0x7F11DB6DCF28>, 1)
# (<PIL.Image.Image image mode=RGB size=320x240 at 0x7F12297D2C50>, 2)
Führen Sie die folgenden Schritte aus, um den Inhalt mit matplotlib zu überprüfen.
image_numb = 6 #Bitte geben Sie ein Vielfaches von 3 an
for i in range(0, image_numb):
ax = plt.subplot(image_numb / 3, 3, i + 1)
plt.tight_layout()
ax.set_title(str(i))
plt.imshow(dataset[i][0])
torchvision.transforms In PyTorch können Transformationen verwendet werden, um verschiedene Bildverarbeitungen einschließlich der Datenerweiterung vorzuverarbeiten.
Für eine typische horizontale / vertikale Inversion werden Transformationen in der folgenden Form geschrieben.
data_transform = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.RandomVerticalFlip(),
])
Wenn Sie es anschließend im Transformationsargument von ImageFolder angeben, wird der Datensatz mit der in Transformationen angegebenen Bildverarbeitung definiert.
dataset_augmentated = datasets.ImageFolder(root=dataset_root_dir, transform=data_transform)
Lassen Sie uns die Daten überprüfen.
image_numb = 6 #Bitte geben Sie ein Vielfaches von 3 an
for i in range(0, image_numb):
ax = plt.subplot(image_numb / 3, 3, i + 1)
plt.tight_layout()
ax.set_title(str(i))
plt.imshow(dataset_augmentated[i][0])
Es ist verkehrt herum.
Beispiele für andere Transformationsfunktionen finden Sie im Google Colab-Notizbuch. Techniken wie Random Erasing sind ebenfalls standardmäßig implementiert. Wenn Sie alles wissen möchten, lesen Sie bitte das offizielle Dokument.
Dies ist eine einfache Möglichkeit, Albumentations, eine Bibliothek zur Datenerweiterung, mit PyTorch zu verwenden.
Installieren Sie zunächst die Albumierungen mit dem folgenden Befehl.
! pip install albumentations
Importieren Sie die erforderlichen Bibliotheken.
import albumentations as albu
import numpy as np
from PIL import Image
Wie bei der Transformation möchte ich den Bildordner verwenden, um Daten mit Albumierung aufzublasen, aber ein wenig Technik ist erforderlich.
Sie können die Funktionen von Albumierungen mit Image Folder problemlos verwenden, indem Sie Folgendes anwenden.
albu_transforms = albu.Compose([
albu.RandomRotate90(p=0.5),
albu.RandomGamma(gamma_limit=(85, 115), p=0.2),
])
def albumentations_transform(image, transform=albu_transforms):
if transform:
image_np = np.array(image)
augmented = transform(image=image_np)
image = Image.fromarray(augmented['image'])
return image
data_transform = transforms.Compose([
transforms.Lambda(albumentations_transform),
])
dataset_augmentated = datasets.ImageFolder(root=dataset_root_dir, transform=data_transform)
Lassen Sie uns den Inhalt der Daten überprüfen.
image_numb = 6 #Bitte geben Sie ein Vielfaches von 3 an
for i in range(0, image_numb):
ax = plt.subplot(image_numb / 3, 3, i + 1)
plt.tight_layout()
ax.set_title(str(i))
plt.imshow(dataset_augmentated[i][0])
Sie können sehen, dass die Bildverarbeitung von Albumentationen abgeschlossen ist.
Nach ein wenig Recherche bei der Verwendung von Albumierungen scheint es, dass Datensätze häufig unabhängig voneinander implementiert werden, ohne ImageFolder zu verwenden. Dies ist jedoch eine praktische Technik, wenn Sie sie einfach mit ImageFolder ausprobieren möchten.
Informationen zu den Funktionen von Albumentationen finden Sie im Jupyter-Notizbuch in Albumentations-Beispiele, das von @Kazuhito auf GitHub veröffentlicht wurde. Werden.
Das Jupyter-Notizbuch von @ Kazuhito wurde so geändert, dass es mit Google Colab unten funktioniert. Wenn Sie es also tatsächlich mit Ihren eigenen Händen bewegen möchten, lesen Sie es bitte.
albumentations_examples.ipynb (Google Colab-kompatible Version)
mixup Das folgende GitHub-Repository war aufgrund seiner Leistung hilfreich, wenn die beliebte Methode zum Aufblasen von Daten mit PyTorch verwendet wurde.
Ausführliche Informationen zum Verwechseln und Überprüfen der Daten nach dem Verwechseln finden Sie im Google Colab-Notizbuch.
pytorch_data_preprocessing.ipynb
Im Fall von Keras können die folgenden Artikel hilfreich sein.
Wir haben zusammengefasst, wie Sie mit PyTorch Daten aufblasen (Datenerweiterung) und wie Sie die Daten überprüfen. Bitte lassen Sie uns wissen, ob es bequemere Funktionen oder intelligentere Methoden gibt.
Recommended Posts