Ultralytics YOLO27:

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

Ultralytics YOLO ecosystem and integrations

Giriş#

Bir model eğitmenin nihai amacı, modeli gerçek dünya uygulamaları için dağıtmaktır. Ultralytics YOLO26 içindeki Dışa Aktarma modu, eğitilmiş modelini farklı formatlara aktarman için çok yönlü seçenekler sunarak modelin çeşitli platformlarda ve cihazlarda dağıtılabilmesini sağlar. Bu kapsamlı kılavuz, model dışa aktarımının inceliklerini adım adım göstermeyi ve maksimum uyumluluk ile performans elde etmenin nasıl sağlanacağını sergilemeyi amaçlamaktadır.

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



Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀

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

  • Çok Yönlülük: ONNX, TensorRT, CoreML ve daha fazlası dahil olmak üzere birden fazla forma dışa aktar.
  • Performans: TensorRT ile 5 kata kadar GPU hızlanması ve ONNX veya OpenVINO ile 3 kata kadar CPU hızlanması elde et.
  • Uyumluluk: Modelini çok sayıda donanım ve yazılım ortamında evrensel olarak dağıtılabilir hale getir.
  • Kullanım Kolaylığı: Hızlı ve anlaşılır model dışa aktarımı için basit CLI ve Python API.

Dışa Aktarma Modunun Temel Özellikleri#

Öne çıkan işlevlerden bazıları şunlardır:

  • Tek Tıkla Dışa Aktarım: Farklı formatlara dışa aktarma için basit komutlar.
  • Toplu Dışa Aktarım: Toplu çıkarım yapabilen modelleri dışa aktar.
  • Optimize Edilmiş Çıkarım: Dışa aktarılan modeller, daha hızlı çıkarım süreleri için optimize edilmiştir.
  • Eğitim Videoları: Sorunsuz bir dışa aktarım deneyimi için derinlemesine kılavuzlar ve eğitimler.
İpucu
  • 3 kata kadar CPU hızlanması için ONNX veya OpenVINO formatına dışa aktar.
  • 5 kata kadar GPU hızlanması için TensorRT formatına dışa aktar.

Kullanım Örnekleri#

Bir YOLO26n modelini ONNX veya TensorRT gibi farklı bir forma dışa aktar. Dışa aktarma argümanlarının tam listesi için aşağıdaki Argümanlar bölümüne bakın.

Örnek
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

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

Bu tablo, YOLO modellerini farklı formatlara aktarmak için mevcut olan yapılandırmaları ve seçenekleri detaylandırmaktadır. Bu ayarlar, dışa aktarılan modelin performansını, boyutunu ve çeşitli platformlar ile ortamlardaki uyumluluğunu optimize etmek için kritik önem taşır. Doğru yapılandırma, modelin amaçlanan uygulamada en yüksek verimlilikle dağıtıma hazır olmasını sağlar.

