Kontrol penuh atas transfer learning: strategi freeze=10 untuk dataset kecil, freeze=23 yang hanya melatih head, freeze=None untuk domain jauh, plus teknik two-stage training freeze lalu unfreeze dengan LR rendah

Setelah data augmentation di episode 12, senjata berikutnya untuk dataset terbatas adalah layer freezing — mengunci sebagian jaringan agar tidak ikut diperbarui selama training.
Konsepnya sederhana tapi dampaknya besar. Model pretrained adalah gudang pengetahuan visual; freezing memungkinkan kalian "meminjam" sebagian gudang itu tanpa risiko terkuras oleh data baru yang sedikit. Episode ini membahas kapan harus mengunci berapa banyak, cara Ultralytics mengimplementasikannya, dan teknik two-stage training yang menjadi standar praktisi ketika data langka.
Parameter freeze=N di Ultralytics berarti: N layer pertama tidak menerima gradient update — bobotnya beku selama training. Ingat anatomi episode 3:
Layer 0-9 → backbone awal (fitur generik: tepi, tekstur)
Layer 10-21 → backbone akhir + neck PAN-FPN (fitur semantik)
Layer 22+ → head Detect (spesifik task & kelas)Tiga titik strategi yang dipakai praktisi:
| Strategi | Yang Dilatih | Kapan Dipakai |
|---|---|---|
freeze=10 | Neck + head saja | Dataset kecil, domain mirip COCO |
freeze=23 | Head saja | Data sangat sedikit, hanya kalibrasi kelas |
freeze=None | Semua layer | Domain jauh / data cukup banyak |
Logikanya seperti merekrut senior engineer (pretrained): kalau tugasnya mirip pengalaman lamanya, biarkan dia fokus belajar aturan kantor baru saja (head). Kalau tugasnya domain asing sama sekali — misal dari foto natural ke citra satelit — minta dia belajar ulang dari dasar (unfreeze semua).
Fitur tepi dan tekstur di layer awal bersifat universal — helm atau bukan helm, cara CNN "melihat" garis tidak berubah. Melatih ulang layer ini dengan data sedikit hanya dua kemungkinan hasil: rusak (catastrophic interference) atau sia-sia (tidak ada yang bisa diperbaiki). Membekukannya memberi tiga manfaat sekaligus:
Eksperimen A/B pada dataset kecil kita:
from ultralytics import YOLO
YOLO("yolo26n.pt").train(
data="proyek-helm/data.yaml",
epochs=50,
freeze=10, # backbone awal beku
name="freeze10",
)Bandingkan mAP validasi ketiga run plus gap train-val loss-nya. Pola yang biasa muncul pada data < 500 gambar: freeze10 menang tipis atau seri dengan full, sementara gap train-val-nya paling kecil; freeze23 kadang underperform jika kelas baru butuh fitur yang belum ada. Angka final milik dataset kalian — jalankan dan lihat sendiri.
Tip
Verifikasi bahwa freeze benar-benar aktif: cek log awal training Ultralytics yang menyatakan jumlah layer yang dibekukan. Kesalahan klasik adalah mengetik freezes=10 (typo) — training jalan normal tanpa warning, dan kalian mengira sudah melakukan regularisasi padahal tidak.
Keterbatasan freeze permanen: model tidak pernah mendapat kesempatan menyesuaikan keseluruhan jaringan dengan domain baru. Solusinya dua babak:
freeze=10 hingga head konvergen (misal 20–30 epoch).from ultralytics import YOLO
# Stage 1: hangatkan head dengan backbone beku
YOLO("yolo26n.pt").train(
data="proyek-helm/data.yaml",
epochs=30, freeze=10, name="stage1-frozen",
)
# Stage 2: buka semua, gerak halus dengan LR rendah
m = YOLO("runs/detect/stage1-frozen/weights/best.pt")
m.train(
data="proyek-helm/data.yaml",
epochs=30,
lr0=0.001, # ~10x lebih kecil dari default
name="stage2-unfrozen",
)Analogi belajar mengemudi: stage 1 = pegangan setir dikunci lurus supaya fokus pedal; stage 2 = lepas kuncinya setelah gerak dasar mantap, dengan tempo lambat. Hasil akhirnya biasanya mengalahkan satu-dua-dua strategi ekstrem (freeze=23 terlalu kaku, full fine-tune dari awal terlalu liar).
Jujur pada batas metode: kalau dataset kalian ribuan gambar dan domainnya menjauh dari COCO (industri gelap, aerial top-down, thermal), backbone COCO justru membawa bias yang salah. Di situ freeze=None + LR wajar adalah pilihan benar — freeze hanya untuk kondisi data langka.
freeze=23 membuat recall kelas itu mentok rendah; turunkan ke freeze=10.Rangkuman episode ini:
freeze=N membekukan N layer pertama: 10 = neck+head belajar, 23 = head saja, None = semua.Di episode 14 kita hadapi dua musuh abadi fine-tuning: overfitting dan catastrophic forgetting — cara membaca gejalanya dari kurva training, obat-obatannya bertingkat, dan protokol retraining agar model baru tidak melupakan kelas-kelas lama. Sampai jumpa!