Mengenal Conv2d pada algoritma CNN

By | February 22, 2022
2,052 Views

Mengenal Conv2D pada algoritma CNN- Conv2D merupakan singkatan dari convolution 2 Dimension. Teknik convolution telah banyak digunakan jauh sebelum pada deep learning yaitu di digital image processing. Operasi Conv2d / convolutional mempunyai peranan penting dalam membuat efek pada image/ gambar. Misalkan saja membuat efek gambar seperti blur/gaussian Convolutional atau pun membuat efek garis tepi edge /tepi

Dalam proses convolutional terdapat istilah kernel/filter yang digunakan, stride atau sliding/pergeseran kernel terhadap input, serta padding untuk ngepasin ukuran matrix input dengan ukuran kernel.  Pada operasi tensor di Pytorch seperti Conv2d membutuhkan input dengan urutan

  1. batch/jumlah record
  2. channel image: berisi 1 bila gray, 3 bila RGB, 4 bila ARGB
  3. width
  4. heigth

Misalkan kita akan mempunyai 10 gambar, dengan tipe RGB, serta ukuran gambar 40 x 20, maka kita analogikan sebagai berikut

import torch

a = torch.rand(10,3,40,20)

Artinya kode diatas yaitu variabel a mempunyai 10 gambar yang masing-masing gambar bertipe RGB, misalkan saja kita akan akses gambar/record ke 5, maka kode yang digunakan yaitu

Nanti kita akan bahas 2 point

  1. Conv2d dengan menggunakan kernel yang kita modifikasi agar kita tahu ilustrasi dan hasilnya
  2. Conv2d dengan kernel bawaan built in

Conv2D

Secara umum untuk argument input dari Conv2D yaitu

torch.nn.Conv2d(in_channels: int, out_channels: int, kernel_size: Union[T, Tuple[T, T]], stride: Union[T, Tuple[T, T]] = 1, padding: Union[T, Tuple[T, T]] = 0, dilation: Union[T, Tuple[T, T]] = 1, groups: int = 1, bias: bool = True, padding_mode: str = ‘zeros’)

Keteranganya sebagai berikut

  • in_channels (int) – Number of channels in the input image
  • out_channels (int) – Number of channels produced by the convolution
  • kernel_size (int or tuple) – Size of the convolving kernel
  • stride (int or tuple, optional) – Stride of the convolution. Default: 1
  • padding (int or tuple, optional) – Zero-padding added to both sides of the input. Default: 0
  • padding_mode (string, optional) – ‘zeros’, ‘reflect’, ‘replicate’ or ‘circular’. Default: ‘zeros’
  • dilation (int or tuple, optional) – Spacing between kernel elements. Default: 1
  • groups (int, optional) – Number of blocked connections from input channels to output channels. Default: 1
  • bias (bool, optional) – If True, adds a learnable bias to the output. Default: True

Mengenal Conv2D pada algoritma CNN digunakan untuk menghasilkan ciri fitur gambar dengan base operation nya adalah convolutional! Yuk kita pahami cara kerjanya

Setting custom kernel

Function Conv2d mempunyai kernel bawaan, namun kita bisa ubah koq. Untuk melakukan setting custom kernel https://stackoverflow.com/questions/52790775/setting-custom-kernel-for-cnn-in-pytorch. Kita coba lakukan operasi berikut pytorch conv2D dengan ilustasi gambar dibawah ini

dari contoh diatas, mempunyai inputs dan kernel sebagai berikut

import numpy as np
import torch
a= np.array([
            [3,3,2,1,0],
            [0,0,1,3,1],
            [3,1,2,2,3],
            [2,0,0,2,2],
            [2,0,0,0,1],
             ])


b = torch.rand(1,1,5,5)
b[0,0,:,:]=torch.from_numpy(a)

untuk membuat kernel sedikit ribet karena kita akan custom Conv2d dengan milik kita sendiri

import torch.nn as nn
C = 1
conv = nn.Conv2d(in_channels=C, out_channels=C, kernel_size=(3,3), stride=(1,1),padding=(0, 0))
weights = torch.Tensor([[0, 1, 2], [2, 2, 0], [0, 1, 2]]).unsqueeze(0).unsqueeze(0)
weights.requires_grad = True

with torch.no_grad():
    conv.weight = nn.Parameter(weights)

c = conv(b)
print(c)
print(c.shape)

maka hasil akhir c yaitu

tensor([[[[12.3275, 12.3275, 17.3275],
          [10.3275, 17.3275, 19.3275],
          [ 9.3275,  6.3275, 14.3275]]]], grad_fn=<ThnnConv2DBackward>)

 

hasilnya mirip sama dengan gambar diatas hanya saja tidak dibulatkan!

Kernel Bawaan dari Conv2d

Biasanya untuk Conv2D menggunakan kernel bawaan sehingga tidak perlu ribet diatas, cukup gunakan perintah

import numpy as np
import torch
a= np.array([
            [3,3,2,1,0],
            [0,0,1,3,1],
            [3,1,2,2,3],
            [2,0,0,2,2],
            [2,0,0,0,1],
             ])


b = torch.rand(1,1,5,5)
b[0,0,:,:]=torch.from_numpy(a)


import torch.nn as nn
C = 1
conv = nn.Conv2d(in_channels=C, out_channels=C, kernel_size=(3,3), stride=(1,1),padding=(0, 0))
c = conv(b)
print(c)
print(c.shape)

tentu hasilnya akan beda! karena kernel mempunyai isi yang berbeda. Melalui gambaran diatas! diharapkan kalian paham mengenai cara kerja Conv2d pada pytorch yang digunakan untuk menghasilkan ciri fitur pada algoritma CNN – convolutional neural network. Kalian bisa melihat bahwa ukuran awal matrix 5×5 akan dihasilkan /direduksi menjadi 3×3. Kalian nanti bisa coba saja dengan berbagai ukuran agar tahu output yang dihasilkan

See also  PyTorch - Backward dan Step Optimizer serta membuat MLP