Бінарна та багатокласова класифікація зображень

Глибоке навчання для зображень із PyTorch

Michal Oleszak

Machine Learning Engineer

Що ми вивчимо з PyTorch?

завдання

Глибоке навчання для зображень із PyTorch

Що ми вивчимо з PyTorch?

завдання

Глибоке навчання для зображень із PyTorch

Що ми вивчимо з PyTorch?

завдання

Глибоке навчання для зображень із PyTorch

Що ми вивчимо з PyTorch?

завдання

Глибоке навчання для зображень із PyTorch

Необхідні знання

Глибоке навчання для зображень із PyTorch

Бібліотека PyTorch

torchvision

Глибоке навчання для зображень із PyTorch

Бібліотека PyTorch

torchvision

Глибоке навчання для зображень із PyTorch

Бібліотека PyTorch

torchvision

Глибоке навчання для зображень із PyTorch

Бібліотека PyTorch

torchvision

Глибоке навчання для зображень із PyTorch

Класифікація зображень

             Бінарна класифікація

бінарна

  • Два різні класи (коти, собаки)
  • Функція активації: Sigmoid

             Багатокласова класифікація

багатокласова

  • Кілька класів (човен, потяг, авто)
  • Функція активації: Softmax
  • Найвища ймовірність = передбачення
Глибоке навчання для зображень із PyTorch

Модель згорткової нейромережі

  cnn

Глибоке навчання для зображень із PyTorch

Модель згорткової нейромережі

  бінарна

Глибоке навчання для зображень із PyTorch

Модель згорткової нейромережі

  бінарна

Глибоке навчання для зображень із PyTorch

Модель згорткової нейромережі

  бінарна

Глибоке навчання для зображень із PyTorch

Модель згорткової нейромережі

  бінарна

Глибоке навчання для зображень із PyTorch

Набори даних: мітки класів

папки із зображеннями

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}
Глибоке навчання для зображень із PyTorch

Бінарна класифікація зображень: згортковий шар

  • Conv2d():
    • Вхід: 3 RGB-канали (red, green, blue)
    • Вихід: 16 каналів
    • Ядро: матриця 3 x 3
    • Крок = 1: ядро рухається на 1 піксель
    • Доповнення = 1: 1 піксель по межі
  • ReLU():
    • Нелінійна функція активації
  • MaxPool2d():
    • Ядро: 2x2
    • Крок: 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
Глибоке навчання для зображень із PyTorch

Бінарна класифікація зображень: щільний шар

  • Flatten():
    • Тензори перетворюються на 1-D вектор
  • Linear():
    • Вхід: ознаки × висота × ширина
    • Вихід: один клас
  • 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
Глибоке навчання для зображень із PyTorch

Багатокласова класифікація зображень із 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
Глибоке навчання для зображень із PyTorch

Давайте потренуємось!

Глибоке навчання для зображень із PyTorch

Preparing Video For Download...