PART #01: INTRODUCTION
Di challenge kali ini kita akan membuat mannequin klasifikasi untuk membedakan ekspresi wajah dan mengimplementasikannya ke information realtime. Undertaking kali ini kita akan Kembali menggunakan dataset berupa gambar, lebih tepatnya gambar wajah manusia. Facial features recognition adalah teknologi yang menggunakan gesture pada biometric untuk mendeteksi emosi pada manusia. Emosi yang dideteksi dalam challenge ini diantaranya happiness, unhappiness, anger, shock, concern, dan disgust. Dengan facial features kita bisa mengetahui secara tersirat kondisi dari orang tersebut. Ibaratnya, kita bisa tau kondisinya apakah lagi bahagia, sedih, depresi, dan lain sebagainya.
PART #02: LOAD DATASET
Untuk datasetnya sendiri bisa di obtain melalui hyperlink dropbox dengan cara seperti dibawah ini:
Kalau sudah jangan lupa di unzip supaya datanya bisa terbaca.
Setelah di unzip, maka kalian akan menemukan 2 folder baru yaitu ‘prepare’ dan ‘take a look at’. Selanjutnya silakan import library “Path” agar kita bisa mengakses isi dari masing — masing folder ‘prepare’ dan ‘take a look at’. Selanjutnya kita import library yang diperlukan dalam challenge ini dan kita pathlib untuk folder ‘prepare’ dan ‘take a look at’.
PART #03: DATA PREPROCESSING
Kita coba ambil sampel dari folder ‘prepare’ dan bisa kalian lihat isi dari datasetnya berupa gambar dengan format .jpg. Selanjutnya kita ambil label dari masing — masing gambar yang mewakili. Kalau kalian perhatikan, labelnya adalah nama folder sebelum file gambarnya (lihat gambar ‘hasil cek label gambar’). Untuk mengambil labelnya, silakan buat fungsi seperti gambar dibawah. Oh ya, hasilnya mungkin akan berbeda — beda setiap kali kalian jalankan scriptnya, tapi itu ga jadi masalah selama scriptnya tetap berjalan.
Setelah kita tahu labelnya, langsung kita konversi labelnya menjadi angka dengan menggunakan LabelEncoder. Hal ini dilakukan karena deep studying tidak bisa memproses atau membaca label yang berbentuk string.
Setelah kalian jalankan script diatas, maka hasilnya akan menunjukkan angka yang mewakili masing — masing label. Karena kita memiliki 7 label dan perhitungan dimulai dari angka 0. Maka hasil dari label encodernya kurang lebih seperti ini:
· Indignant: 0
· Disgust: 1
· Concern: 2
· Blissful: 3
· Impartial: 4
· Unhappy: 5
· Shock: 6
Selanjutnya adalah Langkah opsional, Dimana kalian bisa melihat urutan dari label tersebut. Silakan diketik code pada gambar dibawah untuk menjalankannya.
Karena dataset ini tidak memiliki validation information, selanjutnya kita bagi coaching datanya agar Sebagian bisa digunakan untuk validation information. Disini saya ambil sebanyak 25% (0.25) untuk validation datanya.
Oh ya, karena challenge ini kategorinya multi-class classifier, kita lakukan pengecekan untuk imbalance classnya. Hal ini bertujuan untuk melihat apakah ada kelas yang terlalu dominan dari kelas yang lainnya. Caranya, kita hitung weight dari setiap kelas yang ada. Silakan tulis script dibawah ini untuk lebih jelasnya.
Seperti yang terlihat pada gambar, class 1 memiliki weight yang cukup jauh dari class yang lainnya. Disini kita tidak akan membahas cara mengatasi imbalance dataset terlebih dahulu, melainkan langsung berfokus pada tujuan challenge yaitu face expression recognizer. Jadi untuk tahapan information preprocessing cukup sampai disini. Selanjutnya kita akan masuk ke bagian pembuatan mannequin.
PART #04: CREATE MODEL
Pertama — tama, silakan buat fungsi yang membagi picture dengan label dengan mengetik kode pada gambar dibawah.
Baris ke-4 berfungsi untuk membaca file picture, kemudian baris ke-5 berfungsi untuk mendecode picture tersebut ke 3 channels yaitu RGB (Crimson, Inexperienced, Blue).
selanjutnya kita lakukan proses information augmentation dimulai dengan mendefinisikan ukuran gambar (IMG_SIZE) dan ukuran batchnya (BATCH_SIZE). Selanjutnya kita masukkan kedua ukuran tersebut kedalam sequential object. Sebagai catatan, ukuran gambar dataset ini adalah 48 x 48 pixels. Dimana ukuran ini sangat kecil. Maka dari itu ukuran gambarnya saya naikkan menjadi 96 pixels. Oh ya untuk naiknya sendiri disarankan untuk tidak terlalu tinggi guna menghindari adanya noise pada gambar.
Setelah itu kita buat perintah untuk menjalankan augmentationnya. Augmentation yang akan saya jalankan adalah RandomFlip, RandomRotation, dan RandomZoom. Untuk konfigurasi lebih jelasnya silakan ketik code dibawah ini.
Setelah selesai, kita lanjutkan membuat fungsi untuk membuat tensorflow information object. Silakan ketik dulu code dibawah.
Baris ke-5 dan ke-6 bertujuan untuk mengkonversi path gambar dan label ke bentuk tensor. Selanjutnya hasil konversinya kita gabungkan dengan perintah “zip” (baris ke 11) agar dapat melakukan iterasi sekaligus.
Selanjutnya kita load picture & labelnya sekaligus di resize dengan script pada baris ke 13 & 14. Setelah itu kita acak datanya dan bagi ke dalam batch. (Baris 15 & 16). Kemudian kita bisa lanjut menampilkan form dari gambar dan label yang sudah kita buat sebelumnya dengan script dibawah ini.
Berdasarkan script diatas, form dari gambar mewakili batch measurement (32), ukuran gambar (96 x 96), dan warna RGB (3). Sedangkan form dari label mewakili batch measurement (32) dan jumlah label (7). Selanjutnya kita bisa melihat sampel dari gambar tersebut dengan script dibawah ini.
Saat saya jalankan scriptnya, gambar yang muncul adalah gambar dari label “completely satisfied”. Tampilan ini mungkin akan berbeda dengan saat kalian jalankan scriptnya. Tapi ga masalah, asalkan scriptnya jalan itu berarti masih aman. Oke, langkah selanjutnya kita lakukan hal yang sama untuk validation information yaitu melihat form dari gambar dan labelnya.
Dan terlihat bahwa form dari validation information sama dengan coaching information. Sekarang kita akan masuk ke tahap berikutnya yaitu pembuatan modelnya. Disini kita akan menggunakan EfficientNet sebagai pre-trained modelnya. EfficientNet sendiri adalah salah satu pre-trained mannequin CNN yang dikembangkan oleh Google pada tahun 2019. EfficientNet termasuk salah satu teknik switch studying yang dikhususkan untuk pengenalan objek atau klasifikasi gambar. Untuk penggunaannya silakan ketik script dibawah ini.
Dikarenakan goal dari challenge ini adalah multi class classification, maka activation yang kita gunakan adalah softmax. Langkah selanjutnya, kita compile mannequin tersebut dengan menambahkan optimizer ‘Adam’ dengan studying charge=0,001, beta_1=0,9. Untuk epochsnya disini saya set 10, jika kalian ingin berbeda silakan menyesuaikan.
Selanjutnya kita nonaktifkan pretrained mannequin kita yang berada di layer 0 untuk menghindari adanya overfitting. Dilanjutkan dengan pembuatan callbacks berupa checkpoint untuk menyimpan mannequin terbaik selama proses coaching dan juga menambahkan early stopping agar proses coaching berhenti ketika mannequin mulai overfitting. Persistence kita set 4 yang artinya jika 4 epochs berturut — turut tidak ada perkembangan maka proses coaching akan berhenti.
Selanjutnya kita coaching lagi namun kali ini dengan menambahkan callbacks yang telah kita buat sebelumnya.
Setelah dijalankan, kita dapatkan hasilnya kurang lebih seperti ini:
· Accuracy: 0.6
· Precision: 0.7
· Recall: 0.5
· Val Accuracy: 0.6
· Val Precisiion: 0.7
· Val Recall: 0.5
Nah, selanjutnya kita masuk ke tahap evaluasi modelnya untuk mengetahui bagaimana performa mannequin kita.
PART #05: EVALUATE MODEL
Kita akan membuat dataset object untuk menampung information — information yang kita gunakan dalam pengujian. Silakan tulis script di bawah ini.
Penjelasan dari line of codenya adalah sebagai berikut:
· Baris ke 3–5 adalah code untuk mengambil path listing testing dataset kita, lalu mengkonversinya ke bentuk string dan mengambil labelnya.
· Baris ke 7 adalah code untuk mentransform labelnya menjadi bentuk integer.
· Baris ke 8 adalah code untuk mengencode labelnya.
· Baris ke 10–11 adalah proses untuk mengkonversi datasetnya menjadi bentuk tensor.
· Baris 13–17 adalah pembuatan fungsi untuk mengambil gambarnya yang selanjutnya kita resize dengan resolusi 96×96.
· Baris 19–23 adalah pembuatan take a look at dataset yang sumbernya kita ambil dari path information testing yang sudah kita deklarasikan sebelumnya.
Selanjutnya mari kita lihat take a look at dataset yang sudah kita buat dengan script dibawah ini.
Take a look at dataset kita memiliki form yang sama dengan prepare dataset yaitu 32 untuk batch measurement, ukuran gambar 96×96, dan 3 channel. Selanjutnya kita bisa lihat pattern dari validation picture yang kita miliki dengan script dibawah ini.
Saat saya operating scriptnya gambar yang ditampilkan adalah gambar dengan label ‘concern’, mungkin akan berbeda dengan milik kalian tapi ga masalah selama scriptnya tidak menampilkan pesan error. Subsequent, kita akan evaluasi modelnya untuk mengetahui nilai akurasi, presisi dan recall dari take a look at dataset.
Berdasarkan hasilnya, kita bisa lihat nilai akurasi, presisi, dan recall yang didapatkan pada take a look at dataset hampir sama dengan nilai yang didapat saat proses coaching. Disini kita bisa bilang bahwa mannequin yang kita buat cukup optimum dalam memprediksi ekspresi wajah walaupun dengan kondisi dataset kita yang imbalance. Langkah terakhir silakan di ketik script dibawah ini untuk menyimpan modelnya.