Ultralytics YOLO27: Bekleme listesine katıl.
YOLO'yu lisansla
Entegrasyonlar

Bilgisayarlı görü çıkarımı için ONNX ve TensorRT: kıyaslamalar ve seçim rehberi

Bilgisayarlı görü çıkarımı için ONNX Runtime ve TensorRT karşılaştırması: 19 NVIDIA GPU’da ölçülen Ultralytics YOLO26 hızı ve doğruluğu ve hangisini seçeceğin.

Miles DeansMiles Deans10 dakikalık okuma
Örnek tespitlerin bulunduğu yapay zekâ tarafından oluşturulmuş lojistik sahnesi; iç görselde NVIDIA L4 üzerinde YOLO26n için Ultralytics Platform kıyaslama gecikmesi gösteriliyor.

ONNX ve TensorRT aslında rakip değil. ONNX bir model biçimidir; TensorRT ise genellikle girdi olarak bir ONNX dosyası alan NVIDIA çıkarım motorudur. Asıl tercih, bu dosyayı nasıl çalıştıracağındır: farklı donanımlarda çalışan ve işi TensorRT’ye bile devredebilen ONNX Runtime ile mi, yoksa yalnızca NVIDIA GPU’larda çalışan bağımsız bir TensorRT engine’ine derleyerek mi? 19 NVIDIA GPU’da Ultralytics YOLO26 için yapılan Ultralytics Platform kıyaslamalarında, TensorRT FP16 her GPU ve model boyutunda yayımlanmış ONNX FP16 sonuçlarından daha hızlıydı; doğruluk farkı 0.001 mAP50-95 içinde kaldı. Model boyutlarına göre medyan hız artışı 1.85x ile 2.55x arasında değişti. Kıyaslama sayfası, ONNX sonuçlarını hangi ONNX Runtime yürütme sağlayıcısının ürettiğini belirtmediğinden, bu sonuçlar ONNX Runtime’ın genel olarak veya TensorRT yürütme sağlayıcısıyla nasıl karşılaştırıldığını ortaya koymuyor. NVIDIA GPU’larda Ultralytics YOLO26 kullanırken gecikme önemliyse TensorRT FP16 ile başla; tek bir model dosyasının birden fazla donanım türünde çalışması gerekiyorsa ONNX Runtime’ı kullan. Ultralytics YOLO, tek bir argümanla her iki biçime de aktarım yapar.

Ultralytics YOLO ile başlamak için:

DağıtımŞununla başla:Ultralytics YOLO aktarımı
NVIDIA GPU, gecikme önemliTensorRT FP16format="engine", quantize=16
CPU, NVIDIA dışı donanım veya karma filolarONNX Runtimeformat="onnx"
NVIDIA GPU’da ONNX Runtime API’siTensorRT yürütme sağlayıcısıyla ONNX Runtimeformat="onnx"

ONNX ve TensorRT: biçim, çalışma zamanı ve engine#

Bu karşılaştırmanın ardında üç farklı şey var:

  • Açık Sinir Ağı Değişimi (ONNX), eğitilmiş bir modelin grafiğini ve ağırlıklarını çerçeveden bağımsız biçimde saklayan dosya biçimidir. Modeli diğer araçların okuyabilmesi için PyTorch’tan ONNX’e aktarırsın.
  • ONNX Runtime, ONNX modellerini çalıştırır. Aynı dosyanın bir dizüstü bilgisayarın CPU’sunda veya bir bulut GPU’sunda çalışabilmesi için işleri CPU, CUDA ve TensorRT gibi yürütme sağlayıcıları adı verilen donanım arka uçlarına devreder.
  • TensorRT, genellikle bir ONNX dosyası olan modeli ONNX ayrıştırıcısı üzerinden okur. Katmanları birleştirir, üzerine derlendiği GPU’daki her işlem için en hızlı çekirdeği seçer ve optimize edilmiş bir engine yazar.

