Voici comment gonfler vos données avec PyTorch. En ce qui concerne PyTorch lui-même, j'ai déjà écrit un article d'introduction sur le blog, alors veuillez vous référer à ce qui suit si vous le souhaitez.
Introduction au framework d'apprentissage profond en vedette "PyTorch"
Veuillez vous référer à l'article suivant pour les raisons de l'implémentation du remplissage de données et des exemples spécifiques.
De plus, cet article est rédigé en supposant qu'il sera exécuté dans "Google Colaboratory (Google Colab)". Google Colab lui-même dépasse le cadre de cet article. Si vous ne savez pas, veuillez vous référer à l'article suivant.
Le code utilisé dans cet article est résumé dans le cahier suivant.
pytorch_data_preprocessing.ipynb
Cliquez sur l'icône "Ouvrir dans Colab" au milieu pour l'ouvrir dans Google Colab et l'exécuter tel quel.
Tout d'abord, vérifions le traitement des données dans PyTorch.
Téléchargez d'abord les données de l'enseignant. L'explication est omise.
!git clone https://github.com/karaage0703/janken_dataset datasets
!rm -rf /content/datasets/.git
!rm /content/datasets/LICENSE
Le répertoire a la structure suivante. Choki, gu, pa, chaque répertoire contient des images de formes de main choki, goo et par.
datasets
├── choki
├── gu
└── pa
Définissez dataset_root_dir
comme suit:
dataset_root_dir = '/content/datasets'
Tout d'abord, importez les bibliothèques requises.
import torch
from torchvision import transforms, datasets
import matplotlib.pyplot as plt
import PIL
Utilisez ImageFolder pour charger les images dans le dossier en tant qu'ensemble de données.
dataset = datasets.ImageFolder(root=dataset_root_dir)
Vous pouvez vérifier le contenu de l'ensemble de données avec getitem. (# Ci-dessous le résultat de l'exécution).
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)
Pour vérifier le contenu avec matplotlib, suivez les étapes ci-dessous.
image_numb = 6 #Veuillez spécifier un multiple de 3
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 Dans PyTorch, les transformations peuvent être utilisées pour prétraiter divers traitements d'images, y compris l'augmentation des données.
Pour une inversion horizontale / verticale typique, les transformations sont écrites sous la forme suivante.
data_transform = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.RandomVerticalFlip(),
])
Après cela, si vous le spécifiez dans l'argument de transformation d'ImageFolder, l'ensemble de données avec le traitement d'image spécifié dans les transformations sera défini.
dataset_augmentated = datasets.ImageFolder(root=dataset_root_dir, transform=data_transform)
Vérifions les données.
image_numb = 6 #Veuillez spécifier un multiple de 3
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])
C'est à l'envers.
Consultez le bloc-notes Google Colab pour obtenir des exemples d'autres fonctions de transformation. Des techniques telles que l'effacement aléatoire sont également implémentées en standard. Si vous voulez tout savoir, veuillez vous référer au document officiel.
Il s'agit d'un moyen simple d'utiliser une bibliothèque pour l'augmentation des données appelée albumentations avec PyTorch.
Tout d'abord, installez les albums avec la commande suivante.
! pip install albumentations
Importez les bibliothèques requises.
import albumentations as albu
import numpy as np
from PIL import Image
Comme pour la transformation, j'aimerais utiliser Image Folder pour gonfler les données avec albumation, mais un peu de technique est nécessaire.
Vous pouvez facilement utiliser les fonctions d'albumations avec Image Folder en appliquant ce qui suit.
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)
Vérifions le contenu des données.
image_numb = 6 #Veuillez spécifier un multiple de 3
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])
Vous pouvez voir que le traitement d'image des albumentations est terminé.
Après quelques recherches, lors de l'utilisation d'albumations, il semble que les ensembles de données soient souvent implémentés indépendamment sans utiliser ImageFolder, mais c'est une technique pratique lorsque vous voulez l'essayer facilement avec ImageFolder.
Vous pouvez découvrir les fonctionnalités des albumentations dans le Jupyter Notebook de albumentations-examples publié par @Kazuhito sur GitHub. Devenir.
De plus, le Jupyter Notebook de @ Kazuhito est modifié pour fonctionner avec Google Colab ci-dessous, donc si vous voulez réellement le déplacer de vos propres mains, veuillez vous y référer.
albumentations_examples.ipynb (version compatible Google Colab)
mixup Le référentiel GitHub suivant a été utile lors de l'utilisation de la méthode populaire de gonflement des données avec PyTorch en raison de ses performances.
Pour plus de détails sur la façon de mélanger et de vérifier les données après le mélange, reportez-vous au bloc-notes Google Colab.
pytorch_data_preprocessing.ipynb
Dans le cas de Keras, les articles suivants peuvent être utiles.
Augmentation de la confusion chez Keras
Nous avons résumé comment gonfler les données (Data Augmentation) avec PyTorch et comment vérifier les données. Veuillez nous indiquer s'il existe des fonctions plus pratiques ou des méthodes plus intelligentes.
Recommended Posts