Belajar Ragam Strategi Deep Learning dengan CIFAR10 Dataset

Semester lalu di salah satu tugas kuliah Computer Vision, kita diminta untuk membuat model CNN dengan dataset CIFAR10. Awalnya ngira ini kayak MNIST dataset yang satset train nggak sampai 10 epoch dapet akurasi >90%. Ternyata dataset ini lebih kompleks. Menariknya, dari satu tugas sederhana ini, Pak Dosen mengenalkan para mahasiswa tentang beragam strategi di deep learning.

Di tutorial ini kita akan coba membuat model machine learning untuk dataset CIFAR10. Kita akan buat modelnya dari scratch menggunakan PyTorch dan tidak menggunakan pre-trained model agar kita bisa lebih dalam memahami apa yang terjadi. Kita juga akan menarget (sebagai tantangan) untuk mendapatkan akurasi >85% dalam 40 epoch.

Source code tutorial ini tersedia dalam bentuk Google Colab di sini (akan terus dilengkapi komentar dan catatan pada notebook tersebut)

Catatan: Artikel ini tidak membahas dasar-dasar deep learning menggunakan PyTorch. Bagi yang ingin tahu dasar deep learning atau dasar PyTorch bisa mengunjungi artikel terkait di blog ini:

CIFAR10 Dataset

Dataset CIFAR10 adalah dataset citra berukuran 32×32 pixel berwarna. Sesuai namanya, CIFAR10 terdiri dari 10 kelas (kucing, burung, …, kapal). Jelas dataset ini berbeda dari MNIST yang hanya hitam putih. Selain itu jika dilihat di paper-paper, rata-rata akurasi yang diperoleh untuk CIFAR10 adalah sekitar 92% (dibanding MNIST yang bisa sampai >98%). Meskipun begitu, dataset ini masih tergolong mudah dan cocok untuk buat latihan klasifikasi citra. Dataset CIFAR10 bisa didownload langsung menggunakan perintah dari PyTorch.

Sebastian Raschka, machine learning researcher yang bukunya cukup populer, juga berpendapat CIFAR10 termasuk salah satu dataset yang cocok untuk latihan.
Continue reading

Catat Eksperimen Machine Learning dengan Weights and Biases

Setelah banyak eksperimen di bidang machine learning, saya masih merasa mencatat keluaran eksperimen itu bagian yang tidak mudah. Rasanya hampir semua eksperimen machine learning yang saya lakukan, saya catat dengan cara dan gaya yang berubah-ubah. Ada yang saya input manual ke excel, atau log ke csv, atau sekadar di notepad. Belum lagi ketika prosesnya, eksperimen kadang harus berubah, gagal, tidak sesuai harpaan… (>,<) dan akhirnya bikin mood mencatat rapi itu makin hilang di tengah-tengah.

Alhamdulillah akhir 2021 lalu nemu tools menarik untuk mencatat hasil eksperimen dengan rapi dan lengkap dan mudah, yakni dengan Weights and Biases.

Weights and Biases logo

Weights and Biases (atau kadang ditulis W&B atau kadang juga wandb) adalah suatu tools yang memudahkan pencatatan eksperimen machine learning. Yang menarik dari weights and biases, sesuai dengan taglinenya “Log (Almost) Anything”, dia mampu mencatat hampir semua hal yang terjadi pada saat eksperimen dengan mudah. Beberapa data yang saya ingat bisa dicatat saat setiap run adalah:

  • Nilai loss atau akurasi atau nilai-nilai lain yang berubah-ubah saat training
  • Pemakaian CPU/GPU
  • Media-media yang dihasilkan selama eksperimen (audio/citra/video)
  • Perubahan bobot dan bias pada model
  • Spesifikasi hardware, software, serta versi package python yang terinstall
  • Parameter-parameter model, seperti learning rate, batch size, dsb.

Semua data itu dicatat secara rapi di server saat setiap kali melakukan “run” eksperimen. Jadi ketika kita melakukan beberapa run kita juga bisa membandingkan grafik-grafik data-data tersebut, dan hal ini akan sangat bermanfaat untuk mengukur performa model atau debugging seiring berjalannya waktu.

Weights and Biases Tutorial

Weights and Biases sendiri sebenarnya bisa berjalan hampir di semua framework machine learning seperi Tensorflow, Pytorch, Scikit-learn, dll. Pada tutorial ini kita akan menggunakan kode yang kita gunakan untuk klasifikasi citra menggunakan CNN dan Pytorch.

Secara umum, ada lima langkah utama untuk melakukan pencatatan menggunakan weights and biases:

  1. wandb.login(): Untuk menghubungkan projek kita dengan akun W&B yang kita miliki. Secara default W&B membutuhkan koneksi internet untuk menyimpan hasil eksperimen ke server.
  2. wandb.init(): Digunakan untuk mendefinisikan projek apa yang sedang kita jalankan. Pada bagian ini kita juga mendefinisikan parameter apa yang akan dicatat dalam sebuah config.
  3. wandb.watch(): Digunakan untuk memperhatikan (mencatat) kondisi model dari waktu ke waktu
  4. wandb.log(): Digunakan untuk mencatat variabel-variabel lain yang dibutuhkan untuk di catat.
  5. wandb.finish(): Menandai akhir proses pencatatan, jika kita ingin memulai proses pencatatan yang lain.

Kode lengkap berupa Notebook disertai penjelasan (Bahasa Inggris) bisa diakses di sini: Pytorch Image Classification + Weights and Biases.

