Ultralytics YOLO27:
Get Started

Ultralytics YOLO ile Model Dışa Aktarımı#

Ultralytics YOLO ecosystem and integrations

Giriş#

Model eğitiminin nihai amacı, modeli gerçek dünyadaki uygulamalarda kullanıma sunmaktır. Ultralytics YOLO26'daki dışa aktarma modu, eğitilmiş modelini farklı biçimlerde dışa aktarmak için çok çeşitli seçenekler sunar ve modelin çeşitli platformlarda ve cihazlarda kullanılmasını sağlar. Bu kapsamlı kılavuz, model dışa aktarmanın inceliklerini ele alarak en yüksek uyumluluk ve performansı nasıl elde edeceğini gösterir.

Planlanan dışa aktarma desteği için yayımlanmamış YOLO27 önizlemesine göz at.



İzle: Dağıtım İçin Ultralytics YOLO26 Farklı Biçimlerde Nasıl Dışa Aktarılır | ONNX, TensorRT, CoreML 🚀

YOLO26'nın Dışa Aktarma Modunu Neden Seçmelisin?#

  • Çok yönlülük: ONNX, TensorRT, CoreML ve daha fazlası dâhil olmak üzere birden fazla biçime aktar.
  • Performans: TensorRT ile GPU'da 5 kata, ONNX veya OpenVINO ile CPU'da 3 kata kadar hız artışı elde et.
  • Uyumluluk: Modelini çok sayıda donanım ve yazılım ortamında kullanılabilir hâle getir.
  • Kullanım Kolaylığı: Modeli hızlı ve kolay bir şekilde dışa aktarmak için basit bir CLI ve Python API.

Kullanım Örnekleri#

Bir YOLO26n modelini ONNX veya TensorRT gibi farklı bir biçime aktar. Dışa aktarma bağımsız değişkenlerinin tam listesi için aşağıdaki Bağımsız Değişkenler bölümüne bak.

Örnek
from ultralytics import YOLO

# Bir model yükle
model = YOLO("yolo26n.pt")  # Resmî bir modeli yükle
model = YOLO("path/to/best.pt")  # özel olarak eğitilmiş bir modeli yükle

# Modeli dışa aktar
model.export(format="onnx")

Bağımsız değişkenler#

Bu tablo, YOLO modellerini farklı biçimlere aktarmak için kullanılabilen yapılandırmaları ve seçenekleri ayrıntılı olarak açıklar. Bu ayarlar, dışa aktarılan modelin performansını, boyutunu ve çeşitli platformlar ile ortamlardaki uyumluluğunu optimize etmek açısından kritik öneme sahiptir. Doğru yapılandırma, modelin hedeflenen uygulamada en iyi verimlilikle kullanıma hazır olmasını sağlar.

