Warstwy splotowe dla obrazów

Głębokie uczenie dla obrazów z PyTorch

Michal Oleszak

Machine Learning Engineer

Warstwy splotowe dla obrazów

  • Stosowanie warstw splotowych do danych obrazowych
  • Dostęp do warstw splotowych i ich dodawanie
  • Tworzenie bloków splotowych

 

  • Służą do dostosowania modeli do konkretnych zadań

Ramka wokół kota

Głębokie uczenie dla obrazów z PyTorch

Conv2d: kanały wejściowe

Kanały RGB

  • Obraz w skali szarości: in_channels=1
  • Obraz RGB (czerwony, zielony, niebieski): in_channels=3
  • Przezroczystość z kanałem alfa: in_channels=4
from torchvision.transforms import functional
image = PIL.Image.open("dog.png")
num_channels = functional.get_image_num_channels(image)
print("Number of channels: ", num_channels)
Number of channels: 3
Głębokie uczenie dla obrazów z PyTorch

Conv2d: jądro

filtry

                                        Tensor wejściowy               Jądro       Tensor wyjściowy (mapa cech)

  • Jądro (zaznaczone na zielono) przesuwa się od lewej do prawej, z góry na dół obrazu$^1$
1 Thevenot, Axel. 2020. A visual and mathematical explanation of the 2D convolution layer.
Głębokie uczenie dla obrazów z PyTorch

Rozmiary jądra

obliczenia macierzowe

  • Najczęstsze rozmiary jądra: 3x3 (Conv2d) i 2x2 (MaxPool2d)
  • Splot to iloczyn skalarny jądra (zielony) i obszaru obrazu (różowy)
  • Suma iloczynu skalarnego tworzy mapę cech (niebieska)
Głębokie uczenie dla obrazów z PyTorch

Jądro jako filtr

  • Wykrywanie wzorców w obrazach

filtr obszarowy

filtr liniowy

Głębokie uczenie dla obrazów z PyTorch

Conv2d: kanały wyjściowe

kanały wyjściowe                                             Kanał wejściowy      Filtry jądra     Kanały wyjściowe

  • Liczba kanałów wyjściowych określa, ile filtrów jest stosowanych
  • Każdy kanał wyjściowy odpowiada oddzielnemu filtrowi
  • Więcej kanałów wyjściowych pozwala warstwie uczyć się bardziej złożonych cech
  • Liczby kanałów wyjściowych są zazwyczaj potęgami 2 (16, 32, 64, 128)
    • Upraszcza to łączenie i dzielenie kanałów w kolejnych warstwach
Głębokie uczenie dla obrazów z PyTorch

Dodawanie warstw splotowych

import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1)
conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, padding=1)
model = Net()

model.add_module('conv2', conv2)
Głębokie uczenie dla obrazów z PyTorch

Dostęp do warstw splotowych

print(model)
Net(
  (conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
)
model.conv2
Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
Głębokie uczenie dla obrazów z PyTorch

Tworzenie bloków splotowych

  • Układanie warstw splotowych w bloku za pomocą nn.Sequential()
class BinaryImageClassification(nn.Module):
    def __init__(self):
        super(BinaryImageClassification, self).__init__()

self.conv_block = nn.Sequential( nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=2, stride=2) )
def forward(self, x): x = self.conv_block(x)
Głębokie uczenie dla obrazów z PyTorch

Czas na ćwiczenia!

Głębokie uczenie dla obrazów z PyTorch

Preparing Video For Download...