Link to this sectionUltralytics YOLO ile Model Dışa Aktarımı#
Link to this sectionGiriş#
Bir modeli eğitmenin nihai amacı, onu gerçek dünya uygulamalarında kullanıma sunmaktır. Ultralytics YOLO26'daki dışa aktarma modu (Export mode), eğitilmiş modelini farklı formatlara dönüştürmen için çok yönlü seçenekler sunar; böylece modelini çeşitli platformlarda ve cihazlarda çalıştırabilirsin. Bu kapsamlı kılavuz, model dışa aktarmanın inceliklerini sana anlatmayı 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 🚀
Link to this sectionNeden 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ım yapabilirsin.
- Performans: TensorRT ile 5 kata kadar GPU hızlandırması ve ONNX veya OpenVINO ile 3 kata kadar CPU hızlandırması elde edebilirsin.
- Uyumluluk: Modelini sayısız donanım ve yazılım ortamında evrensel olarak kullanılabilir hale getirebilirsin.
- Kullanım Kolaylığı: Hızlı ve doğrudan model dışa aktarımı için basit CLI ve Python API'si mevcuttur.
Link to this sectionDışa Aktarma Modunun Temel Özellikleri#
İşte öne çıkan bazı işlevler:
- Tek Tıkla Dışa Aktarım: Farklı formatlara dışa aktarmak için basit komutlar kullanabilirsin.
- Toplu Dışa Aktarım: Toplu çıkarım (batch-inference) yapabilen modelleri dışa aktarabilirsin.
- Optimize Edilmiş Çıkarım: Dışa aktarılan modeller, daha hızlı çıkarım süreleri için optimize edilir.
- Eğitim Videoları: Sorunsuz bir dışa aktarma deneyimi için derinlemesine kılavuzlar ve eğitimler mevcuttur.
Link to this sectionKullanım Örnekleri#
Bir YOLO26n modelini ONNX veya TensorRT gibi farklı bir formata dışa aktarabilirsin. Dışa aktarma argümanlarının tam listesi için aşağıdaki Argümanlar bölümüne bakabilirsin.
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")Link to this sectionArgümanlar#
Bu tablo, YOLO modellerini farklı formatlara dışa 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 platformlardaki uyumluluğunu optimize etmek için kritiktir. Doğru yapılandırma, modelin amaçlanan uygulamada en iyi verimlilikle dağıtıma hazır olmasını sağlar.
| Argüman | Tip | Varsayılan | Açıklama |
|---|---|---|---|
format | str | 'torchscript' | Modelin dışa aktarılacağı hedef format; örneğin 'onnx', 'torchscript', 'engine' (TensorRT) veya diğerleri. Her format farklı dağıtım ortamlarıyla uyumluluk sağlar. |
imgsz | int veya tuple | 640 | Model girdisi için istenen görüntü boyutu. Kare görüntüler için bir tam sayı (örneğin, 640×640 için 640) veya belirli boyutlar için bir demet (height, width) olabilir. |
keras | bool | False | TensorFlow SavedModel için Keras formatına dışa aktarmayı etkinleştirir, TensorFlow sunumu ve API'leriyle uyumluluk sağlar. |
optimize | bool | False | TorchScript'e dışa aktarırken mobil cihazlar için optimizasyon uygular, potansiyel olarak model boyutunu 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. |
half | bool | False | FP16 (yarı hassasiyetli) nicemlemeyi etkinleştirerek model boyutunu küçültür ve desteklenen donanımlarda çıkarımı hızlandırabilir. INT8 nicemleme veya sadece CPU dışa aktarımlarıyla uyumlu değildir. Yalnızca belirli formatlar için kullanılabilir, örneğin ONNX (aşağıya bakın). |
int8 | bool | False | INT8 nicelemeyi etkinleştirerek modeli daha fazla sıkıştırır ve minimum doğruluk kaybıyla çıkarımı hızlandırır; bu özellik temel olarak uç cihazlar için kullanılır. TensorRT 11+ sürümü ModelOpt açık Q/DQ nicelemesini kullanırken, TensorRT 7-10 sürümleri bir kalibratör ile PTQ kullanır. |
dynamic | bool | False | TorchScript, ONNX, OpenVINO, TensorRT ve CoreML dışa aktarımları için dinamik giriş boyutlarına izin vererek değişen görüntü boyutlarını işlemede esnekliği artırır. |
simplify | bool | True | ONNX dışa aktarımları için model grafiğini onnxslim ile sadeleştirerek performansı ve çıkarım motorlarıyla uyumluluğu potansiyel olarak artırır. |
opset | int | None | Farklı 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. |
workspace | float veya None | None | TensorRT optimizasyonları için GiB cinsinden maksimum çalışma alanı boyutunu ayarlar, bellek kullanımı ile performans arasında denge kurar. TensorRT tarafından cihaz maksimumuna kadar otomatik tahsis için None kullanın. |
nms | bool | False | Desteklendiğinde (bkz. Dışa Aktarma Formatları) dışa aktarılan modele Non-Maximum Suppression (NMS) ekleyerek tespit son işleme verimliliğini artırır. Uçtan uca modeller için mevcut değildir. |
batch | int | 1 | Dışa aktarılan modelin toplu çıkarım boyutunu veya dışa aktarılan modelin predict modunda eşzamanlı olarak işleyeceği maksimum görüntü sayısını belirtir. Edge TPU dışa aktarımları için bu otomatik olarak 1'e ayarlanır. |
device | str | None | Dışa aktarma için cihazı belirtir: GPU (device=0), CPU (device=cpu), Apple silikon 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 desteği sunmaz. |
data | str | None | INT8 kuantizasyon kalibrasyonu için gerekli olan veri kümesi yapılandırma dosyasının yolu. INT8 etkinleştirildiğinde belirtilmezse, Ultralytics gerektiğinde göreve özel bir kalibrasyon veri kümesi seçer veya model görevi için varsayılan veri kümesine geri döner. |
fraction | float | 1.0 | INT8 nicemleme kalibrasyonu için kullanılacak veri kümesi oranını belirtir. Deneyler veya kaynakların sınırlı olduğu durumlar için yararlı olan tam veri kümesinin bir alt kümesinde kalibrasyona izin verir. INT8 etkinleştirildiğinde belirtilmezse, veri kümesinin tamamı kullanılır. |
end2end | bool | None | NMS içermeyen çıkarımı destekleyen YOLO modellerindeki (YOLO26, YOLOv10) uçtan uca modu geçersiz kılar. False olarak ayarlamak, bu modelleri geleneksel NMS tabanlı son işleme hattıyla uyumlu olacak şekilde dışa aktarmanıza olanak tanır. Ayrıntılar için Uçtan Uca Tespit kılavuzuna bakın. |
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 biçimi ve ayarları seçmek, model boyutu, hızı ve doğruluğu arasında en iyi dengeyi elde etmek için esastır.
Link to this sectionDışa Aktarma Formatları#
Mevcut YOLO26 dışa aktarma formatları aşağıdaki tablodadır. format argümanını kullanarak, örneğin format='onnx' veya format='engine' şeklinde herhangi bir formata dışa aktarabilirsin. Dışa aktarılan modeller üzerinde doğrudan tahmin veya doğrulama yapabilirsin, örneğin yolo predict model=yolo26n.onnx. Kullanım örnekleri, dışa aktarma tamamlandıktan sonra modelin için gösterilir. Modeller ayrıca herhangi bir yerel kurulum gerektirmeden Ultralytics Platformu üzerinden doğrudan tarayıcıdan da dışa aktarılabilir.
| Format | format Argümanı | Model | Meta veriler | Argümanlar |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, half, int8, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, half, int8, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz, batch, name, int8, data, fraction, device |
Link to this sectionSSS#
Link to this sectionBir YOLO26 modelini ONNX formatına nasıl dışa aktarırım?#
Bir YOLO26 modelini ONNX formatına dışa aktarmak, Ultralytics ile oldukça kolaydır. Modelleri dışa aktarmak için hem Python hem de CLI yöntemleri sunar.
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önetmek gibi gelişmiş seçenekler dahil olmak üzere süreç hakkında daha fazla ayrıntı için ONNX entegrasyon kılavuzuna bakabilirsin.
Link to this sectionModel 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 dışa aktarılan YOLO26 modelleri, 5 kata kadar GPU hızlandırmasına ulaşabilir ve bu da onları gerçek zamanlı çıkarım uygulamaları için ideal hale getirir.
- Çok Yönlülük: Modelleri belirli bir donanım kurulumu için optimize edebilirsin.
- Hız: Gelişmiş optimizasyonlar sayesinde daha hızlı çıkarım elde edebilirsin.
- Uyumluluk: NVIDIA donanımı ile sorunsuz bir şekilde entegre edebilirsin.
TensorRT entegrasyonu hakkında daha fazla bilgi edinmek için TensorRT entegrasyon kılavuzuna bakabilirsin.
Link to this sectionYOLO26 modelimi dışa aktarırken INT8 nicemlemeyi nasıl etkinleştiririm?#
INT8 nicemleme, modeli sıkıştırmak ve çıkarımı hızlandırmak için, özellikle uç cihazlarda, harika bir yoldur. İşte INT8 nicemlemeyi nasıl etkinleştirebileceğin:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="onnx", int8=True, data="coco8.yaml")INT8 quantization can be applied to various formats, such as ONNX, TensorRT, OpenVINO, CoreML, and Rockchip RKNN. For optimal quantization results, provide a representative dataset using the data parameter.
Link to this sectionModel dışa aktarırken dinamik girdi boyutu neden önemlidir?#
Dinamik girdi boyutu, dışa aktarılan modelin değişen 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ı garantiler.
Bu özelliği etkinleştirmek için, dışa aktarma sırasında dynamic=True bayrağını kullan:
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 kullanışlıdır.
Link to this sectionModel 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 (örn.onnx,torchscript,tensorflow).imgsz:Model girdisi için istenen görüntü boyutu (örneğin640veya(height, width)).half:FP16 nicemlemeyi etkinleştirir, bu da model boyutunu küçültür ve çıkarımı hızlandırabilir.optimize:Mobil veya kısıtlı ortamlar için özel optimizasyonlar uygular.int8:Uç AI dağıtımları için oldukça faydalı olan INT8 nicemlemeyi etkinleştirir.
Belirli donanım platformlarında dağıtım yapmak 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üşünebilirsin.
Link to this sectionDışa aktarılan YOLO modellerindeki çıktı tensörleri neyi temsil eder?#
Bir YOLO modelini ONNX veya TensorRT gibi formatlara dışa aktardığında, çıktı tensör yapısı modelin görevine bağlıdır. Bu çıktıları anlamak, özel çıkarım uygulamaları için önemlidir.
For YOLO26 detection models (e.g., yolo26n.pt), end-to-end export is enabled by default in formats that support it, so the output is shaped like (batch_size, max_detections, 6) with [x1, y1, x2, y2, confidence, class_id] values. With the default max_det=300, this is commonly (batch_size, 300, 6). Some constrained formats automatically fall back to the traditional output layout when end-to-end operators are unsupported.
Uçtan uca olmayan tespit modelleri veya end2end=False ile dışa aktarılan YOLO26 modelleri için çı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 giriş çözünürlüğüne bağlıdır (ve dinamik olabilir).
Segmentasyon modelleri (örn. yolo26n-seg.pt) için genellikle iki çıktı alırsın: ilki (batch_size, 4 + num_classes + mask_dim, num_predictions) şeklinde (kutular, sınıf puanları ve maske katsayıları) ve ikincisi (batch_size, mask_dim, proto_h, proto_w) şeklinde örnek maskeler oluşturmak için katsayılarla kullanılan maske prototiplerini içeren tensör. Boyutlar, dışa aktarma girdi çözünürlüğüne bağlıdır (ve dinamik olabilir).
Poz modelleri (örn. yolo26n-pose.pt) için çıktı tensörü genellikle (batch_size, 4 + num_classes + keypoint_dims, num_predictions) şeklindedir; burada keypoint_dims poz özelliklerine (örn. anahtar nokta sayısı ve güven skorunun dahil olup olmadığına) bağlıdır 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östermektedir.
Link to this sectionWhy is output0 FP32 when exporting with half=True and end2end=True?#
half=True (veya int8=True) 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, end2end=True etkinleştirildiğinde, işleme sonrası (sınıf dizinleri 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 dizinlerini içerir. FP16, sınırlı mantis hassasiyeti nedeniyle 2048'in üzerindeki tamsayı 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 dizini sadakatinin korunması gereken düşük hassasiyetli veya nicelenmiş dışa aktarımlar için de geçerlidir.
Tam FP16 çıktıları gerekiyorsa, end2end=False ile dışa aktar ve işleme sonrasını harici olarak gerçekleştir.