Bağımsız değişkenTürVarsayılanAçıklama
formatstr'torchscript'Dışa aktarılan modelin hedef biçimi; örneğin 'onnx', 'torchscript', 'engine' (TensorRT) veya başka biçimler. Her biçim farklı dağıtım ortamlarıyla uyumluluk sağlar.
namestrNoneDonanım hedefi gerektiren biçimler için donanım hedefinin adı: Hailo mimarisi ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; varsayılan olarak 'hailo8l' kullanılır), Rockchip RKNN yongası (varsayılan olarak 'rk3588' kullanılır), Huawei Ascend SoC (CANN --soc_version; varsayılan olarak 'Ascend310B4' kullanılır), Qualcomm QNN HTP hedefi (varsayılan olarak '73' kullanılır) veya AMD Xilinx Versal AI Edge Series Gen 2 aygıtı (varsayılan olarak 've2-xc2ve3858', VEK385 değerlendirme kiti kullanılır). Diğer modların kullandığı project/name çalıştırma adlandırma çiftinden farklıdır.
imgszint veya tuple640Model girdisi için istenen görüntü boyutu. Kare görüntüler için bir tam sayı (640×640 için 640 gibi) veya belirli boyutlar için (height, width) demeti olabilir. Belirtilmediğinde dışa aktarma, yüklenen kontrol noktasında kayıtlı eğitim boyutunu yeniden kullanır: resmî YOLO26 kontrol noktalarında derinlik için 768, sınıflandırma için 224, OBB için 1024 ve diğer görevler için 640 kayıtlıdır; ince ayar yapılmış modeldeyse eğitim sırasında kullanılan imgsz kaydedilir. YAML'den oluşturulmuş bir modelde kayıtlı eğitim boyutu yoktur ve 640 kullanılır.
optimizeboolFalseDEEPX için daha yüksek derleyici optimizasyonunu etkinleştirir; derleme süresini uzatırken çıkarım gecikmesini azaltır.
quantizeint veya strNoneNicemleme hassasiyeti: 16 (FP16, model boyutunu küçültür ve desteklenen donanımlarda çıkarımı hızlandırabilir) veya 8 (INT8/PTQ, modeli çok az doğruluk kaybıyla daha da sıkıştırır, öncelikle uç cihazlar için kullanılır; kalibrasyon için data/fraction gerekir); 32/ayarlanmamış değer FP32'dir. quantize=8 ile eğitilmiş bir kontrol noktası her zaman INT8 olarak dışa aktarılır: onnx ve engine, kontrol noktasının taşıdığı aralıkları kullanarak kalibrasyon olmadan dışa aktarım yapar; diğer biçimler veya hassasiyetler reddedilir. 'w8a8' ve 'w16a16', 8 ve 16 için takma adlardır; karma hassasiyetler olan 'w8a16' (16 bit aktivasyonlara sahip INT8 ağırlıklar: CoreML, LiteRT, QNN) ve 'w8a32' (dinamik INT8: LiteRT) yalnızca bu biçimlerde kabul edilir. Kullanımdan kaldırılmış half/int8 bayraklarının yerini alır (half=True → 16, int8=True → 8; kullanımdan kaldırma uyarısıyla kabul edilmeye devam eder). Yalnızca hedef biçimin desteklediği hassasiyetlere izin verilir (aşağıya bak).
dynamicboolFalseTorchScript, ONNX, OpenVINO, TensorRT, CoreML ve MNN dışa aktarımlarında dinamik girdi boyutlarına izin vererek değişen görüntü boyutlarını işleme esnekliğini artırır.
simplifyboolTrueONNX grafiği oluşturan dışa aktarımlarda (onnxslim ile) ara ONNX grafiğini basitleştirir (Dışa Aktarma Biçimleri bölümüne bak); çıkarım motorlarıyla performansı ve uyumluluğu artırabilir.
opsetintNoneONNX grafiği oluşturan dışa aktarımlarda ONNX opset sürümünü belirtir (Dışa Aktarma Biçimleri bölümüne bak); farklı ONNX ayrıştırıcıları ve çalışma zamanlarıyla uyumluluk sağlar. Ayarlanmazsa desteklenen en son sürüm kullanılır.
workspacefloat veya NoneNoneTensorRT optimizasyonları için maksimum çalışma alanı boyutunu GiB cinsinden ayarlayarak bellek kullanımı ile performansı dengeler. TensorRT'nin cihazın en yüksek kapasitesine kadar otomatik ayırma yapması için None değerini kullan.
nmsbool, isteğe bağlıNoneNone, harici NMS için ham bire-çok tahminlerini dışa aktarır; True, desteklenen durumlarda NMS'yi modele dahil eder; False, kullanılabiliyorsa NMS'siz başlığı seçer. CoreML'de yerleşik NMS, statik şekillerle detect, segment ve pose görevlerini destekler. Uçtan Uca Algılama kılavuzuna bak.
conffloatNoneDışa aktarma sırasında NMS'nin oluşturulduğu her yerde kullanılan güven eşiği: nms=True dışa aktarımları; Hailo'nun uçtan uca olmayan detect dışa aktarımları; ve içeride nms=True değerini zorunlu kılan IMX detect, pose ve segment dışa aktarımları. Ayarlanmadığında varsayılan değer 0.25 olur.
ioufloat0.7Dışa aktarma sırasında NMS'nin oluşturulduğu her yerde kullanılan IoU eşiği: nms=True dışa aktarımları; Hailo'nun uçtan uca olmayan detect dışa aktarımları; ve içeride nms=True değerini zorunlu kılan IMX detect, pose ve segment dışa aktarımları.
max_detint300Dışa aktarılan modelin çıktısında tutulan en yüksek algılama sayısı. Yerel NMS işlem hattında algılama sınırı olmayan CoreML algılama dışında, her biçimdeki nms=True dışa aktarımları için geçerlidir. Ayrıca NMS'siz uçtan uca algılama dışa aktarımlarında (YOLO26, YOLOv10; kullanılabilir bağlantı noktası sayısıyla sınırlandırılır) ve IMX detect, pose ve segment dışa aktarımlarında da uygulanır.
agnostic_nmsboolFalseCoreML'in kendi NMS aşaması da dahil olmak üzere, standart nms=True işlem hattı üzerinden dışa aktarma sırasında NMS'nin oluşturulduğu her yerde sınıftan bağımsız NMS'yi etkinleştirir; yalnızca aynı sınıf içindekileri değil, farklı sınıflardaki örtüşen kutular arasında puanı daha düşük olanları da bastırır. Sınıftan bağımsız seçeneği olmayan ve bu bayraktan bağımsız olarak sınıf farkındalığını koruyan Hailo veya IMX'in kendi oluşturduğu NMS yapılandırmalarında bu ayar dikkate alınmaz. NMS'siz uçtan uca dışa aktarımlara (YOLO26, YOLOv10) da dahil edilir; bu durumda IoU eşiğine dayalı olarak farklı kutuları bastırmaz, yalnızca aynı algılamanın birden fazla sınıf etiketi altında görünmesini önler (IoU=1.0 yinelenenleri).
batchint1Dışa aktarılan modelin toplu çıkarım boyutunu veya modelin predict modunda eşzamanlı olarak işleyeceği en yüksek görüntü sayısını belirtir. Dışa aktarma bağımsız değişkenlerinde batch bulunmayan biçimler (Edge TPU, IMX500, DEEPX, Hailo, AMD Xilinx) batch 1 olarak dışa aktarılır ve diğer değerleri kabul etmez.
devicestrNoneDışa aktarma için kullanılacak cihazı belirtir: GPU (device=0), CPU (device=cpu), Apple silicon için MPS (device=mps), Huawei Ascend NPU (device=npu veya device=npu:0) ya da NVIDIA Jetson için DLA (device=dla:0 veya device=dla:1). TensorRT dışa aktarımları otomatik olarak GPU kullanır; ancak TensorRT 11.0 DLA'yı desteklemez.
verboseboolFalseformat='engine' dışa aktarımı sırasında TensorRT oluşturucu günlüğünün ayrıntı düzeyini VERBOSE olarak yükseltir. Diğer dışa aktarma biçimleri bu ayarı yok sayar.
datastrNoneINT8 niceleme kalibrasyonu için gerekli veri kümesi YAML dosyasının yolu; sınıflandırma için bunun yerine bir veri kümesi dizini veya yerleşik veri kümesi adı kullanılır. INT8 etkinleştirildiğinde belirtilmemişse Ultralytics, gerektiğinde göreve özgü bir kalibrasyon veri kümesi seçer veya modelin görevi için varsayılan veri kümesini kullanır. quantize=8 ile eğitilmiş bir kontrol noktası kendi INT8 aralıklarını içerir ve kalibrasyon verisi gerektirmez.
splitstr'val'data içinden INT8 niceleme kalibrasyonu veri yükleyicisini oluşturmak için kullanılan veri kümesi bölümü ('train', 'val' veya 'test').
fractionfloat, int veya list1.0INT8 kalibrasyonu için kullanılan veri kümesi alt kümesi: oran, görüntü sayısı veya [train, val, test] değerleri. 1 bölümün tamamı demektir; 1 üzerindeki tam sayılar görüntü sayısıdır ve yalnızca isteğe bağlı test girdisi, hiçbiri anlamına gelen 0/0.0 değerlerini kabul eder. İki öğeli listelerde test bölümün tamamı olarak kalır.

