Reverse Engineering Model Handwritten Digits Recognition Aplikasi Mobile SIREKAP

Di tulisan ini saya akan melakukan reverse engineering aplikasi SIREKAP 2024, mengekstrak model TensorFlow Lite untuk inference, lalu membuat aplikasi Android untuk mengetes model tersebut. Saya bandingkan juga dengan model sederhana yang jadi contoh tutorial tensorflow lite.

Handwritten Digits Recognition

Persoalan pengenalan digit tulisan tangan merupakan hal paling dasar (semacam Hello World) di pelajaran AI modern. Ini merupakan subset dari OCR (optical character recognition), di mana scopenya hanya digit saja.

Ada data contoh standard yang jadi acuan yang dari database MNIST (Modified National Institute of Standards and Technology database) yang disebut MNIST dataset. Data ini terdiri dari puluhan ribu gambar digit, tiap gambar dibeli label apa digit yang ada di gambar itu, ukuran gambarnya 28×28 piksel monokrom.

Meski jadi acuan, menurut saya MNIST ini tidak 100% mencerminkan cara penulisan digit di dunia nyata, ada banyak cara penulisan digit yang tidak tercantum di dalam contoh datanya. Contoh: digit bisa dituliskan seperti display digital. Jika ingin melihat sendiri datanya, silakan klik di sini.

Sebagian Dataset MNIST
Lanjutkan membaca “Reverse Engineering Model Handwritten Digits Recognition Aplikasi Mobile SIREKAP”

Mengenal Transformer, LLM, dan ChatGPT

Tulisan ini ingin memperkenalkan cara kerja ChatGPT. Tidak terlalu teknis, tapi juga tidak terlalu awam. Untuk yang ingin mempelajari lebih dalam lagi sampai detailnya, akan saya berikan link-link yang bisa dipelajari di akhir. Tulisan ini juga bukan tulisan praktis sekedar bagaimana memakai ChatGPT dengan prompt tertentu.

Memahami sedikit dasar teori bisa membuat kita paham batasan dan keanehan ChatGPT, misalnya: kenapa ChatGPT selalu menyatakan bahwa ada 3 huruf “n” dalam kata “banana”, kenapa bingung jika percakapannya panjang, kenapa hasilnya tidak selalu sama, kenapa jawabannya kadang ngawur.

Selain itu semoga dengan membaca tulisan ini jadi bisa lebih memahami berbagai informasi yang sering disebutkan ketika ada yang merilis saingan baru (atau versi baru ChatGPT), misalnya apa itu jumlah parameter dan panjang konteks.

Dihasilkan ChatGPT dengan prompt “Generate simple disney like illustration for this topic “Transformer, LLM, and ChatGPT”


Lanjutkan membaca “Mengenal Transformer, LLM, dan ChatGPT”

Menambahkan Teknologi AI ke IP Camera rumah

Sejak memakai bel rumah yang tidak perlu batere, kami sudah berhasil menyelesaikan masalah lupa mengganti batere bel wireless di pagar. Tapi ada masalah baru: tukang paket sering memakai motor dan malas turun dari motor untuk menekan bel rumah. Mereka biasanya akan membunyikan klakson, menunggu kami keluar.

Paket!!!

Saya sering tidak mendengar tukang paket, apalagi kalau sedang di kamar atas . Risna juga sering tidak dengar jika sedang memasak. Jadi kadang tukang paketnya perlu nelpon agar kami keluar.

Khusus untuk Pos dari Thailand Post Office, mereka tidak pernah menelpon mereka punya opsi kalau kami tidak di rumah: menaruh surat agar kami mengambil di kantor pos, atau dititipkan ke tetangga. Kalau kami tahu ada paket hari itu (dari statusnya yang delivered), maka kami perlu tanya ke tetangga.

Lanjutkan membaca “Menambahkan Teknologi AI ke IP Camera rumah”

MAIX GO: AIOT Board

Di jaman Artificial Intelligence (AI) dan Internert of Things (IOT), ada beberapa perusahaan yang berusaha menggabungkan keduanya menjadi AIOT (Artificial Intelligence of Things). Salah satunya adalah Sipeed dari China. Perusahaan ini mengembangkan teknologinya berdasarkan instruction set RISC-V (baca: Risk Five) yang sifatnya terbuka. Jika saat ini Intel dan ARM masih menguasai dunia, di masa depan ada kemungkinan RISC-V yang akan jaya.

Sipeed sudah membuat cukup banyak produk, baik chip SOC dengan neural accelerator maupun board-board pendukungnya. Salah satu produk mereka adalah MAIX GO. MAIX GO ini memakai SOC Kendryte K210 dengan instruction set RISC-V 64 Bit dan memiliki accelerator untuk Fast Fourier Transform dan CNN (Convolutional Neural Network). Dengan adanya accelerator tersebut, SOC ini sangat cocok untuk memproses gambar dan suara. Menurut dokumentasinya, jika ukuran model kita kecil (<5.9 Mb fixed point 8-16 bit) maka pemrosesan image real time bisa dilakukan (~30 fps).

Lanjutkan membaca “MAIX GO: AIOT Board”

Kesan Pertama Nvidia Jetson Nano

Posting ini merupakan review awal Jetson Nano. Sebuah single board computer dari Nvidia dengan built in GPU. Sejak bulan Maret lalu saya memesan (preorder) Jetson Nano ketika diumumkan. Sayangnya ada masalah dengan fulfillment-nya sehingga baru dikirim akhir April dan barangnya sampai beberapa hari yang lalu. Sebagai permintaan maaf karena masalah tersebut SeeedStudio memberikan Micro SD Card 16 GB dan adaptor 5V 2.5 A gratis.

