Meet YOLO26: next-gen vision AI.

Link to this sectionUltralytics YOLO26'da Uçtan Uca Tespitin Anlaşılması#

Link to this sectionGiriş#

YOLO26 modeline YOLOv8 veya YOLO11 gibi önceki bir modelden geçiş yapıyorsan, fark edeceğin en büyük değişikliklerden biri Non-Maximum Suppression (NMS) işleminin kaldırılmasıdır. Geleneksel YOLO modelleri, nihai tespitlere indirgemek için ayrı bir NMS son işleme adımı gerektiren binlerce çakışan tahmin üretir. Bu durum gecikmeyi artırır, dışa aktarma grafiklerini karmaşıklaştırır ve farklı donanım platformlarında tutarsız bir şekilde çalışabilir.

YOLO26 farklı bir yaklaşım benimser. Nihai tespitleri doğrudan modelden çıktı olarak verir; harici filtreleme gerekmez. Bu, uçtan uca nesne tespiti olarak bilinir ve tüm YOLO26 modellerinde varsayılan olarak etkindir. Sonuç olarak daha basit bir dağıtım hattı, daha düşük gecikme süresi ve CPU'larda %43'e kadar daha hızlı çıkarım elde edersin.

Bu kılavuz, nelerin değiştiğini, kodunu güncellemen gerekip gerekmediğini, hangi dışa aktarma formatlarının uçtan uca çıkarımı desteklediğini ve eski YOLO modellerinden nasıl sorunsuz bir şekilde geçiş yapacağını sana anlatır.

Bu mimari değişikliğin arkasındaki motivasyona daha derin bir bakış için Ultralytics blog yazısı: YOLO26 neden NMS'yi kaldırıyor ve bu dağıtımı nasıl değiştiriyor kısmına göz at.

Hızlı Özet
  • Ultralytics API veya CLI mi kullanıyorsun? Herhangi bir değişiklik yapmana gerek yok; sadece model adını yolo26n.pt olarak değiştirmen yeterli.
  • Özel çıkarım kodu mu kullanıyorsun (ONNX Runtime, TensorRT, vb.)? Son işleme mantığını güncelle; tespit çıktısı artık (N, 300, 6) boyutunda ve xyxy formatında, NMS gerekmiyor. Diğer görevler fazladan veri (maske katsayıları, kilit noktalar veya açı) ekler.
  • Dışa aktarma mı yapıyorsun? Çoğu format uçtan uca çıktıyı yerel olarak destekler. Ancak bazı formatlar (NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU ve QNN), desteklenmeyen operatör kısıtlamaları (örneğin torch.topk) nedeniyle otomatik olarak geleneksel çıktıya geri döner. Hailo HEF iş akışları, ONNX'ten Hailo'ya özel betiklerle derlenir, bu nedenle modelin için tespit başlığını ve NMS yapılandırmasını doğrula.

Link to this sectionUçtan Uca Tespit Nasıl Çalışır?#

YOLO26, eğitim sırasında çift başlı bir mimari kullanır. Her iki başlık da aynı omurgayı ve boyun yapısını paylaşır, ancak çıktıları farklı yollarla üretir:

BaşlıkAmaçTespit ÇıktısıSon İşleme
One-to-One (varsayılan)Uçtan uca çıkarım(N, 300, 6)Sadece güven eşiği
One-to-ManyGeleneksel YOLO çıktısı(N, nc + 4, 8400)NMS gerektirir

Yukarıdaki şekiller tespit içindir. Diğer görevler, uçtan uca çıktıyı her tespit için ek verilerle genişletir:

GörevUçtan Uca ÇıktıEk Veri
Tespit(N, 300, 6)
Örnek Segmentasyonu(N, 300, 6 + nm) + proto (N, nm, H, W)nm maske katsayıları (varsayılan 32)
Poz(N, 300, 57)17 kilit nokta × 3 (x, y, görünürlük)
OBB(N, 300, 7)Dönüş açısı

