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

Ultralytics YOLO ecosystem and integrations

Giriş

Bir model eğitmenin nihai amacı, onu gerçek dünya uygulamaları için dağıtmaktır. Ultralytics YOLO26'daki Dışa Aktarma modu, eğitilmiş modelini farklı formatlara aktarmak için çok yönlü seçenekler sunarak onu çeşitli platformlarda ve cihazlarda dağıtılabilir hale getirir. Bu kapsamlı kılavuz, model dışa aktarmanın incelikleri konusunda sana yol göstermeyi ve maksimum uyumluluk ile performansa nasıl ulaşacağını göstermeyi amaçlamaktadır.



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 birçok formata dışa aktar.
  • Performans: TensorRT ile 5 kata kadar GPU hızlandırması ve ONNX veya OpenVINO ile 3 kata kadar CPU hızlandırması 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 doğrudan model dışa aktarımı için basit CLI ve Python API.

Dışa Aktarma Modunun Temel Özellikleri

İşte öne çıkan işlevlerden bazıları:

  • Tek Tıkla Dışa Aktarma: Farklı formatlara dışa aktarmak için basit komutlar.
  • Toplu Dışa Aktarma: 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 aktarma deneyimi için derinlemesine kılavuzlar ve eğitimler.
İpucu
  • 3 kata kadar CPU hızlandırması için ONNX veya OpenVINO formatına aktar.
  • 5 kata kadar GPU hızlandırması için TensorRT formatına aktar.

Kullanım Örnekleri

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

Ö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")

Argümanlar

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

ArgümanTürVarsayılanAçıklama
formatstr'torchscript''onnx', 'torchscript', 'engine' (TensorRT) veya diğerleri gibi dışa aktarılan model için hedef format. Her format farklı dağıtım ortamlarıyla uyumluluk sağlar.
imgszint veya tuple640Desired image size for the model input. Can be an integer for square images (e.g., 640 for 640×640) or a tuple (height, width) for specific dimensions.
kerasboolFalseTensorFlow SavedModel için Keras formatına dışa aktarmayı etkinleştirir; TensorFlow sunumu ve API'leriyle uyumluluk sağlar.
optimizeboolFalseTorchScript'e dışa aktarırken mobil cihazlar için optimizasyon uygular; model boyutunu potansiyel olarak küçültür ve çıkarım performansını artırır. NCNN formatı veya CUDA cihazlarıyla uyumlu değildir. DeepX için, çıkarım gecikmesini azaltan ve derleme süresini artıran daha yüksek bir derleyici optimizasyonunu etkinleştirir.
halfboolFalseFP16 (yarı hassasiyetli) nicelemeyi etkinleştirir; model boyutunu küçültür ve desteklenen donanımlarda çıkarımı hızlandırabilir. INT8 niceleme veya yalnızca CPU dışa aktarmalarıyla uyumlu değildir. Yalnızca belirli formatlar için kullanılabilir, ör. ONNX (aşağıya bakınız).
int8boolFalseINT8 nicelemeyi etkinleştirir; modeli daha da sıkıştırır ve minimum doğruluk kaybıyla çıkarımı hızlandırır; öncelikle uç cihazlar için. TensorRT ile kullanıldığında, eğitim sonrası niceleme (PTQ) gerçekleştirir.
dynamicboolFalseTorchScript, ONNX, OpenVINO, TensorRT ve CoreML dışa aktarmaları için dinamik giriş boyutlarına izin verir; değişen görüntü boyutlarını işlemede esnekliği artırır. INT8 ile TensorRT kullanılırken otomatik olarak True olarak ayarlanır.
simplifyboolTrueONNX dışa aktarmaları için model grafiğini onnxslim ile basitleştirir; performansı ve çıkarım motorlarıyla uyumluluğu potansiyel olarak artırır.
opsetintNoneFarklı ONNX ayrıştırıcıları ve çalışma zamanlarıyla uyumluluk için ONNX opset sürümünü belirtir. Ayarlanmazsa, desteklenen en son sürümü kullanır.
workspacefloat veya NoneNoneBellek kullanımı ve performans arasında denge kurarak, TensorRT optimizasyonları için GiB cinsinden maksimum çalışma alanı boyutunu ayarlar. TensorRT tarafından cihazın maksimum kapasitesine kadar otomatik tahsis için None değerini kullan.
nmsboolFalseDesteklendiğinde (bkz. Dışa Aktarma Formatları), dışa aktarılan modele NMS (Non-Maximum Suppression) ekleyerek tespit sonrası işleme verimliliğini artırır. Uçtan uca modeller için kullanılamaz.
batchint1Dışa aktarılan modelin toplu çıkarım boyutunu veya predict modunda aynı anda işleyeceği maksimum görüntü sayısını belirtir. Edge TPU dışa aktarımları için bu değer otomatik olarak 1'e ayarlanır.
devicestrNoneDışa aktarma için cihazı 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 aktarımları otomatik olarak GPU kullanır.
datastr'coco8.yaml'INT8 niceleme kalibrasyonu için gerekli olan veri kümesi yapılandırma dosyasının yolu. INT8 etkinken belirtilmezse, kalibrasyon için yedek olarak coco8.yaml kullanılır.
fractionfloat1.0INT8 niceleme kalibrasyonu için kullanılacak veri kümesi oranını belirtir. Tam veri kümesinin bir alt kümesinde kalibrasyon yapmaya olanak tanır; bu, deneyler veya kaynaklar sınırlı olduğunda kullanışlıdır. INT8 etkinken belirtilmezse, veri kümesinin tamamı kullanılır.
end2endboolNoneNMS içermeyen çıkarımı (YOLO26, YOLOv10) destekleyen YOLO modellerindeki uçtan uca modu geçersiz kılar. Bunu False olarak ayarlamak, bu modelleri geleneksel NMS tabanlı işlem sonrası hattıyla uyumlu olacak şekilde dışa aktarmanı sağlar. Ayrıntılar için Uçtan Uca Tespit rehberine göz at.

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