Bu parametreleri ayarlayarak dışa aktarma sürecini dağıtım ortamı, donanım kısıtlamaları ve performans hedefleri gibi özel gereksinimlere göre özelleştirebilirsin. Model boyutu, hız ve doğruluk arasında en iyi dengeyi elde etmek için uygun biçimi ve ayarları seçmek çok önemlidir.

Dışa Aktarma Biçimleri#

YOLO26 için kullanılabilir dışa aktarma biçimleri aşağıdaki tabloda listelenmiştir. format bağımsız değişkenini kullanarak herhangi bir biçime aktarabilirsin; ör. format='onnx' veya format='engine'. Dışa aktarılan modeller üzerinde doğrudan tahmin veya doğrulama yapabilirsin; ör. yolo predict model=yolo26n.onnx. Dışa aktarma tamamlandıktan sonra modelin için kullanım örnekleri gösterilir. Modeller, yerel kurulum gerektirmeden Ultralytics Platform üzerinden doğrudan tarayıcıdan da dışa aktarılabilir.

Biçimformat bağımsız değişkeniModelÜst verilerBağımsız değişkenler
PyTorch-yolo26n.pt✅-
TorchScripttorchscriptyolo26n.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None, harici NMS için varsayılan olarak ham çıktılar üretir. Kullanılabilir bir NMS içermeyen başlık seçmek için nms=False değerini ayarla; desteklenmeyen biçimler yerel çıktı yoluna döner. Yukarıdaki nms girdileri, nms=True ile NMS içerebilen biçimleri tanımlar.

