[PYTHON] Afficher l'image après l'augmentation des données avec PyTorch

Voici quelques pytorch couramment utilisés pour l'augmentation d'image: cherry_blossom: Merci de vous y référer lorsque vous aimez "Je veux effacer une partie de l'image, mais j'ai oublié le nom de la personne qui le fait ...".

En outre, certains d'entre eux sont présentés ici. Pour plus de détails, veuillez consulter la [documentation sur les transformations PyTorch] originale (https://pytorch.org/docs/stable/torchvision/transforms.html).

Préparation

Tout d'abord, importez les bibliothèques requises et téléchargez le jeu de données CIFAR10 que nous traitons cette fois. Nous avons également préparé une fonction pour visualiser l'image.

#Importation de module
import torch
from torchvision import transforms, datasets
import matplotlib.pyplot as plt
#Fonctions à télécharger pour le jeu de données CIFAR10
def load_cifar10(transform):
    cifar10_dataset = datasets.CIFAR10(
                        root='./',
                        transform=transform,
                        download=True)
    return cifar10_dataset
#Fonction pour visualiser l'image de 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')

Ensemble de données CIFAR10

Jetons un coup d'œil à l'ensemble de données CIFAR10. CIFAR10 est de taille (32, 32) et se compose de 50 000 images de train et 10 000 images de test. Il y a 10 étiquettes de classe. avion (avion), automobile (voiture), oiseau (oiseau), chat (chat), cerf (cerf), chien (chien), grenouille (grenouille), cheval (cheval), bateau (bateau), camion ..

#Traitement d'image, le pytorch en fait un type tenseur.
transform = transforms.Compose([
    transforms.ToTensor()
])
#Téléchargez CIFAR10 et visualisez les images
cifar10_dataset = load_cifar10(transform)
show_img(cifar10_dataset)

a.png

Risize Changez la résolution de l'image. La taille d'origine du CIFAR10 est (32, 32). Cette fois, la taille de l'image est réduite à (16, 16).

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

a.png

CenterCrop Découpez la partie centrale. La taille d'origine du CIFAR10 est (32, 32). Cette fois, la taille est (24, 24) et la partie centrale est découpée. Souvent appliqué aux données de test. (De plus, comme il sera redondant, j'omettrai le code de visualisation à partir de ce moment. Le code lui-même est le même que ci-dessus.)

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

a.png

RandomCrop Ceci est découpé au hasard en taille (24, 24). Dans CenterCrop, la partie centrale était toujours retirée, mais dans RandomCrop, il peut s'agir de la partie centrale, de la partie la plus proche du coin supérieur gauche ou de la partie la plus proche du coin inférieur droit. Souvent appliqué aux images d'entraînement.

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

a.png

RandomHorizontalFlip Retourne au hasard horizontalement avec la probabilité donnée (p). Étant donné que la valeur par défaut de p est 0,5, si vous ne définissez pas la valeur de p, elle sera inversée horizontalement avec la moitié de la probabilité. Cette fois, les 1ère, 2ème et 3ème feuilles sont inversées horizontalement.

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

a.png

RandomVerticalFlip Retourne verticalement au hasard avec une probabilité donnée (p). Comme la valeur par défaut de p est 0,5, si vous ne définissez pas la valeur de p, il y a une demi-chance d'inversion verticale. Cette fois, les 1ère, 4ème et 5ème feuilles sont inversées verticalement.

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

a.png

RandomRotation Pivote de manière aléatoire dans un degré donné. Puisque degrés = 30 cette fois, la plage de -30 degrés à +30 degrés est prise au hasard. Vous pouvez également modifier la valeur du centre de l'axe de rotation (la valeur par défaut est le centre) et la valeur de la pièce qui apparaît en tournant (la valeur par défaut est le noir).

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

a.png

RandomErasing p: Probabilité d'effacement. échelle: le nombre de zones à effacer divisé par la surface totale. Par défaut, il peut être effacé de 1/50 à 1/3 du total. ratio: Le rapport hauteur / largeur du rectangle à effacer. Ils vont des rectangles horizontaux longs aux rectangles verticaux longs. valeur: valeur qui s'applique à la plage effacée. La valeur par défaut est définie sur 1 et elle sera noire.

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 Normalise l'image du tenseur avec la moyenne et l'écart type. Pour n canaux, la moyenne (M1, ..., Mn) et l'écart type: (S1, ..., Sn) sont donnés pour n canaux. Dans une image couleur RVB générale, il y a 3 canaux, donc 3 chacun pour la moyenne et la std sont spécifiés. Les valeurs utilisées cette fois tirent des valeurs valides dans l'ensemble de données CIFAR10. (Remarque) Normaliser est différent des précédents, et il est appliqué après le passage au type Tendor.

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

a.png

Grayscale Convertissez en une image grise. Avec num_output_channels, vous pouvez sélectionner 1 canal ou 3 canaux pour l'image de sortie. Si vous le réglez sur 3 canaux, la même valeur sera entrée dans 3 canaux de chaque pixel.

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

a.png

RandomApply Définit la probabilité d'appliquer la transformation. Par exemple, appliquez l'échelle de gris ci-dessus avec une probabilité de 0,5. Cette fois, les 1ère, 2ème et 5ème feuilles ont été converties en échelle de gris.

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

a.png

À la fin

Je suis nouveau sur pytorch, alors faites-le moi savoir si vous faites une erreur. J'oublie souvent le nom des transformations, alors j'ai pensé que ce serait bien d'avoir une liste en japonais, alors je l'ai résumé dans l'article. Je serais heureux si quelqu'un pouvait m'aider! !! : détendu: Si vous avez des inquiétudes, veuillez commenter!

Recommended Posts

Afficher l'image après l'augmentation des données avec PyTorch
Afficher l'image après l'augmentation des données avec Pytorch
[PyTorch] Augmentation des données pour la segmentation
Comment augmenter les données avec PyTorch
Obtenez une image panoramique sur Google Street View
Comment lire les données de séries chronologiques dans PyTorch
Entraînez les données MNIST avec PyTorch en utilisant un réseau neuronal
Échantillonnage dans des données déséquilibrées
Afficher les images avec Matplotlib
Format d'image en Python
Augmentation des données avec openCV
Téléchargeur d'images avec Flask