Image Recogition — Implementasi Convolution Neural Network (CNN) (Deep Learning dengan R dan…

Source: Deep Learning on Medium


Hello Data Enthusiast … Pada artikel kali ini Saya akan membahas tentang Image Recognition dengan Convolution Neural Network (CNN) menggunakan Tensorfow. Sebelumnya mari kita mengenal terlebih dahulu tentang Deep Learning dan apa itu CNN.

Deep Learning

Deep Learning (juga dikenal sebagai deep structured learning atau hierarchical learning) adalah bagian dari keluarga yang lebih luas dari metode pembelajaran mesin berdasarkan jaringan saraf tiruan. Belajar bisa diawasi, semi-diawasi atau tidak diawasi.

Arsitektur Deep Learning seperti deep neural networks, deep belief networks, recurrent neural networks dan convolutional neural networks telah diterapkan ke bidang termasuk visi komputer, pengenalan suara, pemrosesan bahasa alami, pengenalan audio, penyaringan jaringan sosial, terjemahan mesin, bioinformatika, desain obat , analisis gambar medis, inspeksi bahan dan program permainan papan, di mana mereka telah menghasilkan hasil yang sebanding dengan dan dalam beberapa kasus lebih unggul dari ahli manusia. (wikipedia)

Convolutional Neural Network (CNN)

Dalam Deep Learning, Convolutional Neural Network (CNN, atau ConvNet) adalah kelas deep neural networks, yang paling umum diterapkan untuk menganalisis citra visual.

CNN adalah versi resmi dari multilayer perceptrons. Multilayer perceptrons biasanya merujuk ke jaringan yang sepenuhnya terhubung, yaitu, setiap neuron dalam satu lapisan terhubung ke semua neuron di lapisan berikutnya. “Koneksi penuh” dari jaringan-jaringan ini membuat mereka rentan terhadap overfitting data. Cara khas regularisasi termasuk menambahkan beberapa bentuk pengukuran besaran bobot ke fungsi kerugian. Namun, CNN mengambil pendekatan yang berbeda terhadap regularisasi: mereka mengambil keuntungan dari pola hierarkis dalam data dan mengumpulkan pola yang lebih kompleks menggunakan pola yang lebih kecil dan lebih sederhana. Oleh karena itu, pada skala keterhubungan dan kompleksitas, CNN berada di ekstrem bawah.

Mereka juga dikenal sebagai shift invariant atau space invariant artificial neural networks (SIANN), berdasarkan arsitektur bobot bersama dan karakteristik invarian terjemahan.

Convolutional networks diilhami oleh proses biologis dalam hal pola konektivitas antara neuron menyerupai organisasi korteks visual hewan. Neuron kortikal individual merespons rangsangan hanya di daerah terbatas bidang visual yang dikenal sebagai bidang reseptif. Bidang reseptif dari neuron yang berbeda sebagian tumpang tindih sehingga menutupi seluruh bidang visual.

CNN menggunakan pra-pemrosesan yang relatif sedikit dibandingkan dengan algoritma klasifikasi gambar lainnya. Ini berarti bahwa jaringan mempelajari filter yang dalam algoritma tradisional direkayasa oleh tangan. Kemandirian ini dari pengetahuan sebelumnya dan upaya manusia dalam desain fitur adalah keuntungan utama.

Penerapan menggunakan R

Pertama, menyiapkan 12 gambar (pada kali ini penulis menyiapkan 6 gambar motor matic, 6 gambar mobil) dan disimpan dalam sebuah folder khusus.

Lalu, membuat folder untuk tempat gambar yang telah di resize.

Install dan panggil packages yang dibutuhkan, sebagai berikut.

install.packages(“BiocManager”)
BiocManager::install(“EBImage”)
install_keras()
install_tensorflow()
library(keras)
library(tensorflow)
library(EBImage)

Memastikan bahwa packages sudah terinstall dengan menggunakan perintah search().

Selanjutnya penulis melakukan pengaturan working directory atau menentukan folder di mana kita akan bekerja dengan menggunakan perintah setwd.

setwd(“D:\\bayu/”)
save_in<-(“D:\\bayu/”)

Melihat detail spesifikasi gambar terlebh dahuu dengan cara klik kanan > properties > details

Pada gambar di atas dapat diketahui deskripsi dan informasi spesifikasi masing-masing gambar. Pada gambar mtr_5 misalya diketahui bahwa memiliki ukuran 380 x 380 pixel. Sedangkan pada gambar kedua yaitu mbl_1 diketahui memiliki ukuran 1024 x 576 pixel. Dikarenakan setiap gambar memiliki ukuran yang berbeda-beda, maka perlu dilakukan resize pada gambar agara semua gambar memilik ukuran yang seragam atau sama.

Penulis memanggil gambar pada proram R, kemudian tentukan width dan heigth nya, masing-masing 100 pixels.

gambar<-list.files()
w<-100
h<-100

Selanjutnya membuat fungsi untuk melakukan resize gambar.

for(i in 1:length(gambar))
{result<-tryCatch({
imgname<-gambar[i]
img<-readImage(imgname)
img_resized<-resize(img,w=w,h=h)
path<-paste(save_in,imgname,sep=” “)
writeImage(img_resized,path,quality=70)
print(paste(“done”,i,sep=” “))
},
error=function(e){print(e)}
)}

Berdasarkan sintaks di atas maka diperoleh output sebagai berikut

Lalu gambar yang telah di resize dimasukan pada folder yang diinginkan.

Lalu memastikan apakah ukuran gambar sudah sama semua. Dengan cara klik kanan > properties > details.

Setiap gambar telah memiliki ukuran yang sama yaitu 100 x 100 pixels.
Selanjutnya melakukan setting working directory pada folder hasil resize, dengan perintah:

setwd(“D:\\bayuhasil/”)

Memanggil gambar hasil resize.

Lalu penulis membaca hasil resize dan melihat strukturnya

gambar2<-lapply(gambar2,readImage)
str(gambar2)

Untuk melihat salah satu gambar dapat dengan perintah sebagai berikut misalnya:

display(gambar2[[3]])

Kemudian untuk melihat dimensinya sebagai berikut:

Dietahui informasi weight = 100, height = 100, dan 3 channel RGB.

Penulis mendefinisikan data train dan test yang terdiri masing-masing 4 gambar. Empat gambar mobil (gambar 1–4) dan empat gambar motor (gambar 7–10).

Melihat representasi data train nomor 5 yang berupa gambar dalam bentuk excel.

write.csv(train[[5]],”D://Datahasil//datatrain.csv”)

Lalu penulis akan menampilkan gambar secara berurut.

par(mfrow=c(2,4))
for (i in 1:8) plot(train[[i]])

Melakukan resize kembali pada gambar di data train dan test untuk mempercepat proses pengenalan gambar, dengan ukuran 32 x 32 pixel.

# membuat ukuran ulang, me resize 32 * 32
for(i in 1:8){train[[i]]<-resize(train[[i]],32,32)}
for(i in 1:4){test[[i]]<-resize(test[[i]],32,32)}

Membuat kombinasi pada semua gambar di data train, lalu mengikatnya dalam satu letak yang sama agar tidak berubah urutannya.

 train<-combine(train)
x<-tile(train,8)# direkap jadi satu
display(x,title=’gambar’)

Selanjutnya membuat kombinasi pada semua gambar di data test, lalu mengikatnya dalam satu letak yang sama agar tidak berubah urutannya.

test<-combine(test)
y<-tile(test,4)
display(y,title=”gambar”)

Mengetahui dimensi data train dan test.

Lalu membuat dimensi pada data training dan data testing agar sesuai dengan apa yang diinginkan oleh CNN yang dibawa oleh paket keras dan tensorflow. Adapun urutannya yaitu dimensi ke-4 menjadi urutan pertama, dimensi pertama menjadi yg ke-2, dan seterusnya. Kemudian melihat dimensinya.

# meyusun ulang data train
train<-aperm(train,c(4,1,2,3))
test<-aperm(test,c(4,1,2,3))
dim(train)
dim(test)

Dimensi data training dan data testing telah berubah. Dari output tersebut diperoleh informasi bahwa pada data training memiliki 8 gambar dengan ukuran 32×32 serta memiliki 3 channel. Sedangkan pada data testing memiliki 4 gambar dengan ukuran 32×32 serta memiliki 3 channel.

Kemudian membuat data target yang merupakan klasifikasi dari gambar. Dimisalkan 0 yaitu mobil dan 1 yaitu motor.

trainy<-c(rep(0,4),rep(1,4))
testy<-c(rep(0,2),rep(1,2))
trainy
testy

Terakhir membuat label dari data target agar sesuai dengan klasifikasi yang digunakan di dalam library keras dan tensorflow yaitu data kategorik.

trainLabels<-to_categorical(trainy)
testLabels<-to_categorical(testy)
trainLabels
testLabels

Demikian artikel pada kesempatan kali ini, semoga bermanfaat. Selamat mencoba !!!

Referensi

Wikipedia
YouTube Channel RB Fajriya Hakim (Contoh Deep Learning dengan R dan Tensorflow)