Object Detection dengan PyTorch Detectron 2 dan Colab

Pada tutorial ini kita akan coba membuat object detection model dengan custom dataset kita sendiri menggunakan PyTorch Detectron 2.

Facebook Detectron 2 adalah salah satu python framework yang dapat digunakan untuk kasus object detection. Detectron dikembangkan oleh Facebook dengan menggunakan basis PyTorch sebagai deep learning frameworknya. Bagi yang belum tahu tentang PyTorch, bisa cek website resminya atau kunjungi tutorial kami sebelumnya di sini.

Framework lain untuk deteksi objek yang cukup populer adalah Tensorflow object-detection API (TFOD) yang dikembangkan oleh Google. Keduanya hampir memiliki fitur utama yang sama, salah satunya mereka menyediakan Model Zoo, di mana kita bisa mulai proses training menggunakan model yang sudah ada (pretrained model).

Detectron 2 Tutorial

Pada tutorial ini kita akan menggunakan Google Colab. Contoh code yang akan dibahas pada artikel ini tersedia di sini.

Detectron 2 Logo
  1. Dataset
  2. Instalasi
  3. Menyiapkan DatasetCatalog
  4. Training Model
  5. Save and Load Model

1. Dataset

Dataset yang akan kita gunakan sama dengan dataset dari tutorial sebelumnya. Kita akan mendeteksi pada suatu citra apakah ada kangguru atau rakun. Penjelasan detail format data dan bagaimana memprosesnya dapat dilihat pada artikel sebelumnya. Tapi, karena artikel sebelumnya digunakan untuk object detection dengan Tensorflow sedangkan kita di sini akan menggunakan PyTorch Detectron, maka kita tidak perlu memproses data sampai membuat file tfrecord, cukup sampai bagian membuat file csv.

Dataset latihan dapat didownload melalui github dengan menuliskan perintah berikut di google colab. Detail dataset dapat dibaca di file Readme:

! git clone https://github.com/rianrajagede/object-detection.git
Continue reading

Melanjutkan Training Extend FastText Model

Artikel kali ini membahas bagaimana cara melanjutkan training atau extend Fasttext model yang sudah ada, dengan menambahkan dataset baru. Pada artikel sebelumnya, Word embedding dengan Fasttext bagian 1.5, telah dibahas cara menggunakan model pre-trained Fasttext word embedding dalam Bahasa Indonesia yang disediakan oleh Facebook. Manfaat dari extend model adalah kita bisa menambahkan kosa kata baru ke dalam vocabulary model pre-trained Fasttext, tanpa perlu train ulang dari awal.

Definisi model pre-trained di sini tidak terbatas pada model pre-trained yang disediakan Facebook, tapi bisa juga berupa model word embedding Fasttext yang sudah kita train sendiri sebelumnya. Namun untuk contoh, akan digunakan model pre-trained Fasttext Bahasa Indonesia dari Facebook.

  1. Load Pre-Trained Model FastText dari Facebook
  2. Cek Model Awal
  3. Menyiapkan Dataset
  4. Extend Model
  5. Cek Model Setelah di-Extend
Continue reading

Step-by-step Backpropagation Menggunakan Python

Pada artikel sebelumnya, kita telah melihat step-by-step perhitungan backpropagation. Pada artikel ini kita kan mengimplementasikan backpropagation menggunakan Python

Kita akan mengimplementasikan backpropagation berdasarkan contoh perhitungan pada artikel sebelumnya. Karenanya perlu diingat kembali arsitektur dan variabel-variabel yang kita miliki. Berikut arsitektur jaringan saraf tiruannya:

Variabel $x$ menunjukkan input dari jaringan saraf tiruan kita. Pada contoh ini kita hanya akan menerima sebuah input yang memiliki 3 fitur, yang bernilai $x_1=1.0$, $x_2=2.0$, dan $x_3=0.5 $ atau dapat kita tulis sebagai berikut:

$$ X = [1.0, 2.0, 0.5] $$

Untuk bobot jaringan, jika diperhatikan terdapat 6 bobot $w$ yang menghubungkan neuron input dengan neuron output. Untuk memudahkan penamaan, kita simbolkan $w_{ij}$ berarti bobot yang menghubungkan neuron input nomor $i$ ke neuron output nomor $j$. Penamaan ini kita ikuti dari artikel sebelumnya. Jika dituliskan dalam bentuk matriks dengan $i$ menjadi nomor baris dan $j$ menjadi nomor kolom maka tampak seperti berikut:

$$ \begin{bmatrix}
w_{11} = 0.2 & w_{12} = 0.3 \\
w_{21} = 0.3 & w_{22} = 0.1 \\
w_{31} = 0.3 & w_{32} = 0.2
\end{bmatrix} $$

