[PYTHON] Aufblasen von Daten (Datenerweiterung) mit PyTorch

Datenerweiterung mit PyTorch

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.

Methode zum Auffüllen von Bilddaten (Data Augmentation) zur Verbesserung der Genauigkeit des Tiefenlernens beim Spielen mit kostenlosen Materialien

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.

Wenn Sie Google Colaboratory verwenden, müssen Sie keine Umgebung erstellen und können Python kostenlos lernen.

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.

Umgang mit Daten in PyTorch

Lassen Sie uns zunächst den Umgang mit Daten in PyTorch überprüfen.

Lehrerdaten herunterladen

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'

Erstellen eines Datensatzes

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)

Überprüfen des Datensatzes

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])

data_01.png

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])

data_02.png

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.

Implementierung von Albumentationen

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])

data_albu.png

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.

hongyi-zhang/mixup

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.

Mixup-Erweiterung bei Keras

Zusammenfassung

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.

In Verbindung stehender Artikel

Verschieben und überprüfen Sie, was Sie mit der Datenerweiterung der Objekterkennungs-API von TensorFlow tun

Recommended Posts

Aufblasen von Daten (Datenerweiterung) mit PyTorch
Umgang mit unausgeglichenen Daten
Wie man Problemdaten mit Paiza liest
Datenerweiterung mit openCV
Erstellen von CSV-Beispieldaten mit Hypothese
So kratzen Sie Pferderenndaten mit Beautiful Soup
Lesen von Zeitreihendaten in PyTorch
Zeigen Sie das Bild nach der Datenerweiterung mit Pytorch an
Wie aktualisiere ich mit SQLAlchemy?
Wie man mit Theano besetzt
Wie mit SQLAlchemy ändern?
So trennen Sie Zeichenfolgen mit ','
[PyTorch] Datenerweiterung zur Segmentierung
Wie man RDP auf Fedora31 macht
Umgang mit Datenrahmen
Wie lösche ich mit SQLAlchemy?
Verwendung von xgboost: Mehrklassenklassifizierung mit Irisdaten
So kratzen Sie Bilddaten von Flickr mit Python
So konvertieren Sie horizontal gehaltene Daten mit Pandas in vertikal gehaltene Daten
So erhalten Sie mit SQLAlchemy + MySQLdb mehr als 1000 Daten
So extrahieren Sie mit Pandas Daten, denen der Wert nan nicht fehlt
So extrahieren Sie mit Pandas Daten, denen der Wert nan nicht fehlt
[Python] Wie man MP3-Daten fFT
Python: So verwenden Sie Async mit
Lesen von e-Stat-Subregionsdaten
So verwenden Sie virtualenv mit PowerShell
So installieren Sie Python-Pip mit Ubuntu20.04LTS
Wie fange ich mit Scrapy an?
Erste Schritte mit Python
Umgang mit dem DistributionNotFound-Fehler
Wie fange ich mit Django an?
So berechnen Sie das Datum mit Python
So installieren Sie den MySQL-Connector mit pip3
So verbinden Sie INNER mit SQL Alchemy
So installieren Sie Anaconda mit pyenv
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
Sammeln von Daten zum maschinellen Lernen
So rufen Sie PyTorch in Julia an
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
Wie man mit matplotlib mehrere Figuren betitelt
Zeigen Sie das Bild nach der Datenerweiterung mit PyTorch an
So sammeln Sie Twitter-Daten ohne Programmierung
So erhalten Sie die Eltern-ID mit sqlalchemy
So fügen Sie ein Paket mit PyCharm hinzu
Verwendung von OpenVPN mit Ubuntu 18.04.3 LTS
Verwendung von Cmder mit PyCharm (Windows)
Konvertieren Sie Excel-Daten mit Python in JSON
So verhindern Sie Paketaktualisierungen mit apt
So arbeiten Sie mit BigQuery in Python
Wie man Ass / Alembic mit HtoA benutzt
Umgang mit Enum-Kompatibilitätsfehlern
Verwendung von Japanisch mit NLTK-Plot
Wie man einen Taschentest mit Python macht
So suchen Sie in Google Colaboratory nach Google Drive