Membuat Model Tensorflow Object Detection untuk Android

Artikel ini adalah kelanjutan dari artikel setahun yang lalu sebelumnya tentang Tensorflow Object Detection. Di artikel sebelumnya kita fokus pada penyiapan data, kali ini kita akan membahas cara melatih dan membuat model deep learning Tensorflow Object Detection menggunakan Google Colab, hingga akhirnya siap digunakan di Android.

Pada tutorial ini kita menggunakan Tensorflow versi 2, yang sedikit berbeda dengan Tensorflow versi 1. Ini salah satu alasan artikel ini tertunda cukup lama, tahun lalu ketika artikel pertama ditulis, Tensorflow versi 2 masih belum cukup stabil untuk object detection maupun untuk diconvert ke TFLite.

Overview

Secara umum ada 3 tahapan untuk membuat model tensorflow untuk mendeteksi objek dan menjadikan model tersebut siap digunakan di Android:

  1. Menyiapkan dataset. Jika objek yang ingin kita bukan objek yang umum dideteksi, maka kita perlu menyiapkan dataset terlebih dahulu. Tahap ini sudah dibahas di artikel sebelumnya.
  2. Melatih pre-trained model. Kita akan menggunakan pre-trained model, karena untuk merangkai dan melatih model dari awal akan memakan waktu dan membutuhkan resource yang besar. Kita cukup melakukan fine-tuning model agar model memiliki performa yang baik, untuk dataset baru, dengan waktu pelatihan yang lebih singkat.
  3. Mengconvert model menjadi TFLite. Proses mengubah model yang sudah dilatih ke format yang dapat dipahami oleh mobile Android.

Source Code

Tutorial Tensorflow Object Detection ini tersedia di Google Colab berikut: https://colab.research.google.com/drive/1dNIIcDBMaKieGzSl1BVE5H6wu17n6cO7?usp=sharing. Untuk dataset dan script-script lain yang akan digunakan dapat diakses di repository github berikut: https://github.com/rianrajagede/object-detection.git. Tutorial ini merujuk pada link Google Colab dan repo github di atas.

1. Instalasi Tensorflow Object Detection

Ketika kita menginstall Tensorflow, kita belum menginstall Tensorflow Object Detection API. Hal ini juga berlaku di Google Colab, kita tetap perlu menginstall Tensorflow Object Detection API terlebih dahulu. Langkah instalasi resminya bisa diakses di sini. Saat artikel ini ditulis instalasi bisa dilakukan dengan:

1. Clone github Tensorflow Object Detection API di Google Colab. Penanda tanda seru (!) di awal baris menunjukkan baris tersebut sedang menjalankan perintah Command Prompt, bukan Python. Perintah ini akan membuat folder models yang berisi file-file dari repository tensorflow object detection.

!git clone https://github.com/tensorflow/models.git

2. Lalu install API menggunakan perintah di bawah. Penanda %%bash fungsinya mirip dengan tanda !, jika perintah %%bash ditulis di awal baris menunjukkan cell Google Colab tersebut sedang menjalankan perintah Command Prompt, bukan Python.

