Image Captioning Menggunakan CNN dan LSTM

https://miro.medium.com/max/784/0*OxIzn0e77Is_brVW

Original Source Here

Image Captioning Menggunakan CNN dan LSTM

Penelitian ini dilakukan oleh tim Reserach Data Science IndonesiaNouvalhabibie, Navizah Cahya, Hanifan Rizki, Zikril Hakim, Muhammad Idham Habibie, Trisna Hidayat, Rusnandi Fikri, Cynthia, Raspianiraspiani

Dalam beberapa tahun terakhir, teknologi pemrosesan gambar (image processing) di bidang computer vision dan pemrosesan bahasa alami (natural language processing) di pembelajaran mesin (machine learning) telah memiliki kemajuan yang signifikan. Banyak penerapan dari kedua teknik tersebut yang telah di implementasi dalam kehidupan sehari-hari, namun banyak hal yang kita masih belum menyadarinya. Contoh sederhana dari penerapan teknik pemrosesan gambar adalah fitur deteksi wajah (face recognition) yang ada di ponsel pintar kita, deteksi objek untuk melabelkan suatu produk (product detection), deteksi plat nomor kendaraan bermotor (text extraction), dsb. Contoh penerapan pemrosesan bahasa alami yang biasa kita gunakan adalah mesin penerjemah (machine translation) seperti di Google Translate. Contoh-contoh tersebut hanyalah sebagian kecil dari manfaat pembelajaran mesin dan kecerdasan buatan (artificial intelligence). Kita juga dapat menggabungkan kedua teknik tersebut seperti di dalam kasus pembangkitan caption. Pembangkitan caption merupakan sebuah metode yang digunakan untuk mendapatkan caption otomatis hanya dari sebuah gambar. Prinsip dari pembangkitan caption ini adalah mendeteksi objek-objek apa saja yang ada di dalam sebuah gambar dengan menggunakan model convolutional neural network (CNN) kemudian hasil dari objek yang ditebak tersebut akan digunakan sebagai masukkan untuk model pembangkitan bahasa alami (natural language generation) dengan cara membangkitkan caption yang sesuai dengan gambar. Teknik yang biasa digunakan dalam pembangkitan bahasa adalah long short term memory (LSTM).

CNN sendiri adalah suatu metode dalam machine learning yang didesain untuk mengolah data dua dimensi. CNN juga merupakan pengembangan dari Multi Layer Perceptron (MLP), sehingga memiliki cara kerja yang hampir mirip dengan MLP. Perbedaannya hanya terletak pada ukuran dimensi representasi neuronnya, dimana MLP setiap neuronnya hanya berukuran satu dimensi sedangkan CNN setiap neuron dipresentasikan dalam bentuk dua dimensi. sehingga operasi linear pada CNN menggunakan operasi konvolusi, dengan bobot yang tidak lagi satu dimensi saja, namun berbentuk empat dimensi yang merupakan kumpulan kernel konvolusi.

LSTM merupakan salah satu tipe Neural Network yang dinamakan Recurrent Neural Network (RNN), namun terdapat modifikasi sedikit yaitu dengan penambahan memory cell yang dapat menyimpan informasi untuk jangka waktu yang lama. Dengan demikian, karena dapat menyimpan informasi yang lama, metode ini dinamakan Long Short Term Memory (LSTM). LSTM diusulkan sebagai solusi untuk mengatasi terjadinya vanishing gradient pada RNN saat memproses data sequential yang panjan

Metode

Metode yang digunakan adalah CNN untuk proses pengekstrakan fitur pada gambar, kemudian fitur yang didapatkan tersebut akan digunakan untuk proses pembangkitan kata menggunakan LSTM. Ilustrasi model yang digunakan dapat di lihat melalui Gambar 1 di bawah ini.

Gambar 1 Penggabungan LSTM dengan Image Extractor

Data Set

Data set yang digunakan dalam penelitian ini diperoleh dari flickr dengan data latih yang terdiri atas 8000 gambar serta 5 caption untuk masing-masing gambar, kemudian data uji dengan 1000 gambar.

Pengekstrakan Fitur Gambar

Metode yang digunakan untuk melakukan pengekstrakan fitur pada gambar adalah ResNet50. Lapisan akhir dari model ini akan digunakan untuk melakukan pengklasifikasian gambar. Karena tujuan awal kita adalah membangkitkan caption dari suatu gambar, lapisan akhir tersebut akan dihapuskan. Ilustrasi pembangkitan caption dari gambar dapat kita lihat di bawah ini:

Gambar 2 Contoh salah satu Data Latih dengan Deskripsi (Seorang Anak Perempuan, Gambar Pelangi, dan Rumput)

Pada gambar ini terdapat seorang anak perempuan, gambar pelangi, dan rumput. Dengan menggunakan model ResNet50 ini, diharapkan model bisa mengekstrak fitur anak perempuan, gambar pelangi, dan rumput tersebut. Kemudian fitur-fitur tersebut akan disimpan dalam bentuk vektor 1 x n yang nantinya akan dijadikan masukkan ke dalam model pembangkitan kata.

