Apa Itu Convolutional Neural Network dan Cara Kerjanya
By : akademi-ai team
Hallo teman teman pecinta Artificial Intelligence, pada tulisan kali ini kita akan belajar teori dari Convolutional Neural Network dan bagaimana sih cara kerjanya. OK tanpa perlu berlama lama.. Let’s go !
Convolutional Neural Network (CNN) adalah pengembangan dari Multilayer Perceptron (MLP) yang didesain untuk mengolah data dua dimensi. CNN termasuk dalam jenis Deep Neural Network karena kedalaman jaringan yang tinggi dan banyak diaplikasikan pada data citra. Pada kasus klasifikasi citra, MLP kurang sesuai untuk digunakan karena tidak menyimpan informasi spasial dari data citra dan menganggap setiap piksel adalah fitur yang independen sehingga menghasilkan hasil yang kurang baik.
Arsitektur Jaringan Convolutional Neural Network
Arsitektur dari CNN dibagi menjadi 2 bagian besar, Feature Extraction Layer dan Fully-Connected Layer (MLP)
- Feature Extraction Layer
Proses yang terjadi pada bagian ini adalah melakukan “encoding” dari sebuah image menjadi features yang berupa angka-angka yang merepresentasikan image tersebut (Feature Extraction). Feature extraction layerterdiri dari dua bagian. Convolutional Layer dan Pooling Layer. Namun kadang ada beberapa riset/paper yang tidak menggunakan pooling.
Gambar diatas adalah RGB (Red, Green, Blue) image berukuran 32x32 pixels yang sebenarnya adalah multidimensional array dengan ukuran 32x32x3 (3 adalah jumlah channel). Convolutional layer terdiri dari neuron yang tersusun sedemikian rupa sehingga membentuk sebuah filter dengan panjang dan tinggi (pixels). Sebagai contoh, layer pertama pada feature extraction layer biasanya adalah convolution layer dengan ukuran 5x5x3. Panjang 5 pixels, tinggi 5 pixels dan tebal atau jumlah 3 buah sesuai dengan channel dari image tersebut. Ketiga filter ini akan digeser keseluruh bagian dari gambar. Setiap pergeseran akan dilakukan operasi “dot” antara input dan nilai dari filter tersebut sehingga menghasilkan sebuah output atau biasa disebut sebagai activation map atau feature map.
dengan stride yang besar. Namun perlu diperhatikan bahwa dengan menggunakan stride yang kecil kita tidak selalu akan mendapatkan performa yang bagus. Padding atau Zero Padding adalah parameter yang menentukan jumlah pixels (berisi nilai 0) yang akan ditambahkan di setiap sisi dari input. Hal ini digunakan dengan tujuan untuk memanipulasi dimensi output dari conv. layer (Feature Map).
Tujuan dari penggunaan padding adalah dimensi output dari conv. layer selalu lebih kecil dari inputnya (kecuali penggunaan 1x1 filter dengan stride 1). Output ini akan digunakan kembali sebagai input dari conv. layer selanjutnya, sehingga makin banyak informasi yang terbuang. Dengan menggunakan padding, kita dapat mengatur dimensi output agar tetap sama seperti dimensi input atau setidaknya tidak berkurang secara drastis. Sehingga kita bisa menggunakan conv. layer yang lebih dalam sehingga lebih banyak features yang berhasil di-extract. Padding juga mampu meningkatkan performa dari model, karena conv. filter akan fokus pada informasi yang sebenarnya yaitu yang berada diantara zero padding tersebut. Pada ilustrasi diatas, dimensi dari input sebenarnya adalah 5x5, jika dilakukan convolution dengan filter 3x3 dan stride sebesar 2, maka akan didapatkan feature map dengan ukuran 2x2. Namun jika kita tambahkan zero padding sebanyak 1, maka feature map yang dihasilkan berukuran 3x3 (lebih banyak informasi yang dihasilkan). Untuk menghitung dimensi dari feature map kita bisa gunakan rumus seperti dibawah ini:
Dimana :
W = Panjang/Tinggi Input
N = Panjang/Tinggi Filter
P = Zero Padding
S = Stride
Pooling layer biasanya berada setelah conv. layer. Pada prinsipnya pooling layer terdiri dari sebuah filter dengan ukuran dan stride tertentu yang akan bergeser pada seluruh area feature map. Pooling yang biasa digunakan adalah Max Pooling dan Average Pooling. Sebagai contoh jika kita menggunakan Max Pooling 2x2
dengan stride 2, maka pada setiap pergeseran filter, nilai maximum pada area 2x2 pixel tersebut yang akan dipilih, sedangkan Average Pooling akan memilih nilai rata-ratanya.
Tujuan dari penggunaan pooling layer adalah mengurangi dimensi dari feature map (downsampling), sehingga mempercepat komputasi karena parameter yang harus diupdate semakin sedikit dan mengatasi overfitting.
2. Fully-Connected Layer (FC Layer)
Feature map yang dihasilkan dari feature extraction layer masih berbentuk multidimensional array, sehingga harus melakukan “flatten” atau reshape feature map menjadi sebuah vector agar bisa digunakan sebagai input dari fully-connected layer. Lapisan Fully-Connected adalah lapisan di mana semua neuron aktivasi dari lapisan sebelumnya terhubung semua dengan neuron di lapisan selanjutnya seperti halnya jaringan saraf tiruan biasa. Setiap aktivasi dari lapisan sebelumnya perlu diubah menjadi data satu dimensi sebelum dapat dihubungkan ke semua neuron di lapisan.
Lapisan Fully-Connected biasanya digunakan pada metode Multi lapisan Perceptron dan bertujuan untuk mengolah data sehingga bisa diklasifikasikan. Perbedaan antara lapisan Fully-Connected dan lapisan konvolusi biasa adalah neuron di lapisan konvolusi terhubung hanya ke daerah tertentu pada input, sementara lapisan Fully-Connected memiliki neuron yang secara keseluruhan terhubung. Namun, kedua lapisan tersebut masih mengoperasikan produk dot, sehingga fungsinya tidak begitu berbeda.
Okee mungkin sekian teori dan cara kerja untuk algoritma CNN.. Nah sekarang kita akan coba untuk belajar implementasinya pada Klasifikasi Gambar menggunakan salah satu artistektur CNN yaitu VGGNet untuk case klasifikasi image covid 19 berdasarkan data X-Ray Image.
Sebelum lanjut coding,, maaf iklan dulu yaa guys hehe..
OKEE… untuk praktik ini ada beberapa library utama yang temen-temen harus siapkan di python kalian seperti keras, tensorflow, OpenCV, dll. Full source code dan dataset dalam tutorial ini bisa kalian unduh DISINI
Pertama
Langkah pertama buatlah susunan folder seperti ini di folder kerja kalian :
Dalam folder dataset berisi nama folder object yang akan kalian deteksi yang dimana dalam hal ini kita menggunakan contoh dataset covid dan normal (karna sekarang lagi musim pandemi ini). Kemudian pada folder examples berisi data images yang akan kalian testing sebagai output nantinya. Dalam folder VGGnet berisi code arsitektur dari VGGnet itu sendiri yang nantinya akan kita gunakan dalam pemrosesan gambar ini. File train.py kita gunakan untuk melakukan training data images kita dan file classifiy.py akan kita gunakan untuk melihat hasil output testing image kita.
Kedua
Tahap Kedua yang akan kita lakukan adalah melakukan training images kita. Ada beberapa parameter yang perlu di perhatikan sebelum melakukan training seperti Epochs, LR (learning rate), BS (Batch Size). Yang perlu di perhatikan adalah jumlah Epochs, disini saya menggunakan Epochs =50, artinya pada saat training nanti sistem kita akan melakukan iterasi sebanyak 50 kali untuk mendapatkan model yang kita cari. Konsep utama dari Epochs ini adalah semakin banyak jumlah Epochs maka HARAPANNYA akan semakin baik model yang akan kita dapatkan.
Setelah itu ketiklah perintah berikut pada command promt kalian untuk melakukan training :
python train.py — dataset dataset — model covid.model — labelbin lb.pickle
Arti perintah diatas adalah membaca dataset yang ada dalam folder dataset dan membentuk model dengan nama covid.model. RUN !!!
Bisa kita lihat pada iterasi ke 50 akurasi sudah mencapai lebih dari 90% dan nilai loss yang cukup kecil juga. Artinya model yang terbentuk sudah cukup baik untuk kita gunakan dalam melakukan prediksi pasien rontgen dada covid dan normal. Dalam folder kerja kita akan terbentuk beberapa file seperti ini.
Ketiga
Setelah melakukan training dengan hasil yang cukup bagus, sekarang kita akan melakukan testing menggunakan model yang sudah terbentuk. Ketikkan perintah berikut pada command promt untuk melakukan testing :
python classify.py — model covid.model — labelbin lb.pickle — image examples/testimages.jpg
RUN!! hasilnya seperti ini :
Bisa kita lihat contoh sampel testing dari gambar diatas, sistem kita sudah cukup baik dalam melakukan deteksi rontgen dada pasien normal dan covid dengan akurasi yang cukup tinggi yaitu diatas 90% untuk kedua sampel tersebut.
Untuk tulisan saya yang lain tentang Deep Learning dengan berbagai Case, temen-temen bisa lihat di link link dibawah
- Part1 : Object Detection Menggunakan Tensorflow-API
- Part 2 : Object Detection Menggunakan Tensorflow (Perbandingan Arsitektur SSD Mobilenet dan Faster R-CNN)
- Part3 : Setting dan Instalasi Object Detection Menggunakan Tensorflow
- Part 4 : Klasifikasi Gambar Menggunakan Web-Flask
- Part 5 : Face Recognition Menggunakan OpenCV
- Part 6 : Klasifikasi Gambar Dengan Convolutional Neural Network Menggunakan Keras-Python
- Part 7 : Klasifikasi Gambar Menggunakan Arsitektur VGGNet-Keras
- Part 8 : Tensorflow Object Detection API Menggunakan Google Colab (Kasus : Deteksi Covid-19 Dari Data Rontgent Dada
- Part 9 : Klasifikasi Gambar Menggunakan Convolutional Neural Network dengan Arsitektur LeNet
- Part 10 : Convolutional Neural Network Menggunakan Package Keras di R
- Part 11 : Vehicle Counter Menggunakan OpenCV Python
Dan untuk teman teman yang butuh bantuan penelitian untuk riset akademis ataupun company dalam bidang Artificial Intelligence bisa hubungi kami melalui WA 087783208353 atau melalui web www.akademi-ai.com
Source :