Classification d'images binaire et multiclasse

Deep Learning pour les images avec PyTorch

Michal Oleszak

Machine Learning Engineer

Qu'allons-nous apprendre avec PyTorch ?

tâches

Deep Learning pour les images avec PyTorch

Qu'allons-nous apprendre avec PyTorch ?

tâches

Deep Learning pour les images avec PyTorch

Qu'allons-nous apprendre avec PyTorch ?

tâches

Deep Learning pour les images avec PyTorch

Qu'allons-nous apprendre avec PyTorch ?

tâches

Deep Learning pour les images avec PyTorch

Prérequis

Deep Learning pour les images avec PyTorch

Bibliothèque PyTorch

torchvision

Deep Learning pour les images avec PyTorch

Bibliothèque PyTorch

torchvision

Deep Learning pour les images avec PyTorch

Bibliothèque PyTorch

torchvision

Deep Learning pour les images avec PyTorch

Bibliothèque PyTorch

torchvision

Deep Learning pour les images avec PyTorch

Classification d'images

             Classification binaire

binaire

  • Deux classes distinctes (chats, chiens)
  • Fonction d'activation : Sigmoid

             Classification multiclasse

multiclasse

  • Plusieurs classes (bateau, train, voiture)
  • Fonction d'activation : Softmax
  • La plus forte probabilité = la prédiction
Deep Learning pour les images avec PyTorch

Modèle de réseau de neurones convolutionnel

  cnn

Deep Learning pour les images avec PyTorch

Modèle de réseau de neurones convolutionnel

  binaire

Deep Learning pour les images avec PyTorch

Modèle de réseau de neurones convolutionnel

  binaire

Deep Learning pour les images avec PyTorch

Modèle de réseau de neurones convolutionnel

  binaire

Deep Learning pour les images avec PyTorch

Modèle de réseau de neurones convolutionnel

  binaire

Deep Learning pour les images avec PyTorch

Ensembles de données : étiquettes de classe

dossiers d'images

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 pour les images avec PyTorch

Classification binaire : couche de convolution

  • Conv2d() :
    • Entrée : 3 canaux RVB (rouge, vert, bleu)
    • Sortie : 16 canaux
    • Noyau : matrice 3 x 3
    • Pas = 1 : le noyau avance de 1 cran
    • Remplissage = 1 : 1 pixel autour du bord
  • ReLU() :
    • Fonction d'activation non linéaire
  • MaxPool2d() :
    • Noyau : 2x2
    • Pas : 2 crans
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 pour les images avec PyTorch

Classification binaire : couche entièrement connectée

  • Flatten() :
    • Tenseurs aplatis en vecteur 1-D
  • Linear() :
    • Entrée : cartes de caractéristiques x hauteur x largeur
    • Sortie : une seule classe
  • 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 pour les images avec PyTorch

Classification multiclasse avec 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 pour les images avec PyTorch

Passons à la pratique !

Deep Learning pour les images avec PyTorch

Preparing Video For Download...