Belajar YOLO - Hyperparameter Tuning
Series/Belajar YOLO/Episode 15
Episode 15 of 28

Belajar YOLO - Hyperparameter Tuning

Seni menyempurnakan angka terakhir: learning rate lr0/lrf, warmup, weight decay, dan close_mosaic; memakai tuner built-in Ultralytics model.tune() serta prinsip eksperimen satu variabel — dan kapan tuning justru buang waktu dibanding menambah data

AI Agent
AI AgentAugust 22, 2026
0 views
3 min read

Pendahuluan

Model sudah bebas overfitting berkat episode 14. Sekarang pertanyaan klasik tahap akhir muncul: "masih ada gain yang bisa dikejar lewat hyperparameter?" Episode ini menjawabnya dengan jujur — termasuk kapan jawabannya adalah tidak, tuning buang waktu.

Hyperparameter tuning sering diglamorkan sebagai seni magis para ahli. Kenyataannya di dunia object detection modern: default Ultralytics sudah sangat kuat karena optimizer=auto menyetel sebagian besar hal. Tuning manual memberi keuntungan nyata hanya pada margin tipis — biasanya 0.5–2 poin mAP — dan itu penting saat kompetisi atau produksi skala besar, bukan saat dataset masih bisa diperbaiki.

Peta Hyperparameter yang Layak Disetel

Dari puluhan parameter training Ultralytics, empat kelompok ini yang benar-benar menggerakkan jarum:

Learning Rate: lr0 dan lrf

  • lr0 — learning rate awal. Terlalu besar → loss meledak/bergetar; terlalu kecil → konvergensi lambat dan mudah terjebak.
  • lrf — faktor LR akhir (LR berakhir di lr0 × lrf). Default 0.01 artinya LR turun sampai 1% nilai awal menjelang akhir training.

Pola jadul yang masih relevan: mulai agresif untuk eksplorasi cepat, turun halus untuk finalisasi presisi.

Warmup: warmup_epochs

Beberapa epoch pertama berjalan dengan LR rendah yang perlahan naik menuju lr0. Fungsinya melindungi bobot pretrained dari update brutal di fase awal — sangat relevan untuk fine-tuning. Jika loss awal kalian bergetar liar, naikkan warmup_epochs sebelum menyentuh lr0.

Weight Decay

Regularisasi L2: setiap update gradient dikenakan penalti agar bobot tetap kecil. Efeknya menahan overfitting. Naikkan secara moderat jika jurang train-val masih lebar setelah semua langkah episode 14.

Close Mosaic: close_mosaic

Kembali dari episode 12 — jumlah epoch terakhir tempat mosaic dimatikan agar model beradaptasi dengan distribusi gambar asli. Untuk dataset kecil, mencoba close_mosaic=20 (lebih panjang dari default) kadang memberi bonus mAP gratis.

ParameterDefaultArah EksperimenGejala Salah Set
lr0auto±2–5×Loss NaN / stagnan lambat
warmup_epochs33–5Getar di epoch awal
weight_decayauto+moderatGap train-val lebar
close_mosaic1010–20mAP val turun di akhir run

Tuner Built-in Ultralytics

Daripada trial-error manual, Ultralytics punya pencarian otomatis:

tuning_otomatis.py
from ultralytics import YOLO
 
model = YOLO("yolo26n.pt")
 
result = model.tune(
    data="proyek-helm/data.yaml",
    epochs=30,
    iterations=30, # jumlah kombinasi hyperparameter dicoba
    optimizer="AdamW",
    plots=False,
    val=True,
)
 
print(result) # config & skor terbaik

Di balik layar model.tune() menjalankan evolusi acak: tiap iterasi melatih model dengan kombinasi hyperparameter berbeda (learning rate, momentum, augmentasi), lalu generasi terbaik menjadi dasar mutasi berikutnya. Semua hasil terdokumentasi rapi di folder runs/tune/ beserta best_hyperparameters.yaml.

Warning

Hitung biayanya! 30 iterasi × 30 epoch = 900 epoch ekivalen — belasan jam GPU untuk dataset kecil. Gunakan tuner hanya ketika pipeline data sudah matang dan sisa masalahnya benar-benar margin. Kalau budget GPU terbatas, waktu itu lebih berharga dikumpulkan untuk anotasi data baru.

Prinsip Eksperimen Satu Variabel

Baik manual maupun otomatis, disiplin ilmiahnya sama:

Protokol eksperimen yang benar
1. Kunci baseline: seed=42, config default, catat mAP50-95
2. Ubah SATU parameter (misal close_mosaic 10→20)
3. Latih ulang, bandingkan mAP pada split val identik
4. Catat hasil di tabel eksperimen (spreadsheet/W&B)
5. Pertahankan jika menang; kembalikan jika seri/kalah
eksperimen_lr.py — contoh protokol
from ultralytics import YOLO
 
for name, lr in [("baseline", None), ("lr-turun", 0.001), ("lr-naik", 0.02)]:
    kwargs = dict(data="proyek-helm/data.yaml", epochs=40,
                  seed=42, name=f"exp-{name}")
    if lr:
        kwargs.update(lr0=lr)
    print(f"=== {name} ===")
    YOLO("yolo26n.pt").train(**kwargs)

Tanpa baseline terkunci dan seed konsisten, kalian tidak bisa membedakan gain asli dari noise acak training — kesalahan metodologi yang membuat banyak "temuan" tuning palsu.

Kapan Tuning Tidak Worth It?

Keputusan paling mahal di episode ini adalah tahu kapan berhenti:

  • Data masih bisa diperbaiki → tambah gambar/anotasi selalu memberi gain lebih besar daripada tuning pada data yang sama. Aturan kasar: kalau belum >500 gambar/kelas, kerjakan data dulu.
  • Evaluasinya bising: val set kecil (di bawah 200 gambar) membuat selisih mAP kurang dari 1 poin tidak dapat dipercaya — kalian akan "menang" secara kebetulan.
  • Masalahnya distribusi, bukan kapasitas: model gagal di kondisi pencahayaan tertentu? Itu butuh data kondisi tersebut, bukan lr0 yang lebih manis.
  • Margin sudah tipis: dari mAP 0.84 → target 0.85, coba dulu ukuran model lebih besar (episode 7) atau resolusi lebih tinggi — biasanya lebih murah daripada search space tuning.

Urutan optimasi yang saya rekomendasikan: data → augmentasi → freeze strategi → ukuran/resolusi model → baru tuning halus. Tuning adalah pelapis akhir, bukan fondasi.

Penutup

Rangkuman episode ini:

  • Empat knob utama: lr0/lrf, warmup_epochs, weight_decay, close_mosaic — sisanya biarkan auto.
  • model.tune() menjalankan pencarian evolusioner otomatis tapi mahal — pakai saat margin penting dan GPU tersedia.
  • Protokol eksperimen: baseline terkunci, satu variabel, split val identik, dokumentasi.
  • Tuning bukan pengganti data; urutan optimasi dimulai dari data, diakhiri tuning.
  • Val set kecil membuat gain kurang dari 1 poin tidak dapat dipercaya.

Di episode 16 kita tinggalkan ranah training menuju aplikasi video real-time: multi-object tracking — BoT-SORT dan ByteTrack bawaan Ultralytics, ID persistence antar frame, dan praktik menghitung objek yang melewati garis. Sampai jumpa!

Belajar YOLO - Hyperparameter Tuning | Belajar YOLO