Dışa aktarma bağımlılıklarının otomatik kurulumu

Çoğu biçim, ultralytics ile yüklenmeyen paketlere ihtiyaç duyar. Gerekli bir paket eksik olduğunda dışa aktarma işlemi, bunu çalışma zamanında uv veya pip ile, Linux'ta ise IMX için Java gibi sistem paketlerini apt ile yükler. Edge TPU derleyicisi, apt veya sudo olmadan indirilir. Örneğin bir kapsayıcı görüntüsünde, CI işinde veya üretim hizmetinde ortamı sabit tutmak için YOLO_AUTOINSTALL=False ayarını yap. Dışa aktarma işlemi eksik paketleri yine kontrol edip bildirir, ancak ortamı değiştirmez ve paketler yüklenene kadar başarısız olur.

export YOLO_AUTOINSTALL=False

Niceleme Seçenekleri#

Dışa aktarma hassasiyetini belirlemek için quantize bağımsız değişkenini kullan. Dize değerlerinde büyük-küçük harf duyarlılığı yoktur ve Ultralytics, kabul edilen diğer adları dışa aktarma öncesinde standart biçime dönüştürür:

İstenen değerlerStandart değerAnlam
8, "8", "int8", "w8a8"8INT8 ağırlıkları ve aktivasyonları
16, "16", "fp16", "w16a16"16FP16 ağırlıkları ve aktivasyonları
32, "32", "fp32", "w32a32"32FP32 dışa aktarımı; CoreML NMS ML Programs varsayılan olarak FP16 kullandığından bu durum, ayar yapılmamasıyla aynıdır
"w8a16""w8a16"16 bit aktivasyonlarla (FP16; LiteRT'de INT16) INT8 ağırlıkları
"w8a32""w8a32"FP32 aktivasyonlarla INT8 ağırlıkları (LiteRT dinamik INT8, kalibrasyon gerekmez)

Eski half=True ve int8=True bayrakları kullanımdan kaldırma uyarılarıyla kabul edilmeye devam eder ve quantize=16 ile quantize=8 değerlerine yönlendirilir.

Her dışa aktarma biçimi her hassasiyeti desteklemez. Açıkça belirtilen quantize istekleri ya istenen hassasiyeti üretir ya da dışa aktarma başlamadan başarısız olur:

BiçimFP32 (32/ayarlanmamış)FP16 (16)INT8 (8)W8A16 ("w8a16")Notlar
PyTorch✅UygulanamazUygulanamazUygulanamazYerel eğitim/denetim noktası biçimi.
TorchScript✅✅ Yalnızca GPU❌❌FP16 TorchScript dışa aktarımı device=0 gerektirir; CPU dışa aktarımı FP32'dir.
ONNX✅✅✅❌INT8, ONNX Runtime statik nicelemesini ve kalibrasyon verilerini kullanır.
OpenVINO✅✅✅❌INT8, eğitim sonrası niceleme için NNCF kullanır.
TensorRT✅✅✅❌INT8 için temsili kalibrasyon verileri gerekir.
CoreML✅¹✅✅✅CoreML INT8, ağırlık nicelemesidir; W8A16, FP16 aktivasyonlarla INT8 ağırlıkları kullanır. ¹ Ayarlanmamış NMS ML Programs varsayılan olarak FP16 kullanır ve segment/poz nms=True dışa aktarımları her zaman FP16'dır.
Core AI✅✅❌❌Varsayılan olarak FP32 kullanılır veya quantize=16 ile bir FP16 .aimodel varlığı seçilebilir; INT8 yolu yoktur.
TF SavedModel✅❌✅❌INT8 dışa aktarımı TensorFlow kalibrasyonu kullanır.
TF GraphDef✅❌❌❌Dışa aktarma sırasında hassasiyet dönüşümü yapılmaz.
Edge TPU❌❌✅ otomatik❌Edge TPU, INT8 gerektirir; ayarlanmamışsa otomatik olarak etkinleştirilir.
LiteRT✅❌✅✅Statik INT8 (8) ve "w8a16" (INT8 ağırlıklar + INT16 aktivasyonlar) kalibrasyon verileri kullanır; ayrıca "w8a32" dinamik INT8'i (kalibrasyon gerekmez) destekler. quantize=16 ayrı bir dışa aktarma değildir; FP32 model, GPU temsilcisi aracılığıyla çalışma zamanında FP16 olarak çalışır.
PaddlePaddle✅❌❌❌Dışa aktarma sırasında hassasiyet dönüşümü yapılmaz.
MNN✅✅✅❌INT8, MNN dönüştürmesi aracılığıyla ağırlık nicelemesi yapar.
NCNN✅✅❌❌Mobil/gömülü çalışma zamanı biçimi.
IMX500❌❌✅ otomatik❌IMX500 niceleme gerektirir; ayarlanmamışsa INT8 otomatik olarak etkinleştirilir.
RKNN❌✅ çipe bağlı✅❌RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B, FP16 veya INT8'i destekler; RV1103/RV1106 varyantları yalnızca INT8'i destekler.
ExecuTorch✅❌❌❌Dışa aktarma sırasında hassasiyet dönüşümü yapılmaz.
Axelera❌❌✅ otomatik❌Axelera dışa aktarımı INT8 gerektirir; ayarlanmamışsa otomatik olarak etkinleştirilir.
DEEPX❌❌✅ otomatik❌DEEPX dışa aktarımı INT8 gerektirir; ayarlanmamışsa otomatik olarak etkinleştirilir.
Qualcomm QNN❌❌❌✅ otomatikQNN HTP dışa aktarımı, 16 bit aktivasyonlarla INT8 ağırlıklara sabitlenmiştir.
Hailo❌❌✅ otomatik❌Hailo dışa aktarımı INT8 gerektirir; ayarlanmamışsa otomatik olarak etkinleştirilir.
Huawei Ascend❌✅ otomatik❌❌Ascend AI Core evrişimleri yalnızca FP16/INT8 girdilerini kabul eder; bu nedenle ATC, FP16 derler. Ayarlanmamışsa otomatik olarak etkinleştirilir.
AMD Xilinx❌❌✅ otomatik❌AMD Xilinx dışa aktarımı Vitis AI INT8 (VINT8) gerektirir; ayarlanmamışsa otomatik olarak etkinleştirilir.

INT8 ve W8A16 dışa aktarımları için, hedef tümleştirme varsayılan bir davranış belgelemiyor veya otomatik etkinleştirme yapmıyorsa, data="coco8.yaml" gibi data ile temsili kalibrasyon verileri sağla. LiteRT "w8a32" (dinamik INT8) şeması kalibrasyon verisi gerektirmez.

Niceleme Farkındalıklı Eğitim#

Yukarıdaki INT8 dışa aktarımları, eğitim sonrası niceleme (PTQ) kullanır: aralıklar, data üzerinde yapılan tek bir kalibrasyon geçişinde belirlenir. Niceleme farkındalıklı eğitim (QAT) ise, döngü içinde sahte niceleme ile ince ayar yaparak INT8'i tolere edebilen ağırlıkları öğrenir ve böylece yalnızca kalibrasyonun yol açtığı doğruluk kaybını telafi eder. Önceden eğitilmiş bir denetim noktasında ince ayar yapmak için quantize=8 değerini train'ye ilet, ardından her zamanki gibi dışa aktar:

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco.yaml",
    quantize=8,
    epochs=5,
    batch=64,
    optimizer="AdamW",
    lr0=0.00001,
    lrf=0.1,
    warmup_epochs=0.5,
    cos_lr=True,
    mosaic=0.0,
)
model.export(format="engine", quantize=8)  # aralıklar denetim noktasıyla birlikte taşınır, kalibrasyon verisi gerekmez

