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

Saya memesan board MAIX GO ini ketika ada kampanye Indiegogo bulan November tahun lalu. Paket yang saya ambil seharga 45 USD dengan ongkir 5 USD ke Thailand dengan isi sebagai berikut:

  • 1 x MAIX GO (termasuk batere)
  • 1 x M12 OV2640 Camera
  • 1 x 2.8 inch QVGA LCD
  • 1 x MAIX GO simple case
  • 1 x MAIX R6+1 Microphone Array
  • 1 x MAIX Binocular Camera

Bendanya sebenarnya sudah saya terima sejak akhir Januari dan sudah langsung saya susun, tapi karena beberapa kesulitan awal, baru saya teruskan lagi ngopreknya sekarang. Isi paket utama MAIX GO lengkap: termasuk juga batere (biasanya sulit mengirimkan ini) dan juga obeng kecil serta kabel USB ke USB-C.

Sekarang benda ini sudah tersedia umum dan bisa dibeli di seeed studio atau Aliexpress (tapi lebih mahal). Harga MAIX GO tanpa Microphone Array dan Binocular Camera adalah 40.9 USD. Microphone Array bisa dibeli terpisah seharga 11.9 USD dan Binocular Camera bisa dibeli seharga 13.9 USD. Jadi harga total paket yang sama dengan yang saya pilih waktu crowdfunding adalah: 66.7 USD (belum termasuk ongkir).

Masalah pertama dengan hardware ini adalah pada interface serialnya. Benda ini dikenali sebagai serial port, tapi koneksinya tidak stabil (kadang bisa kadang nggak). Ternyata setelah membaca dan mengikuti diskusi telegram, masalahnya adalah pada chip STM32 yang dipakai sebagai interface serial, dan bagian ini perlu diupdate.

The problem is that OS X doesn’t let non-kernel drivers capture HID devices except through the HID APIs (for security reasons – helping prevent keyloggers etc). The CMSIS-DAP python server supplied by mbed libusb which implements it’s own HID layer and accesses the underlying USB stack at a lower level than HID – which Windows and Linux allow, but OS X does not.
The solution is update the firmware of cmsis-dap for maixgo to openec, and then OSX could recognize it.
You need a stlink, and use https://github.com/pavelrevak/pystlink/blob/master/README.md to flash the openec firmware. The openec firmware download URL is: https://github.com/rgwan/open-ec/releases, download and program the firmware flash-zero.bin, re-connect the USB cable of maix-go, and OSX will show new serial port. Use homebrew, install lsusb, and use lsusb command to check whether it work

Diskusi telegram

Masalah pertama untuk mengupdate: saya perlu membongkar lagi board yang sudah saya susun susah payah mengikuti instruksi Instruksi di youtube. Perlu mengikuti Youtube karena tidak ada instruksinya di dalam paket yang disertakan ataupun di websitenya. Tidak mudah juga menebak bagaimana menyusunnya karena tidak jelas juga orientasi LCD-nya harus dicolok ke arah mana (tidak ada labelnya).

Masalah berikutnya: saya harus mencari ST-LINK yang saya miliki. Karena sedang ada kesibukan lain, saya mengurungkan niat dan hampir melupakan board ini. Kemarin teman saya ada yang menanyakan apakah saya sudah mencoba board ini dan baru ingat lagi untuk mencoba. Akhirnya saya mulai membongkar lagi board ini malam ini.

Saya tidak tahu apakah board baru sudah memakai firmware yang baru atau masih harus diupdate manual. Jika masih perlu update manual, maka jangan lupa beli hardware ST-LINK-nya juga. Harga ST-LINK cukup murah dan terpakai juga untuk development STM8 dan STM32, jadi saran saya sih beli saja satu. Sebagai catatan: harga ST-LINK di Aliexpress lebih murah.

Setelah dibongkar ternyata posisi lubang pin untuk memprogram ulang STM32 sulit dijangkau. Tadinya mau saya solder pin header sementara lalu dilepas lagi, tapi ternyata spacing pin headernya juga tidak standar (standar di sini maksud saya seperti Arduino/Raspberry Pi). Tepatnya lagi: beberapa pin header di board ini standar 2.54mm, sebagian lagi tidak. Akhirnya saya memakai kabel dupont yang sudah ada headernya dan ditahan dengan tangan.