%%bash
cd models/research/
protoc object_detection/protos/*.proto --python_out=.
cp object_detection/packages/tf2/setup.py .
python -m pip install .

3. Jalankan test untuk memastikan instalasi berhasil dengan menjalankan perintah berikut. Jika semua tertulis “OK” berarti instalasi berhasil.

!python models/research/object_detection/builders/model_builder_tf2_test.py
Continue reading

Pengalaman Menghadapi IELTS dalam 2-3 Minggu

Kita tahu tes IELTS beda dengan TOEFL ITP, dari sisi harga dan juga tingkat kesulitannya. Karenanya persiapan yang dilakukan “seharusnya” lebih matang, apalagi jika kita menarget nilai tertentu. Tapi, dalam beberapa kondisi kita bisa jadi terpaksa harus ambil IELTS dalam waktu yang singkat. Contoh yang saya alami, saya sudah 2x kepaksa harus ambil IELTS dengan waktu persiapan kurang dari 3 minggu, di awal tahun 2019 dan satu lagi di awal Juni lalu. Artikel ini akan sedikit cerita apa-apa yang saya siapkan dalam waktu sesingkat itu.

IELTS Simulation

Langkah pertama: daftar IELTS Simulation Test. Ini memang akan menambah biaya persiapan, sekitar 150-250rb, tetapi ini penting untuk memetakan sejauh apa kemampuan kita. Ingat, dua dari empat yang diujikan tidak bisa dinilai mandiri (Writing dan Speaking), jadi sangat penting untuk simulasi. Ada banyak lembaga penyedia IELTS simulation test, di Jogja ada Elti dan IONs, kalau di Klaten saya sempat ambil simulation test di Real English Klaten. Beberapa hal yang perlu diperhatikan sebelum simulation test:

  1. Pastikan ambil simulation di minggu awal persiapan. Sehingga ada cukup waktu untuk memetakan dan mengimprove kemampuan kita.
  2. Lakukan persiapan menghadapi simulation, pahami bentuk soalnya sehingga kita punya bekal.
  3. Perhatikan detail-detail yang dirasakan selama simulatin sebagai catatan untuk persiapan di hari H. Misalnya, ingat pada soal jenis apa kita lemah, apa strategi pengerjaan yang paling nyaman/baik bagi kita, bahkan sampai perlukah kita pakai Jaket untuk menghindari kedinginan, dan sebagainya.

Sebagai contoh, setelah simulation terakhir saya, saya mencatat beberapa poin:

  • Saya lemah di writing, khususnya untuk membuat paragraf pembuka/pertama
  • Saya lemah di writing dalam memanajemen waktu dan tulisan saya akan memburuk ketika semakin panik
  • Saya tidak bisa tenang di awal speaking yang bikin tidak terkontrol ucapannya (bisa out of topic)
  • Saya bisa kehabisan vocab untuk topik yang sulit
  • Saya sering ngantuk dan tidak fokus di tengah tes reading
  • Saya beberapa kali gagal mengeja kata di tes listening

Setelah bisa memetakan apa kekurangan dan kelebihan kita, kita bisa mulai memanfaatkan waktu belajar kita lebih efisien.

Persiapan Writing

Di IELTS ada dua tugas writing, yang pertama adalah menceritakan sebuah diagram dalam 150 kata, dan yang kedua adalah membuat essay dengan topik tertentu dalam 250 kata. Tugas kedua proporsi nilainya 70%, jadi walaupun lebih sulit harus dimaksimalkan.

Yang saya lakukan dalam 2-3 minggu:

Continue reading
GRE General

My Experience taking GRE General Test at Home

This year, I got a new experience to take the GRE General Test at Home (online GRE Test). I took this test because of a need that requires including GRE scores even though there is no minimum requirement. Therefore, I took the GRE test with super minimal preparation. So don’t expect this article to tell you about tips for dealing with the GRE. I’m just going to share my experience taking the GRE General Test at Home.

For those interested in studying abroad, you must have heard of the GRE test. In some campuses abroad, in addition to an English certificate, we are usually also required to include a GRE score with a certain minimum. But at some other campuses, the GRE is not mandatory. So, before taking this test, make sure you need to take this test. I’ve never even heard that the GRE test can be used for college admission requirements in Indonesia.

The GRE test is different from the IELTS or TOEFL test that is available almost everywhere. The GRE test is only available in certain cities. What I know is in Bandung, Jakarta, and Surabaya. But recently, there is an At-Home Test option, where we can test GRE at home online.

GRE General Test

The test is consist of 3 sections: Verbal, Quantitative , & Analytical Writing.

Verbal test, in general, there are two types of questions here: reading comprehension and word choice. Regardless of the type, the biggest challenge on this test is the English vocabulary. During the test, we will meet with difficult (unbelievably) words that I never encounter .-. (“enervate”, “prodigal”, “laconic”, “calumny”, …) and we must understand its meaning and usage.

Quantitative test, (usually just called “Quant”) as the name implies, this is a basic math test. Although basic, this test is not just basic arithmetic like the TPA test here. The problem is more complicated and more tricky. We need to remember the basic geometric formulas, combinations, permutations again, and more importantly, just memorizing formulas doesn’t help.

Analytical Writing test, In this test, we will be asked to write two English essays that are correct grammatically and logically. In the first essay, we will be asked to respond to an issue, and in the second essay, we will be asked to make logical rebuttals from other people’s statements.

Continue reading
batch epoch step

Batch, Epoch, Step. Istilah-istilah pada Gradient Descent

Ketiga istilah di atas sering muncul ketika kita sedang belajar atau implementasi model neural network, khususnya ketika membahas Gradient Descent. Batch, epoch, dan step, adalah sebagian istilah yang digunakan menjelaskan proses iterasi di Gradient Descent. Istilah-istilah itu tidak hanya ditemukan di buku teori, tetapi juga di dokumentasi-dokumentasi framework yang akan kita gunakan. Karenanya, sangat penting untuk bisa membedakannya dengan baik.

Gradient Descent

Gradient descent adalah algoritma optimasi yang digunakan untuk menemukan parameter yang menghasilkan nilai minimum pada suatu fungsi. Dalam kasus neural network, Gradient Descent digunakan untuk menemukan bobot model terbaik yang menghasilkan error minimum. Detail perhitungan gradient descent contohnya ada pada partikel sebelumnya, sedangkan implementasinya dapat di baca di artikel berikut ini.

Secara umum, langkah yang dilakukan untuk mencerdaskan model neural network menggunakan gradient descent adalah sebagai berikut:

  1. Sebuah input-xi masuk ke model neural network, lalu menghasilkan output / error Ei (forward propagation)
  2. Gradient descent terhadap output / error E untuk mengupdate nilai bobot model W (backward propagation)
  3. Lakukan kedua langkah di atas terhadap semua data berkali-kali hingga diperolah model terbaik.

Untuk kemudahan penjelasan, poin no. 1 di atas akan kami sebut sebagai Langkah 1 (bold dengan warna orange) dan poin no. 2 akan kami sebut sebagai Langkah 2 (bold dengan warna ungu)

Langkah-langkah di atas masih cukup umum, Jika ada lebih dari satu data langkahnya seperti apa? Dari sinilah akan muncul istilah-istilah di awal tadi. Misalkan kita memiliki 100 data latih, maka urutan yang dilakukan pada Gradient Descent adalah:

  1. Lakukan Langkah 1 untuk setiap data (dari data latih ke 1 hingga 100), sehingga diperoleh 100 nilai eror Ei
  2. Dari 100 nilai error itu, kita hitung rata-ratanya untuk memperoleh sebuah nilai error E
  3. Lakukan Langkah 2 menggunakan E untuk mengupdate W (hanya 1x)

Langkah diatas terjadi dalam satu epoch. Untuk mendapatkan model yang baik kita perlu mengulangi langkah di atas lebih dari satu kali (beberapa epoch).

Definisi sebuah Epoch, adalah ketika kita telah menggunakan semua data latih pada proses pelatihan. Pada contoh di atas, kita sudah melalui sebuah epoch karena kita telah menggunakan 100 data latih yang kita miliki.

Pada contoh tersebut sebuah epoch terdiri dari 100 kali Langkah 1 dan 1 kali Langkah 2.

Continue reading

Siamese Network: Neural network untuk menguji kemiripan

Bayangkan kita diminta membuat model machine learning yang akan digunakan untuk presensi mahasiswa menggunakan foto wajah. Universitas yang meminta dibuatkan model tersebut memiliki 10,000 mahasiswa. Jika kita mengasumsikan ini adalah permasalahan klasifikasi, apakah itu berarti ini adalah klasifikasi citra dengan jumlah kelas 10,000?

Klasifikasi dengan 10,000 class??

Itu jauh lebih banyak daripada data benchmark yang biasa digunakan klasifikasi citra, Imagenet, yang hanya 1000 kelas! Selain itu, tidak mudah juga untuk mendapatkan data per kelasnya. Apakah setiap mahasiswa harus difoto ratusan kali agar dapat data latih yang representatif? lalu bagaimana jika ada mahasiswa baru? nah, di sinilah Siamese Network bisa jadi salah satu solusinya.

Siamese Network

Siamese network adalah jenis arsitektur neural network di mana menerima dua input, yang masing-masingnya masuk ke subnetwork yang sama lalu digabungkan untuk dihitung kemiripan antara dua input tersebut.

Siamese network
Siamese Network untuk identifikasi wajah

Siamese network digunakan untuk menghitung kemiripan dua data. Kemiripan antara dua data di sini tergantung pada kasusnya, misal kemiripan wajah dari orang yang sama namun memiliki dua foto yang berbeda, atau kemiripan gaya berpakaian dari dua orang yang berbeda, dll. Model dilatih dengan menerima input pasangan data, dengan output yang dihasilkan bisa berupa biner (sama atau tidak) atau sebuah real value yang merepresentasikan tingkat tingkat kemiripan.

Siamese network tidak menspesifikkan arsitektur pada bagian subnetwork, asalkan dua arsitektur yang digunakan adalah sama (bentuk dan bobotnya). Kita bisa memakai konsep ini untuk beragam jenis data. Misalnya kita ingin mengecek kemiripan pertanyaan maka kita bisa menggunakan subnetwork berupa LSTM network, jika ingin mengecek kemiripan foto kita bisa gunakan CNN sebagai subnetworknya. Output dari subnetwork ini adalah vektor, dengan ukuran bebas (sebagai hyperparameter yang kita tentukan sendiri)

Ada banyak metode yang bisa dilakukan di bagian penggabungan (Merge) hasil dari dua subnetwork. Beberapa yang pernah saya tahu:

  • Hitung selisih absolut antar vektor output subnetwork lalu masukkan vektor selisihnya ke sebuah neural net,
  • Concat atau gabungkan kedua output lalu masukkan vektor gabungannya ke sebuah neural net,
Continue reading