Önceden eğitilmiş bir denetim noktasına ince ayar yaparken düşük bir öğrenme oranı kullan. QAT başlangıçta doğruluğu düşürebilir ve eğitim sonrası nicelemeye kıyasla sağladığı fayda modele, veri kümesine ve eğitim bütçesine bağlıdır. Dışa aktarılan modeli hem özgün denetim noktasına hem de eğitim sonrası nicelemeyle dışa aktarılan modele göre doğrula; eğitim sırasındaki sahte niceleme puanları dağıtım doğruluğunu kanıtlamaz.

QAT'nin ne ölçüde fayda sağlayacağı, dışa aktarma arka ucunun kendi kalibrasyonunun modeli ne kadar iyi işlediğine bağlıdır. Aşağıdaki değerler, COCO val2017 üzerinde imgsz=640 ve toplu iş boyutu 1'de TensorRT 10.16 motorları kullanılarak ölçülen mAP50-95 değerleridir; her QAT denetim noktası epochs=20 patience=3 ile eğitilmiştir:

ModelFP32 motoruPTQ INT8 motoruQAT INT8 motoru
yolo26n0.40320.39340.3935
yolo26s0.47940.44120.4711
yolo26m0.52690.46960.5137
yolo26l0.54400.48890.5307
yolo26x0.57010.51380.5527

