Tutorial 18: TensorFlow Lite - Deploy ML di Perangkat Mobile
Daftar Isi
Pendahuluan
Men-deploy model machine learning di perangkat mobile dan edge membuka kemungkinan yang tidak bisa ditandingi oleh inferensi cloud: kemampuan offline, latensi rendah, privasi lebih baik, dan biaya operasional lebih murah. TensorFlow Lite (TFLite) adalah framework Google untuk menjalankan model ML di ponsel, perangkat tertanam (embedded), dan perangkat keras edge.
Tutorial ini membahas alur kerja lengkap mulai dari mengkonversi model terlatih ke format TFLite, menerapkan kuantisasi untuk mengurangi ukuran model dan meningkatkan kecepatan, deploy di Android dan iOS, menjalankan di Edge TPU, dan melakukan benchmarking performa. Baik Anda membangun pengklasifikasi gambar real-time, model NLP on-device, atau pipeline data sensor, teknik-teknik ini dapat langsung diterapkan.
Prasyarat
- Python 3.9+ dengan TensorFlow 2.15+
- Android Studio (untuk deploy Android)
- Xcode 15+ (untuk deploy iOS)
- Pemahaman dasar arsitektur neural network
- Model yang sudah dilatih (kita akan membuat contohnya)
# Instal paket yang diperlukan
pip install tensorflow tflite-support onnx onnx-tf torch
import tensorflow as tf
import numpy as np
print(f"Versi TensorFlow: {tf.version}")
Memahami TensorFlow Lite
TFLite menggunakan format model yang berbeda (.tflite) dari TensorFlow standar (.pb, SavedModel). Format TFLite berbasis FlatBuffer yang dioptimalkan untuk:
- Ukuran biner kecil - FlatBuffer kompak dan zero-copy
- Inisialisasi cepat - tanpa overhead parsing, memory-mapped
- Jejak memori minimal - dirancang untuk perangkat terbatas
- Akselerasi perangkat keras - mendukung GPU delegate, NNAPI, Edge TPU
Alur pipeline konversi seperti berikut:
Model TensorFlow / Model PyTorch
|
v
TFLite Converter (dengan optimisasi opsional)
|
v
File .tflite
|
v
TFLite Interpreter (di perangkat)
Konversi Model dari TensorFlow
Mengkonversi Model Keras
import tensorflow as tf
from tensorflow import keras
Buat dan latih model klasifikasi gambar contoh
def bangunmodel():
model = keras.Sequential([
keras.layers.Conv2D(32, (3, 3), activation='relu',
inputshape=(224, 224, 3)),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(128, (3, 3), activation='relu'),
keras.layers.GlobalAveragePooling2D(),
keras.layers.Dense(256, activation='relu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(10, activation='softmax')
])
model.compile(
optimizer='adam',
loss='sparsecategoricalcrossentropy',
metrics=['accuracy']
)
return model
model = bangunmodel()
Metode 1: Konversi langsung dari model Keras
converter = tf.lite.TFLiteConverter.fromkerasmodel(model)
tflitemodel = converter.convert()
Simpan model
with open('model.tflite', 'wb') as f:
f.write(tflitemodel)
print(f"Ukuran model: {len(tflitemodel) / 1024:.1f} KB")