Menambahkan kecerdasan di perangkat dengan RAM ratusan KB: memahami alur TinyML dari pelatihan sampai deployment, kunci quantization dan edge inference, memilih model yang muat di MCU, serta praktik men-deploy model deteksi suara pertama di board

Di episode 1 kalian mendengar tren 2026: embedded AI / TinyML adalah track tercepat di industri embedded. Kini saatnya membuktikan — dan menaklukkan tantangannya. AI di MCU terdengar mustahil: model neural network biasanya butuh gigabyte RAM, sementara MCU kalian punya ratusan kilobyte. Tapi dengan teknik yang tepat — quantization, pruning, model kecil — MCU bisa menjalankan deteksi suara, gesture, anomali getaran, dan klasifikasi sensor secara real-time.
Mengapa menjalankan AI di perangkat (edge inference) alih-alih mengirim data ke cloud? Privasi (data tidak keluar perangkat), latensi (respon instan tanpa jaringan), daya (kirim hasil kecil, bukan data mentah besar), dan biaya (tidak bayar bandwidth tiap detik). Episode ini membangun fondasi TinyML: alur kerja, quantization, memilih model, dan deployment.
Poin kunci: pelatihan terjadi di PC/cloud, inference di perangkat. Kalian tidak melatih di MCU — kalian melatih model besar, lalu mengecilkannya sampai muat. Perangkat hanya melakukan forward pass: membaca input, menjalankan jaringan, mengeluarkan prediksi.
| Langkah | Tools umum | Output |
|---|---|---|
| Kumpulkan data | Rekam sensor, augmentasi | Dataset berlabel |
| Latih model | TensorFlow / PyTorch | Model float (.h5/.pt) |
| Quantize & convert | TFLite converter | Model int8 (TFLM) |
| Flash & run | TFLite Micro, Arduino/ESP-IDF | Firmware + model |
Model float (32-bit) terlalu besar untuk MCU. Quantization mengubah bobot model dari float 32-bit menjadi integer 8-bit:
| Format | Ukuran per bobot | RAM untuk model 100K bobot | Presisi |
|---|---|---|---|
| Float32 | 4 byte | 400 KB | Referensi |
| Float16 | 2 byte | 200 KB | Hampir sama |
| Int8 | 1 byte | 100 KB | Sedikit turun, sangat kecil |
Dampaknya dramatis: model int8 4x lebih kecil dari float, dan inference-nya lebih cepat di banyak MCU yang punya hardware int8 (misal Cortex-M dengan DSP/SIMD). Presisi yang hilang biasanya kecil — untuk klasifikasi suara atau deteksi anomali, int8 hampir tak terasa.
Ada dua jenis quantization:
Untuk pemula: mulai dari post-training quantization; naik ke quantization-aware training hanya jika akurasi turun terlalu jauh.
Tidak semua model bisa masuk MCU — dan tidak semua harus. Kunci pemilihannya:
| Jenis tugas | Model contoh | Ukuran khas | Cocok MCU? |
|---|---|---|---|
| Deteksi kata (wake word) | MicroNet, DS-CNN | 10-300 KB | Ya |
| Klasifikasi sensor/gesture | Model kecil dense/1D-CNN | 1-50 KB | Ya |
| Deteksi objek | YOLO besar | puluhan MB | Tidak (butuh SoC/NPU) |
| Large language | Semua model LLM | GB | Tidak (untuk sekarang) |
Aturan praktis: mulai dari masalah terkecil yang berguna. Deteksi kata "hai device", klasifikasi getaran motor sehat/rusak, atau deteksi orang jatuh — semua muat di MCU modern. Menurut ukuran RAM: model int8 dengan ~100K parameter (100 KB) adalah kisaran nyaman untuk MCU 256 KB RAM.
Deployment nyata dengan TensorFlow Lite Micro (TFLM) di board — alurnya:
.tflite.xxd -i model.tflite > model_data.c).#include "tensorflow/lite/micro/micro_interpreter.h"
static const unsigned char model_data[] = { 0x08, 0x00, ... }; /* TFLM model */
void run_inference(const float* input) {
tflite::MicroInterpreter interpreter(model_data, ops_resolver, arena, arena_size);
interpreter.AllocateTensors();
float* in = interpreter.input(0)->data.f;
memcpy(in, input, INPUT_SIZE * sizeof(float)); /* isi input sensor */
interpreter.Invoke(); /* forward pass */
float* out = interpreter.output(0)->data.f;
int pred = argmax(out, OUTPUT_SIZE); /* ambil kelas tertinggi */
if (pred == WAKE_WORD) activate_device();
}Bagian yang paling sering mengecoh: arena memory — interpreter butuh arena (tensor scratch) yang dialokasikan dari RAM statis; ukurannya bisa 10-100 KB tergantung model. Overflow arena = inference crash. Kalian menguji ukuran arena dengan menghitung output interpreter.arena_used_bytes() setelah AllocateTensors.
Tip
Mulailah dengan proyek TinyML yang paling sederhana dan menyenangkan: wake word detection di ESP32 (contoh resmi TensorFlow Lite Micro tersedia), atau klasifikasi getaran motor dengan IMU. Jangan langsung mencoba deteksi objek real-time di MCU — itu resep frustrasi. Bangun kemenangan kecil dulu, lalu perluas.
Kebohongan terbesar pembelajaran mesin: "model yang bagus adalah segalanya". Di TinyML, data adalah segalanya:
Aturan praktis umum: model kecil butuh data lebih berkualitas daripada model besar — karena tidak ada parameter "banyak" untuk menutupi data buruk.
Inti yang harus dibawa pulang:
Di episode 22 selanjutnya kita masuk ke matematika firmware: DSP & signal processing — filter, FFT, dan pemrosesan real-time. Kalian akan melihat bahwa AI di episode 21 berjalan di atas fondasi matematika yang sama. Sampai jumpa di episode 22!