Dışa Aktarma Formatları

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

Formatformat ArgümanıModelMeta veriArgümanlar
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n_deepx_model/imgsz, int8, data, optimize, device

SSS

Bir YOLO26 modelini ONNX formatına nasıl aktarırım?

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ı yönetme gibi gelişmiş seçenekler de dahil olmak üzere süreç hakkında daha fazla ayrıntı için ONNX entegrasyon kılavuzuna bak.

Model dışa aktarımı için TensorRT kullanmanın faydaları nelerdir?

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ızlandırması sağlayabilir, 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 sayesinde daha hızlı çıkarım elde et.
  • Uyumluluk: NVIDIA donanımıyla sorunsuz bir şekilde entegre ol.

TensorRT entegrasyonu hakkında daha fazla bilgi edinmek için TensorRT entegrasyon kılavuzuna bak.

YOLO26 modelimi dışa aktarırken INT8 nicelemesini (quantization) nasıl etkinleştiririm?

INT8 nicelemesi, özellikle uç cihazlarda modeli sıkıştırmanın ve çıkarımı hızlandırmanın mükemmel bir yoludur. İşte INT8 nicelemesini nasıl etkinleştirebileceğin:

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="engine", int8=True)

INT8 quantization can be applied to various formats, such as TensorRT, OpenVINO, and CoreML. For optimal quantization results, provide a representative dataset using the data parameter.

Modelleri dışa aktarırken dinamik girdi boyutu neden önemlidir?

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

Bu özelliği etkinleştirmek için dışa aktarma sırasında dynamic=True işaretini 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 uygulamalar için özellikle kullanışlıdır.

Model performansını optimize etmek için dikkate alınması gereken temel dışa aktarma argümanları nelerdir?

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 (örneğin, onnx, torchscript, tensorflow).
  • imgsz: Model girdisi için istenen görüntü boyutu (örneğin, 640 veya (height, width)).
  • half: FP16 nicelemesini etkinleştirir, model boyutunu küçültür ve potansiyel olarak çıkarımı hızlandırır.
  • optimize: Mobil veya kısıtlı ortamlar için özel optimizasyonlar uygular.
  • int8: Uç yapay zeka dağıtımları için oldukça faydalı olan INT8 nicelemesini 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.

Dışa aktarılan YOLO modellerinde çıktı tensörleri neyi temsil eder?

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.

Tespit modelleri için (örneğin, yolo26n.pt), çıktı genellikle (batch_size, 4 + num_classes, num_predictions) şeklinde tek bir tensördür; burada kanallar kutu koordinatlarını ve sınıf başına skorları temsil eder ve num_predictions dışa aktarma girdi çözünürlüğüne bağlıdır (ve dinamik olabilir).

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

Poz modelleri için (örneğin, yolo26n-pose.pt), çıktı tensörü genellikle (batch_size, 4 + num_classes + keypoint_dims, num_predictions) şeklindedir; burada keypoint_dims poz spesifikasyonuna (örneğin, 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 örneklerindeki örnekler, her model türü için bu çıktıların nasıl işleneceğini gösterir.

Why is output0 FP32 when exporting with half=True and end2end=True?

half=True (veya int8=True) ile dışa aktarırken, çoğu tensör model boyutunu küçültmek ve performansı artırmak için daha düşük hassasiyete dönüştürülür. Ancak end2end=True etkinleştirildiğinde, son işleme (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ı mantis hassasiyeti nedeniyle 2048'in üzerindeki tam sayı değerlerini güvenilir bir şekilde temsil edemez. Potansiyel hassasiyet kaybını veya yanlış sınıf kimliklerini önlemek için output0 kasıtlı olarak FP32'de tutulur.

Bu davranış beklenendir ve sınıf indeksi doğruluğunun korunması gereken daha düşük hassasiyetli veya nicelenmiş dışa aktarmalar için de geçerlidir.

Eğer tam FP16 çıktıları gerekiyorsa, end2end=False ile dışa aktar ve son işlemeyi harici olarak gerçekleştir.

Yorumlar