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

Transfer Learning: Solusi Deep Learning dengan Data Sedikit

Salah satu permasalahan yang sering dialami ketika menggunakan deep learning adalah jumlah data yang sedikit. Di luar sana, sebenernya ada banyak solusi yang ditawarkan untuk mengatasi masalah ini. Nah, di sini kita akan bahas salah satunya, yakni Transfer Learning. Artikel ini akan berfokus pada teori di baliknya, sedangkan untuk implementasi akan ada di artikel selanjutnya.

Model Deep Learning

Sebelum masuk lebih dalam ke transfer learning, saya ingin mengingatkan sedikit tentang bagaimana konsep deep learning (secara umum machine learning) bekerja.

Suatu agen cerdas yang menggunakan deep learning bekerja menggunakan data. Kita berikan data yang banyak untuk dipelajari, kita lakukan proses training/belajar, lalu kita akan mendapat model/agen yang cerdas.

Lalu muncul pertanyaan..

Proses pencarian data itu rumit, proses training itu makan waktu, kenapa kita tidak download saja model cerdas yang ada di internet lalu kita gunakan untuk masalah kita? tidak perlu train, dan tidak perlu ada data, beres kan?

Transfer Learning

Ide utama dari transfer learning ini kira-kira seperti ini,

Kita gunakan model yang sudah dicerdaskan orang lain untuk permasalahan kita, yang bahkan bisa jadi berbeda

Sebagai contoh, kita mau membuat sistem untuk menghitung kendaraan beserta jenisnya menggunakan kamera CCTV. Jika jenis kendaraannya yang ingin dideteksi cukup umum, semisal “mobil” atau “truk”, kita bisa jadi cukup browsing-browsing, dan kita akan menemukan orang yang sudah membuat model deep learningnya. Kita tinggal download, pakai, dan selesai! Kita telah memiliki model cerdas deep learning yang mampu mendeteksi mobil atau truk. Tanpa perlu mencari data, tanpa perlu melatih model.

Tapi seringnya permasalahan yang kita miliki sedikit berbeda. Sedikit saja perbedaan, maka kita sudah tidak bisa lagi pakai model orang lain ini. Contohnya, kita tidak hanya ingin mendeteksi “mobil” dan “truk” tapi juga “becak”. Permasalahannya, “becak” itu bukan kendaraan yang di mana-mana ada. Sangat mungkin model yang kita download tadi belum bisa mendeteksi becak.

Di sinilah, kita butuh transfer learning. Kembali ke ide utama di atas, dengan transfer learning, kita bisa memanfaatkan model orang lain yang sudah dilatih, untuk permasalahan kita yang berbeda.

Jadi ada 3 poin yang kita bahas di sini:

  • Model yang sudah dicerdaskan
  • Cara menggunakan model tersebut
  • Permasalahan yang (bisa jadi) berbeda

Oh ya, sebelum masuk lebih dalam, konsep Transfer Learning ini berlaku tidak hanya untuk arsitektur CNN saja. Tapi pada tutorial ini saya akan banyak mencontohkan menggunakan CNN karena lebih mudah dibayangkan.

Continue reading

Image Classification dengan CNN dan Tensorflow

Pada artikel ini saya akan menjelaskan secara ringkas langkah-langkah penggunaan Tensorflow untuk Image Classification / Klasifikasi Citra. Perlu dicatat, saya menggunakan Tensorflow versi 2 yang mungkin berbeda dengan Tensorflow versi 1. Selain itu, saya garis bawahi lagi artikel ini membahas image classification (menentukan ini gambar apa), bukan detection (menentukan objek apa dan di mana pada gambar). Secara alur, pada artikel ini saya mengembangkan dari artikel sebelumnya tentang implementasi CNN menggunakan PyTorch

Dataset

Dataset yang akan kita gunakan adalah citra barang-barang yang ada di sebuah toko (dimodifikasi dari Freiburg Groceries Dataset) yang terdiri dari 5 kelas, yakni citra produk Susu (MILK), Air mineral (WATER), soda (SODA), jus (JUICE), dan cuka (VINEGAR). Total terdapat sekitar 900-an gambar untuk pelatihan dan 120 gambar untuk pengujian. Semua citra berukuran sama, yakni 256×256 pixel. Dataset dan code bisa di-download di repository berikut.

salah satu citra dengan kelas “Juice”

Kita akan menggunakan dataset yang ada pada folder “train” untuk pelatihan dan yang ada pada folder “test” untuk pengujian. Pada tutorial ini kita masih belum menggunakan teknik validasi seperti menggunakan data validasi atau cross-validation.

Pre-Processing

Jika diperhatikan, format folder dataset yang telah di-download adalah seperti berikut.

dataset/
   train/
      kelas_1/
         citra_103.png
         citra_22.png
         ...
      kelas_2/
         citra_123.png
         citra_324.png
         ...
      ...
   test/
      ...

