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

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.
Pola klasik di results.csv / results.png:
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.
Urutan prioritas dari yang paling ampuh:
patience sudah kita pakai sejak episode 10; pastikan aktif, bukan dinonaktifkan demi "epoch lebih banyak".freeze=10/23).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.
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.
Tidak ada trik yang mengalahkan kesederhanaan ini:
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.
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.
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.
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:
yolo val model=runs/detect/helm-v2-safe/weights/best.pt data=helm-v2/data.yamlPeriksa 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.
[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-sideNote
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.
Rangkuman episode ini:
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!