Bağımsız değişkenTürVarsayılanAçıklama
formatstr'torchscript'Dışa aktarılan model için 'onnx', 'torchscript', 'engine' (TensorRT) veya diğerleri gibi hedef biçimi belirtir. Her biçim, farklı dağıtım ortamlarıyla uyumluluk sağlar.
namestrNoneGerektiren biçimler için donanım hedefinin adı: Hailo mimarisi ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; varsayılanı 'hailo8l'), Rockchip RKNN çipi (varsayılanı 'rk3588'), Huawei Ascend SoC (bir CANN --soc_version; varsayılanı 'Ascend310B4') veya Qualcomm QNN HTP hedefi (varsayılanı '73'). Diğer modlar tarafından kullanılan project/name çalıştırma adlandırma çiftinden farklıdır.
imgszint veya tuple640Model girdisi için istenen görüntü boyutudur. Kare görüntüler için bir tamsayı (ör. 640×640 için 640) veya belirli boyutlar için bir demet (height, width) olabilir. Belirtilmediğinde dışa aktarma, yüklenen checkpoint'te kayıtlı eğitim boyutunu yeniden kullanır: resmi YOLO26 checkpoint'leri derinlik için 768, sınıflandırma için 224, OBB için 1024 ve diğer görevler için 640 kaydeder; fine-tune ise eğitildiği imgsz değerini kaydeder. YAML'dan oluşturulan bir modelin kayıtlı eğitim boyutu yoktur ve 640 kullanır.
kerasboolFalseTensorFlow SavedModel için Keras biçimine dışa aktarmayı etkinleştirir ve TensorFlow serving ile API'leriyle uyumluluk sağlar.
optimizeboolFalseDEEPX için daha yüksek derleyici optimizasyonunu etkinleştirir; derleme süresini artırırken çıkarım gecikmesini azaltır.
quantizeint veya strNoneKuantizasyon hassasiyeti: 16 (FP16, model boyutunu küçültür ve desteklenen donanımda çıkarımı hızlandırabilir) veya 8 (INT8/PTQ, minimal doğruluk kaybıyla modeli daha da sıkıştırır, öncelikle uç cihazlar içindir; data/fraction kalibrasyonu gerekir); 32/ayarlanmamış ise FP32'dir. quantize=8 ile eğitilmiş bir kontrol noktası her zaman INT8 dışarı aktarır: onnx ve engine, kalibrasyon gerektirmeden taşıdığı aralıklardan dışarı aktarım yapar ve diğer formatlar veya hassasiyetler reddedilir. Karma ağırlık/aktivasyon hassasiyetini destekleyen dışarı aktarım formatları ayrıca 'w8a8'/'w16a16'/'w8a16'/'w8a32' gösterimini de kabul eder. Kullanımdan kaldırılan half/int8 bayraklarının yerini alır (half=True16, int8=True8, kullanım dışı kalma uyarısıyla hala kabul edilir). Yalnızca hedef format tarafından desteklenen hassasiyetlere izin verilir (aşağıya bakın).
dynamicboolFalseTorchScript, ONNX, OpenVINO, TensorRT ve CoreML dışa aktarmaları için dinamik giriş boyutlarına izin vererek değişken görüntü boyutlarının işlenmesinde esneklik sağlar.
simplifyboolTrueBir ara ONNX grafiği oluşturan dışa aktarmalarda onnxslim ile bu grafiği basitleştirir (bkz. Dışa Aktarma Biçimleri); bu, performansı ve çıkarım motorlarıyla uyumluluğu potansiyel olarak iyileştirebilir.
opsetintNoneBir ONNX grafiği oluşturan dışa aktarmalar için ONNX opset sürümünü belirtir (bkz. Dışa Aktarma Biçimleri); farklı ONNX ayrıştırıcıları ve çalışma zamanlarıyla uyumluluk sağlar. Ayarlanmazsa desteklenen en son sürümü kullanır.
workspacefloat veya NoneNoneTensorRT optimizasyonları için maksimum çalışma alanı boyutunu GiB cinsinden belirler ve bellek kullanımı ile performansı dengeler. TensorRT tarafından cihazın maksimumuna kadar otomatik ayırma yapmak için None kullan.
nmsbool, isteğe bağlıNoneNone, harici NMS için ham bire-çok tahminleri dışarı aktarır; True, desteklenen yerlerde NMS'yi gömer; False, mevcut olduğunda NMS içermeyen başlığı seçer. CoreML gömülü NMS, statik şekillerle algılama (detect), segmentasyon (segment) ve poz tahminini (pose) destekler. Uçtan Uca Algılama kılavuzuna göz at.
conffloatNoneDışa aktarma sırasında NMS oluşturulan her yerde kullanılan güven eşiğidir: nms=True dışa aktarmaları; Hailo'nun uçtan uca olmayan algılama dışa aktarmaları; ve dahili olarak nms=True değerini zorlayan IMX algılama, poz ve segment dışa aktarmaları. Ayarlanmadığında varsayılan değer 0.25 olur.
ioufloat0.7Dışa aktarma sırasında NMS oluşturulan her yerde kullanılan IoU eşiğidir: nms=True dışa aktarmaları; Hailo'nun uçtan uca olmayan algılama dışa aktarmaları; ve dahili olarak nms=True değerini zorlayan IMX algılama, poz ve segment dışa aktarmaları.
max_detint300Dışarı aktarılan modelin çıktısında tutulan maksimum algılama sayısı. CoreML tespiti hariç her formatta nms=True dışa aktarımlarına uygulanır; CoreML tespitinin yerel NMS boru hattında algılama sınırı bulunmaz, ayrıca NMS içermeyen uçtan uca tespit dışa aktarımları (YOLO26, YOLOv10, mevcut çapa sayısıyla sınırlıdır) ve IMX'in tespit, poz ve segment dışa aktarımları bu kapsamdadır.
agnostic_nmsboolFalseStandart nms=True işlem hattı aracılığıyla dışa aktarma sırasında NMS oluşturulan her yerde sınıftan bağımsız NMS'yi etkinleştirir; buna CoreML'nin kendi NMS aşaması da dahildir. Daha düşük puanlı çakışan kutuları yalnızca aynı sınıf içinde değil, farklı sınıflar arasında da bastırır. Kendi oluşturduğu NMS yapılandırmalarında sınıftan bağımsız seçenek bulunmadığından Hailo veya IMX'nin kendi NMS yapılandırmaları tarafından dikkate alınmaz ve bu işaretten bağımsız olarak sınıf farkındalığını korur. NMS'siz uçtan uca dışa aktarmalara da (YOLO26, YOLOv10) işlenir; burada yalnızca aynı algılamanın birden çok sınıf etiketi altında görünmesini (IoU=1.0 yinelemeleri) önler, farklı kutular arasında IoU eşiğine dayalı bastırma yapmaz.
batchint1Dışa aktarılan modelin batch çıkarım boyutunu veya predict modunda eşzamanlı olarak işleyeceği maksimum görüntü sayısını belirtir. Edge TPU dışa aktarmalarında bu değer otomatik olarak 1'e ayarlanır.
devicestrNoneDışa aktarma cihazını belirtir: GPU (device=0), CPU (device=cpu), Apple silicon için MPS (device=mps), Huawei Ascend NPU (device=npu veya device=npu:0) veya NVIDIA Jetson için DLA (device=dla:0 veya device=dla:1). TensorRT dışa aktarmaları otomatik olarak GPU kullanır, ancak TensorRT 11.0 DLA'yı desteklemez.
verboseboolFalseformat='engine' dışa aktarması sırasında TensorRT oluşturucu günlüğünün önem düzeyini VERBOSE'a yükseltir. Diğer dışa aktarma biçimleri bunu yok sayar.
datastrNoneINT8 kuantizasyon kalibrasyonu için gerekli olan veri kümesi YAML dosyasına giden yol; sınıflandırma bunun yerine bir veri kümesi dizini veya yerleşik bir veri kümesi adı alır. INT8 etkinken belirtilmediği takdirde Ultralytics, gerektiğinde görev odaklı bir kalibrasyon veri kümesi seçer veya model görevi için varsayılan veri kümesine geri döner. quantize=8 ile eğitilmiş bir kontrol noktası kendi INT8 aralıklarını taşır ve kalibrasyon verisine ihtiyaç duymaz.
splitstr'val'data üzerinden INT8 niceleme kalibrasyon 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ümesidir: bir oran, görüntü sayısı veya [train, val, test] değerleri. 1 tam bölümü ifade eder, 1 üzerindeki tamsayılar görüntü sayısıdır ve yalnızca isteğe bağlı test girdisi, hiçbiri anlamında 0/0.0 değerlerini kabul eder. İki öğeli listeler test değerini tam bırakır.

