Meet YOLO26: next-gen vision AI.

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

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) yönteminin kaldırılmasıdır. Geleneksel YOLO modelleri, nihai tespitlere kadar filtrelemek için ayrı bir NMS işlem sonrası adımı gerektiren binlerce örtüşen 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 durum uçtan uca nesne tespiti olarak bilinir ve tüm YOLO26 modellerinde varsayılan olarak etkinleştirilmiştir. Sonuç; daha basit bir dağıtım hattı, daha düşük gecikme süresi ve CPU'larda %43'e kadar daha hızlı çıkarımdır.

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

Bu mimari değişikliğin arkasındaki motivasyona daha derin bir bakış için, Ultralytics'in YOLO26'nın neden NMS'yi kaldırdığına ve bunun dağıtımı nasıl değiştirdiğine dair blog yazısı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 ile değiştirmen yeterli.
  • Özel çıkarım kodu (ONNX Runtime, TensorRT vb.) mı kullanıyorsun? Son işlem (post-processing) adımlarını güncelle — tespit çıktısı artık (N, 300, 6) boyutunda xyxy formatındadır ve NMS gerektirmez. Diğer görevler fazladan veriler (maske katsayıları, anahtar noktalar veya açı) ekler.
  • Dışa aktarma mı yapıyorsun? Çoğu format, uçtan uca çıktıyı yerel olarak destekler. Ancak, desteklenmeyen operatör kısıtlamaları (örneğin, torch.topk) nedeniyle birkaç format (NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU ve QNN) otomatik olarak geleneksel çıktıya geri döner. Hailo HEF iş akışları, ONNX'ten Hailo'ya özgü komut dosyalarıyla derlenir, bu yüzden 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ı şekillerde üretir:

BaşlıkAmaçTespit Çıktısıİşlem Sonrası
One-to-One (varsayılan)Uçtan uca çıkarım(N, 300, 6)Yalnızca 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, one-to-one çıktısını 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ı

Eğitim sırasında her iki başlık da aynı anda çalışır; one-to-many başlığı daha zengin bir öğrenme sinyali sağlarken, one-to-one başlığı temiz ve örtüşmeyen tahminler üretmeyi öğrenir. Çıkarım ve dışa aktarma sırasında, varsayılan olarak yalnızca one-to-one başlığı aktiftir ve [x1, y1, x2, y2, confidence, class_id] formatında görüntü başına 300'e kadar tespit üretir.

model.fuse() komutunu çalıştırdığında, daha hızlı çıkarım için Conv + BatchNorm katmanlarını birleştirir ve uçtan uca modellerde, model boyutunu ve FLOP'ları azaltarak one-to-many başlığını da kaldırır. Çift başlı mimari hakkında daha fazla ayrıntı için YOLO26 model sayfasına bak.

Link to this sectionKodumu Değiştirmem Gerekiyor mu?#

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

Değişiklik yapmana gerek yok. Standart Ultralytics Python API veya CLI kullanıyorsan her şey otomatik olarak çalışır; tahmin, doğrulama ve dışa aktarma işlemlerinin tümü uçtan uca modelleri doğrudan 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. YOLOv8 veya YOLO11 için özel işlem sonrası mantığı yazdıysan (örneğin, ONNX Runtime veya TensorRT ile çıkarım yaparken), bunu yeni çıktı şeklini işleyecek şekilde güncellemen gerekecektir:

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 gerekli mi?EvetHayır
İşlem sonrasıNMS + güven filtresiYalnızca güven filtresi

segmentation, pose ve OBB görevleri için YOLO26, her bir algılamaya göreve özel veriler ekler — çıkış şekilleri tablosuna bakabilirsin.

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

Uçtan uca modellerle işlem sonrası çok daha basit hale gelir; örneğin, ONNX Runtime kullanı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ş#

Geleneksel YOLO çıktı formatına ihtiyacın varsa (örneğin, mevcut NMS tabanlı son işleme kodunu yeniden kullanmak için), uygun olduğunda end2end=False ayarını yaparak bire-çok 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ı, ONNX, TensorRT, CoreML, OpenVINO, LiteRT ve MNN dahil olmak üzere uçtan uca çıkarımı doğrudan destekler.