Pembangkitan Kata

Setelah mendapatkan fitur yang diekstrak dari gambar, diperlukan juga model untuk menciptakan kalimat dari fitur-fitur gambar tersebut. Ada dua model yang dapat digunakan dalam menangani data teks, yaitu RNN dan LSTM. Model yang akan digunakan pada kasus ini adalah LSTM.

Praproses Data

Selain dalam mendefinisikan sebuah model, di dalam proses labelling ini diperlukan adanya praproses data, yang tujuannya adalah mengubah data mentah (raw data) yang diterima menjadi sesuatu hal yang dapat diolah dalam pemodelan. Dalam hal ini, data praproses terbagi menjadi dua hal:

Mengubah data mentah gambar ke dalam bentuk array yang memiliki dimensi tertentu agar bisa diolah ke dalam pemodelan. Hal ini dituangkan pada coding di bawah ini,

  • Pencocokan data gambar dengan pelabelan.

Pencocokan data ini diambil dari dataset flickr_8k_train_dataset.txt yang berisi data pencocokan antara gambar dan pelabelan. Lalu, dari gambar dan pelabelan yang sudah sesuai ini, diolah agar bisa dimasukkan ke dalam sebuah pemodelan.

Proses Pemodelan

Dalam menentukan sebuah labeling di dalam gambar, kita menggunakan tiga buah model untuk menentukan sebuah pelabelan gambar tersebut. Model pertama adalah ResNet 50 Architecture sebagai model untuk memprediksi sebuah pralatih (pre-trained) model. Pemodelan ResNet 50 basisnya dari model CNN yang memiliki 50 lapisan (layer), tetapi di dalam library yang kita import, hanya ada 5 lapisan saja yang digunakan. Di dalam riset ini, kami menggunakan dimensi berukuran (224, 224, 3) sebagai salah satu standard pengompresan gambarnya karena dataset yang digunakan adalah RGB (berwarna). Formula tersebut didefinisikan di dalam tulisan sebagai berikut:

Model kedua adalah LSTM dengan menggunakan dense layer sesuai dengan embedding size yang sudah didefinisikan (128) dan diulangi masukannya sebanyak panjang maksimum, dalam hal ini adalah 40. Model kedua ini digunakan untuk memodelkan sebuah gambar agar bisa diprediksi menjadi pelabelan di dalam model ketiga. Model terakhir ini akan menggunakan LSTM yang memiliki nilai masukkan lapisannya sebesar 256. Tujuan model ketiga tersebut adalah memprediksi label dari sebuah gambar saja, dengan tujuan agar bisa dicocokkan dengan gambar yang sudah diprediksi di model kedua

Setelah mendefinisikan model kedua dan ketiga, kita akan melakukan satu kali running untuk menggabungkan kedua model ini dengan menggunakan fitur concatenate. Dengan menggunakan categorical crossentropy, dengan epochs = 200, dan batch_size = 512, kita akan mendapatkan akurasi model seperti di bawah ini,

Dengan menjalankan model di atas, sebanyak 200 epochs, akurasi dan loss yang didapatkan seiring dengan jumlah epoch adalah sebagai berikut,

Gamabr 3 Loss vs Accuracy terhadap jumlah epochs

Berdasarkan tampilan grafik di atas, nilai optimum untuk akurasi dan loss-nya adalah pada epoch ke-200. Nilai akurasi dan loss pada saat mencapai nilai epoch ke-200 adalah 90.66 % dan 23.58%.

Implementasi ke Test Dataset

Setelah mendapatkan nilai akurasi 90.66%, model ini akan digunakan untuk memprediksi test dataset. Code dibawah ini digunakan untuk memprediksi dari model hasil dataset yang kita training.

Salah satu implementasi yang dilakukan dalam memprediksi dataset filename ini adalah sebagai berikut,

Gambar 4. Salah satu Test Dataset Image dengan menerapkan label yang telah di training

Simpulan

Image Captioning merupakan proses pembuatan caption berisi deskripsi dari gambar yang ada. Proses image captioning disini melibatkan 2 model deep learning untuk membuat caption yaitu model CNN dan LSTM. Model dilatih dari data gambar dan caption, sehingga model dapat mempelajari (learning) dari data yang diberikan dan memberi output deskripsi yang cukup detail sesuai data latih yang diberikan.

Code lengkap dapat dilihat di github di bawah ini

Referensi

[1]https://mti.binus.ac.id/2019/12/02/long-short-term-memory-lstm/#:~:text=LSTM%20merupakan%20salah%20satu%20jenis,lama%20(Manaswi%2C%202018).

[2]https://medium.com/@nadhifasofia/1-convolutional-neural-network-convolutional-neural-network-merupakan-salah-satu-metode-machine-28189e17335b#:~:text=Convolutional%20Neural%20Network%20adalah%20salah,banyak%20diimplementasikan%20dalam%20data%20citra.

AI/ML

Trending AI/ML Article Identified & Digested via Granola by Ramsey Elbasheer; a Machine-Driven RSS Bot

%d bloggers like this: