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

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
struktur data vector

Tutorial Struktur Data Vector pada C++

Mendekati Kompetisi Sains Nasional (KSN), saya mau coba buat beberapa tutorial singkat tentang C++ yang semoga bisa bermanfaat. InsyaAllah tidak hanya untuk lomba programming, semoga ini bisa juga bermanfaat untuk yang akan menghadapi tes programming masuk kerja. Pada artikel pertama ini saya akan membahas struktur data Vector.

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

Apa itu struktur data vector?

Vector pada C++ (atau biasa disebut menggunakan std::vector) adalah Array dinamis, yakni array yang proses memungkinkan proses insert dan delete element pada bagian tengah array dan “seakan-akan” mengubah ukuran array tersebut. Berikut kira-kira ilustrasinya:

Pas kuliah algoritma pemrograman dulu mungkin kita pernah diminta dosen kita untuk membuat array dinamis memanfaatkan linked list. Nah, memang dengan linked list kita bisa membuat array dinamis sederhana. Tapi sebenarnya, secara definisi aslinya, linked list yang pernah kita buat bukanlah array dinamis (detail bisa ditanyakan via comment). Nah, std::vector ini lah yang disebut dengan array dinamis yang sebenarnya di C++.

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