Binarna i wieloklasowa klasyfikacja obrazów

Głębokie uczenie dla obrazów z PyTorch

Michal Oleszak

Machine Learning Engineer

Czego nauczymy się z PyTorch?

tasks

Głębokie uczenie dla obrazów z PyTorch

Czego nauczymy się z PyTorch?

tasks

Głębokie uczenie dla obrazów z PyTorch

Czego nauczymy się z PyTorch?

tasks

Głębokie uczenie dla obrazów z PyTorch

Czego nauczymy się z PyTorch?

tasks

Głębokie uczenie dla obrazów z PyTorch

Wymagania wstępne

Głębokie uczenie dla obrazów z PyTorch

Biblioteka PyTorch

torchvision

Głębokie uczenie dla obrazów z PyTorch

Biblioteka PyTorch

torchvision

Głębokie uczenie dla obrazów z PyTorch

Biblioteka PyTorch

torchvision

Głębokie uczenie dla obrazów z PyTorch

Biblioteka PyTorch

torchvision

Głębokie uczenie dla obrazów z PyTorch

Klasyfikacja obrazów

             Klasyfikacja binarna

binary

  • Dwie klasy (koty, psy)
  • Funkcja aktywacji: Sigmoid

             Klasyfikacja wieloklasowa

multi-class

  • Wiele klas (łódź, pociąg, samochód)
  • Funkcja aktywacji: Softmax
  • Najwyższe prawdopodobieństwo = predykcja
Głębokie uczenie dla obrazów z PyTorch

Model splotowej sieci neuronowej

  cnn

Głębokie uczenie dla obrazów z PyTorch

Model splotowej sieci neuronowej

  binary

Głębokie uczenie dla obrazów z PyTorch

Model splotowej sieci neuronowej

  binary

Głębokie uczenie dla obrazów z PyTorch

Model splotowej sieci neuronowej

  binary

Głębokie uczenie dla obrazów z PyTorch

Model splotowej sieci neuronowej

  binary

Głębokie uczenie dla obrazów z PyTorch

Zbiory danych: etykiety klas

foldery z obrazami

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}
Głębokie uczenie dla obrazów z PyTorch

Binarna klasyfikacja obrazów: warstwa splotowa

  • Conv2d():
    • Wejście: 3 kanały RGB (czerwony, zielony, niebieski)
    • Wyjście: 16 kanałów
    • Jądro: macierz 3 x 3
    • Krok = 1: jądro przesuwa się o 1 krok
    • Dopełnienie = 1: 1 piksel wokół krawędzi
  • ReLU():
    • Nieliniowa funkcja aktywacji
  • MaxPool2d():
    • Jądro: 2x2
    • Krok: 2
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
Głębokie uczenie dla obrazów z PyTorch

Binarna klasyfikacja obrazów: warstwa w pełni połączona

  • Flatten():
    • Tensory spłaszczane do wektora 1-D
  • Linear():
    • Wejście: mapy cech x wysokość x szerokość
    • Wyjście: jedna klasa
  • 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
Głębokie uczenie dla obrazów z PyTorch

Wieloklasowa klasyfikacja obrazów z 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
Głębokie uczenie dla obrazów z PyTorch

Czas na ćwiczenia!

Głębokie uczenie dla obrazów z PyTorch

Preparing Video For Download...