Бинарная и многоклассовая классификация изображений

Глубокое обучение для работы с изображениями на 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

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

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

binary

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

             Многоклассовая классификация

multi-class

  • Несколько классов (лодка, поезд, автомобиль)
  • Функция активации: Softmax
  • Предсказание — класс с наибольшей вероятностью
Глубокое обучение для работы с изображениями на PyTorch

Модель сверточной нейронной сети

  cnn

Глубокое обучение для работы с изображениями на PyTorch

Модель сверточной нейронной сети

  binary

Глубокое обучение для работы с изображениями на PyTorch

Модель сверточной нейронной сети

  binary

Глубокое обучение для работы с изображениями на PyTorch

Модель сверточной нейронной сети

  binary

Глубокое обучение для работы с изображениями на PyTorch

Модель сверточной нейронной сети

  binary

Глубокое обучение для работы с изображениями на 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 (красный, зелёный, синий)
    • Выход: 16 каналов
    • Ядро: матрица 3 × 3
    • Stride = 1: ядро сдвигается на 1 шаг
    • Padding = 1: отступ в 1 пиксель по краям
  • ReLU():
    • Нелинейная функция активации
  • MaxPool2d():
    • Ядро: 2 × 2
    • Stride: 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():
    • Тензоры преобразуются в одномерный вектор
  • 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...