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
- batch/jumlah record
- channel image: berisi 1 bila gray, 3 bila RGB, 4 bila ARGB
- width
- 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
record5 = a[4]
Nanti kita akan bahas 2 point
- Conv2d dengan menggunakan kernel yang kita modifikasi agar kita tahu ilustrasi dan hasilnya
- 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