Dolayısıyla asıl soru ONNX Runtime ve TensorRT karşılaştırmasıdır. ONNX Runtime, TensorRT yürütme sağlayıcısı aracılığıyla TensorRT’yi de çağırabilir; böylece ONNX Runtime API’sini kullanmaya devam ederken desteklediği alt grafikleri TensorRT çalıştırır. ONNX Runtime, TensorRT’nin desteklemediği düğümlerin bunun yerine CUDA’da çalışabilmesi için CUDA yürütme sağlayıcısının TensorRT’den sonra kaydedilmesini önerir.

Bir Ultralytics YOLO modelinin ONNX biçimine aktarılmasını ve ardından ONNX Runtime tarafından çalıştırılmasını veya TensorRT ile derlenmesini gösteren diyagram

Tek bir ONNX dosyası, iki yol: ONNX Runtime dosyayı desteklenen donanımlarda çalıştırırken TensorRT, dosyayı tek bir NVIDIA GPU türüne yönelik bir engine’e derler. Ultralytics YOLO her iki biçime de aktarım yapar.

Kıyaslamalar: ONNX Runtime ve TensorRT üzerinde YOLO26#

Aşağıdaki sayılar Ultralytics Platform çıkarım kıyaslamalarından alınmıştır. Her Ultralytics YOLO26 tespit modeli gösterilen biçime aktarıldı; ardından çıkarım gecikmesi, Ultralytics Platform GPU’larında COCO val2017 üzerinde 1’lik batch boyutu ve 640 piksel çözünürlükte ölçüldü; ısınma süresi ölçüme katılmadı ve her çalıştırmanın sürelerine sigma kırpma uygulandı. Doğruluk, COCO val2017 üzerinde her biçim ve hassasiyet için bir kez ölçülen mAP50-95 değeridir. Karşılaştırmada dört biçimin tümü için sonuç bulunan 19 NVIDIA GPU (Ampere, Ada ve Hopper) kullanılıyor.

Kıyaslama sayfası, ONNX sonuçlarını hangi ONNX Runtime yürütme sağlayıcısının ürettiğini belirtmiyor ve desteklenen model bölümlerini TensorRT’ye devreden ONNX Runtime’ın TensorRT yürütme sağlayıcısıyla alınmış sonuçları etiketlemiyor. Bu ONNX sonuçları kıyaslamada kullanılan yapılandırmayı gösteriyor; performans, ONNX Runtime yürütme sağlayıcısına göre değişebilir. TensorRT’yi altta kullanan ONNX Runtime API’sini istiyorsan bu birleşimi kendi donanımında kıyasla.

NVIDIA GPU’larına göre YOLO26n TensorRT FP16 gecikmesini gösteren Ultralytics kıyaslamaları

Model boyutunu, biçimi ve hassasiyeti değiştirmek; ardından her GPU’yu gecikme, doğruluk veya maliyete göre sıralamak için Inference sekmesini kullan.

Her YOLO26 model boyutu için TensorRT FP16’nın ONNX FP16’ya göre medyan hız artışını gösteren sütun grafiği

TensorRT FP16, her model boyutunda ve her GPU’da yayımlanan ONNX FP16 sonuçlarından daha hızlıydı; sayfa, sonuçları hangi ONNX Runtime yürütme sağlayıcısının ürettiğini belirtmiyor. Çubuklar 19 GPU genelindeki medyan hız artışını, bıyıklar ise herhangi bir GPU’daki en düşük ve en yüksek hız artışını gösteriyor. Ultralytics Platform çıkarım kıyaslamalarından hesaplandı.

ModelmAP50-95: ONNX FP16mAP50-95: TensorRT FP16mAP50-95: TensorRT INT8TensorRT FP16’nın ONNX FP16’ya göre hız artışı (medyan, aralık)TensorRT INT8’in TensorRT FP16’ya göre hız artışı (medyan, aralık)
YOLO26n0.3970.3970.3572.55x (1.79–3.28x)0.90x (0.79–1.07x)
YOLO26s0.4710.4710.4362.19x (1.83–2.93x)1.04x (0.89–1.19x)
YOLO26m0.5190.5190.4701.85x (1.52–2.54x)1.20x (0.90–1.38x)
YOLO26l0.5360.5350.5012.03x (1.67–2.73x)1.08x (0.92–1.33x)
YOLO26x0.5630.5640.4881.88x (1.67–2.11x)1.19x (0.92–1.67x)

