Binaire en multiclass-beeldclassificatie

Deep Learning voor afbeeldingen met PyTorch

Michal Oleszak

Machine Learning Engineer

Wat leren we met PyTorch?

taken

Deep Learning voor afbeeldingen met PyTorch

Wat leren we met PyTorch?

taken

Deep Learning voor afbeeldingen met PyTorch

Wat leren we met PyTorch?

taken

Deep Learning voor afbeeldingen met PyTorch

Wat leren we met PyTorch?

taken

Deep Learning voor afbeeldingen met PyTorch

Vereisten

Deep Learning voor afbeeldingen met PyTorch

PyTorch-bibliotheek

torchvision

Deep Learning voor afbeeldingen met PyTorch

PyTorch-bibliotheek

torchvision

Deep Learning voor afbeeldingen met PyTorch

PyTorch-bibliotheek

torchvision

Deep Learning voor afbeeldingen met PyTorch

PyTorch-bibliotheek

torchvision

Deep Learning voor afbeeldingen met PyTorch

Beeldclassificatie

             Binaire classificatie

binary

  • Twee klassen (kat, hond)
  • Activatiefunctie: Sigmoid

             Multiclass classificatie

multi-class

  • Meerdere klassen (boot, trein, auto)
  • Activatiefunctie: Softmax
  • Hoogste kans is de voorspelling
Deep Learning voor afbeeldingen met PyTorch

Convolutioneel neuraal netwerk (CNN)

  cnn

Deep Learning voor afbeeldingen met PyTorch

Convolutioneel neuraal netwerk (CNN)

  binary

Deep Learning voor afbeeldingen met PyTorch

Convolutioneel neuraal netwerk (CNN)

  binary

Deep Learning voor afbeeldingen met PyTorch

Convolutioneel neuraal netwerk (CNN)

  binary

Deep Learning voor afbeeldingen met PyTorch

Convolutioneel neuraal netwerk (CNN)

  binary

Deep Learning voor afbeeldingen met PyTorch

Datasets: klasselabels

afbeeldingsmappen

from torchvision import datasets
import torchvision.transforms as transforms


train_dir = '/data/train' train_dataset = ImageFolder(root=train_dir, transform=transforms.ToTensor())
classes = train_dataset.classes
print(classes)
['cat', 'dog']
print(train_dataset.class_to_idx)
{'cat': 0, 'dog': 1}
Deep Learning voor afbeeldingen met PyTorch

Binaire beeldclassificatie: convolutielaag

  • Conv2d():
    • Input: 3 RGB-kanalen (rood, groen, blauw)
    • Output: 16 kanalen
    • Kernel: 3 x 3 matrix
    • Stride = 1: kernel schuift 1 stap
    • Padding = 1: 1 pixel langs de rand
  • ReLU():
    • Niet-lineaire activatiefunctie
  • MaxPool2d():
    • Kernel: 2x2
    • Stride: 2 stappen
class BinaryCNN(nn.Module):
    def __init__(self):
        super(BinaryCNN, self).__init__()

self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
self.relu = nn.ReLU()
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
def forward(self, x): return x
Deep Learning voor afbeeldingen met PyTorch

Binaire beeldclassificatie: volledig verbonden laag

  • Flatten():
    • Tensors platgeslagen tot 1D-vector
  • Linear():
    • Input: feature maps × hoogte × breedte
    • Output: één klasse
  • Sigmoid():
    • [0,1]
class BinaryCNN(nn.Module):
    def __init__(self):
        super(BinaryCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 16,
                kernel_size=3, stride=1, padding=1)
        self.relu = nn.ReLU()
        self.pool = nn.MaxPool2d(kernel_size=2, 
                     stride=2)

self.flatten = nn.Flatten()
self.fc1 = nn.Linear(16 * 112 * 112, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.pool(self.relu(self.conv1(x))) x = self.fc1(self.flatten(x)) x = self.sigmoid(x)]
return x
Deep Learning voor afbeeldingen met PyTorch

Multiclass-beeldclassificatie met CNN

class MultiClassCNN(nn.Module):
    def __init__(self, num_classes):
        super(MultiClassCNN, self).__init__()
        ...

self.fc = nn.Linear(16 * 112 * 112, num_classes)
self.softmax = nn.Softmax(dim=1)
def forward(self, x): ...
x = self.softmax(x)
return x
Deep Learning voor afbeeldingen met PyTorch

Laten we oefenen!

Deep Learning voor afbeeldingen met PyTorch

Preparing Video For Download...