During training, both heads run simultaneously — the one-to-many head provides a richer learning signal, while the one-to-one head learns to produce clean, non-overlapping predictions. During inference and export, only the one-to-one head is active by default, producing up to 300 detections per image in the format [x1, y1, x2, y2, confidence, class_id].

model.fuse() çağrısını yaptığında, daha hızlı çıkarım için Conv + BatchNorm katmanlarını birleştirir ve uçtan uca modellerde one-to-many başlığını da kaldırarak model boyutunu ve FLOP değerlerini azaltır. Çift başlı mimari hakkında daha fazla bilgi için YOLO26 model sayfasına bak.

Link to this sectionKodumu Değiştirmem Gerekli mi?#

Link to this sectionUltralytics Python API veya CLI Kullanımı#

Değişiklik gerekmez. Standart Ultralytics Python API veya CLI kullanıyorsan her şey otomatik çalışır; tahmin, doğrulama ve dışa aktarma işlemlerinin tümü uçtan uca modelleri kutudan çıktığı gibi destekler.

Ultralytics API ile kod değişikliği gerekmez
from ultralytics import YOLO

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Predict — no NMS step, no code changes
results = model.predict("image.jpg")

Link to this sectionÖzel Çıkarım Kodu Kullanımı#

Evet, çıktı formatı farklıdır. Eğer YOLOv8 veya YOLO11 için özel son işleme mantığı yazdıysan (örneğin ONNX Runtime veya TensorRT ile çıkarım yaparken), bunu yeni çıktı şeklini işleyecek şekilde güncellemen gerekir:

YOLOv8 / YOLO11YOLO26 (uçtan uca)
Tespit çıktısı(N, nc + 4, 8400)(N, 300, 6)
Kutu formatıxywh (merkez x, merkez y, genişlik, yükseklik)xyxy (sol-üst x, sol-üst y, sağ-alt x, sağ-alt y)
DüzenÇapa başına kutu koordinatları + sınıf skorları[x1, y1, x2, y2, conf, class_id]
NMS gerekliEvetHayır
Son işlemeNMS + güven filtresiSadece güven filtresi

Segmentasyon, poz ve OBB görevleri için YOLO26, her tespite göreve özel veriler ekler; yukarıdaki çıktı şekilleri tablosuna bak.

Burada N, yığın boyutu ve nc sınıf sayısıdır (örneğin COCO için 80).

Uçtan uca modellerle son işleme çok daha basittir; örneğin ONNX Runtime kullanılırken:

import onnxruntime as ort

# Load and run the exported end-to-end model
session = ort.InferenceSession("yolo26n.onnx")
output = session.run(None, {session.get_inputs()[0].name: input_tensor})

# End-to-end output: (batch, 300, 6) → [x1, y1, x2, y2, confidence, class_id]
detections = output[0][0]  # first image in batch
detections = detections[detections[:, 4] > conf_threshold]  # confidence filter — that's it!

Link to this sectionOne-to-Many Başlığına Geçiş#

Eğer geleneksel YOLO çıktı formatına ihtiyacın varsa (örneğin mevcut NMS tabanlı son işleme kodunu yeniden kullanmak için), end2end=False ayarını yaparak istediğin zaman one-to-many başlığına geçebilirsin:

Geleneksel NMS tabanlı çıktı için one-to-many başlığını kullanma
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Prediction with NMS (traditional behavior)
results = model.predict("image.jpg", end2end=False)

# Validation with NMS
metrics = model.val(data="coco.yaml", end2end=False)

# Export without end-to-end
model.export(format="onnx", end2end=False)

Link to this sectionDışa Aktarma Formatı Uyumluluğu#

Çoğu dışa aktarma formatı uçtan uca çıkarımı doğrudan destekler; bunlar arasında ONNX, TensorRT, CoreML, OpenVINO, TFLite, TF.js ve MNN bulunur.

Aşağıdaki formatlar uçtan uca desteğine sahip değildir ve otomatik olarak one-to-many başlığına geri döner: NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU ve Qualcomm QNN.

Uçtan uca desteklenmediğinde ne olur