Bu parametreleri ayarlamak, dışa aktarma sürecini dağıtım ortamı, donanım kısıtlamaları ve performans hedefleri gibi belirli gereksinimlere uyacak şekilde özelleştirmeye olanak tanır. Uygun formatı ve ayarları seçmek, model boyutu, hızı ve doğruluk arasında en iyi dengeyi yakalamak için esastır.

Dışa Aktarma Biçimleri#

Mevcut YOLO26 dışa aktarma formatları aşağıdaki tabloda yer almaktadır. format argümanını, yani format='onnx' veya format='engine' argümanını kullanarak herhangi bir formata dışa aktarabilirsin. Doğrudan dışa aktarılan modeller üzerinde tahmin yapabilir veya doğrulama gerçekleştirebilirsin, yani yolo predict model=yolo26n.onnx. Kullanım örnekleri, dışa aktarım tamamlandıktan sonra modelin için gösterilir. Modeller ayrıca herhangi bir yerel kurulum gerektirmeden Ultralytics Platform üzerinden doğrudan tarayıcıdan da dışa aktarılabilir.

Biçimformat bağımsız değişkeniModelMeta verilerBağımsız değişkenler
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, 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.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n.aimodelimgsz, batch, quantize

nms=None, harici NMS için varsayılan olarak ham çıktıları kullanır. Mevcut bir NMS'siz başlığı seçmek için nms=False değerini ayarla; desteklenmeyen formatlar yerel çıktı yollarına geri döner. Yukarıdaki nms girdileri, NMS'yi nms=True ile gömebilen formatları tanımlar.

