Clasificare binară și multi-clasă a imaginilor

Deep Learning pentru imagini cu PyTorch

Michal Oleszak

Machine Learning Engineer

Ce vom învăța cu PyTorch?

sarcini

Deep Learning pentru imagini cu PyTorch

Ce vom învăța cu PyTorch?

sarcini

Deep Learning pentru imagini cu PyTorch

Ce vom învăța cu PyTorch?

sarcini

Deep Learning pentru imagini cu PyTorch

Ce vom învăța cu PyTorch?

sarcini

Deep Learning pentru imagini cu PyTorch

Prerechizite

Deep Learning pentru imagini cu PyTorch

Biblioteca PyTorch

torchvision

Deep Learning pentru imagini cu PyTorch

Biblioteca PyTorch

torchvision

Deep Learning pentru imagini cu PyTorch

Biblioteca PyTorch

torchvision

Deep Learning pentru imagini cu PyTorch

Biblioteca PyTorch

torchvision

Deep Learning pentru imagini cu PyTorch

Clasificarea imaginilor

             Clasificare binară

binar

  • Două clase distincte (pisici, câini)
  • Funcție de activare: Sigmoid

             Clasificare multi-clasă

multi-clasă

  • Mai multe clase (barcă, tren, mașină)
  • Funcție de activare: Softmax
  • Probabilitatea cea mai mare este predicția
Deep Learning pentru imagini cu PyTorch

Modelul Rețelei Neuronale Convoluționale

  cnn

Deep Learning pentru imagini cu PyTorch

Modelul Rețelei Neuronale Convoluționale

  binar

Deep Learning pentru imagini cu PyTorch

Modelul Rețelei Neuronale Convoluționale

  binar

Deep Learning pentru imagini cu PyTorch

Modelul Rețelei Neuronale Convoluționale

  binar

Deep Learning pentru imagini cu PyTorch

Modelul Rețelei Neuronale Convoluționale

  binar

Deep Learning pentru imagini cu PyTorch

Seturi de date: etichete de clase

foldere imagini

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 pentru imagini cu PyTorch

Clasificare binară a imaginilor: strat convoluțional

  • Conv2d():
    • Intrare: 3 canale RGB (roșu, verde, albastru)
    • Ieșire: 16 canale
    • Kernel: matrice 3 x 3
    • Stride = 1: kernelul se mișcă 1 pas
    • Padding = 1: 1 pixel în jurul marginii
  • ReLU():
    • Funcție de activare neliniară
  • MaxPool2d():
    • Kernel: 2x2
    • Stride: 2 pași
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 pentru imagini cu PyTorch

Clasificare binară a imaginilor: strat complet conectat

  • Flatten():
    • Tensorii sunt aplatizați într-un vector 1-D
  • Linear():
    • Intrare: hărți de caracteristici x înălțime x lățime
    • Ieșire: o singură clasă
  • 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 pentru imagini cu PyTorch

Clasificare multi-clasă a imaginilor cu 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 pentru imagini cu PyTorch

Să exersăm!

Deep Learning pentru imagini cu PyTorch

Preparing Video For Download...