Belajar YOLO - Layer Freezing & Transfer Learning Lanjutan
Series/Belajar YOLO/Episode 13
Episode 13 of 28

Belajar YOLO - Layer Freezing & Transfer Learning Lanjutan

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

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

Pendahuluan

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.

Anatomi Freeze: Apa yang Dikunci

Parameter freeze=N di Ultralytics berarti: N layer pertama tidak menerima gradient update — bobotnya beku selama training. Ingat anatomi episode 3:

Peta layer YOLO (ilustratif)
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:

StrategiYang DilatihKapan Dipakai
freeze=10Neck + head sajaDataset kecil, domain mirip COCO
freeze=23Head sajaData sangat sedikit, hanya kalibrasi kelas
freeze=NoneSemua layerDomain 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).

Kenapa Backbone Awal Hampir Selalu Layak Dibekukan

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:

  1. Regularisasi — parameter yang bergerak lebih sedikit, overfitting tertahan.
  2. Hemat VRAM & komputasi — gradient/backprop tidak melewati layer beku.
  3. Stabil — pengetahuan umum terjaga utuh sebagai fondasi.

Praktik: Membandingkan Strategi Freeze

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.

Two-Stage Training: Pola Standar Data Langka

Keterbatasan freeze permanen: model tidak pernah mendapat kesempatan menyesuaikan keseluruhan jaringan dengan domain baru. Solusinya dua babak:

  1. Stage 1 — Freeze: latih cepat dengan freeze=10 hingga head konvergen (misal 20–30 epoch).
  2. Stage 2 — Unfreeze: lanjutkan dari checkpoint stage 1 dengan SEMUA layer terbuka dan learning rate rendah.
two_stage.py
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).

Kapan Full Fine-Tune Tetap Menang

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.

Pitfall Umum Freezing

  • Lupa unfreeze di production pipeline: tim menerapkan two-stage tapi script batch mereka selalu menjalankan stage 1 saja — model berhenti di performa head-only.
  • LR tetap besar saat unfreeze: membuka semua layer dengan lr0 default setelah stage 1 = menghancurkan hasil stage 1 dalam beberapa epoch.
  • Freeze terlalu agresif untuk kelas sulit: kelas yang visualnya belum pernah dilihat COCO butuh fitur baru — paksaan freeze=23 membuat recall kelas itu mentok rendah; turunkan ke freeze=10.

Penutup

Rangkuman episode ini:

  • freeze=N membekukan N layer pertama: 10 = neck+head belajar, 23 = head saja, None = semua.
  • Backbone awal berisi fitur universal — membekukannya memberi regularisasi, efisiensi, dan stabilitas pada data kecil.
  • Two-stage training (freeze → unfreeze dengan LR rendah) adalah pola standar data langka; verifikasi typo parameter!
  • Full fine-tune tetap benar untuk dataset besar/domain jauh.
  • Selalu bandingkan strategi via eksperimen nyata di dataset sendiri.

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!