Ultralytics Platform çıkarım kıyaslamalarından hesaplandı. Hız artışı, aynı GPU’daki ONNX FP16 gecikmesinin TensorRT FP16 gecikmesine veya TensorRT FP16 gecikmesinin TensorRT INT8 gecikmesine bölünmesiyle hesaplanır; dolayısıyla 1x üzerindeki değerler TensorRT FP16’nın (veya INT8’in) daha hızlı olduğu anlamına gelir. Medyanlar, dört biçimin tümünde sonuç bulunan 19 NVIDIA GPU’yu kullanır; aralıklar bu GPU’lar arasındaki en küçük ve en büyük oranlardır. Doğruluk, her biçim ve hassasiyet için bildirilen mAP50-95 değeridir. ONNX FP16, yürütme sağlayıcısı belirtilmeyen yayımlanmış ONNX Runtime sonuçlarını ifade eder.

Kıyaslama sayfasında yayımlandığı şekliyle, yaygın dört GPU’da görüntü başına milisaniye cinsinden gecikme:

GPUModelPyTorch FP16ONNX FP16TensorRT FP16TensorRT INT8
L4YOLO26n4.982.041.031.09
L4YOLO26x7.769.805.733.43
RTX 4090YOLO26n6.672.560.841.00
RTX 4090YOLO26x10.945.202.682.25
A100 SXMYOLO26n8.723.981.651.79
A100 SXMYOLO26x15.027.253.863.91
H100 SXMYOLO26n6.363.091.171.48
H100 SXMYOLO26x10.265.532.662.62

Öne çıkan üç nokta var:

  1. TensorRT FP16, her GPU’da ve her model boyutunda yayımlanan ONNX FP16 sonuçlarından daha iyi performans gösterdi; doğruluk farkı 0.001 mAP50-95 içinde kaldı. Bu NVIDIA GPU’larına dağıtım yapıyorsan ve düşük gecikmeye ihtiyacın varsa TensorRT FP16 ile başla.
  2. INT8 her zaman daha iyi sonuç vermez. YOLO26n’de 19 GPU’nun 17’sinde TensorRT FP16’dan daha yavaştı ve 0.04 mAP50-95 kayba yol açtı. Büyük modellerde daha sık fayda sağladı; L4 üzerinde YOLO26x’te 1.67x’e kadar çıktı, ancak 0.034 ile 0.076 mAP50-95 arasında kayba neden oldu.
  3. Yedi Blackwell GPU için ONNX sonucu yok. Kıyaslama sayfası bunu, test ortamında ONNX Runtime’ın Blackwell çekirdeklerine sahip olmamasına bağlıyor. TensorRT yedi GPU’nun tümünde çalıştı.

Bu sonuçlar kıyaslama sayfasındaki yapılandırmayı, 640 pikselde 1’lik batch boyutunu kapsıyor; bu nedenle seçimini yapmadan önce kendi modelini, kendi verilerinle dağıtım cihazında kıyasla.

TensorRT ile FP16 ve INT8#

Daha düşük hassasiyet diğer önemli ayardır ve kıyaslama, neden test edilmesi gerektiğini gösteriyor:

  • FP16 (yarı hassasiyet), ağırlıkların ve aktivasyonların boyutunu FP32’ye kıyasla yarıya indirir. Ultralytics Platform kıyaslamalarında TensorRT FP16’nın doğruluğu, ONNX FP16 ve PyTorch FP16 ile 0.003 mAP50-95 içinde eşleşti.
  • INT8, ağırlıkları ve aktivasyonları 8 bitlik tam sayılar olarak saklar; bu, bir model nicemleme biçimidir. Kalibrasyon gerekir: aktivasyon aralıklarını ölçmek için temsili bir görüntü kümesi modelden geçirilir. Ultralytics Platform kıyaslamasında kalibrasyon verisi olarak COCO128 ile NVIDIA ModelOpt kullanıldı.

Kıyaslama metodolojisinde belirtildiği gibi, INT8 en çok büyük ve hesaplama ağırlıklı modellerde fayda sağlar. En küçük modellerde ek nicemleme işlemi FP16 ile aynı performansı verebilir, hatta FP16’yı yavaşlatabilir. Dağıtıma çıkmadan önce kendi alanından görüntülerle kalibrasyon yap ve INT8 engine’in doğruluğunu kendi verilerinle doğrula.

