Trabalhando com imagens no PyTorch

Aprendizagem profunda intermediária com PyTorch

Michal Oleszak

Machine Learning Engineer

Dataset de nuvens

Amostras do dataset de nuvens: cinco imagens mostrando diferentes tipos de nuvens.

1 https://www.kaggle.com/competitions/cloud-type-classification2/data
Aprendizagem profunda intermediária com PyTorch

O que é uma imagem?

Uma imagem de nuvem com parte ampliada, mostrando os pixels.

  • Imagens são compostas por pixels ("elementos de imagem")
  • Cada pixel tem informação de cor

  • Imagens em tons de cinza: inteiro de 0 a 255

    • 30:

Caixa cinza

  • Imagens coloridas: três inteiros, um por canal de cor (Vermelho, Verde, Azul)
    • RGB = (52, 171, 235):

Caixa azul

Aprendizagem profunda intermediária com PyTorch

Carregando imagens no PyTorch

Estrutura de diretórios desejada:

clouds_train

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

 

  • Pastas principais: clouds_train e clouds_test
  • Dentro de cada pasta principal: uma pasta por categoria
  • Dentro de cada pasta de classe: arquivos de imagem
Aprendizagem profunda intermediária com PyTorch

Carregando imagens no 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, )
  • Defina as transformações:

    • Converter para tensor
    • Redimensionar para 128x128
  • Crie o dataset passando:

    • Caminho dos dados
    • Transformações definidas
Aprendizagem profunda intermediária com PyTorch

Exibindo imagens

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

Imagem de nuvem exibida por plt.show

Aprendizagem profunda intermediária com PyTorch

Aumento de dados

train_transforms = transforms.Compose([

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

Aumento de dados: gerar mais dados aplicando transformações aleatórias nas imagens originais

  • Aumenta tamanho e diversidade do treino
  • Melhora a robustez do modelo
  • Reduz overfitting

Três imagens de nuvens mostrando a transformação de rotação

Aprendizagem profunda intermediária com PyTorch

Vamos praticar!

Aprendizagem profunda intermediária com PyTorch

Preparing Video For Download...