Bu formatlardan birine dışa aktarma yaptığında, Ultralytics otomatik olarak one-to-many başlığına geçer ve bir uyarı günlüğü oluşturur; manuel müdahale gerekmez. Bu, YOLOv8 veya YOLO11 modellerinde olduğu gibi, bu formatlar için çıkarım hattında NMS'ye ihtiyacın olacağı anlamına gelir.

Hailo HEF için derleme adımı, ONNX dışa aktarımından sonra model.export(format=...) dışında gerçekleşir. Tam tespit modelinle eşleşen Hailo DFC günlüklerini, .alls model betiğini ve NMS JSON dosyasını kullan; eğer bir uçtan uca YOLO26 grafiği Hailo araç zincirin tarafından desteklenmiyorsa, ONNX modelini end2end=False ile dışa aktar ve geleneksel tespit başlığını derle.

TensorRT + INT8

TensorRT uçtan uca desteğe sahiptir, ancak TensorRT ≤10.3.0 sürümünde int8=True ile dışa aktarma yaparken bu özellik otomatik olarak devre dışı bırakılır.

Link to this sectionDoğruluk ve Hız Ödünleşimleri#

Uçtan uca tespit, doğruluk üzerinde minimum etkiyle önemli dağıtım avantajları sağlar:

MetrikUçtan Uca (varsayılan)One-to-Many + NMS (end2end=False)
CPU Çıkarım Hızı%43'e kadar daha hızlıTemel değer
mAP Etkisi~0.5 mAP daha düşükYOLO11 ile aynı veya daha yüksek
Son İşlemeSadece güven filtresiTam NMS hattı
Dağıtım KarmaşıklığıMinimalNMS uygulaması gerektirir

Çoğu gerçek dünya uygulaması için ~0.5 mAP farkı, özellikle hız ve basitlik kazanımları göz önüne alındığında ihmal edilebilir düzeydedir. Eğer maksimum doğruluk birincil önceliğinse, her zaman end2end=False kullanarak one-to-many başlığına geri dönebilirsin.

Tüm model boyutları (n, s, m, l, x) genelindeki detaylı kıyaslamalar için YOLO26 performans metriklerine bak.

Link to this sectionYOLOv8 veya YOLO11'den Geçiş#

Mevcut bir projeyi YOLO26'ya yükseltiyorsan, sorunsuz bir geçiş sağlamak için işte hızlı bir kontrol listesi:

  • Ultralytics API / CLI kullanıcıları: Değişiklik gerekmez; sadece model adını yolo26n.pt (veya yolo26n-seg.pt, yolo26n-pose.pt, yolo26n-obb.pt) olarak güncelle.
  • Özel son işleme kodu: Yeni çıktı şekillerini -tespit için (N, 300, 6) artı segmentasyon, poz ve OBB için göreve özel verileri- işleyecek şekilde güncelle. Ayrıca kutu formatının xywh yerine xyxy olduğunu unutma.
  • Dışa aktarma hatları: Hedef formatın için yukarıdaki format uyumluluğu bölümünü kontrol et.
  • TensorRT + INT8: Uçtan uca destek için TensorRT sürümünün >10.3.0 olduğundan emin ol.
  • FP16 dışa aktarmalar: Tüm çıktıların FP16 olmasını istiyorsan, end2end=False ile dışa aktar — output0'ın neden FP32 kaldığına göz at.
  • iOS / CoreML: End-to-end is fully supported. If you need Xcode Preview support, use end2end=False with nms=True
  • Uç cihazlar (NCNN, RKNN): Bu formatlar otomatik olarak bire çok (one-to-many) moduna döner, bu yüzden cihaz üzerindeki işlem hattına NMS ekle.

Link to this sectionSSS#

Link to this sectionend2end=True ve nms=True seçeneklerini birlikte kullanabilir miyim?#

No. These options are mutually exclusive. If you set nms=True on an end-to-end model during export, it will be automatically forced to nms=False with a warning. The end-to-end head already handles duplicate filtering internally, so external NMS is unnecessary.