Jetson Nano adalah development board dari Nvidia yang relatif murah (99 USD). Memang ini lebih mahal dari board lain seperti Raspberry Pi, tapi board ini sudah memiliki GPU built in (128-Core Maxwell GPU). Sebagai informasi sebelumnya Nvidia sudah merilis beberapa board seri Jetson lain dengan GPU tapi harganya sampai ratusan USD.

Nvidia Jetson Nano

Hal penting yang perlu diperhatikan: micro SD 16 GB tidak akan cukup. Untuk sistem minimum saja memang cukup, tapi ketika sudah mendownload dan mengcompile beberapa library, spacenya tidak cukup lagi. Saran saya minimal pakailah SD Card 32 GB.

Lanjutkan membaca “Kesan Pertama Nvidia Jetson Nano”

Machine Learning dan Deep Learning Specialization (Coursera)

Awal tahun ini (8 Januari) saya iseng mulai ikut Machine Learning di Coursera. Setelah dua minggu ternyata saya masih semangat, jadi saya memutuskan untuk membayar, tujuan utamanya bukan supaya dapat sertifikat, tapi supaya semangat karena sudah bayar 79 USD.

Di tengah kesibukan saya selama Januari-Februari (nemu banyak bug), saya bisa menyelesaikan Course ini pada 23 Februari. Saya mengerjakan semua kuis dan tugas programming dengan Octave. Materinya dari sangat low level sekali, dari mulai linear regression sampai mengimplementasikan neural network (forward dan back propagation) dengan perkalian matriks.

Materi Machine Learning ini memang tidak membahas deep learning, jadi saya penasaran ingin belajar topik itu. Saya jadi ingat dengan blog senior saya Pak Benny Prijono (indoml.com). Pak Benny sudah mengikuti dan mereview banyak course dan membuat banyak catatan yang sangat rapi. Setelah membaca semua reviewnya, sepertinya yang menarik berikutnya adalah deep learning specialization dari pengajar yang sama.

Pengajar Machine Learning (Andrew Ng) memang enak cara penjelasannya. Dan beliau juga yang mengajar materi spesialisasi deep learning. Cara berbicaranya menurut saya agak terlalu lambat (saya terbiasa dengan kecepatan Bu Inge), tapi untungnya player video coursera mendukung percepatan video hingga 2x kecepatan normal (saya memakai kecepatan 1.50-1.75x tergantung materinya).

Kanan bawah adalah Andrew Ng, pengajar materi Machine Learning dan Deep Learning

Spesialisasi Deep Learning terdiri dari 5 Course. Review lengkapnya dalam bahasa Indonesia bisa dilihat di indoml.com, daftar 5 mata kuliahnya adalah:

Biayanya 49 USD/bulan sampai selesai. Kalau bisa selesai sebelum sebulan seperti saya, bisa hanya bayar 49 USD saja. Ada juga trial gratis 7 hari jika belum yakin apakah ingin mendapatkan sertifikat atau tidak. Untuk saya sendiri kemungkinan besar sertifikat ini tidak akan saya pakai, tapi tanpa membayar kita tidak bisa mengakses kuis dan tugas pemrogramannya.

Lanjutkan membaca “Machine Learning dan Deep Learning Specialization (Coursera)”

GPU Raspberry Pi

Salah satu kelebihan Raspberry Pi (RPI) dibandingkan Single Board Computer (SBC) lain adalah: harganya relatif murah dan memiliki GPU yang terdokumentasi resmi dan bisa dimanfaatkan dengan berbagai API low level. Beberapa SBC lain ada yang harganya lebih murah (misalnya Orange Pi) tapi dokumentasinya kurang, dan beberapa yang lain lebih powerful (misalnya NVidia Jetson) dengan dokumentasi yang cukup baik dari produsen (tapi masih kurang dari komunitas) tapi harganya 10x lipat dari RPi 3.

GPU Raspberry Pi cukup powerful, dan bisa melakukan beberapa hal menarik misalnya: tunelling dari kamera (dengan konektor CSI) langsung ke layar, colorspace conversion, video/image encoding and decoding,  resizing, dan overlay. Kita juga bisa meminta agar data dari kamera langsung dijadikan texture untuk OpenGL ES.

Secara praktis tunnelling artinya satu komponen ke komponen lain bisa bekerja langsung tanpa buffer. Contoh nyatanya begini: kita bisa membuat aplikasi yang kelihatan smooth karena data dari kamera tampil langsung di layar dengan kecepatan tinggi (30 fps) tanpa memakai CPU sama sekali. Sementara di latar belakang kita bisa mengambil gambar, memproses (misalnya face detection) dan menampilkan hasilnya.

Proses ini membypass windowing system, jadi bisa jalan bahkan tanpa X Window (mode teks sekalipun).

Video dari kamera bisa ditampilkan di mode teks

Fitur texture OpenGL ES artinya kita bisa menampilkan gambar kamera atau video (dari file atau jaringan) langsung di permukaan  misalnya kubus atau teko. Selain itu kita bisa menggunakan pixel shader untuk memproses data tanpa memakai CPU, contohnya membuat filter kamera secara real time, atau bahkan melakukan preprocessing untuk algoritma machine learning. Data yang sudah diproses bisa dibaca dan diproses lebih lanjut di CPU dengan glReadPixels. Lanjutkan membaca “GPU Raspberry Pi”