Bedah anatomi YOLO: backbone sebagai ekstraktor fitur, neck PAN-FPN sebagai agregator multi-skala, head sebagai prediktor — plus evolusi blok C3k2/C2f, SPPF, C2PSA, R-ELAN, dan NMS-free head YOLO26 dengan praktik membaca yolo26n.yaml

Di episode 2 kita sudah menelusuri evolusi YOLO dari v1 hingga YOLO26. Sekarang saatnya membuka kap mesin: bagaimana arsitektur YOLO tersusun.
Kenapa perlu paham arsitektur? Karena hampir semua keputusan teknis kalian nanti berpijak di sini: memilih ukuran model (episode 7), memutuskan layer mana yang di-freeze saat fine-tuning (episode 13), debugging training yang tidak konvergen, sampai membaca changelog versi baru. Tanpa peta backbone-neck-head, kalian hanya akan menghafal flag CLI tanpa tahu apa yang terjadi di baliknya.
Setiap detector modern — termasuk seluruh keluarga YOLO — punya tiga bagian besar:
Analoginya seperti tim investigasi:
Backbone adalah CNN klasik yang mengecilkan resolusi secara bertahap sambil memperdalam pemahaman semantik:
| Stage | Resolusi Feature Map | Apa yang Dipelajari |
|---|---|---|
| Awal | Besar (misal 320×320) | Tepi, garis, tekstur dasar |
| Tengah | Sedang | Pola lokal: roda, jendela, wajah |
| Akhir | Kecil (misal 20×20) | Konsep global: "ini sebuah mobil" |
Trade-off fundamental CNN: makin dalam → makin pintar semantik tapi makin kehilangan detail spasial. Objek kecil hidup di feature map besar; objek besar hidup di feature map kecil. Masalah inilah yang dipecahkan oleh neck.
Dua ide digabung:
Hasilnya: setiap level pyramid akhirnya punya semantik kuat DAN lokasi presisi sekaligus. Head bisa mendeteksi objek kecil maupun besar dari fondasi yang sama.
Head modern YOLO bersifat anchor-free: langsung memprediksi center offset dan ukuran box tanpa template anchor era lama. Pada YOLOv8+ head juga decoupled — cabang regression (box) dan classification dipisah agar tidak saling ganggu, dengan distribusi box pakai DFL (Distribution Focal Loss).
Nama-nama blok ini akan sering kalian temui di file config dan hasil model.summary():
| Blok | Versi | Peran |
|---|---|---|
| C3 / CSP | v5 | Cross-stage partial connection — hemat komputasi, gradien lebih sehat |
| SPPF | v5+ | Spatial Pyramid Pooling Fast — menangkap konteks multi-receptive-field murah |
| C2f | v8 | Gradien flow lebih kaya dari C3, efisiensi lebih baik |
| C3k2 | YOLO11 | Varian C2f modular; kernel fleksibel untuk speed/akurasi |
| C2PSA | YOLO11 | Partial Spatial Attention — fokus pada area penting dengan biaya minim |
| A2C2f/R-ELAN | YOLOv12 | Area attention pragmatis untuk CNN |
| NMS-free head | YOLO26 | Training end-to-end sehingga inference tidak butuh post-processing NMS |
Perhatikan polanya: setiap generasi tidak menemukan ulang backbone-neck-head, hanya mengganti blok di dalamnya agar lebih efisien atau lebih fokus. Inilah kenapa skill membaca config lebih berharga daripada menghafal satu arsitektur.
yolo26n.yamlMari buktikan bahwa arsitektur YOLO hanyalah data. File config nano YOLO26 dapat dilihat langsung dari package Ultralytics:
python -c "import ultralytics, pathlib; print(pathlib.Path(ultralytics.__file__).parent / 'cfg/models')"Bentuk inti file tersebut kurang lebih seperti ini:
# Parameters
nc: 80 # number of classes
scales: # [depth, width, max_channels]
n: [0.50, 0.25, 1024]
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, false, 0.25]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 2, C3k2, [512, false, 0.25]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 2, C3k2, [512, true]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 2, C3k2, [1024, true]]
- [-1, 1, SPPF, [1024, 5]] # 9
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, C3k2, [512, false]] # 12 (P4/16-small)
# ... pola PAN top-down/bottom-up berlanjut ...
- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)Tiga hal yang perlu kalian baca dari file ini:
backbone: — deretan Conv dengan stride 2 yang mengecilkan resolusi (P1→P5), diselingi blok C3k2, ditutup SPPF.head: — bagian pertamanya sebenarnya adalah neck: nn.Upsample + Concat adalah aliran FPN top-down yang menyambungkan layer dalam ke layer dangkal ([[-1, 6], ...] artinya gabungkan output layer 6).Detect — menerima tiga feature map (P3/P4/P5): inilah multi-scale prediction dari episode 2 dalam bentuk nyata.Sekarang jalankan model dan bandingkan dengan config-nya:
from ultralytics import YOLO
model = YOLO("yolo26n.yaml") # bangun dari config (weight acak)
model.info() # cetak ringkasan layer & parameter
# bandingkan dengan versi lain
for size in ["yolo11n.yaml", "yolo26s.yaml"]:
print(size, YOLO(size).info(detailed=False))Note
Parameter scales menjelaskan episode 7 nanti: satu file YAML melahirkan lima ukuran model (n/s/m/l/x) lewat skala depth & width. Arsitektur sama, kapasitas beda — seperti mesin mobil yang sama dengan kapasitas silinder berbeda.
head: di YAML hanya prediksi — separuh awalnya adalah neck. Batas keduanya konseptual.n.from — error shape akan muncul saat build model. Selalu validasi dengan model.info() setelah edit.Rangkuman episode ini:
model.info() adalah cara cepat memverifikasi struktur.Di episode 4 kita akhirnya menyalakan mesinnya: install Ultralytics secara benar, load weight pretrained yolo26n.pt, dan menjalankan inference pertama kalian — baik via CLI maupun Python API — pada gambar dan video. Pastikan environment kalian siap!