Belajar YOLO - Mengatasi Overfitting & Catastrophic Forgetting
Series/Belajar YOLO/Episode 14
Episode 14 of 28

Belajar YOLO - Mengatasi Overfitting & Catastrophic Forgetting

Dua musuh abadi fine-tuning: mendeteksi overfitting dari pola kurva train vs validation, serta mencegah catastrophic forgetting saat model baru dilatih tanpa melupakan kelas-kelas lamanya

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

Pendahuluan

Episode 13 kita mengatur bagian mana model yang boleh belajar. Episode ini membahas apa yang salah saat belajar berjalan: overfitting — model menghafal data training alih-alih memahami pola — dan saudara jahatnya yang jarang dibahas tutorial pemula: catastrophic forgetting, model yang melupakan kemampuan lama saat diajari hal baru.

Keduanya adalah penyebab nomor satu project vision gagal di lapangan meski angka lab-nya indah. Model yang overfit akan tampak sempurna di val set lama namun hancur di kondisi produksi; model yang mengalami forgetting akan "kehilangan" deteksi kelas yang kemarin bekerja baik — bug paling membingungkan bagi tim yang tidak paham penyebabnya.

Overfitting: Gejala, Diagnosis, Obat

Membaca Tandanya dari Kurva

Pola klasik di results.csv / results.png:

Pola overfitting
epoch:   10     20     30     40     50
train_loss: 1.8 → 1.1 → 0.7 → 0.45 → 0.28  (terus turun)
val_mAP:    0.62 → 0.71 → 0.74 → 0.74 → 0.72  (stagnan lalu turun)

Train loss terus jatuh sementara metrik validasi stagnan/menurun = model mulai menghafal noise dataset training. Semakin lebar jurangnya, semakin parah.

Obat Bertingkat

Urutan prioritas dari yang paling ampuh:

  1. Lebih banyak data yang beragam — satu-satunya obat akar. 200 gambar tambahan dari kondisi nyata mengalahkan semua trik hyperparameter.
  2. Augmentasi tepat — naikkan probabilitas mosaic/hsv jika belum maksimal (balik ke episode 12).
  3. Early stoppingpatience sudah kita pakai sejak episode 10; pastikan aktif, bukan dinonaktifkan demi "epoch lebih banyak".
  4. Freezing parsial — strategi episode 13: kurangi kapasitas yang bisa bergerak (freeze=10/23).
  5. Regularisasi eksplisit — naikkan weight_decay secara moderat jika semua di atas sudah optimal namun gap masih lebar.

Warning

Jangan mengobati overfitting dengan menambah epoch "biar model lebih matang". Epoch tambahan pada kondisi overfit hanya memperlebar jurang train-val. Kalau kurva val sudah turun dua-tiga epoch berturut, percayai early stopping.

Catastrophic Forgetting: Ketika Ilmu Baru Menghapus Ilmu Lama

Skenario yang sangat umum di industri: bulan lalu model dilatih mendeteksi kendaraan; bulan ini bisnis minta tambahan kelas "ambulance". Tim melatih ulang dengan dataset ambulance saja — dan tiba-tiba model jadi buruk mendeteksi sedan dan truk. Model tidak rusak; ia melupakan.

Penyebab teknisnya: gradient update pada data baru menimpa bobot yang tadinya mengodekan pengetahuan lama. Neural network tidak punya memori terpisah — semua pengetahuan hidup di bobot yang sama.

Solusi #1: Gabungkan Dataset Lama + Baru (Paling Andal)

Tidak ada trik yang mengalahkan kesederhanaan ini:

Struktur merged dataset
datasets/proyek-v2/
├── images/train/   # gambar lama + gambar baru
├── labels/train/
├── images/val/     # val gabungan: uji kelas lama DAN baru!
└── labels/val/

Latih dari pretrained (atau dari checkpoint lama) menggunakan dataset gabungan. Val set-nya wajib memuat kedua generasi kelas — kalau tidak, kalian tidak bisa mendeteksi forgetting sampai user komplain.

Solusi #2: Freeze Backbone + Neck

Jika menggabungkan data tidak praktis (dataset lama terlalu besar/sensitif), kunci pengetahuannya secara fisik: freeze=22 — hanya head yang beradaptasi. Pengetahuan lama di backbone/neck tersentuh nol persen. Trade-off: kelas baru yang sangat berbeda visualnya akan sulit dipelajari karena kapasitas adaptasi terbatas.

Solusi #3: Kurangi Intensitas Training

Epoch sedikit + learning rate rendah + patience ketat. Semakin halus gerakan bobot, semakin kecil risiko menimpa pengetahuan lama. Kombinasikan dengan solusi #2 untuk efek pelindung berlapis.

Yang tidak disarankan: melatih hanya data baru lalu berharap "yang lama pasti masih ingat". Selalu gagal.

Praktik: Skenario Fine-Tune Tanpa Melupa

Simulasikan siklus v1 → v2 pada dataset helm kita:

from ultralytics import YOLO
 
YOLO("yolo26n.pt").train(
    data="helm-v1/data.yaml", # person, helmet
    epochs=50, name="helm-v1",
)

Setelah v2 selesai, evaluasinya dua arah — inilah langkah yang sering dilewati:

bash
yolo val model=runs/detect/helm-v2-safe/weights/best.pt data=helm-v2/data.yaml

Periksa confusion matrix (episode 11): apakah kelas lama (person, helmet) masih di atas ambang? Kalau ya, retraining sukses. Kalau drop tajam, tambahkan proporsi data lama dan ulangi — iterasi kecil ini normal di lifecycle model nyata.

Checklist Anti-Lupa

Checklist sebelum rilis model vN
[x] Dataset gabungan (lama + baru) atau freeze protektif
[x] Val set memuat SEMUA generasi kelas
[x] Evaluasi dua arah: kelas baru DAN kelas lama
[x] Simpan best.pt tiap versi terpisah (tidak menimpa)
[x] Catat config & data version tiap run (dasar MLOps ep25)
[x] Benchmark performa vN vs v(N-1) side-by-side

Note

Versioning dataset dan model yang rapi adalah fondasi dari semuanya. Saat tim bertanya "kenapa model rilis Maret lebih jelek dari Februari?", hanya tim yang menyimpan artefak tiap versi yang bisa menjawab dalam hitungan menit — kita formalisasikan ini di episode 25 tentang MLOps.

Penutup

Rangkuman episode ini:

  • Overfitting terdiagnosis dari kurva: train loss terus turun, val stagnan/turun. Obat utamanya data beragam, bukan epoch tambahan.
  • Urutan obat overfitting: data → augmentasi → early stopping → freezing → weight decay.
  • Catastrophic forgetting terjadi saat fine-tune hanya data baru; gejalanya kelas lama drop diam-diam.
  • Solusi terbaik: dataset gabungan + val multi-generasi; alternatif: freeze protektif + LR rendah + epoch sedikit.
  • Evaluasi retraining selalu dua arah dan simpan artefak tiap versi.

Di episode 15 kita masuk seni menyempurnakan angka terakhir: hyperparameter tuning — parameter mana yang layak disetel (lr0, warmup, weight decay, close_mosaic), cara memakai tuner built-in Ultralytics, dan kapan tuning justru buang waktu dibanding menambah data. Sampai jumpa!