Binär och flerklassig bildklassificering

Djupinlärning för bilder med PyTorch

Michal Oleszak

Machine Learning Engineer

Vad lär vi oss med PyTorch?

tasks

Djupinlärning för bilder med PyTorch

Vad lär vi oss med PyTorch?

tasks

Djupinlärning för bilder med PyTorch

Vad lär vi oss med PyTorch?

tasks

Djupinlärning för bilder med PyTorch

Vad lär vi oss med PyTorch?

tasks

Djupinlärning för bilder med PyTorch

Förkunskaper

Djupinlärning för bilder med PyTorch

PyTorch-biblioteket

torchvision

Djupinlärning för bilder med PyTorch

PyTorch-biblioteket

torchvision

Djupinlärning för bilder med PyTorch

PyTorch-biblioteket

torchvision

Djupinlärning för bilder med PyTorch

PyTorch-biblioteket

torchvision

Djupinlärning för bilder med PyTorch

Bildklassificering

             Binär klassificering

binary

  • Två distinkta klasser (katter, hundar)
  • Aktiveringsfunktion: Sigmoid

             Flerklassig klassificering

multi-class

  • Flera klasser (båt, tåg, bil)
  • Aktiveringsfunktion: Softmax
  • Högsta sannolikhet ger prediktionen
Djupinlärning för bilder med PyTorch

Modell med Convolutional Neural Network

  cnn

Djupinlärning för bilder med PyTorch

Modell med Convolutional Neural Network

  binary

Djupinlärning för bilder med PyTorch

Modell med Convolutional Neural Network

  binary

Djupinlärning för bilder med PyTorch

Modell med Convolutional Neural Network

  binary

Djupinlärning för bilder med PyTorch

Modell med Convolutional Neural Network

  binary

Djupinlärning för bilder med PyTorch

Datamängder: klassetiketter

image folders

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}
Djupinlärning för bilder med PyTorch

Binär bildklassificering: konvolutionslager

  • Conv2d():
    • Indata: 3 RGB-kanaler (röd, grön, blå)
    • Utdata: 16 kanaler
    • Kärna: 3 x 3-matris
    • Stride = 1: kärnan rör sig 1 steg
    • Padding = 1: 1 pixel runt kanten
  • ReLU():
    • En icke-linjär aktiveringsfunktion
  • MaxPool2d():
    • Kärna: 2x2
    • Stride: 2 steg
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
Djupinlärning för bilder med PyTorch

Binär bildklassificering: fullt anslutet lager

  • Flatten():
    • Tensorer plattas ut till en 1-D-vektor
  • Linear():
    • Indata: särdragskartor x höjd x bredd
    • Utdata: en enskild klass
  • 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
Djupinlärning för bilder med PyTorch

Flerklassig bildklassificering med 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
Djupinlärning för bilder med PyTorch

Nu kör vi en övning!

Djupinlärning för bilder med PyTorch

Preparing Video For Download...