Dışa aktarma bağımlılıklarının otomatik olarak yüklenmesi

Çoğu format, ultralytics ile yüklenmeyen paketlere ihtiyaç duyar. Biri eksik olduğunda dışa aktarma işlemi bunu çalışma zamanında uv veya pip ile ve Edge TPU derleyicisi ya da IMX için Java gibi sistem paketleri için Linux üzerinde apt ile yükler. Ortamı, örneğin bir konteyner görüntüsünde, CI işinde veya üretim servisindeyken sabit tutmak için YOLO_AUTOINSTALL=False ayarını yap. Dışa aktarma işlemi bu durumda da eksik paketleri kontrol eder ve bunları bildirir, ancak ortamı değiştirmeden bırakır ve paketler yüklenene kadar başarısız olur.

export YOLO_AUTOINSTALL=False

Niceleme Seçenekleri#

Dışa aktarma hassasiyetini istemek için quantize argümanını kullan. Metin değerleri büyük/küçük harf duyarsızdır ve Ultralytics, kabul edilen takma adları dışa aktarmadan önce standartlaştırır:

İstek değerleriStandart 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ı; varsayılan olarak FP16 kullanan CoreML NMS ML Programları hariç ayarlanmamış ile aynıdır
"w8a16""w8a16"16 bit aktivasyonlara sahip INT8 ağırlıkları (FP16; LiteRT üzerinde INT16)
"w8a32""w8a32"FP32 aktivasyonlarına sahip INT8 ağırlıkları (LiteRT dinamik INT8, kalibrasyon gerekmez)

Eski half=True ve int8=True bayrakları, kullanım dışı kalma uyarılarıyla hala kabul edilmekte ve quantize=16 ile quantize=8 değerlerine yönlendirilmektedir.

Her dışa aktarma formatı her hassasiyeti desteklemez. Açık quantize istekleri ya bu hassasiyeti üretir ya da dışa aktarmadan önce başarısız olur:

BiçimFP32 (32/ayarlanmamış)FP16 (16)INT8 (8)W8A16 ("w8a16")Notlar
PyTorchN/AN/AN/AYerel eğitim/kontrol noktası formatı.
TorchScript✅ Yalnızca GPUFP16 TorchScript dışa aktarımı device=0 gerektirir; CPU dışa aktarımı FP32'dir.
ONNXINT8, ONNX Runtime statik nicelemesini ve kalibrasyon verilerini kullanır.
OpenVINOINT8, NNCF eğitim sonrası nicelemesini kullanır.
TensorRTINT8, temsili kalibrasyon verilerine ihtiyaç duyar.
CoreML✅¹CoreML INT8 ağırlık nicelemesidir; W8A16, FP16 aktivasyonlu INT8 ağırlıklarını kullanır. ¹Ayarlanmamış NMS ML Programları varsayılan olarak FP16 kullanır.
TF SavedModelINT8 dışa aktarımı TensorFlow kalibrasyonunu kullanır.
TF GraphDefDışa aktarma zamanında hassasiyet dönüşümü yoktur.
Edge TPU✅ otomatikEdge TPU, INT8 gerektirir; ayarlanmadığında otomatik olarak etkinleştirilir.
PaddlePaddleDışa aktarma zamanında hassasiyet dönüşümü yoktur.
MNNINT8, MNN dönüşümü yoluyla ağırlık nicelemesidir.
NCNNMobil/gömülü çalışma zamanı formatı.
IMX500✅ otomatikIMX500 niceleme gerektirir; ayarlanmadığında INT8 otomatik olarak etkinleştirilir.
RKNN✅ çipe bağımlıRK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B FP16 veya INT8 destekler; RV1103/RV1106 varyantları yalnızca INT8'dir.
ExecuTorchDışa aktarma zamanında hassasiyet dönüşümü yoktur.
Axelera✅ otomatikAxelera dışa aktarımı INT8 gerektirir; ayarlanmadığında otomatik olarak etkinleştirilir.
DEEPX✅ otomatikDEEPX dışa aktarımı INT8 gerektirir; ayarlanmadığında otomatik olarak etkinleştirilir.
Qualcomm QNN✅ otomatikQNN HTP dışa aktarımı, 16 bit aktivasyonlara sahip INT8 ağırlıklarına sabitlenmiştir.
LiteRTStatik INT8 (8) ve "w8a16" (int8 ağırlıkları + int16 aktivasyonları) kalibrasyon verileri kullanır; ayrıca "w8a32" dinamik INT8'i (kalibrasyon gerektirmez) destekler. quantize=16 ayrı bir dışa aktarım değildir; bir FP32 model, GPU temsilcisi aracılığıyla çalışma zamanında FP16 olarak çalışır.
Hailo✅ otomatikHailo dışa aktarımı INT8 gerektirir; ayarlanmadığında otomatik olarak etkinleştirilir.
Huawei Ascend✅ otomatikAscend AI Core evrişimleri yalnızca FP16/INT8 girdilerini kabul eder, bu nedenle ATC FP16 derler; ayarlanmadığında otomatik olarak etkinleştirilir.
Core AIVarsayılan olarak FP32 veya quantize=16 içeren bir FP16 .aimodel varlığı; INT8 yolu yoktur.

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

