Konvoluční vrstvy pro obrázky

Deep Learning pro obrázky s PyTorchem

Michal Oleszak

Machine Learning Engineer

Konvoluční vrstvy pro obrázky

  • Použití konvolučních vrstev na obrazová data
  • Přístup ke konvolučním vrstvám a jejich přidávání
  • Vytváření konvolučních bloků

 

  • Slouží k přizpůsobení modelů konkrétnímu úkolu

Rámeček kolem kočky

Deep Learning pro obrázky s PyTorchem

Conv2d: vstupní kanály

RGB kanály

  • Obrázek ve stupních šedi: in_channels=1
  • Barevný obrázek RGB (červená, zelená, modrá): in_channels=3
  • Průhlednost zahrnuje alfa kanál: 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
Deep Learning pro obrázky s PyTorchem

Conv2d: jádro

filtry

                                        Vstupní tensor               Jádro       Výstupní tensor (mapa příznaků)

  • Jádro (zeleně) se pohybuje zleva doprava a shora dolů po obrázku$^1$
1 Thevenot, Axel. 2020. A visual and mathematical explanation of the 2D convolution layer.
Deep Learning pro obrázky s PyTorchem

Velikosti jádra

maticový výpočet

  • Nejběžnější velikosti jádra: 3×3 (Conv2d) a 2×2 (MaxPool2d)
  • Konvoluce je skalární součin jádra (zeleně) a oblasti obrázku (růžově)
  • Součet skalárního součinu vytváří mapu příznaků (modře)
Deep Learning pro obrázky s PyTorchem

Jádro je filtr

  • Zachycují vzory v obraze

plošný filtr

hranový filtr

Deep Learning pro obrázky s PyTorchem

Conv2d: výstupní kanály

výstupní kanály                                             Vstupní kanál      Filtry jádra     Výstupní kanály

  • Počet výstupních kanálů určuje, kolik filtrů se použije
  • Každý výstupní kanál odpovídá jednomu filtru
  • Vyšší počet výstupních kanálů umožňuje vrstvě učit se složitější rysy
  • Počty výstupních kanálů se obvykle volí jako mocniny 2 (16, 32, 64, 128)
    • Zjednodušuje to kombinování a dělení kanálů v následujících vrstvách
Deep Learning pro obrázky s PyTorchem

Přidávání konvolučních vrstev

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)
Deep Learning pro obrázky s PyTorchem

Přístup ke konvolučním vrstvám

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))
Deep Learning pro obrázky s PyTorchem

Vytváření konvolučních bloků

  • Skládání konvolučních vrstev do bloku 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)
Deep Learning pro obrázky s PyTorchem

Pojďme si procvičit!

Deep Learning pro obrázky s PyTorchem

Preparing Video For Download...