Membangun Gender Classifier menggunakan CNN (Convolutional Neural Network)
Intro
Halo semua !, ini merupakan artikel pertama saya yang akan membahas tentang bagaimana membangun gender classification menggunakan arsitektur deep learning yaitu CNN berdasarkan gambar wajah seseorang. Semoga artikel ini bisa membantu menambah pengetahuan kita :D.
CNN
Sedikit penjelasan tentang CNN atau Convolutional Neural Network. CNN merupakan salah satu metode deep learning yang sedang populer yaitu sebuah jaringan syaraf tiruan (multilayer perceptron) yang memiliki neuron yang mampu mengoptimalkan jaringan melalui pembelajaran. Didalam arsitektur ini terdapat beberapa komponen pembangun seperti input layer, output layer, dan hidden layer. Saya akan coba menjelaskan secara singkat cara jaringan ini belajar yaitu input layer menerima input berupa gambar kemudian masuk ke n-hidden layer yang dimana setiap perpindahan antar hidden layer terjadi penghitungan matematis yang diatur dalam fungsi aktifasi sehingga menghasilkan error dan bobot. Dari dua elemen inilah jaringan akan belajar untuk mengurangi error dan dan memperbarui bobot agar mendapat hasil output yang benar sesuai kelasnya.
Lets Implement !
FYI : Saya akan memberikan code dalam bentuk screenshot agar kalian menulis code secara manual, karena menurut saya belajar akan lebih mudah apabila kamu menulis sendiri dari pada hanya copy+paste.
Dataset
Dalam percobaan kali ini, untuk datatrain-nya masing-masing menggunakan sekitar 420 gambar pria dan wanita eropa sedangkan untuk datatesting-nya hanya 110 gambar pria dan wanita, dimana nantinya gambar-gambar tersebut akan di-augmentasi untuk menambah jumlah dan variasi dari setiap kelasnya(disini kita memiliki dua kelas yaitu pria dan wanita).
Requirement
Requirement yang dibutuhkan atau di-install adalah
- Python
- Tensorflow
- OpenCV(cv2)
- Matplotlib
- Google Colab atau Jupyter Notebook (untuk kasus ini saya menggunakan Google colab agar mendapat GPU gratis LoL :D )
Dalam kasus ini saya mendefinisikan variabel untuk merubah atau me-reshape semua gambar menjadi persegi dengan ukuran 256x256.
Kemudian seperti yang saya katakan, semua gambar datatrain tadi di-augmentasi untuk menambah variasi dan jumlah data. Augmentasi yang saya gunakan adalah rescaling, shifting, dan zooming. Untuk class_mode bisa bervariasi tergantung kasusnya, bisa dibaca di sini.
Membangun arsitektur CNN, karena saya tidak berpatokan pada model manapun, seperti VGG, ResNet, AlexNet, dll. Maka saya bebas membuat model yang saya inginkan dan tentunya saya selalu mencoba mengganti arsitekturnya untuk mendapat hasil terbaik dan sejauh ini, diatas merupakan hasil percobaan terbaik saya hehehe :D. Untuk jenis loss, activation, optimizer, dan metrics bisa dibaca di sini
Langsung training deh ! :D. But wait, di sini saya membuat semacam checkpoint untuk berjaga-jaga apabila saat proses training terjadi kendala yang menyebabkan proses berhenti, maka dengan adanya checkpoint ini saya bisa melanjutkan training dari checkpoint terakhir jaringan belajar.
Setelah menunggu proses training inilah hasil plot trainingnya :D.
Mari evaluasi jaringan menggunakan datatest dimana isi dari data tersebut semuanya adalah gambar yang berbeda dengan gambar dari datatrain. Boleh di-augmentasi boleh tidak ya. Dan ternyata dari hasil evaluasi, jaringan tersebut menghasilkan akurasi sekitar ~82%.
Prediksi
Mari kita coba prediksi suatu gambar dengan jaringan kita !
Dan yaps !!!, berjalan sesuai rencana hehehe :D. Jadi sampai disini, selamat kamu berhasil membangun program AI pertama kamu. Semoga artikel ini bisa bermanfaat bagi kita semua dan saya menerima segala masukan untuk membuat artikel yang lebih bagus dan mudah untuk dipahami lagi.
See you ! untuk pembacaan kita selanjutnya ya :D
Referensi
[1] K. O’Shea and R. Nash, “An Introduction to Convolutional Neural Networks,” no. December, 2015.
[2] J. Yim, J. Ju, H. Jung, and J. Kim, “Image classification using convolutional neural networks with multi-stage feature,” Adv. Intell. Syst. Comput., vol. 345, no. 6, pp. 587–594, 2015.