Práce s obrázky v PyTorch

Intermediate Deep Learning with PyTorch

Michal Oleszak

Machine Learning Engineer

Dataset mraků

Ukázky z datasetu mraků: pět obrázků různých typů mraků.

1 https://www.kaggle.com/competitions/cloud-type-classification2/data
Intermediate Deep Learning with PyTorch

Co je to obrázek?

Obrázek mraku s přiblíženou částí zobrazující jednotlivé pixely.

  • Obrázek se skládá z pixelů ("picture elements")
  • Každý pixel obsahuje informaci o barvě

  • Obrázky ve stupních šedi: celé číslo v rozsahu 0–255

    • 30:

Šedě zbarvený čtverec

  • Barevné obrázky: tři celá čísla, jedno pro každý barevný kanál (červená, zelená, modrá)
    • RGB = (52, 171, 235):

Modře zbarvený čtverec

Intermediate Deep Learning with PyTorch

Načítání obrázků do PyTorch

Požadovaná struktura adresářů:

clouds_train

- cumulus
- 75cbf18.jpg - ...
- cumulonimbus - ...
clouds_test
- cumulus - cumulonimbus - ...

 

  • Hlavní složky: clouds_train a clouds_test
  • V každé hlavní složce: jedna složka na kategorii
  • V každé složce třídy: soubory obrázků
Intermediate Deep Learning with PyTorch

Načítání obrázků do PyTorch

from torchvision.datasets import ImageFolder
from torchvision import transforms


train_transforms = transforms.Compose([ transforms.ToTensor(), transforms.Resize((128, 128)), ])
dataset_train = ImageFolder( "data/clouds_train", transform=train_transforms, )
  • Definování transformací:

    • Převod na tensor
    • Změna velikosti na 128x128
  • Vytvoření datasetu s parametry:

    • Cesta k datům
    • Předdefinované transformace
Intermediate Deep Learning with PyTorch

Zobrazení obrázků

dataloader_train = DataLoader(
    dataset_train, 
    shuffle=True, 
    batch_size=1,
)

image, label = next(iter(dataloader_train))
print(image.shape)
torch.Size([1, 3, 128, 128])
image = image.squeeze().permute(1, 2, 0)
print(image.shape)
torch.Size([128, 128, 3])
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()

Výstup obrázku mraku z plt.show

Intermediate Deep Learning with PyTorch

Augmentace dat

train_transforms = transforms.Compose([

transforms.RandomHorizontalFlip(), transforms.RandomRotation(45),
transforms.ToTensor(), transforms.Resize((128, 128)), ])
dataset_train = ImageFolder( "data/clouds/train", transform=train_transforms, )

Augmentace dat: Generování více dat pomocí náhodných transformací původních obrázků

  • Zvětšení velikosti a různorodosti trénovací sady
  • Zvýšení robustnosti modelu
  • Snížení přeučení

Tři obrázky mraků ukazující transformaci rotace

Intermediate Deep Learning with PyTorch

Pojďme si procvičit!

Intermediate Deep Learning with PyTorch

Preparing Video For Download...