atau bisa dituliskan:

$$ W = \begin{bmatrix}
0.2 & 0.3 \
0.3 & 0.1 \
0.3 & 0.2
\end{bmatrix} $$

Nilai bias b pada latihan ini kita beri nilai 0 untuk $b_1$ dan $b_2$:

$$ B = [0, 0]$$

Jangan lupa juga kita buatkan variabel $T$ yang merupakan label/target asli dari data (groundtruth) dengan nilai $t_1=0$ dan $t_2=1$ (sesuai dengan artikel sebelumnya). Nantinya hasil prediksi $Y$ dari model akan dibandingkan dengan variabel ini.

Pada proses di atas kita melakukan yang namanya vektorisasi atau mengubah representasi nilai menjadi vektor atau matriks. Nantinya ini akan memudahkan perhitungan kedepannya. Di Python proses deklarasi variabel-variabel tersebut dapat dituliskan sebagai berikut:

X = [1, 2, 0.5]
W = [[0.2, 0.3],
    [0.3, 0.1],
    [0.3, 0.2]]
b = [0, 0]
T = [0, 1]
Continue reading

Tutorial Struktur Data Map Pada C++

Artikel ini adalah rangkaian tutorial struktur data pada C++ untuk persiapan Kompetisi Sains Nasional bidang Komputer 2020. Pada artikel ini kita akan bahas Struktur Data Map. Cek juga artikel sebelumnya tentang struktur data Vector.

TL;DR; Bagi yang agak pingin cepat, bisa baca tutorial di codingannya langsung di link berikut ini https://ideone.com/1Y7b2b

Apa itu struktur data map?

Di C++ ada 2 jenis struktur data map, yakni `std::map` dan `std::unordered_map`. Kedua struktur data tersebut memiliki fungsi yang bisa dibilang hampir sama, bedanya adalah `std::map`merupakan implementasi dari Self-Balancing Tree khususnya Red-Black Tree, sedangkan `std::unordered_map` menggunakan hash table.

Yang membedakan juga, sesuai dengan namanya, pada map data akan otomatis disimpan secara terurut menaik berdasar key nya, sedangkan unordered map tidak. Detailnya bisa dicek di bagian “Iterasi” di bawah.

Jika dilihat dari luar, kedua struktur data tersebut akan terasa mirip dengan array namun dengan index yang memungkinkan untuk berupa tipe data selain integer (mirip dengan dictionary di Python). Pada map, indeks tersebut diberi nama “key”.

Continue reading

Parameter Tuning Model Secara Otomatis dengan Optuna

Apa itu Tuning Parameter

Ketika kita membuat model machine learning, kita tidak akan terlepas dengan yang namanya parameter tuning, yakni proses menentukan nilai parameter-parameter model ktia. Hampir semua model machine learning punya beberapa parameter (atau variabel) yang harus kita definisikan terlebih dahulu nilainya sebelum proses training. Nilai yang kita berikan pada parameter-parameter tersebut nantinya akan menentukan proses pelatihan model kita.

Sebagai contoh di neural network, kita harus menentukan parameter-parameter arsitektur kita, yang bisa meliputi: banyak hidden layer, banyak neuron di setiap layer, jenis fungsi aktivasi dan lain-lain. Penentuan angka-angka tersebut akan menentukan kualitas model kita. Misalkan, untuk tiga parameter yang disebutkan tadi kita menggunakan neural network dengan 2 layer, masing-masingnya 100 neuron, dan menggunakan fungsi aktivasi sigmoid. Itu berarti kita telah memilih nilai untuk tiga parameter yang disebutkan di atas dari banyak kemungkinan nilai. kenapa kok tidak 1 layer? atau 3 layer? kenapa tidak 50 neuron? atau 10 neuron? kenapa tidak pakai fungsi aktivasi lain? dan sebagainya.

Tentu pemilihan parameter harusnya memiliki suatu “dasar”. Biasanya parameter-parameter tersebut dipilih setelah melalui beberapa eksperimen dan merupakan parameter yang menghasilkan model terbaik untuk kasus yang digunakan.

Parameter Tuning model Neural Network

Pada contoh ini kita akan coba membuat model neural network sekaligus melakukan parameter tuning untuk kasus binary classification menggunakan data Sonar. Data tersebut berisikan ~200 pola sinyal sonar yang mendeteksi antara batu (kode “R”) atau besi (kode “M”). Dataset yang telah di-split dapat didownload di sini, contoh code dapat dilihat di Google Colab di sini

Langkah pertama, kita perlu load package dan dataset lalu ubah kode kelas “R”/”M” menjadi 1 dan 0.

Continue reading