Aşağıdaki formatlar uçtan uca desteklemez 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 aktardığında, Ultralytics otomatik olarak one-to-many başlığına geçer ve bir uyarı günlüğe kaydeder; manuel bir müdahaleye gerek yoktur. Bu, tıpkı 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 komut dosyasını ve NMS JSON'ını kullan; uçtan uca bir 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ği sunar, ancak JetPack 6 üzerindeki TensorRT 10.3.0 ile quantize=8 kullanılarak dışa aktarma yapıldığında 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ıReferans
mAP Etkisi~0.5 mAP daha düşükYOLO11 ile eşleşir veya onu geçer
İşlem SonrasıYalnızca güven filtresiTam NMS hattı
Dağıtım KarmaşıklığıMinimumNMS uygulaması gerektirir

Çoğu gerçek dünya uygulaması için, özellikle hız ve basitlik kazanımları düşünüldüğünde, ~0.5 mAP farkı önemsizdir. Maksimum doğruluk en büyük önceliğin ise, end2end=False kullanarak her zaman one-to-many başlığına geri dönebilirsin.

Tüm model boyutları (n, s, m, l, x) genelindeki ayrıntılı 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 işlem sonrası kodu: Yeni çıktı şekillerini işleyecek şekilde güncelle; tespit için (N, 300, 6), ayrıca segmentasyon, poz ve OBB için göreve özel veriler. Ayrıca kutu formatının xywh'den xyxy'ye değiştiğini unutma.
  • Dışa aktarma işlem hatları: Hedef formatın için format uyumluluğu bölümünü kontrol et.
  • TensorRT + INT8: JetPack 6 üzerinde, TensorRT 10.3.0 quantize=8 ile uçtan uca özelliği otomatik olarak devre dışı bırakır; uçtan uca desteğini korumak için farklı bir TensorRT sürümü kullan.
  • FP16 dışa aktarımlar: Eğer tüm çıktıların FP16 olmasını istiyorsan, end2end=False ile dışa aktar — neden output0'ın 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 one-to-many'ye geri döner, bu yüzden cihaz içi hattına NMS'yi dahil et.

Link to this sectionSonuç#

Uçtan uca algılama, YOLO26'da varsayılandır ve Ultralytics Python API veya CLI kullanıyorsan kod değişikliği gerektirmez. Yalnızca özel son işlem hatlarının yeni (N, 300, 6) çıktısını okuyacak ve NMS adımını devre dışı bırakacak şekilde güncellenmesi gerekir — NCNN ve RKNN gibi bire-çok çıkışa dönen dışa aktarma formatları hariç, bunlar cihaz üzerinde hala NMS gerektirir. Tüm model boyutlarındaki ayrıntılı hız ve doğruluk karşılaştırmaları için YOLO26 model sayfasına, tüm dışa aktarma seçenekleri ve formatları için ise Dışa aktarma modu belgelerine göz at.

Link to this sectionSSS#

Link to this sectionend2end=True ve nms=True özelliklerini 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 ile birleştirilmiş nms=True 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 tespit modeliyle kullanmana olanak tanır.

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 çıktı 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ırabilmene rağmen, bire bir başlık eğitim sırasında 300'e kadar temiz tespit üretecek şekilde optimize edilmiştir, bu nedenle bu sınırın ötesindeki tespitler daha düşük kalitede olabilir. Görüntü başına 300'den fazla tespite 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ı veriyor — bu doğru mu?#

Evet, bu tespit için beklenen uçtan uca çıktı formatıdır: 1 batch size, her biri 6 değer içeren [x1, y1, x2, y2, confidence, class_id] şeklinde 300'e kadar tespit. Sadece güven eşiğine göre filtrele ve işlem tamamdır — NMS gerekmez.

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

GörevÇıktı ŞekliAçıklama
Tespit(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ı ve ayrıca bir prototip maske tensörü
Pose(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önüş açısı

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

Ultralytics Python API'sini kullanarak veya doğrudan dışa aktarılan ONNX model 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 tespit 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 bölümüne bak.

Link to this sectionÖrnek segmentasyonu, poz ve OBB görevleri için uçtan uca destekleniyor mu?#

Evet. YOLO26 tespit tarzı görev varyantları — tespit, örnek segmentasyonu, poz tahmini ve yönelimli nesne tespiti (OBB) — varsayılan olarak uçtan uca çıkarımı destekler. end2end=False yedeği de bu görevler genelinde mevcuttur.

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

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

Yorumlar