Menekan latency tanpa mengorbankan akurasi secara buta: FP16/half precision, quantization INT8 post-training, konsep pruning — plus protokol benchmark akurasi-vs-kecepatan dan fitur konsistensi fp16/fp32 YOLO26

API production dari episode 20 sudah berjalan — tapi angka tagihan GPU dan grafik latensi mulai bicara. Sebelum menambah instance, ada lapisan optimasi yang lebih murah: membuat model itu sendiri bekerja lebih ringan lewat presisi numerik yang lebih rendah.
Intuisinya: bobot neural network disimpan sebagai float 32-bit (FP32) secara default — presisi yang sering lebih besar daripada yang dibutuhkan untuk mendeteksi helm atau mobil. Memangkas bit berarti memori lebih kecil, bandwidth lebih hemat, dan aritmetika lebih cepat — dengan risiko akurasi yang harus diukur, bukan diasumsikan.
| Presisi | Bit/Bobot | Ukuran Model | Kecepatan Relatif* | Risiko Akurasi |
|---|---|---|---|---|
| FP32 | 32 | Baseline (misal ~6 MB nano) | 1× | Tidak ada |
| FP16 | 16 | ~50% | 1.5–3× | Praktis nihil di hardware modern |
| INT8 | 8 | ~25% | 2–4× | Kecil–sedang; wajib evaluasi |
*Sangat bergantung hardware: Tensor Core NVIDIA paling menguntungkan FP16/INT8; CPU umumnya hanya efisien di INT8 via OpenVINO.
Half precision memotong mantissa float — kehilangan presisi halus yang jarang berpengaruh pada deteksi:
yolo export model=best.pt format=engine half=True # Jetson/GPU NVIDIAKabar baik khusus pengguna generasi terbaru: YOLO26 membawa jaminan konsistensi fp16/fp32 — hasil inference dirancang stabil antara dua mode presisi, menutup kelas bug historis "model bagus di dev (fp32), meleset di edge (fp16)" yang dulu menyiksa deployment.
Tip
Urutan keputusan yang sehat: FP16 selalu dicoba lebih dulu (risiko nyaris nol, gain nyata). INT8 baru dipertimbangkan jika FP16 belum cukup — dan selalu disertai evaluasi ulang mAP.
Memetakan nilai float kontinu ke grid integer 8-bit. Konsekuensinya model butuh calibration data: sampel gambar representatif untuk menghitung skala mapping min-max tiap tensor:
yolo export model=best.pt format=openvino int8=True data=proyek-helm/data.yamlKualitas kalibrasi menentukan segalanya: gunakan ratusan–ribuan gambar dari distribusi produksi asli. Kalibrasi dengan gambar siang cerah lalu deploy di malam hari adalah resep degradasi diam-diam.
Pruning menghapus bobot/channel yang kontribusinya kecil. Di ekosistem Ultralytics praktisnya bukan tombol satu-klik — strategi yang lebih lazim: pilih ukuran model lebih kecil + fine-tune ulang (episode 7 & 10), karena hasilnya setara pruning agresi tapi prosesnya teruji. Anggap pruning sebagai opsi lanjutan saat constraint ekstrem (microcontroller), bukan langkah rutin.
Optimasi tanpa pengukuran = sabotase senyap. Protokol wajibnya tiga langkah:
from ultralytics import YOLO
variants = {
"fp32": "best.pt",
"fp16": "best_half.engine", # hasil export half=True
"int8": "best_int8.engine",
}
for name, path in variants.items():
model = YOLO(path)
# 1) AKURASI: mAP harus dievaluasi ulang per varian!
metrics = model.val(data="proyek-helm/data.yaml", verbose=False)
print(f"{name}: mAP50-95={metrics.box.map:.4f}")
# 2) LATENCY: warm-up lalu rata-rata N run
import time
for _ in range(5):
model("samples/street.jpg", verbose=False)
t0 = time.perf_counter()
for _ in range(50):
model("samples/street.jpg", verbose=False)
ms = (time.perf_counter() - t0) / 50 * 1000
print(f"{name}: {ms:.1f} ms/img")Tiga aturan mainnya:
Contoh tabel hasil yang sehat:
varian | mAP50-95 | ms/img | vs baseline
fp32 | 0.612 | 14.2 | -
fp16 | 0.611 | 6.8 | -52% waktu
int8 | 0.603 | 4.9 | -65% waktu, -0.009 mAP ✓ lolos ambang| Platform Target | Rekomendasi Presisi | Alasan |
|---|---|---|
| Server GPU (A10/T4+) | FP16 | Tensor core optimal, risiko nol |
| Jetson Orin | FP16 (kadang INT8) | Thermal budget terbatas |
| CPU Intel/OpenVINO | INT8 | VNNI instruction dirancang untuk INT8 |
| Mobile/TinyML | INT8 | Ukuran file & RAM jadi batas mutlak |
Warning
Dua penyakit klasik optimasi: (1) "optimasi theater" — FP16 di CPU lawas tanpa dukungan hardware memberi nol speedup bahkan bisa melambat; (2) regresi senyap — mAP turun 3% setelah INT8 tapi tidak ada yang sadar karena evaluasi dilompati. Protokol benchmark di atas ada untuk mencegah keduanya.
Rangkuman episode ini:
Di episode 22 kita gali kemampuan yang mengubah cara prototyping vision: zero-shot & open-vocabulary detection — mendeteksi objek apapun dari text prompt dengan YOLO-World dan Grounding DINO, tanpa satu pun gambar training. Sampai jumpa!