Object Detection dengan Tensorflow dan Google Colab [1]

Jadi saya baru-baru ini dapat ajakan untuk membuat sebuah aplikasi yang menggunakan metode object detection untuk mengetahui objek apa saja yang ada pada citra dan posisinya di mana melalui tangkapan kamera Handphone. Proyek ini sangat baru bagi saya dan membuat saya jadi belajar banyak dalam pengerjaan proyek ini.

object detection illustration

Membuat model object detection bukanlah suatu yang mudah, dan menjadikannya bisa dijalankan di Handphone adalah masalah yang lain lagi. Pada artikel ini saya akan coba jelaskan bagaimana membuat sebuah model object detection menggunakan custom dataset buatan sendiri yang nantinya dapat diaplikasikan ke mobile (Android/IOS). Artikel ini fokus ke tahap pertama, yakni penyiapan data.

Tensorflow API

Kami menggunakan Tensorflow untuk menyelesaikan permasalahan ini. Salah satu keunggulan Tensorflow adalah kemudahannya dalam men-deploy model ke Handphone, yakni dengan cara mengkonversi model menjadi TFLite model. Dari TFlite model, nantinya model bisa langsung dipanggil di script Android. Selain itu Tensorflow juga menyediakan beberapa API yang memudahkan kita dalam proses pembuatan model object detection dengan custom dataset (dataset buatan kita sendiri).

Kami menggunakan Tensorflow versi 1.x karena Tensorflow versi 2 saat tulisan ini dibuat masih belum support untuk object detection dengan custom dataset.

Proses instalasi Tensorflow dan Tensorflow object detection dilakukan secara terpisah. Detailnya bisa dilihat sesuai dokumentasi resminya (bisa update setiap waktu). Instalasi Tensorflow dapat dilihat di halaman utamanya, sedangkan untuk instalasi tensorflow object detection API bisa di akses di link berikut ini.

Dataset

Format dataset untuk Object Detection tentu berbeda dengan dataset yang digunakan pada klasifikasi citra biasa. Data latih untuk kasus deteksi objek memerlukan label berupa file terpisah yang mencatat nama objek dan lokasi objek tersebut pada suatu citra atau disebut file anotasi. Terdapat dua style file anotasi yang cukup populer, yakni style COCO dataset dan PASCAL-VOC. Untuk masing-masing style, format dataset bisa berupa file JSON atau file XML. Kami menggunakan format PASCAL-VOC XML dengan tampilan seperti berikut:

<annotation>
	<folder>My Drive</folder>
	<filename>Image1.jpg</filename>
	<path>C:\My Drive\Image1.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>1280</width>
		<height>720</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>Object 1</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>925</xmin>
			<ymin>343</ymin>
			<xmax>1097</xmax>
			<ymax>464</ymax>
		</bndbox>
	</object>
</annotation>

Jadi pada contoh di atas saya punya file citra “Image1.jpg” dan file XML “Image1.xml”. Isi dari file XML nya adalah data di atas. Berisikan koordinat objek yang ingin dideteksi. Pembuatan file XML ini tidak perlu dibuat manual (diketik satu persatu), kita bisa menggunakan software anotasi. Anotasi citra diatas dibuat menggunakan software labelimg.

Selain itu, karena kita nantinya akan menggunakan fungsi-fungsi bawaan tensorflow, ada banyak penyesuaian data yang perlu dilakukan sebelum masuk ke proses model training, kira-kira alur pemrosesan datanya seperti ini:

Jadi setelah punya gambar beserta anotasi XML nya, kita perlu convert dulu ke CSV. File CSV ini merupakan 1 file yang “merangkum” semua file xml yang kita punya. Dari file CSV tersebut lalu kita convert ke TFRecord file, objek yang dapat dibaca oleh tensorflow dengan mudah. Semisal ada pembagian data train, data validation, dan data test, proses pemisahan ini dilakukan sebelum konvert ke CSV, jadi ilustrasi di atas hanya untuk salah satu set, data train misalnya.

Continue reading

Jaringan Saraf Tiruan Sederhana Menggunakan Tensorflow 2.x

Ini adalah artikel “versi lain” dari tulisan sebelumnya di sini. Sebagian besar artikel akan sama, namun pada artikel ini kita akan coba membuat jaringan saraf tiruan sederhana menggunakan Tensorflow 2.x. Tensorflow 2.x atau tensorflow versi 2, merupakan tensorflow versi terbaru yang membawa konsep yang berbeda dengan Tensorflow versi sebelumnya. Bagi yang masih bingung tentang JST dan mau memahami bagaimana JST bekerja bisa buka artikel berikut.

Dataset

Kita akan menggunakan dataset Iris yang sudah cukup populer. Dataset ini berisi data dari 150 Bunga Iris yang berasa dari 3 spesies berbeda. Diberikan 4 buah fitur / ciri, yakni panjang kelopak (sepal length), lebar kelopak (sepal width), panjang mahkota (petal length), dan lebar mahkota (petal width), lalu kita akan mencoba untuk mengklasifikasikan bunga tersebut adalah spesies apa.

iris set

Saya telah memisahkan dataset aslinya menjadi dua file, satu untuk training, dan satu untuk testing. File csv dataset tersebut dapat di download di sini: training set dan test set.

Implementasi Jaringan Saraf Tiruan

Arsitektur

Melihat dataset yang ada, dapat kita simpulkan untuk arsitektur jaringan saraf tiruan kita membutuhkan 4 buah neuron input (fitur) dan 3 buah neuron output (spesies). Kita akan coba menggunakan sebuah hidden layer dengan jumlah neuron hidden layer sebanyak 3. Ilustrasinya tampak sebagai berikut:

Continue reading