QAT, tüm aralıkta FP32'ye kıyasla 0,008 ila 0,017 mAP50-95 kaybına yol açarken, eğitim sonrası niceleme yolo26n üzerinde 0,010, daha büyük modellerde ise 0,038 ila 0,057 kayba yol açar. Yani kalibrasyonun zaten iyi çalıştığı en küçük modelde QAT neredeyse hiçbir kazanç sağlamaz; diğer modellerde ise 0,030 ila 0,044 kazanç sağlar. Farklı bir veri kümesi, dışa aktarma biçimi veya TensorRT sürümünde farklı sonuçlar bekle ve kendi ölçümünü yap.

QAT modelleri compile=False gerektirir; ModelOpt'un nicelemeli modülleri torch.compile desteğine sahip değildir.

Başlığın son çıktı evrişimleri, INT8 doğruluk kaybını sınırlamak için bilerek kayan noktalı biçimde bırakılır; TensorRT, niceleme uygulanmamış katmanlar için FP16 karma hassasiyetini etkinleştirir. QAT, ilk kullanımda otomatik olarak yüklenen NVIDIA TensorRT Model Optimizer aracılığıyla çalışır ve oluşan denetim noktasının yüklenebilmesi için aracın kurulu olması gerekir. Bu aralıklar denetim noktasıyla birlikte taşınır ve onnx ile engine dışa aktarımları bunları Q/DQ düğümleri olarak üretir; diğer biçimler bunun yerine kalibrasyon kullanır ve QAT denetim noktasını kabul etmez.

Sırada ne var?#

Dışa aktarılan modeli nasıl çalıştıracağını öğrenmek için hedef dağıtım platformunun tümleştirme kılavuzunu bul: ONNX, TensorRT, CoreML ve daha fazlası tüm tümleştirmeler listesinde yer alır.