Her YOLO26 model boyutu için TensorRT INT8’i FP16 ile karşılaştıran iki sütun grafiği: solda hız artışı, sağda kaybedilen mAP50-95

Medyan değerlere göre INT8, YOLO26n’de FP16’dan daha yavaştı; 19 GPU genelinde büyük modellerde ise yaklaşık 1.2x’e kadar daha hızlıydı. Buna karşılık her boyutta 0.034 ile 0.076 mAP50-95 arasında kayba yol açtı. Ultralytics Platform çıkarım kıyaslamalarından hesaplandı.

Engine taşınabilirliği ve dinamik girdi boyutları#

Varsayılan olarak TensorRT engine’i, oluşturulduğu GPU’ya ve onu oluşturan TensorRT sürümüne bağlıdır; bu nedenle RTX 4090’da oluşturulan bir engine’in H100’e veya Jetson’a kopyalanması amaçlanmaz. TensorRT’de bu kısıtlamaları gevşeten donanım ve sürüm uyumluluğu seçenekleri bulunur; ancak varsayılan güvenli yaklaşım, engine’i dağıtım yapacağın cihazda veya bu cihaz için oluşturmak ve TensorRT’yi yükselttikten sonra yeniden oluşturmaktır. Ultralytics Platform’da Export sekmesi, bu nedenle TensorRT aktarımlarında GPU türünü seçmeni ister. ONNX dosyası böyle bir kısıtlamaya sahip değildir: ONNX Runtime ve uygun bir yürütme sağlayıcısının bulunduğu her yerde aynı dosya çalışır.

Her iki biçim de değişken girdi boyutlarını destekler. TensorRT’de dinamik şekiller, en küçük, en uygun ve en büyük girdi boyutlarını belirleyen bir optimizasyon profili gerektirir; çalışma zamanındaki girdilerin bu profile uyması gerekir. Ultralytics YOLO modellerini aktarırken dynamic=True, ONNX ve TensorRT için dinamik girdi şekillerini etkinleştirir. NVIDIA’nın dinamik şekiller kılavuzunda açıklandığı gibi sabit şekiller, TensorRT’ye daha fazla optimizasyon olanağı sağlar; bu nedenle dinamik şekilleri yalnızca girdilerin gerçekten değiştiği durumlarda kullan ve her iki seçeneği de kıyasla.

ONNX Runtime ve TensorRT’yi ne zaman seçmeli?#

  • Bulutta veya şirket içinde NVIDIA GPU, gecikme önemli: Önce FP16 ile TensorRT kullan. Daha büyük modellerde INT8’i deneyip kalibrasyonunu yap ve doğrula.
  • Uçta NVIDIA Jetson: TensorRT. NVIDIA Jetson kılavuzuna göz at.
  • CPU, NVIDIA dışı donanım veya karma filolar: Her makinenin desteklediği yürütme sağlayıcısını kullanarak ONNX’i ONNX Runtime ile çalıştır.
  • Dağıtım donanımını henüz bilmiyorsun: Önce ONNX’e aktar. Aynı modelden daha sonra bir TensorRT engine oluşturabilirsin.
  • Intel CPU’lar, GPU’lar veya NPU’lar: Intel’in çıkarım araç seti olan OpenVINO’yu değerlendirebilirsin.

Biçimlerin tam listesi ve karşılaştırmaları için model dağıtım seçenekleri kılavuzuna bak. Tek ayar hassasiyet değil: model boyutu ve girdi çözünürlüğü de önemli; ayrıca budama ve nicemleme kılavuzumuz, modeli küçültmenin iki başka yolunu ele alıyor.

Ultralytics YOLO’yu ONNX ve TensorRT’ye aktarma#

Ultralytics YOLO, tek bir format argümanıyla her iki biçime de aktarım yapar; aktarılan model üzerinde doğrudan tahmin veya doğrulama çalıştırabilirsin:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