Kemudian ada masalah lain: sistem power board ini semuanya terhubung. Jika board ini dimatikan dan saya colok ST-LINK ke pin programming standard (3.3V, GND, DIO dan CLK) maka board ini akan berusaha menyala dan tidak berhasil karena dayanya tidak cukup. Jadi untuk memprogramnya benda ini perlu sambil diberi power via USB juga.

Setelah beberapa kali mencoba akhirnya berhasil juga mengupdate STM32-nya. Untungnya ini hanya perlu dilakukan sekali, jadi saya pastikan booting masih bisa dilakukan, dan setelah itu saya susun lagi boardnya.

Setelah berhasil mengupdate, saya berusaha memflash chip utama dengan Flasher versi Windows. Hasilnya: gagal. Padahal software Windows ini disarankan dan dilink dari website utamanya.

Akhirnya flashing berhasil dilakukan dengan skrip Python kflash.py. Saya mencoba Maixpy versi terbaru. Ini merupakan firmware Python untuk MAIX yang menurut saya sangat mudah digunakan.

Setelah sampai di prompt Python, semua berjalan cukup lancar. Saya mencoba-coba berbagai skrip contoh yang ada di:

https://github.com/sipeed/MaixPy_scripts

dan hampir semuanya berjalan lancar. Jangan lupa untuk deteksi wajah, ada data yang perlu diflash terpisah (sesuai komentar skripnya). Kualitas kamera yang diberikan biasa saja.

Board MAIX Go ini memiliki ESP8285 untuk koneksi WIFI, tapi saya baru mencoba scan access point. Saya belum mencoba seberapa bagus streaming kamera ke WIFI. Perlu dicatat bahwa tidak semua board seri MAIX memiliki WIFI (misalnya MAIX Bit tidak memiliki chip WIFI).

Selain dengan Python, benda ini juga bisa diprogram dengan menggunakan C/C++ tapi inipun belum saya coba. Sejauh ini Python sudah cukup untuk banyak eksperimen. Pemrograman C/C++ bisa dilakukan dari command line ataupun menggunakan IDE Arduino (ada dokumentasi Maixduino di website sipeed tapi isinya masih sangat minim).

Sayangnya dua benda ekstra yaitu Microphone Array dan Binocular Camera belum sempat saya test. Melepas ulang modul kamera dari boardnya cukup sulit (ada beberapa baut yang perlu dilepas) sedangkan hanya ada 1 konektor kamera. Konektor mic array ada di dalam board dan sulit dihubungkan juga. Selain itu saat ini saya belum kepikiran proyek khusus yang memakai benda tersebut.

Ada satu lagi komplain mengenai benda ini yaitu mengenai speakernya. Ada bunyi statik yang selalu ada setiap waktu, dan kadang lebih parah ketika dicolok ke USB. Ternyata ini katanya normal dan jika tidak ingin suara ini, kita harus melepas kabelnya dengan solder. Ini satu-satunya bagian yang memakai kabel dan tidak memakai pin header.

Penutup

Di atas kertas kemampuan K210 sangat bagus, bahkan untuk hal-hal di luar AI dan harganya juga murah. Ada versi board dengan SOC yang sama (K210) MAIX Bit dengan kamera dan LCD hanya 20.9 USD (atau boardnya saja 12.9 USD). Tapi ada banyak hal juga yang agak menghambat chip ini:

  • Instruction set RISC-V belum terlalu dikenal, supportnya belum matang seperti ARM/Intel
  • Chip ini bersaing dengan berbagai SOC ARM yang sekarang juga mulai menyertakan accelerator untuk AI (walau harganya tak semurah K210)
  • Guide berbahasa inggris masih jarang (kebanyakan berbahasa mandarin)

Saat ini menurut saya MAIX masih belum cukup matang untuk Anda yang ingin “langsung jalan”. Namun demikian group Sipeed sangat aktif, github mereka juga masih sangat aktif, jadi sepertinya masa depan benda ini (dan produk sejenis dari Sipeed) cukup cerah.

Kesan Pertama Nvidia Jetson Nano

Posting ini merupakan review awal Jetson Nano. Sebuah single boad 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 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.

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.