Format tersebut adalah format standar untuk image classification. Ketika format foldernya sudah seperti itu, beberapa framework seperti Tenorsflow atau PyTorch sudah menyediakan cara mudah untuk meload data. Pada Tensorflow kita bisa menggunakan perintah berikut untuk meload dataset.

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(rescale=1/255.) # pre-processor
datatrain = DirectoryIterator('train', datagen) # load trainset dari folder train/
datatest = DirectoryIterator('test', datagen) # load testset dari folder test/
Continue reading

Istilah penting di Neural Network dan Deep Learning (bagian 2)

Artikel ini adalah kelanjutan dari artikel sebelumnya tentang istilah-istilah di neural network ataupun deep learning bagian kedua. Sama seperti artikel sebelumnya, artikel ini bertujuan untuk menjelaskan istilah-istilah penting di neural network.

Error vs Akurasi

Error dan akurasi adalah 2 metode pengukuran performa model machine learning. Model machine learning pada umumnya akan menggunakan fungsi error (atau sering disebut juga loss/cost function) sebagai acuan untuk memperbaiki modelnya (a.k.a belajar). Hampir kebanyakan model machine learning termasuk deep learning menggunakan algoritma optimasi untuk meminimalkan error yang dihasilkan. Artinya, semakin kecil error yang dihasilkan akan semakin baik.

Pada proses training yang benar, grafik eror akan turun dan grafik akurasi akan naik

Sedangkan akurasi adalah pengukuran yang lebih “mudah” dipahami manusia. Biasanya akurasi tidak digunakan untuk acuan model belajar melainkan hanya untuk membantu manusia memahami sebaik apa model yang telah dihasilkan. Misalnya jika diketahui ada model yang mampu mendeteksi suatu penyakit dengan akurasi 90%, maka kita langsung bisa paham artinya dalam 100 kali percobaan ada kemungkinan sekitar 10 percobaan akan gagal. Hal tersebut lebih mudah dipahami oleh manusia ketimbang kita bliang: suatu model memiliki error 0.002 ._. Dari definisi tersebut, dapat dilihat semakin tinggi nilai akurasi akan semakin baik.

Juga perlu diketahui, ketika kita bilang “akurasi”, sebenarnya kita merujuk ke suatu rumus yang spesifik. Sedangkan istilah “error” adalah istilah yang lebih lebih umum, rumusnya ada banyak, misalnya log-likelihood. Metode pengukuran lain yang mudah dipahami selain akurasi adalah F1-Score yang biasa digunakan untuk mengevaluasi model dengan data yang classnya tidak seimbang (imbalance)

oh ya, saya juga dulu pernah bertanya di AI.SE tentang pemilihan model berdasar akurasi atau error di sini

Continue reading
memahami istilah-istilah deep learning

Istilah-Istilah di Neural Network ataupun Deep Learning (bagian 1)

Semester ini saya dapat kesempatan mengajar kelas Deep Learning di Program Studi S1 Informatika UII. Selama mengajari mahasiswa yang mayoritas masih awam dengan Deep Learning, bahkan Neural Network, saya merasakan ternyata banyak sekali istilah-istilah di Neural Network ataupun Deep Learning yang mungkin sulit untuk dipahami.

Karenanya, artikel ini saya buat dengan harapan dapat membantu teman-teman yang sedang belajar Neural Network ataupun Deep Learning untuk memahami istilah-istilah tersebut. Jika ada istilah-istilah yang belum tersampaikan / kurang jelas / malah salah maknanya silakan tulis di komentar ya 🙂

AI vs Machine Learning vs Neural Network vs Deep Learning

Kalau di kelas, saya menggambarkan diagram venn hubungan keempatnya seperti berikut ini.

John McCarthy, orang pertama yang memunculkan istilah Artificial Intelligence (AI) memberi definisi AI adalah “Science and engineering of making intelligent machines”1 atau saya sering mendefinisikan sendiri sebagai sekumpulan metode yang digunakan agar komputer dapat meniru atau bahkan melampaui kecerdasan manusia2.

Nah, Machine Learning merupakan salah satu teknik di bidang AI untuk membuat mesin mampu belajar dari data tanpa perlu diprogram secara eksplisit. Salah satu algoritma machine learning yang bisa digunakan adalah Neural Network (jaringan saraf tiruan). Suatu program yang memiliki banyak if-else, dapat meniru kecerdasan manusia (AI), namun bukan termasuk machine learning karena program tidak belajar dari data, melainkan dengan ditulis secara ekspliti oleh programmer.

Neural Network (NN) mencerdaskan mesin dengan membangun model matematika yang (berusaha) meniru bagaimana sel saraf bekerja. Pada NN bagian-bagian kecil (sel saraf) dirangkai untuk menciptakan arsitektur jaringan saraf yang sesuai untuk suatu masalah.

Continue reading