model.export(format="onnx", quantize=16)  # ONNX Runtime için ONNX FP16
model.export(format="engine", quantize=16)  # Bu GPU’da oluşturulan TensorRT FP16 engine’i
# Bunun yerine INT8 kullanacaksan bir veri kümesi YAML dosyasıyla kalibrasyon yap (coco8.yaml küçük bir demo kümesidir; kendi veri kümeni kullan):
# model.export(format="engine", quantize=8, data="coco8.yaml")

trt_model = YOLO("yolo26n.engine")
results = trt_model("https://ultralytics.com/images/bus.jpg")

quantize=16 FP16’yı, quantize=8 ise INT8’i seçer. Her iki engine aktarımı da yolo26n.engine dosyasını oluşturur; bu nedenle bunlardan yalnızca birini çalıştır. INT8 için kalibrasyonda dağıtımda kullanacağın görüntülere benzer görüntülerin kullanılması amacıyla data değerini kendi veri kümesi YAML dosyana ayarla. Tüm seçenekler için aktarım argümanlarına, ONNX ve TensorRT entegrasyon kılavuzlarına göz at veya ONNX’e aktarım ve TensorRT ile optimizasyon hakkındaki adım adım yazılarımızı izle. Ultralytics Platform’da eğitilmiş modelleri tarayıcında da aktarabilirsin.

Sık sorulan sorular

  • ONNX bir model biçimidir, engine değildir; bu nedenle adil karşılaştırma ONNX Runtime ve TensorRT arasındadır. 19 NVIDIA GPU’da Ultralytics YOLO26 için yapılan Ultralytics Platform kıyaslamalarında, TensorRT FP16 her GPU’da ONNX Runtime üzerindeki yayımlanmış ONNX FP16 sonuçlarından daha hızlıydı. Model boyutlarına göre hesaplanan medyan hız artışı 1.85x ile 2.55x arasında, mAP50-95 farkı ise en fazla 0.001’di. Kıyaslama, ONNX sonuçlarını hangi ONNX Runtime yürütme sağlayıcısının ürettiğini belirtmiyor ve hiçbir sonucu ONNX Runtime’ın TensorRT yürütme sağlayıcısını kullanıyor olarak etiketlemiyor; bu nedenle ONNX Runtime API’sine ihtiyacın varsa bu birleşimi kendin test et.

  • Evet. ONNX, TensorRT’nin olağan girdisidir: ONNX ayrıştırıcısı modeli okur ve modelden bir engine oluşturur. ONNX Runtime, TensorRT yürütme sağlayıcısı aracılığıyla TensorRT’yi de çağırabilir.

  • Hayır. Ultralytics Platform kıyaslamalarında, TensorRT INT8, 19 GPU’nun 17’sinde YOLO26n için TensorRT FP16’dan daha yavaştı. Her biçimi çalıştıran 19 GPU genelinde medyan hız artışı YOLO26m ve YOLO26x’te yaklaşık 1.2x olmak üzere, büyük modellerde daha sık hızlıydı. Her seferinde 0.034 ile 0.076 mAP50-95 arasında kayba yol açtı; bu nedenle INT8 modelini önce kendi verilerinle doğrula.

  • Buna güvenme. Varsayılan olarak TensorRT engine’i oluşturulduğu GPU’ya ve TensorRT sürümüne bağlıdır; bu nedenle engine’i dağıtım yapacağın cihazda veya bu cihaz için oluştur. ONNX dosyasını taşınabilir kopya olarak sakla ve her hedef cihaz için engine’i yeniden oluştur.

  • Genellikle TensorRT tercih edilir: NVIDIA JetPack TensorRT’yi içerir ve engine’i Jetson’ın kendisinde oluşturmak cihaz için optimizasyon sağlar. Yukarıdaki kıyaslamalarda Jetson yer almadığından karar vermeden önce kendi modülünde ölçüm yap. NVIDIA Jetson kılavuzu, Ultralytics YOLO için kurulum ve aktarım adımlarını anlatır.

Yazan

Miles Deans
Miles Deans

SEO Lideri · Ultralytics

Londra’da yaşayan Miles Deans, Ultralytics’te SEO Lideri olarak şirketin arama stratejisini ve organik büyümesini yönetiyor. Daha önce Adobe, Kaizen ve Virgin Media O2’de görev aldı.