Proses setup Jetson Nano ini butuh kesabaran:

  • Download SD Card Image berukuran 5 GB (puluhan menit hingga beberapa jam, tergantung koneksi internet Anda)
  • Unzip filenya butuh beberapa menit
  • Write image ke SD Card butuh beberapa menit
  • Proses boot pertama butuh beberapa menit juga.

Proses boot awal harus dilakukan dengan koneksi HDMI ke monitor dan juga butuh keyboard (plus mouse akan lebih bagus lagi). Proses untuk setup awal (menyetujui license dsb) dilakukan melalui GUI. Setelah itu kita bisa mengakses board ini via SSH. Setelah proses awal selesai, kita perlu mengupdate sistem operasinya (berbasis ubuntu).

Berikutnya jika ingin mencoba beberapa demo dari Nvidia, kita bisa mendownload jetson-inference. Proses cloningnya repositorynya cepat, tapi ketika kita berusaha membuild programnya, akan ada proses download beberapa ratus megabyte lagi.

Jika kita ingin menginstall library lain seperti OpenCV terbaru (yang built versi 3.3) maka kita perlu compile sendiri. Ada yang memberikan petunjuk di internet, tapi banyak yang hang/stuck ketika membuild. Ada yang menyarankan untuk menggunakan DC connector dengan power 4A agar tidak stuck, tapi dari pengalaman saya: build dengan single core (tidak memakai -j4) sudah cukup agar tidak hang, walau akhirnya proses buildnya jadi lama sekali.

Perlu dicatat juga bahwa di kernel standar bawaan, zram tidak terinstall. Biasanya 4GB ini sudah cukup, tapi dalam kasus tertentu swap file masih dibutuhkan (defaultnya tidak ada swap file/partition). Jika program kompleks Anda crash karena kehabisan memori, coba compile ulang kernel (source sudah dirilis di website Nvidia) untuk mengaktifkan fitur ZRAM, atau buat swap file/partition di sdcard.

Testing

Selain mencoba demo dari Nvidia, saya mencoba beberapa aplikasi lain. Percobaan awal memakai FaceKit untuk face detection performancenya cukup baik (~400 FPS ketika tidak ada wajah dan turun ke ~30 fps jika ada beberapa wajah).

Saya juga iseng mencoba prototype C1 Form Reader karya teman saya Rizki Wicaksono. Skrip Python yang dibuat memakai tensorflow dengan model yang sudah ditrain di desktop. Saya tidak pelu mengkonversi modelnya, langsung bisa dipakai di Jetson Nano memakai GPU yang ada di device tersebut. Hanya saja skripnya perlu sedikit disesuaikan agar bisa jalan dengan OpenCV yang terinstall di device.

Contoh hasilnya seperti gambar di bawah ini. Harap dicatat bahwa ini masih prototype, jadi tidak selalu bisa membaca form dengan benar.

Jetson Nano vs Board lain

Saat ini sudah ada beberapa solusi AI lain untuk embedded device. Kelebihan Jetson Nano dibandingkan dengan beberapa solusi lain adalah:

  • CPU + GPU terintegrasi (tidak seperti Intel Movidius atau Neural Accelerator lain berbasis USB yang perlu dicolok ke Raspberry Pi atau board lain)
  • Built in Ethernet gigabit (bisa dihubungkan ke network camera dengan mudah)
  • RAM 4 GB, cukup besar untuk banyak keperluan (Raspberry Pi hanya 1 GB RAM-nya, Google Edge TPU Dev Board versi saat ini juga cuma 1 GB RAMnya)
  • Semua framework secara teori bisa berjalan, tidak perlu versi khusus (tidak seperti Edge TPU dari Google yang hanya bisa TF LIte dan perlu model khusus dengan kompilasi cloud)

Penutup

Saya baru beberapa hari memakai board ini dan belum menemui masalah berarti. Suhu maksimum yang saya perhatikan masih kurang dari 55 derajat celcius ketika sedang bekerja sangat berat.

Mengingat benda ini baru dirilis 2 bulan, supportnya sudah sangat baik. Sejauh ini tampaknya benda ini sangat menjanjikan dan dapat diaplikasikan di banyak kasus yang butuh solusi portabel atau butuh pemakaian daya rendah.