Ancak, end2end=False ve nms=True kombinasyonu geçerli bir yapılandırmadır; geleneksel NMS'yi dışa aktarma grafiğine işler. Bu, CoreML dışa aktarımları için yararlı olabilir çünkü Xcode'daki Önizleme işlevini doğrudan algılama modeliyle kullanmanı sağlar.

Link to this sectionUçtan uca modellerde max_det parametresi neyi kontrol eder?#

max_det parametresi (varsayılan: 300), bire bir başlığın görüntü başına verebileceği maksimum algılama sayısını belirler. Bunu çıkarım veya dışa aktarma sırasında ayarlayabilirsin:

model.predict("image.jpg", max_det=100)  # fewer detections, slightly faster
model.export(format="onnx", max_det=500)  # more detections for dense scenes

Varsayılan YOLO26 kontrol noktalarının max_det=300 ile eğitildiğini unutma. Bu değeri artırabilsen de, bire bir başlık eğitim sırasında 300 adede kadar temiz algılama üretecek şekilde optimize edilmiştir, bu nedenle bu sınırın üzerindeki algılamalar daha düşük kaliteli olabilir. Görüntü başına 300'den fazla algılamaya ihtiyacın varsa, daha yüksek bir max_det değeriyle yeniden eğitmeyi düşün.

Link to this sectionDışa aktardığım ONNX modelim (1, 300, 6) çıktısını veriyor — bu doğru mu?#

Evet, bu algılama için beklenen uçtan uca çıktı formatıdır: 1 batch size, 300'e kadar algılama ve her biri 6 değerden oluşan [x1, y1, x2, y2, confidence, class_id]. Güven eşiğine göre filtrelemen yeterli, başka bir işlem gerekmez — NMS gerekmez.

Diğer görevler için çıktı şekli farklıdır:

GörevÇıktı ŞekliAçıklama
Algılama(1, 300, 6)[x1, y1, x2, y2, conf, class_id]
Segmentasyon(1, 300, 38) + (1, 32, 160, 160)6 kutu değeri + 32 maske katsayısı, artı bir prototip maske tensörü
Poz(1, 300, 57)6 kutu değeri + 17 anahtar nokta × 3 (x, y, görünürlük)
OBB(1, 300, 7)6 kutu değeri + 1 dönme açısı

Link to this sectionDışa aktardığım modelin uçtan uca olup olmadığını nasıl kontrol ederim?#

Bunu Ultralytics Python API'sini kullanarak veya doğrudan dışa aktarılan ONNX modeli meta verilerini inceleyerek kontrol edebilirsin:

Bir modelin uçtan uca olup olmadığını kontrol et
from ultralytics import YOLO

model = YOLO("yolo26n.onnx")
model.predict(verbose=False)  # run predict to setup predictor first
print(model.predictor.model.end2end)  # True if end-to-end is enabled

Alternatif olarak, çıktı şeklini kontrol et — uçtan uca algılama modelleri (1, 300, 6) çıktısı verirken, geleneksel modeller (1, nc + 4, 8400) çıktısı verir. Diğer görev şekilleri için çıktı şekilleri SSS kısmına bak.

Link to this sectionUçtan uca destek örnek segmentasyon, poz ve OBB görevleri için var mı?#

Evet. YOLO26 algılama tarzı görev varyantları — algılama, örnek segmentasyon, poz tahmini ve yönlendirilmiş nesne algılama (OBB) — varsayılan olarak uçtan uca çıkarımı destekler. end2end=False geri dönüşü bu görevler genelinde de mevcuttur.

Her görev, temel algılama çıktısını göreve özel verilerle genişletir:

GörevModelUçtan Uca Çıktı
Algılamayolo26n.pt(N, 300, 6)
Örnek Segmentasyonyolo26n-seg.pt(N, 300, 38) + proto (N, 32, 160, 160)
Pozyolo26n-pose.pt(N, 300, 57)
OBByolo26n-obb.pt(N, 300, 7)

Yorumlar