Nice Duyarlı Eğitimi#

Yukarıdaki INT8 dışa aktarımları, eğitim sonrası nicemlemedir (PTQ): aralıklar data üzerinde tek bir kalibrasyon geçişiyle gözlemlenir. Nicemleme farkındalıklı eğitim (QAT) ise bunun yerine, döngü içinde sahte nicemleme ile ince ayar yaparak INT8'e tolerans gösteren ağırlıkları öğrenir; bu da yalnızca kalibrasyonun kaybettiği doğruluğu geri kazandırır. Önceden eğitilmiş bir kontrol noktasında ince ayar yapmak için quantize=8 parametresini train değerine iletin ve ardından her zamanki gibi dışa aktarın:

Ö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)  # ranges travel with the checkpoint, no calibration data needed

Önceden eğitilmiş bir kontrol noktasına ince ayar yaparken küçük bir öğrenme hızı kullan. QAT başlangıçta doğruluğu azaltabilir ve bunun eğitim sonrası kuantamaya göre avantajı modele, veri setine ve eğitim bütçesine bağlıdır. Dışa aktarılan modeli hem orijinal kontrol noktasına hem de eğitim sonrası kuantalanmış bir dışa aktarıma karşı doğrula; eğitim sırasındaki sahte kuantalama skorları dağıtım doğruluğunu belirlemez.

QAT'nin ne kadar değerli olduğu, dışa aktarma arka ucunun kendi kalibrasyonunun modeli ne kadar iyi yönettiğine bağlıdır. Aşağıdaki değerler, imgsz=640 ve 1 yığın boyutunda TensorRT 10.16 motorlarıyla ölçülen COCO val2017 üzerindeki mAP50-95 değerleridir; burada her QAT kontrol 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, aralık boyunca FP32'ye kıyasla 0,008 ila 0,017 mAP50-95 maliyet getirirken, eğitim sonrası nicemleme yolo26n üzerinde 0,010 ve daha büyük modellerde 0,038 ila 0,057 maliyet getirir. Dolayısıyla QAT, kalibrasyonun zaten iyi çalıştığı en küçük modelde neredeyse hiçbir şey kazandırmazken, geri kalanında 0,030 ila 0,044 kazandırır. Farklı bir veri kümesinde, dışa aktarma formatında veya TensorRT sürümünde farklı rakamlar bekleyin ve kendiniz ölçün.

QAT modelleri compile=False gerektirir; ModelOpt'un kuantalanmış modülleri torch.compile desteklemez.