Masih banyak hal yang belum saya coba di device ini, misalnya ada mode 5W sehingga lebih hemat energi (tapi performancenya turun). Jetson Nano mendukung kamera Raspberry Pi (versi 2) dan juga kamera USB (keduanya belum saya coba).

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.

Ikut course saja tentunya tidak membuat kita jadi expert

Saya memulai ini tanggal 23 Februari dan selesai semua materinya pada 4 Maret. Selesai dalam arti melihat sampai habis semua videonya (termasuk video opsional), semua kuis dan semua tugas pemrograman (ada 22 tugas pemrograman). Meskipun kesannya ngebut, tapi sebenarnya saya masih sangat santai, saya masih tetap melakukan banyak kegiatan biasa, ke kantor tiap hari, pergi ke kolam renang, menghadiri pernikahan, ke gereja, mengantar Jonathan ke Tae Kwon Do, Joshua ke dokter gigi, mengisi blog ini tiap hari, dan bahkan sempat bug hunting dan menemukan beberapa bug.

Tips supaya bisa cepat selesai adalah:

  • play video dengan kecepatan lebih tinggi (dengan 1.5x, video 1 jam jadi 40 menit).
  • Download materinya di ponsel dengan aplikasi coursera supaya bisa diakses kapan saja
  • Ketika iseng menunggu sesuatu, lihat videonya
  • Luangkan waktu sedikit di pagi/malam hari

Tapi sejujurnya memang ada beberapa hal yang membuat saya bisa menyelesaikan lebih cepat yaitu:

  • Saya sudah terbiasa memakai Python tiap hari
  • Saya sudah pernah utak-atik beberapa proyek machine learning walau dulu kurang paham cara kerjanya
  • Saya bekerja di perusahaan yang berhubungan dengan math optimization dengan bos yang merupakan Professor dalam bidang Matematika

Terus setelah belajar Machine Learning dan Deep Learning ini jadi bisa bikin apa? Saat ini saya belum terpikir untuk mengaplikasikan langsung ilmu saat ini, saya masih ingin belajar berbagai topik lain seputar ML, misalnya Reinforcement Learning yang tidak dicakup di semua course yang saya ikuti.

Bagi saya saat ini ilmu ini sekedar untuk melengkapi toolbox saya dalam menyelesaikan masalah. Banyak problem bisa diselesaikan dengan cepat menggunakan tool yang tepat. Dengan dasar ilmu ini, saya berharap nantinya bisa mengajari juga anak-anak saya mengenai topik AI. Seperti computational thinking, topik AI ini perlu mulai diperkenalkan sejak dini, bahkan sekarang ada penerbit di China yang sudah membuat buku AI untuk anak pre-school.

Setelah mengikuti coursenya, saya bisa mulai membaca beberapa paper ML dan bisa memahami sebagian besar isinya. Dan praktisnya sekarang saya bisa menghargai meme machine learning/deep learning seperti ini.

Meme LSTM (Long Short-Term Memory), sebuah arsitektur RNN (recurrent neural network)

Untuk yang ingin terjun ke bidang ML dan masih malas membaca buku teknis, menurut saya sebaiknya ikuti berbagai MOOC (Massive Open Online Course) seperti Coursera ini. Tidak harus course spesifik yang ini, walau menurut saya ini sangat bagus. Akan lebih bagus lagi kalau sambil membaca buku dan mengikuti course.

Saya lihat banyak sekali pemula di berbagai group machine learning yang bingung berbagai konsep sederhana (dan ingin langsung bisa mengerjakan task tertentu), padahal jika mau mengikuti course online semua akan jadi lebih jelas. Dibandingkan membaca buku: ada kuis yang menguji apakah kita benar mengerti, ada forum untuk bertanya materi spesifik, dan ada tugas programming yang menguji apakah kita bisa mengimplementasikan yang kita pelajari. Tentunya jangan mencontek atau menyalin jawaban dari Internet, kalau begitu percuma.

Sebagai informasi, saat ini Coursera juga membuka course AI for Everyone, tujuannya memperkenalkan AI ke orang non teknis. Supaya seseorang bisa tahu ekspektasi AI seperti apa, bagaimana caranya bekerjasama dengan Team AI, dsb. Coursenya baru dibuka awal bulan ini. Jika tidak ingin dapat certificate, coursenya bisa diikuti dengan gratis.