Görüntüler için evrişim katmanları

PyTorch ile Görüntüler için Deep Learning

Michal Oleszak

Machine Learning Engineer

Görüntüler için evrişim katmanları

  • Görüntü verisine evrişim katmanları uygulama
  • Evrişim katmanlarına erişme ve ekleme
  • Evrişim blokları oluşturma

 

  • Modelleri belirli bir göreve uyarlamak için kullanılır

Bir kedinin etrafında kutu

PyTorch ile Görüntüler için Deep Learning

Conv2d: girdi kanalları

RGB kanalları

  • Gri tonlama görüntü: in_channels=1
  • RGB görüntü (kırmızı, yeşil, mavi): in_channels=3
  • Saydamlık alfa kanalını içerir: 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
PyTorch ile Görüntüler için Deep Learning

Conv2d: çekirdek

filtreler

                                        Girdi tensörü               Çekirdek       Çıktı tensörü (özellik haritası)

  • Çekirdek (yeşil) görüntüde soldan sağa, yukarıdan aşağı hareket eder$^1$
1 Thevenot, Axel. 2020. 2B evrişim katmanının görsel ve matematiksel açıklaması.
PyTorch ile Görüntüler için Deep Learning

Çekirdek boyutları

matris hesaplaması

  • En yaygın çekirdek boyutları: 3x3 (Conv2d) ve 2x2 (MaxPool2d)
  • Evrişim, çekirdek (yeşil) ile görüntü bölgesi (pembe) arasındaki noktasal çarpımdır
  • Noktasal çarpımın toplamı bir özellik haritası (mavi) üretir
PyTorch ile Görüntüler için Deep Learning

Çekirdek bir filtredir

  • Görüntü desenlerini yakalama

alan filtresi

çizgi filtresi

PyTorch ile Görüntüler için Deep Learning

Conv2d: çıktı kanalları

çıktı kanalları                                             Girdi kanalı      Çekirdek filtreleri     Çıktı kanalları

  • Çıktı kanalı sayısı kaç filtrenin uygulanacağını belirler
  • Her çıktı kanalı farklı bir filtreye karşılık gelir
  • Daha çok çıktı kanalı, katmanın daha karmaşık öznitelikler öğrenmesini sağlar
  • Çıktı kanalı sayısı genelde 2’nin kuvvetleri seçilir (16, 32, 64, 128)
    • Sonraki katmanlarda kanalları birleştirme/bölmeyi kolaylaştırır
PyTorch ile Görüntüler için Deep Learning

Evrişim katmanları ekleme

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)
PyTorch ile Görüntüler için Deep Learning

Evrişim katmanlarına erişim

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))
PyTorch ile Görüntüler için Deep Learning

Evrişim blokları oluşturma

  • Evrişim katmanlarını nn.Sequential() ile blokta yığma
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)
PyTorch ile Görüntüler için Deep Learning

Hadi pratik yapalım!

PyTorch ile Görüntüler için Deep Learning

Preparing Video For Download...