TensorFlow Lite Micro trên ESP32: thực tế ra sao?
TensorFlow Lite Micro (TFLM) là phiên bản tối giản của TensorFlow chạy được trên MCU với chỉ 16KB RAM. Hứa hẹn "AI trên Arduino" — nhưng thực tế năm 2026 ra sao? Bài này điểm qua use case khả thi, model nào chạy được, và giới hạn cần biết.
1. TFLM là gì?
TFLM là interpreter rất nhỏ — chỉ chạy inference (dự đoán), không train. Bạn train model trên PC/cloud → convert sang .tflite (vài KB-vài MB) → flash vào ESP32 → ESP32 chạy inference.
Khác với chạy Python TF trên Raspberry Pi: TFLM viết bằng C++, không có dynamic memory, không có nhiều layer fancy.
2. Chip nào chạy được?
| Chip | RAM | SIMD | Phù hợp |
|---|---|---|---|
| Arduino Uno | 2 KB | — | Quá nhỏ, không nên thử |
| Arduino Nano 33 BLE | 256 KB | Có (Cortex-M4 DSP) | Tốt cho keyword spotting nhỏ |
| ESP32 cổ điển | 320 KB | Cơ bản | OK, chậm |
| ESP32-S3 | 512 KB | SIMD vector | Tốt nhất trong tầm giá |
| Raspberry Pi Pico 2 | 520 KB | FPU | Tốt |
ESP32-S3 là sweet spot — SIMD tăng tốc inference 3–5× so với ESP32 cổ điển.
3. Use case thực tế chạy được
- Keyword spotting ("Hey [name]"): model 20–50KB, latency 50–200ms. Đã chạy ổn.
- Gesture recognition (lắc, vung, đập): MPU-6050 + model nhỏ.
- Person detection (có người trong khung hình không): ESP32-CAM + model 250KB, ~1 fps.
- Anomaly detection rung động máy móc.
- Phân loại âm thanh đơn giản (chim hót, tiếng vỡ kính).
4. Use case KHÔNG khả thi (chưa)
- Object detection thật (YOLO, SSD): model > 5MB, không vừa.
- Speech-to-text đầy đủ: cần nhiều RAM/CPU.
- Image classification > 100 class: model lớn.
- LLM: ngoài tầm với hoàn toàn.
- Realtime video AI 30fps.
Cho những workload này: dùng Raspberry Pi 4/5 hoặc Coral Edge TPU.
5. Pipeline thực tế
- Collect data: ESP32 đo sensor, gửi qua Serial về PC. Lưu vài nghìn mẫu.
- Label: tagged data thành class (vd "đứng yên", "đi bộ", "chạy").
- Train: Keras/Colab, model nhỏ (CNN 3 layer cho image, MLP 2 layer cho sensor).
- Convert:
tf.lite.TFLiteConverter→ file.tflite. - Quantize INT8: giảm size 4×, tăng tốc inference 2–3×.
- Convert C array:
xxd -i model.tflite > model.hđể include vào sketch. - Flash ESP32: TFLM load model từ flash, chạy inference.
6. Edge Impulse — giải pháp turnkey
Edge Impulse (edgeimpulse.com) là platform cloud cho TinyML — đơn giản hoá toàn pipeline:
- Upload data qua app điện thoại hoặc ESP32 connector.
- Click "Generate features" và "Train" — không cần biết Keras.
- Test trên trình duyệt.
- Export library Arduino-compatible.
Free tier cho hobby project (60 phút training/tháng). Phù hợp người mới TinyML.
7. Tài nguyên đặc trưng
Model TFLM nhỏ phổ biến (sau quantize INT8):
| Model | Size | RAM | Inference time (ESP32-S3 @ 240MHz) |
|---|---|---|---|
| MLP gesture 6 class | 2 KB | 4 KB | 5 ms |
| CNN keyword spotting | 20 KB | 20 KB | 30 ms |
| MobileNetV1 image 96×96 | 250 KB | 100 KB | 500 ms |
| Person detection (Google) | 290 KB | 136 KB | 700 ms |
8. Hạn chế thực tế tại VN 2026
- Tài nguyên thiếu: documentation tiếng Việt rất ít, model pre-trained cho use case VN (giọng nói VN) hiếm.
- Hardware đắt hơn so với tutorial: ESP32-S3 + camera + mic = 300k+, ESP32-EYE chính chủ ~700k.
- Debugging khó: model accuracy thấp, không biết do data thiếu, model nhỏ, hay quantization làm rớt — phải iterate nhiều.
- Power-hungry: inference liên tục → ngốn pin nhanh. Cần deep-sleep wake định kỳ.
9. Khi nào nên thử TFLM?
- Project có data sẵn (vd cảm biến nhịp tim, MPU gesture).
- Cần privacy (không gửi audio/video lên cloud).
- Realtime requirement (latency < 200ms).
- Học hỏi xu hướng — chính bạn đầu tư cho job market 2027+.
10. Khi nào dùng cloud AI thay?
- Model phức tạp (object detection, NLP).
- Có WiFi ổn định.
- Không quan tâm latency cao.
- Demo nhanh — gọi Google Vision API, OpenAI API.
Tổng kết
TFLM trên ESP32 năm 2026 đã "production-ready" cho use case hẹp — keyword spotting, gesture, anomaly. Đừng kỳ vọng "ChatGPT trên ESP32". Phù hợp maker muốn học AI nhúng, hoặc start-up Vietnam build sản phẩm IoT thông minh nhẹ.
Đọc thêm: Xu hướng IoT 2026: AI tại biên. Dự án thực hành: Phân loại lá cây với TensorFlow Lite ESP32-S3.