Binární a vícetřídní klasifikace obrázků

Deep Learning pro obrázky s PyTorchem

Michal Oleszak

Machine Learning Engineer

Co se naučíme s PyTorchem?

tasks

Deep Learning pro obrázky s PyTorchem

Co se naučíme s PyTorchem?

tasks

Deep Learning pro obrázky s PyTorchem

Co se naučíme s PyTorchem?

tasks

Deep Learning pro obrázky s PyTorchem

Co se naučíme s PyTorchem?

tasks

Deep Learning pro obrázky s PyTorchem

Předpoklady

Deep Learning pro obrázky s PyTorchem

Knihovna PyTorch

torchvision

Deep Learning pro obrázky s PyTorchem

Knihovna PyTorch

torchvision

Deep Learning pro obrázky s PyTorchem

Knihovna PyTorch

torchvision

Deep Learning pro obrázky s PyTorchem

Knihovna PyTorch

torchvision

Deep Learning pro obrázky s PyTorchem

Klasifikace obrázků

             Binární klasifikace

binary

  • Dvě třídy (kočky, psi)
  • Aktivační funkce: Sigmoid

             Vícetřídní klasifikace

multi-class

  • Více tříd (loď, vlak, auto)
  • Aktivační funkce: Softmax
  • Predikce = třída s nejvyšší pravděpodobností
Deep Learning pro obrázky s PyTorchem

Model konvoluční neuronové sítě

  cnn

Deep Learning pro obrázky s PyTorchem

Model konvoluční neuronové sítě

  binary

Deep Learning pro obrázky s PyTorchem

Model konvoluční neuronové sítě

  binary

Deep Learning pro obrázky s PyTorchem

Model konvoluční neuronové sítě

  binary

Deep Learning pro obrázky s PyTorchem

Model konvoluční neuronové sítě

  binary

Deep Learning pro obrázky s PyTorchem

Datové sady: označení tříd

image folders

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 pro obrázky s PyTorchem

Binární klasifikace obrázků: konvoluční vrstva

  • Conv2d():
    • Vstup: 3 kanály RGB (červená, zelená, modrá)
    • Výstup: 16 kanálů
    • Jádro: matice 3 x 3
    • Stride = 1: jádro se posune o 1 krok
    • Padding = 1: 1 pixel okolo okraje
  • ReLU():
    • Nelineární aktivační funkce
  • MaxPool2d():
    • Jádro: 2x2
    • Stride: 2 kroky
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 pro obrázky s PyTorchem

Binární klasifikace obrázků: plně propojená vrstva

  • Flatten():
    • Tenzory zploštěny do 1D vektoru
  • Linear():
    • Vstup: příznakové mapy × výška × šířka
    • Výstup: jedna třída
  • 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 pro obrázky s PyTorchem

Víceřídní klasifikace obrázků pomocí 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 pro obrázky s PyTorchem

Pojďme si procvičit!

Deep Learning pro obrázky s PyTorchem

Preparing Video For Download...