Yorumlar

Soru sor, sonuçlarını paylaş veya başka birine yardım et.

Çözümleri keşfet

Sporda bilgisayarlı görü

Sporda bilgisayarlı görü

Ultralytics YOLO'nun oyuncu ve top takibi, performans analitiği, antrenörlük içgörüleri ve sporcu rehabilitasyonuyla spor alanında görsel yapay zekâyı nasıl güçlendirdiğini keşfet.
Daha fazla bilgi edin
Hava görüntüleri için bilgisayarlı görü

Hava görüntüleri için bilgisayarlı görü

İHA ve hava görüntülerini Ultralytics YOLO ile tarım, su ürünleri yetiştiriciliği, koruma çalışmaları ve jeo-uzamsal analiz için gerçek zamanlı içgörülere dönüştür.
Daha fazla bilgi edin
Havacılıkta bilgisayarlı görü

Havacılıkta bilgisayarlı görü

Uçak denetimi, pistteki yabancı madde tespiti, havaalanı yer operasyonları ve kompozit malzeme kusurlarının tespiti için Ultralytics YOLO ile havacılık ve uzay sektöründe bilgisayarlı görü uygula.
Daha fazla bilgi edin
Güvenlikte bilgisayarlı görü

Güvenlikte bilgisayarlı görü

Ultralytics YOLO modelleriyle her sahayı koru. Görsel yapay zekâ; çevre izleme, tehdit tespiti, plaka tanıma ve iş yeri güvenliğini destekler.
Daha fazla bilgi edin
Robotikte bilgisayarlı görü

Robotikte bilgisayarlı görü

Ultralytics YOLO modelleriyle daha akıllı makinelere güç ver. Robotikte görsel yapay zekâ; otonom navigasyonu, algılamayı, nesne takibini ve gerçek zamanlı kontrolü destekler.
Daha fazla bilgi edin
Lojistikte bilgisayarlı görü

Lojistikte bilgisayarlı görü

Ultralytics YOLO modelleriyle lojistiği kolaylaştır. Görüntü yapay zekâsı; paket denetimini, ayrıştırmayı, araç takibini ve gerçek zamanlı depo güvenliği izlemeyi mümkün kılar.
Daha fazla bilgi edin
Perakendede bilgisayarlı görü

Perakendede bilgisayarlı görü

Ultralytics YOLO modelleriyle perakendeyi yeniden tasarla. Görüntü yapay zekâsı; envanter takibini, raf izlemeyi, kuyruk yönetimini ve daha kapsamlı müşteri analizlerini mümkün kılar.
Daha fazla bilgi edin
Sağlık hizmetlerinde bilgisayarlı görü

Sağlık hizmetlerinde bilgisayarlı görü

Ultralytics YOLO modelleriyle sağlık çözümleri geliştir. Sağlık hizmetlerinde görüntü yapay zekâsı; daha hızlı tıbbi görüntüleme, daha akıllı tanı ve hasta takibini mümkün kılar.
Daha fazla bilgi edin
Üretimde bilgisayarlı görü

Üretimde bilgisayarlı görü

Ultralytics YOLO modelleriyle üretimi optimize et. Görsel yapay zekâ; kalite kontrolünü, kusur tespitini, kişisel koruyucu donanım uyumunu ve montaj hattı otomasyonunu destekler.
Daha fazla bilgi edin
Otomotivde bilgisayarlı görü

Otomotivde bilgisayarlı görü

Ultralytics YOLO modelleriyle otomotivde bilgisayarlı görüden yararlan. Görsel yapay zekâ; daha akıllı yollar için yol güvenliğini, sürüş desteğini ve araç otomasyonunu ileri taşır.
Daha fazla bilgi edin
Tarımda bilgisayarlı görü

Tarımda bilgisayarlı görü

Ultralytics YOLO modelleriyle akıllı tarıma görüntü yapay zekâsı kazandır. Daha yüksek ve akıllı verim için mahsul izleme, hayvan takibi ve hassas tarımı destekle.
Daha fazla bilgi edin

Geleceğin yapay zekasını birlikte inşa edelim!

Makine öğreniminin geleceğine yolculuğuna başla