Pada kode tersebut tampak lima poin di atas bisa dilakukan hanya dalam 5 baris saja (masing-masing perintah satu baris). Menggunakan notebook di atas, saya coba bereksperimen dengan mengubah-ubah nilai learning rate dan banyaknya batch saat training. Hasilnya, tampilan ringkasan pencatatan di dashboard Weights and Biases untuk tutorial di atas seperti berikut:

Saya melakukan empat kali run. dengan mengubah-ubah parameter learning rate dan batch size

Nama-nama seperti “autumn-cloud-5” dan sebagainya, adalah nama yang secara otomatis diberikan W&B untuk membedakan setiap run eksperimen yang kita lakukan. Kita bisa mengubah-ubahnya semau kita jika itu dirasa memudahkan. Untuk detail setiap run bisa dilihat dengan klik setiap namanya, atau mengubah tampilan dalam bentuk tabel seperti di bawah ini:

Tersedia juga catatan dalam bentuk tabel untuk membandingkan pengaturan parameternya

W&B Sweeps

W&B juga menyediakan fitur untuk melakukan hyperparameter optimization. Dengan fitur ini, secara otomatis weights and biases akan mencari nilai-nilai untuk setiap parameter yang memberikan hasil terbaik untuk kasus kita. Hasil akhirnya, kita bisa melihat hubungan nilai parameter dengan loss yang diperoleh.

Saya ambil dari dokumentasi W&B, tutorial menyusul insyaAllah

Komunitas Weights and Biases

Yang menarik lagi tentang W&B ini bukan hanya tools yang disediakan namun juga komunitasnya. Saya bahkan lebih dulu mengikuti kegiatan-kegiatan di komunitas W&B sebelum saya mencoba toolsnya. W&B secara aktif mengadakan mini workshop, paper dan book reading group, seminar, Q&A session, dan masih banyak lagi, di mana kita bisa belajar banyak hal seputar machine learning secara umum tidak hanya seputar W&B.

Kalian bisa cek youtube channelnya untuk melihat beberapa rekaman yang tersedia, atau follow akun twitternya untuk bisa update kegiatan-kegiatan terbarunya.

Sekian, Semoga bermanfaat!

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

Deep Learning dalam 6 Baris dengan Fastai dan Pytorch

Sebelumnya maaf semisal judulnya agak “heboh” dan terkesan click-bait 😀 tapi di artikel ini beneran saya ingin menunjukkan bahwa deep learning, khususnya image classification dengan CNN sebenarnya dapat dengan mudah dilakukan hanya dengan 6 baris kode berikut menggunakan library Fastai dan Pytorch:

dibuat menggunakan https://carbon.now.sh, versi raw ada di bawah

Artikel ini berfokus pada pengenalan singkat tentang fastai dan juga penjelasan tentang kode di atas. Tutorial lebih detail dan mendalam tentang fastai insyaAllah akan kami coba buat di artikel lain.

Berawal dari Pytorch vs Tensorflow

Sebelum kita masuk lebih dalam tentang Fastai, kita akan me-refresh singkat tentang library atau framework di deep learning. Bagi yang belum tahu, ada dua library besar yang saat ini cukup sering digunakan, yakni Pytorch dan Tensorflow. Pytorch dibuat oleh Facebook sedangkan Tensorflow oleh Google. Keduanya memiliki beragam fitur yang mendukung deep learning, salah satunya Autograd yang pernah saya bahas di artikel ini. Nah, sering kali bagi yang baru belajar deep learning akan bertanya:

Pilih pakai Pytorch atau Tensorflow?

Jawaban salah

Tensorflow itu lebih mudah dipelajari dan digunakan daripada Pytorch. Itu jawaban yang sering saya dengar. Kenapa salah? karena saya yakin kebanyakan orang yang jawab itu dia bukan sedang membandingkan Tensorflow yang murni, melainkan library tambahan yang berada di atas Tensorflow, yakni Keras. Tensorflow yang murni bisa dibilang lumayan ribet juga loh untuk dipelajari dan digunakan (apalagi pas masih versi 1.x di tahun 2019)

Jadi sekilas sejarah, dulu library deep learning itu memang susah-susah pemakaiannya (low-level). Library generasi awal, Theano, bahkan ngodingnya harus “jungkir balik” alur mikirnya. Karenanya, dibutuhkan library lagi di atasnya yang high-level (mudah dipahami dan digunakan) namun tetap terintegrasi dengan library yang low-level, lahirlah salah satunya Keras. Sekarang Keras sudah sangat terintegerasi dengan Tensorflow bahkan tidak perlu di-install terpisah. Tutorial Tensorflow-Keras pernah saya tuliskan di sini.

Jawaban benar
dari salah satu developer utama Pytorch

Saat ini bisa dibilang Pytorch dan Tensorflow (khususnya versi 2) sangat mirip. Keduanya sama-sama smoothly bisa digunakan untuk hampir kebanyakan kebutuhan riset dan sehari-hari. Jadi apapun librarynya silakan pilih saja, dan yang terpenting, kuasai dulu sebelum coba library lain.

Kembali ke Jawaban yang salah di atas, ketika kita membandingkan Keras dengan Pytorch maka bisa dibilang kurang apple-to-apple. Karena Keras pada dasarnya adalah high-level library sedangkan Pytorch adalah low-level library, jadi jelas Keras terlihat lebih mudah pemakaiannya. Nah, di artikel ini saya akan jelaskan salah satu high-level library paling populer untuk Pytorch, yakni Fastai.

Continue reading

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).

Artikel telah di update 16 Januari 2020 pada perubahan instalasi Detectron 2 versi 0.3

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