INT8 doğruluk kaybını sınırlamak amacıyla kafanın nihai çıktı konvolüsyonları bilerek float türünde bırakılır; TensorRT, kuantize edilmemiş katmanları için FP16 karma duyarlılığı etkinleştirir. QAT, ilk kullanımda otomatik olarak yüklenen NVIDIA TensorRT Model Optimizer aracılığıyla çalışır ve elde edilen kontrol noktasının yüklenmesi için NVIDIA TensorRT Model Optimizer gereklidir. Bu aralıklar kontrol noktasıyla birlikte taşınır ve onnx ile engine dışarı aktarımları bunları Q/DQ düğümleri olarak yayar; diğer biçimler bunun yerine kalibrasyonu okur ve bir QAT kontrol noktasını reddeder.

Sırada Ne Var?#

Dışa aktarılan modelin nasıl çalıştırılacağını öğrenmek için tam entegrasyon listesi üzerinde bulunan ONNX, TensorRT, CoreML ve daha fazlası arasından dağıtım hedefinin entegrasyon kılavuzunu bul.

SSS#

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

    Örnek
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")  # load an official model
    model = YOLO("path/to/best.pt")  # load a custom-trained model
    
    # Export the model
    model.export(format="onnx")

    Farklı girdi boyutlarını ele almak gibi gelişmiş seçenekler de dahil olmak üzere süreç hakkında daha fazla ayrıntı için ONNX entegrasyon kılavuzuna bakın.

  • Model dışa aktarımı için TensorRT kullanmak önemli performans iyileştirmeleri sunar. TensorRT'ye aktarılan YOLO26 modelleri, 5 kata kadar GPU hızlanması elde edebilir ve bu da onu gerçek zamanlı çıkarım uygulamaları için ideal kılar.

    • Çok Yönlülük: Modelleri belirli bir donanım kurulumu için optimize et.
    • Hız: Gelişmiş optimizasyonlar yoluyla daha hızlı çıkarım elde et.
    • Uyumluluk: NVIDIA donanımı ile sorunsuz bir şekilde entegre ol.

    TensorRT'yi entegre etmek hakkında daha fazla bilgi edinmek için TensorRT entegrasyon kılavuzuna bakın.

  • INT8 nicelemesi, özellikle uç cihazlarda modeli sıkıştırmak ve çıkarımı hızlandırmak için mükemmel bir yoldur. INT8 nicelemesini şu şekilde etkinleştirebilirsin:

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

    INT8 nicelemesi ONNX, TensorRT, OpenVINO, CoreML ve Rockchip RKNN gibi formatlara 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 formatlar için Niceleme Seçenekleri bölümüne bakın.

  • Dinamik girdi boyutu, dışa aktarılan modelin değişen görüntü boyutlarını işlemesine olanak tanır; bu da farklı kullanım senaryoları için esneklik sağlar ve işleme verimliliğini optimize eder. ONNX veya TensorRT gibi formatlara aktarım yaparken dinamik girdi boyutunu etkinleştirmek, modelin farklı girdi şekillerine sorunsuz bir şekilde uyum sağlayabilmesini garanti eder.

    Bu özelliği etkinleştirmek için dışa aktarım 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, özellikle video işleme veya farklı kaynaklardan gelen görüntüleri işleme gibi girdi boyutlarının değişebileceği uygulamalar için oldukça faydalıdır.

  • Dışa aktarma argümanlarını anlamak ve yapılandırmak, model performansını optimize etmek için çok önemlidir:

    • format: Dışa aktarılan model için hedef format (örn. onnx, torchscript, saved_model).
    • imgsz: Model girdisi için istenen görüntü boyutu (örn. 640 veya (height, width)).
    • quantize: 8/"int8", 16/"fp16", 32/"fp32" gibi niceleme hassasiyeti veya desteklenen formatlarda karma ağırlık/aktivasyon şemaları "w8a16" ve "w8a32" (LiteRT dinamik INT8). Niceleme Seçenekleri bölümüne bakın.
    • optimize: DEEPX dışa aktarımları için daha yüksek derleyici optimizasyonunu etkinleştirir.

    Belirli donanım platformlarında dağıtım için NVIDIA GPU'lar için TensorRT, Apple cihazları için CoreML veya Google Coral cihazları için Edge TPU gibi özel dışa aktarma formatlarını kullanmayı düşün.

  • Bir YOLO modelini ONNX veya TensorRT gibi formatlara aktardığında, çıktı tensörü yapısı model görevine bağlıdır. Bu çıktıları anlamak, özel çıkarım uygulamaları için önemlidir.

    YOLO26 algılama modelleri için (yolo26n.pt gibi) nms=False ile dışarı aktarılan desteklenen biçimler, [x1, y1, x2, y2, confidence, class_id] değerleriyle birlikte (batch_size, max_detections, 6) biçiminde NMS içermeyen çıktı üretir. Varsayılan max_det=300 ile bu genellikle (batch_size, 300, 6) şeklindedir. Bazı kısıtlı biçimler, uçtan uca operatörlerin desteklenmediği durumlarda otomatik olarak geleneksel çıktı düzenine geri döner.

    Varsayılan olarak (nms=None), YOLO26 dahil tespit modelleri ham bire-çok (one-to-many) tahminler dışarı aktarır: çıktı tipik olarak kanalların kutu koordinatlarını ve sınıf başına skorları temsil ettiği (batch_size, 4 + num_classes, num_predictions) şeklinde tek bir tensördür ve num_predictions, dışarı aktarma girdi çözünürlüğüne bağlıdır (ve dinamik olabilir). Uçtan Uca Tespit kılavuzu, hangi formatların uçtan uca çıktıyı koruduğunu kapsar.

    Segmentasyon modelleri için (örn. yolo26n-seg.pt), genellikle iki çıktı alırsın: kutular, sınıf skorları ve maske katsayıları içeren (batch_size, 4 + num_classes + mask_dim, num_predictions) şeklinde biçimlendirilmiş ilk tensör ve örnek maskeleri oluşturmak için katsayılarla birlikte kullanılan maske prototipleri içeren (batch_size, mask_dim, proto_h, proto_w) şeklinde biçimlendirilmiş ikinci tensör. Boyutlar dışa aktarma girdi çözünürlüğüne bağlıdır (ve dinamik olabilir).

    Poz modelleri için (örn. yolo26n-pose.pt), çıktı tensörü genellikle (batch_size, 4 + num_classes + keypoint_dims, num_predictions) şeklinde biçimlendirilir; burada keypoint_dims poz spesifikasyonuna (örn. anahtar nokta sayısı ve güven skorunun dahil edilip edilmediği) ve num_predictions dışa aktarma girdi çözünürlüğüne bağlıdır (ve dinamik olabilir).

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

  • Ultralytics şu anda YOLO modelleri için özel bir C++ çıkarım API'si sağlamamaktadır. C++ dağıtımları için modeli ONNX, TensorRT, TorchScript veya MNN gibi bir çalışma zamanı formatına aktar ve ardından dışa aktarılan yapıyı bu çalışma zamanının yerel C++ API'si ile yükle.

    Örneğin, bir algılama modelini yolo export model=yolo26n.pt format=onnx ile dışarı aktar ve .onnx dosyasını ONNX Runtime C++ ile çalıştır ya da format=engine ile dışarı aktar ve TensorRT motorunu bir TensorRT C++ uygulamasından çalıştır. Özel C++ son işlem adımları kullandığında, görev ve dışarı aktarma ayarların için çıktı tensör düzenini eşleştir; varsayılan YOLO26 algılama dışarı aktarımları, harici NMS gerektiren ham tahmin tensörleri döndürür. nms=False şeklindeki NMS içermeyen algılamalar için (batch, max_det, 6) ile ya da desteklenen biçimlerde NMS gömmek için nms=True ile dışarı aktar.

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

    output0 tensörü, dahili olarak kayan noktalı değerler olarak temsil edilen sınıf indekslerini içerir. FP16, sınırlı basamak hassasiyeti nedeniyle 2048'in üzerindeki tamsayı değerlerini güvenilir bir şekilde temsil edemez. Olası hassasiyet kaybını veya yanlış sınıf kimliklerini önlemek için output0 kasıtlı olarak FP32 tutulur.

    Bu davranış beklendiği gibidir ve sınıf indeksi doğruluğunun korunması gereken daha düşük hassasiyetli veya niceleştirilmiş dışa aktarımlar için de geçerlidir.

    Tam FP16 çıktılar gerekiyorsa, nms=None ile dışarı aktar ve son işlemleri harici olarak gerçekleştir.

Yorumlar