Link to this sectionYOLO Mimarisi Açıklandı: YOLOv3'ten YOLO26'ya#
Her Ultralytics YOLO modeli üç aşamadan oluşur: özellik çıkaran bir backbone (omurga), bunları ölçekler arasında birleştiren bir neck (boyun) ve kutularla sınıfları tahmin eden bir head (baş). Bu rehber, her aşamayı oluşturan modülleri ve bunların YOLOv3 sürümünden YOLO26 sürümüne nasıl değiştiklerini belgeler; her bileşeni ultralytics/cfg/models/ altındaki yapılandırma dosyalarındaki tanımlarına ve ultralytics/nn/modules/ içindeki modül sınıflarına kadar takip eder.
Her model, bir YAML dosyasında sıralı bir katman listesi olarak bildirimsel bir şekilde tanımlanır; burada her katman [from, repeats, module, args] formatını izler: hangi katman(lar)dan beslendiği, modülün kaç kez tekrarlandığı, katman sınıfı (Conv, C3k2, SPPF, Detect, …) ve kurucu argümanları. Model YAML Yapılandırma Rehberi, repeats ve args değerlerinin varyantın derinlik ve genişlik çarpanlarıyla nasıl ölçeklendiği dahil olmak üzere bu formatı ve modül çözümleme sistemini tam olarak belgeler. Bu rehber, modüllerin kendisine ve sürümden sürüme nasıl değiştiklerine odaklanır.
Link to this sectionÜç Aşama#
Her Ultralytics YOLO modeli, görüntüyü her birinin kendine özgü bir görevi olan üç sıralı aşamadan geçirir:
| Aşama | Görev | Çıktı |
|---|---|---|
| Backbone | Girdi görüntüsünden birden fazla çözünürlükte özellikler çıkar | 8, 16 ve 32 adımlarda (stride) özellik haritaları (P3, P4, P5) |
| Neck | Hem küçük hem de büyük nesnelerin bağlama sahip olması için özellikleri ölçekler arasında birleştir | Çok ölçekli birleştirilmiş özellik haritaları |
| Head | Birleştirilmiş özelliklerden sınırlayıcı kutuları (bounding box) ve sınıf skorlarını tahmin et | Çapa (anchor) noktası başına tespitler |
Temel birim Conv bloğudur (conv.py içinde tanımlanmıştır): ardışık olarak uygulanan bir 2D evrişim (convolution), batch normalization ve bir SiLU aktivasyonu. Aşağıdaki her daha büyük modül, Conv bloklarının bir araya getirilmesiyle oluşturulmuştur.
Link to this sectionMimari Diyagramları#
Each version keeps the same backbone → neck → head skeleton and changes specific stages. The tabs below show the per-version structure: the backbone and neck stages follow the configs in ultralytics/cfg/models/, while the YOLOv3 and YOLOv5 heads are drawn in their original anchor-based form rather than the anchor-free u-variant head their package configs actually ship. Stepping through the tabs shows what each generation added. In short, the progression is: YOLOv3 is an FPN-only, anchor-based detector; YOLOv5 adds the bottom-up PAN path and SPPF; YOLOv8 switches to the C2f block with an anchor-free, DFL head; YOLO11 inserts C2PSA attention and the C3k2 block; and YOLO26 adds an SPPF residual and makes the head NMS-free and DFL-free. Node colors follow the documentation diagram convention: green input, blue backbone, slate spatial pooling and attention, orange neck, purple head and output.
flowchart TD
IN[Input 640x640]:::start --> ST[Conv stem<br/>5x stride-2 down to P1-P5]:::proc
ST --> BB[Darknet-53 backbone<br/>stacked Bottleneck]:::proc
BB --> FPN[Neck FPN only<br/>top-down Upsample + Concat]:::decide
FPN --> HD[Detect head<br/>3 scales, anchor-based]:::out
HD --> O[Predictions + NMS]:::out
classDef start fill:#4CAF50,color:#fff
classDef proc fill:#2196F3,color:#fff
classDef decide fill:#FF9800,color:#fff
classDef out fill:#9C27B0,color:#fffYOLOv3 ve YOLOv5 diyagramları orijinal çapa tabanlı başı gösterir. ultralytics paketi, çapa tabanlı olmayan YOLOv3u ve YOLOv5u yapılandırmalarını sunar — aynı Darknet-53 ve C3 backbone'ları ile YOLOv8'in Detect başı — bunlar Detection Head altında açıklanmıştır.
Link to this sectionBackbone Blokları: Bottleneck → C3 → C2f → C3k2#
Backbone, 2 adımlı Conv aşağı örnekleme (downsampling) katmanları arasında tekrarlayan bir CSP (Cross-Stage Partial) bloğunu istifler. En çok değişen şey o tekrarlayan bloktur. Aşağıdaki tüm bloklar block.py içinde yer alır; c1/c2 girdi/çıktı kanallarıdır ve c = 0.5 * c2 gizli genişliktir.
Link to this sectionBottleneck (YOLOv3)#
The base unit is Bottleneck: two Conv layers (default kernels (3, 3)) with an optional residual add when shortcut=True and c1 == c2. YOLOv3's Darknet-53 backbone stacks these directly, with no CSP split, and detects at three scales (strides 8, 16, 32).
Link to this sectionC3 (YOLOv5)#
YOLOv5'in C3 bloğu girdiyi iki 1x1 evrişimine böler: cv1, n adet ardışık Bottleneck bloğunu (çekirdekler (1, 1) ardından (3, 3)) besler, cv2 ise bunları baypas eder. İki yol birleştirilir ve üçüncü bir 1x1 Conv ile bir araya getirilir:
def forward(self, x):
# C3: bottleneck path m(cv1(x)) concatenated with bypass cv2(x), then fused by cv3
return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))Sadece nihai bottleneck çıktısı birleştirme evrişimine ulaşır, bu nedenle cv3 2 özellik haritası görür.
Link to this sectionC2f (YOLOv8)#
YOLOv8'in C2f ("CSP Bottleneck with 2 convolutions, faster") bloğu, birleştirme evrişimine hangi özelliklerin ulaşacağını değiştirir:
cv1 = Conv(c1, 2 * c, 1), ardındanchunk(2)çıktıyı ikic-kanallı tensöre böler.nadetBottleneck(c, c)bloğu (çekirdekler(3, 3),(3, 3)) ardışık olarak çalışır, her biri önceki bloğun çıktısıyla beslenir.- Tüm
n + 2ara tensör birleştirilir vecv2 = Conv((2 + n) * c, c2, 1)tarafından birleştirilir.
C3 birleştirme evrişimine 2 özellik haritası gönderirken, C2f n + 2 adet gönderir — her ara bottleneck çıktısı yeniden kullanılır.
Link to this sectionC3k2 (YOLO11 ve YOLO26)#
YOLO11 and YOLO26 use C3k2, a subclass of C2f that swaps the repeating unit. Each of the n blocks becomes, depending on the constructor flags:
- düz bir
Bottleneck(varsayılan,c3k=False), - bir
C3kbloğu (c3k=True) — yapılandırılabilir çekirdek boyutuna sahip birC3varyantı, veya - bir
Bottleneck+PSABlockçifti (attn=True).
The second YAML arg sets c3k; for example [-1, 2, C3k2, [512, True]] builds one C3k2 module at 512 output channels whose internal blocks are C3k (since c3k=True). For CSP modules, the repeats field — here 2, before it is scaled by the variant's depth multiple — becomes the block's internal repeat count rather than stacking separate modules.
Link to this sectionUzamsal Havuzlama: SPP → SPPF#
At the end of the backbone, a spatial-pyramid-pooling block widens the receptive field. YOLOv5 replaced the original multi-kernel SPP with SPPF (Spatial Pyramid Pooling - Fast): a single MaxPool2d(kernel_size=5, stride=1, padding=2) applied n = 3 times in sequence, with the input and all three pooled outputs concatenated and fused by a 1x1 Conv. This is mathematically equivalent to SPP(k=(5, 9, 13)) but cheaper, because the chained 5x5 pools cover the larger kernels' receptive fields.
YOLO26 bir kısayol (shortcut) bayrağı iletir (SPPF, [1024, 5, 3, True]); en derin katmanda c1 == c2 == 1024 olduğundan, SPPF bir rezidüel bağlantı ekler (return y + x).
Link to this sectionUzamsal Dikkat: C2PSA (YOLO11+)#
YOLO11 added C2PSA after SPPF. It is a CSP block whose active branch is a stack of n PSABlock (Position-Sensitive Attention) modules: cv1 = Conv(c1, 2 * c, 1) splits the features, one half passes through the PSABlock stack, and cv2 = Conv(2 * c, c1, 1) fuses the concatenation. Each PSABlock applies multi-head attention followed by a two-layer feed-forward network (Conv(c, 2 * c, 1) → Conv(2 * c, c, 1)), each with a residual connection. YOLO26 keeps the same C3k2 + C2PSA backbone.
Link to this sectionNeck: FPN + PAN#
Neck, backbone'un P3/P4/P5 özellik haritalarını, yukarıdan aşağıya bir Özellik Piramit Ağı (FPN) ve ardından aşağıdan yukarıya bir Yol Toplama Ağı (PAN) ile birleştirir. YAML baş bölümünde, FPN nn.Upsample + Concat (anlamsal bilgiyi daha yüksek çözünürlüklere taşıyarak) ve PAN 2 adımlı Conv + Concat (yerelleştirme bilgisini geri yukarı taşıyarak) şeklindedir:
# YOLO11 head (FPN top-down, then PAN bottom-up)
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, C3k2, [512, False]] # 13
# ... second upsample + concat to P3 ...
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 13], 1, Concat, [1]] # cat head P4 (PAN)
- [-1, 2, C3k2, [512, False]] # 19Neck, neslinin backbone bloğunu yeniden kullanır — YOLOv5'te C3, YOLOv8'de C2f, YOLO11 ve YOLO26'da C3k2 — böylece her birleştirme noktası backbone'un kullandığı modülü çalıştırır. Üç birleştirilmiş çıktı başı besler. YOLOv3 bir istisnadır: neck'i sadece yukarıdan aşağıya FPN'dir (YAML başlığında 2 adımlı aşağı örnekleme yoktur), YOLOv5'in getirdiği aşağıdan yukarıya PAN yolu yoktur.
Link to this sectionTespit Başı: Çapa Tabanlı → Çapasız → NMS-free#
Baş, üç birleştirilmiş özellik haritasını tespit görevi için tahminlere dönüştürür. Tasarımı sürümler arasında, çapa tabanlıdan çapasıza ve NMS-free'ye doğru değişmiştir.
Link to this sectionÇapasız, ayrıştırılmış Detect#
Orijinal YOLOv3 ve YOLOv5, çapa tabanlı, birleştirilmiş bir baş kullanıyordu: önceden tanımlanmış çapa kutuları ve kutu ile sınıf tahminleri için ortak bir dal. Bağımsız ultralytics/yolov3 ve ultralytics/yolov5 depoları o çapa tabanlı tasarımı korur. Bunun yerine ana ultralytics paketi çapasız YOLOv3u ve YOLOv5u varyantlarını sunar — aynı Darknet-53 ve C3 backbone'ları ile YOLOv8'in çapasız Detect başı — ve burada belgelenen yolov3.yaml ve yolov5.yaml yapılandırmaları bu u varyantlarıdır, tarihsel tasarım değildir.
Detect başı (head.py) çapasız ve ayrıştırılmıştır: piramit seviyesi başına iki paralel dal çalıştırır ve çapa kutularına karşı değil, doğrudan ızgara noktaları üzerinde tahmin yapar.
- Kutu dalı (
cv2):Conv(x, c2, 3)→Conv(c2, c2, 3)→Conv2d(c2, 4 * reg_max, 1). - Sınıf dalı (
cv3): YOLO11 ve YOLO26'da iki derinlik ayrılabilir blok (DWConv+1x1 Conv) →Conv2d(c3, nc, 1); YOLOv8 eski varyantı kullanır, iki3x3 Convkatmanı →Conv2d(c3, nc, 1).
Bu nedenle her çapa noktası no = nc + 4 * reg_max çıktı üretir. Önceden tanımlanmış çapaların kaldırılması, çapa kutusu boyutlarını ve en-boy oranlarını ayarlanması gereken hiperparametrelerden çıkarır.
Link to this sectionDağılımsal Odak Kaybı (DFL)#
YOLOv8 and YOLO11 regress each of the 4 box coordinates as a distribution over reg_max = 16 bins rather than a single scalar (the integral form from Generalized Focal Loss). The DFL module reshapes the 4 * reg_max box channels to (4, reg_max), applies a softmax over the reg_max bins, and takes the expected bin index — each bin index weighted by its softmax probability, then summed — as the predicted coordinate. This is implemented as a fixed 1x1 convolution whose weights are the bin indices arange(reg_max), so the weighted sum is a single dot product.
Link to this sectionYOLO26: NMS-free, DFL-free#
YOLO26, başın doğrudan okuduğu iki YAML parametresini ayarlar:
end2end: True—Detect, dallarını bire bir bir başa (one2one_cv2/one2one_cv3) derin kopyalar; bu baş, nesne başına tek bir tahmin üretir ve Maksimum Olmayan Baskılama (NMS) sonrası işleme adımını kaldırır. Dışa aktarma ve geçiş detayları için Uçtan Uca Tespit rehberine bakın.reg_max: 1— bir kutu ile,self.dflnn.Identity()haline gelir veno = nc + 4; baş koordinatları doğrudan regresyona tabi tutar ve dışa aktarılan ONNX grafiğinde hiçbir DFL işlemi görünmez.
Across its five model sizes (n/s/m/l/x), YOLO26 reaches 40.9-57.5 mAP on COCO at 1.7-11.8 ms T4 TensorRT latency, as reported in the YOLO26 paper.
Link to this sectionSürüm Bazında Özet#
| Sürüm | Backbone bloğu | Uzamsal havuzlama | Dikkat | Tespit başı | DFL |
|---|---|---|---|---|---|
| YOLOv3 | Darknet-53 (Bottleneck) | temel yapılandırmada yok | yok | Orijinal: çapa tabanlı; u varyantı: çapasız | hayır / evet (u) |
| YOLOv5 | C3 (CSP) | SPPF | yok | Orijinal: çapa tabanlı; u varyantı: çapasız | hayır / evet (u) |
| YOLOv8 | C2f | SPPF | yok | Çapasız, ayrıştırılmış | evet (reg_max=16) |
| YOLO11 | C3k2 | SPPF | C2PSA | Çapasız, ayrıştırılmış | evet (reg_max=16) |
| YOLO26 | C3k2 | SPPF + kısayol | C2PSA | Çapasız, NMS-free (end2end) | kaldırıldı (reg_max=1) |
Model bazında detaylar, performans tabloları ve kullanım örnekleri için YOLOv3, YOLOv5, YOLOv8, YOLO11 ve YOLO26 için ayrı sayfalara bakın.
Link to this sectionMimarisi Kendin İncele#
model.info() metodu bir katman, parametre ve FLOPs özeti yazdırır ve ayrıştırılmış modül listesi model.model.model üzerinde mevcuttur.
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo11n.pt")
# Fuse Conv + BatchNorm layers so counts match the published specs
model.fuse()
# Print a summary: layers, parameters, gradients, GFLOPs
model.info()
# Inspect the detection head (the last module in the network)
head = model.model.model[-1]
print(type(head).__name__, "| reg_max:", head.reg_max, "| end2end:", head.end2end)Running the snippet across three generations shows the changes numerically. These are real fused-model outputs from the ultralytics package, matching the parameter and FLOPs counts published on each model page:
| Model | Katmanlar | Parametreler | GFLOPs | reg_max | end2end | DFL katmanı |
|---|---|---|---|---|---|---|
| YOLOv8n | 72 | 3,151,904 | 8.7 | 16 | False | DFL |
| YOLO11n | 100 | 2,616,248 | 6.5 | 16 | False | DFL |
| YOLO26n | 122 | 2,408,932 | 5.4 | 1 | True | Identity |
YOLO26n, reg_max=1, end2end=True ve bir Identity DFL katmanı raporlar — NMS-free, DFL-free başının mimari imzası.
Parameter and FLOPs values are reported for the fused model (model.fuse()), which merges each Conv and its batch normalization layer. This matches the published specifications; a freshly loaded checkpoint reports slightly higher counts before fusing.
Link to this sectionSonuç#
Across versions, the YOLO architecture changed one stage at a time: the backbone moved from Darknet-53 to CSP-based C3, C2f, and C3k2 blocks with C2PSA attention; the neck kept its FPN + PAN structure while SPP became SPPF; and the head moved from anchor-based to anchor-free, then to YOLO26's NMS-free, DFL-free end-to-end design.
Özel mimariler tanımlamak için Model YAML Yapılandırma Kılavuzu bölümüne bakabilir veya modelleri model sayfalarında karşılaştırabilirsin. Soruların olursa GitHub veya Discord üzerinden bize ulaş.
Link to this sectionSSS#
Link to this sectionBir YOLO mimarisinin üç aşaması nelerdir?#
Bir YOLO modeli; görüntüden 8, 16 ve 32 adımlarında özellikler çıkaran bir backbone (omurga), bu özellikleri FPN ve PAN ile ölçekler genelinde birleştiren bir neck (boyun) ve bounding box'ları (sınırlayıcı kutular) ve sınıf skorlarını tahmin eden bir head (baş) kısmına sahiptir. YOLOv3'ten YOLO26'ya kadar her Ultralytics YOLO modeli bu üç aşamalı tasarımı izler.
Link to this sectionC2f ve C3k2 blokları arasındaki fark nedir?#
C2f (YOLOv8) is a CSP block that concatenates the outputs of every internal Bottleneck — n + 2 feature maps — before its fusion convolution, where the older C3 passes only 2. C3k2 (YOLO11 and YOLO26) is a subclass of C2f that can replace each Bottleneck with a C3k block (a C3 variant with a configurable kernel size) when its c3k flag is set. Both are defined in block.py.
Link to this sectionYOLOv8 ile YOLO11 arasında mimaride neler değişti?#
YOLO11 makes three structural changes to YOLOv8: it replaces the C2f backbone and neck block with C3k2, inserts a C2PSA self-attention block after SPPF, and switches the head's classification branch to lighter depthwise-separable convolutions. Both keep the same anchor-free, decoupled Detect head with reg_max=16 DFL regression, so the changes lower parameter and FLOPs counts while raising accuracy rather than redesigning the detection interface.
Link to this sectionYOLO anchor-free mi?#
Modern Ultralytics YOLO modelleri anchor-free'dir. YOLOv8, YOLO11 ve YOLO26; kutu regresyonu ve sınıflandırma için ayrı dallara sahip, anchor-free, ayrıştırılmış bir Detect başlığı kullanır. Orijinal YOLOv3 ve YOLOv5 anchor-based idi, ancak Ultralytics bunları yapılandırmalarında YOLOv8 ile aynı anchor-free başlığı kullanan YOLOv3u ve YOLOv5u varyantları olarak sunar.
Link to this sectionYOLO26 NMS'i kaldırdı mı?#
Evet — YOLO26, end2end=True ayarını yapar; bu, Detect kısmına nesne başına tek bir tahmin üreten bire bir bir başlık kazandırır ve önceki modellerin gerektirdiği Non-Maximum Suppression (NMS) işlem sonrası adımını kaldırır. Detaylar için Uçtan Uca Algılama kılavuzuna bakabilirsin.
Link to this sectionDistribution Focal Loss (DFL) nedir ve YOLO26 neden onu kaldırdı?#
DFL, her kutu koordinatını tek bir skaler tahmin etmek yerine reg_max kutusu üzerinde (YOLOv8 ve YOLO11'de varsayılan olarak 16) bir softmax dağılımı olarak geriletir ve beklenen değeri koordinat olarak alır. YOLO26, reg_max=1 olarak ayarlandığından DFL katmanı bir özdeşlik işlemine dönüşür, başlık koordinatları doğrudan geriletir ve dışa aktarılan ONNX veya TensorRT grafiklerinde hiçbir DFL işlemi görünmez.
Link to this sectionBelirli bir YOLO modelinin mimarisini nasıl görebilirim?#
Load the model in Python and call model.info() for a layer, parameter, and GFLOPs summary. The parsed layers are in model.model.model — for example, model.model.model[-1] is the Detect head, exposing attributes like reg_max and end2end. The full architecture is defined in the model's YAML configuration file.