Sık Sorulan Sorular#

  • Ultralytics ile bir YOLO26 modelini ONNX biçimine aktarmak oldukça kolaydır. Modelleri dışa aktarmak için hem Python hem de CLI yöntemleri sunar.

    Örnek
    from ultralytics import YOLO
    
    # Bir model yükle
    model = YOLO("yolo26n.pt")  # Resmî bir modeli yükle
    model = YOLO("path/to/best.pt")  # özel olarak eğitilmiş bir modeli yükle
    
    # Modeli dışa aktar
    model.export(format="onnx")

    Farklı girdi boyutlarını işleme gibi gelişmiş seçenekler de dahil olmak üzere süreçle ilgili daha fazla bilgi için ONNX tümleştirme kılavuzuna bak.

  • Modeli dışa aktarırken TensorRT kullanmak, performansta önemli iyileşmeler sağlar. TensorRT'ye aktarılan YOLO26 modelleri, GPU'da 5 kata kadar hızlanma sağlayarak gerçek zamanlı çıkarım uygulamaları için ideal hale gelebilir.

    • Çok yönlülük: Modelleri belirli bir donanım yapılandırması için optimize et.
    • Hız: Gelişmiş optimizasyonlarla daha hızlı çıkarım elde et.
    • Uyumluluk: NVIDIA donanımıyla sorunsuz tümleştir.

    TensorRT tümleştirmesi hakkında daha fazla bilgi edinmek için TensorRT tümleştirme kılavuzuna bak.

  • INT8 nicelemesi, özellikle uç cihazlarda modeli sıkıştırıp çıkarımı hızlandırmanın etkili bir yoludur. INT8 nicelemesini şu şekilde etkinleştirebilirsin:

    Örnek
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Bir model yükle
    model.export(format="onnx", quantize=8, data="coco8.yaml")

    INT8 niceleme ONNX, TensorRT, OpenVINO, CoreML, Rockchip RKNN ve AMD Xilinx gibi biçimlere uygulanabilir. En iyi niceleme sonuçları için data parametresini kullanarak temsili bir veri kümesi sağla. Kabul edilen quantize değerleri ve desteklenen biçimler için Niceleme Seçenekleri sayfasına bak.

  • Dinamik girdi boyutu, dışa aktarılan modelin farklı görüntü boyutlarını işlemesine olanak tanır; böylece esneklik sağlar ve farklı kullanım durumlarında işleme verimliliğini artırır. ONNX veya TensorRT gibi biçimlere dışa aktarırken dinamik girdi boyutunu etkinleştirmek, modelin farklı girdi şekillerine sorunsuzca uyum sağlamasını mümkün kılar.

    Bu özelliği etkinleştirmek için dışa aktarma sırasında dynamic=True bayrağını kullan:

    Örnek
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="onnx", dynamic=True)

    Dinamik girdi boyutlandırma, video işleme veya farklı kaynaklardan gelen görüntüleri işleme gibi girdi boyutlarının değişebileceği uygulamalarda özellikle kullanışlıdır.

  • PyTorch modelleri ve dinamik dışa aktarımlar varsayılan olarak minimum dikdörtgen dolgusu kullanırken statik dışa aktarımlar tam imgsz boyutuna dolgu uygular; bu nedenle güven eşiğine yakın tespitler farklı olabilir. Statik dışa aktarımla eşleşmek için yerel çıkarımda rect=False kullan veya desteklenen durumlarda dynamic=True ile dışa aktar.

  • Dışa aktarma argümanlarını anlamak ve yapılandırmak, model performansını iyileştirmek için kritik öneme sahiptir:

    • format: Dışa aktarılan modelin hedef biçimi (ör. onnx, torchscript, saved_model).
    • imgsz: Model girdisi için istenen görüntü boyutu (ör. 640 veya (height, width)).
    • quantize: 8/"int8", 16/"fp16", 32/"fp32" ya da desteklenen biçimlerde karma ağırlık/aktivasyon şemaları olan "w8a16" ve "w8a32" (LiteRT dinamik INT8) gibi niceleme hassasiyeti. Niceleme Seçenekleri bölümüne bak.
    • dynamic: ONNX, OpenVINO ve TensorRT gibi dinamik şekilleri destekleyen biçimlerde değişken girdi boyutlarını kabul eder.
    • nms: Harici NMS (None), yerleşik NMS (True) veya NMS içermeyen başlık (False) için ham çıktıları seçer.
    • device: Dışa aktarma sırasında modeli izlemek için kullanılan cihaz; ilk CUDA GPU için cpu veya 0 gibi. FP16 TorchScript için GPU gerekir.

    Belirli donanım platformlarına dağıtım için NVIDIA GPU'larda TensorRT, Apple cihazlarında CoreML veya Google Coral cihazlarında Edge TPU gibi özel dışa aktarma biçimlerini kullanmayı değerlendirebilirsin.

  • YOLO modelini ONNX veya TensorRT gibi biçimlere dışa aktardığında, çıktı tensörünün yapısı modelin görevine bağlıdır. Özel çıkarım uygulamaları için bu çıktıları anlamak önemlidir.

    YOLO26 detection modelleri (ör. yolo26n.pt), nms=False ile dışa aktarıldığında desteklenen biçimlerde [x1, y1, x2, y2, confidence, class_id] değerleri içeren ve (batch_size, max_detections, 6) biçiminde şekillenen NMS içermeyen çıktılar üretir. Varsayılan max_det=300 ile bu genellikle (batch_size, 300, 6) olur. Uçtan uca operatörleri desteklenmediğinde, bazı kısıtlı biçimler otomatik olarak geleneksel çıktı düzenine geri döner.

    Varsayılan olarak (nms=None), YOLO26 dâhil detection modelleri ham one-to-many tahminleri dışa aktarır: çıktı genellikle kanalların kutu koordinatlarını ve sınıf başına skorları temsil ettiği, (batch_size, 4 + num_classes, num_predictions) biçiminde şekillenen tek bir tensördür; num_predictions ise dışa aktarma giriş çözünürlüğüne bağlıdır (dinamik de olabilir). Hangi biçimlerin uçtan uca çıktıyı koruduğunu Uçtan Uca Detection kılavuzu açıklar.

    Segmentasyon modellerinde (ör. yolo26n-seg.pt) genellikle iki çıktı alırsın: ilki, (batch_size, 4 + num_classes + mask_dim, num_predictions) biçiminde şekillenen tensördür (kutular, sınıf skorları ve maske katsayıları); ikincisi, örnek maskelerini oluşturmak için katsayılarla birlikte kullanılan maske prototiplerini içeren ve (batch_size, mask_dim, proto_h, proto_w) biçiminde şekillenen tensördür. Boyutlar dışa aktarma giriş çözünürlüğüne bağlıdır (dinamik de olabilir).

    Pose modellerinde (ör. yolo26n-pose.pt) çıktı tensörü genellikle (batch_size, 4 + num_classes + keypoint_dims, num_predictions) biçimindedir; keypoint_dims pose tanımına (ör. anahtar nokta sayısına ve güven değerinin dâhil edilip edilmediğine), num_predictions ise dışa aktarma giriş çözünürlüğüne bağlıdır (dinamik de olabilir).

    ONNX çıkarım örnekleri, her model türü için bu çıktıların nasıl işleneceğini gösterir.

  • Ultralytics şu anda YOLO modelleri için özel bir C++ çıkarım API'si sunmuyor. C++ dağıtımları için modeli ONNX, TensorRT, TorchScript veya MNN gibi bir çalışma zamanı biçimine dışa aktar, ardından dışa aktarılan yapıyı ilgili çalışma zamanının yerel C++ API'siyle yükle.

    Örneğin, bir detection modelini yolo export model=yolo26n.pt format=onnx ile dışa aktar ve .onnx dosyasını ONNX Runtime C++ ile çalıştır ya da format=engine ile dışa aktar ve TensorRT motorunu bir TensorRT C++ uygulamasından çalıştır. Özel C++ son işleme kullandığında, görevine ve dışa aktarma ayarlarına uygun çıktı tensörü düzenini kullan; varsayılan YOLO26 detection dışa aktarımları, harici NMS gerektiren ham tahmin tensörleri döndürür. NMS içermeyen, (batch, max_det, 6) biçimindeki detection sonuçları için nms=False ile, desteklenen biçimlere NMS eklemek içinse nms=True ile dışa aktar.

  • quantize=16 (FP16) veya quantize=8 (INT8) ile dışa aktardığında, model boyutunu küçültmek ve performansı artırmak için tensörlerin çoğu daha düşük hassasiyete dönüştürülür. Ancak nms=False etkinleştirildiğinde, sınıf indeksleri dâhil son işleme doğrudan dışa aktarılan grafiğe eklenir.

    output0 tensörü, dahili olarak kayan noktalı değerlerle temsil edilen sınıf indekslerini içerir. FP16, sınırlı mantis hassasiyeti nedeniyle 2048'in üzerindeki tam sayı değerlerini güvenilir biçimde temsil edemez. Olası hassasiyet kaybını veya yanlış sınıf kimliklerini önlemek için output0 bilerek FP32 olarak tutulur.

    Tam FP16 çıktıları gerekiyorsa, bir GPU'da nms=None ile dışa aktar ve son işlemeyi harici olarak gerçekleştir. CPU'da yapılan FP16 ONNX dışa aktarımlarında, yalnızca dahili grafik dönüştürülür; girişler ve çıktılar her durumda FP32 olarak kalır.

Yorumlar