Ultralytics YOLO27:
Get Started

DeepStream SDK ve TensorRT kullanarak NVIDIA Jetson'da Ultralytics YOLO26#



İzle: Ultralytics YOLO26 modelleri Jetson Orin NX'te NVIDIA Deepstream ile nasıl kullanılır 🚀

Bu kapsamlı kılavuz, DeepStream SDK ve TensorRT kullanarak Ultralytics YOLO26'yı NVIDIA Jetson cihazlarında dağıtmak için ayrıntılı bir yol haritası sunar. Burada, Jetson platformundaki çıkarım performansını en üst düzeye çıkarmak için TensorRT kullanıyoruz.

Bu kılavuzda YOLO26 için DeepStream yapılandırması, INT8 kalibrasyonu, çoklu akış kurulumu ve kıyaslama sonuçları ele alınıyor.

NVIDIA DeepStream SDK on Jetson platform
Not

Bu kılavuz, JP6.1 JetPack sürümünü çalıştıran NVIDIA Jetson Orin Nano Super Developer Kit, NVIDIA Jetson Orin NX 16GB tabanlı ve JP5.1.3 JetPack sürümünü çalıştıran Seeed Studio reComputer J4012 ve NVIDIA Jetson Nano 4GB tabanlı, JP4.6.4 JetPack sürümünü çalıştıran Seeed Studio reComputer J1020 v2 ile test edilmiştir. En yeni ve eski modeller de dahil olmak üzere tüm NVIDIA Jetson donanım serisinde çalışması beklenmektedir.

NVIDIA DeepStream nedir?#

NVIDIA'nın DeepStream SDK'sı, yapay zekâ tabanlı çoklu sensör işleme, video, ses ve görüntü anlama için GStreamer tabanlı kapsamlı bir akış analizi araç setidir. IVA (Akıllı Video Analizi) uygulamaları ve hizmetleri geliştiren görsel yapay zekâ geliştiricileri, yazılım iş ortakları, girişimler ve OEM'ler için idealdir. Artık sinir ağlarını ve izleme, video kodlama/kod çözme ve video işleme gibi diğer karmaşık görevleri içeren akış işleme işlem hatları oluşturabilirsin. Bu işlem hatları, video, görüntü ve sensör verileri üzerinde gerçek zamanlı analiz yapılmasını sağlar. DeepStream'in çoklu platform desteği, şirket içi ortamlarda, uçta ve bulutta görsel yapay zekâ uygulamaları ve hizmetleri geliştirmenin daha hızlı ve kolay bir yolunu sunar.

Ön koşullar#

Bu kılavuzu uygulamaya başlamadan önce:

İpucu

Bu kılavuzda DeepStream SDK'yı Jetson cihazına yüklemek için Debian paketi yöntemini kullandık. DeepStream'in eski sürümlerine erişmek için Jetson'da DeepStream SDK (Arşiv) sayfasını da ziyaret edebilirsin.

YOLO26 için DeepStream Yapılandırması#

Burada, YOLO modelleri için NVIDIA DeepStream SDK desteği içeren marcoslucianops/DeepStream-Yolo GitHub deposunu kullanıyoruz. Katkılarından dolayı marcoslucianops'un çabalarını takdir ediyoruz!

  1. Ultralytics'ı gerekli bağımlılıklarla yükle

    pip install ultralytics onnx onnxslim
  2. DeepStream-Yolo deposunu klonla

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. YOLO26 projesinden istediğin bir Ultralytics YOLO26 algılama modelini (.pt) indir. Burada yolo26s.pt kullanıyoruz.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Not
  1. Modeli ONNX'e dönüştür ve DeepStream'in sınıf adlarını okuduğu labels.txt dosyasını yaz.

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # 'yolo26s.onnx' oluşturur
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
Dışa aktarma bağımsız değişkenleri

nms=False, NMS içermeyen başlığı dışa aktarır ve agnostic_nms=True, her algılama için tek bir sınıf tutar; böylece DeepStream yapılandırmasındaki cluster-mode=4 (kümeleme yok) kutuyu iki kez çizmez. Çıkarım boyutunu değiştirmek için imgsz=1280 (varsayılan: 640), toplu iş boyutunu 4 olarak ayarlamak için batch=4 (dışa aktarılan toplu iş statiktir, bu nedenle DeepStream yapılandırmasındaki batch-size ile eşleşmelidir) ve TensorRT 8.2 veya daha eski sürümler (DeepStream 6.0.1 ve öncesi) için opset=12 ekle. Tam liste için dışa aktarma bağımsız değişkenlerine bak.

  1. Oluşturulan .onnx model dosyasını ve labels.txt dosyasını DeepStream-Yolo klasörüne kopyala.

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. CUDA sürümünü, yüklü JetPack sürümüne göre ayarla.

    JetPack 4.6.4 için:

    export CUDA_VER=10.2

    JetPack 5.1.3 için:

    export CUDA_VER=11.4

    JetPack 6.1 için:

    export CUDA_VER=12.6

    JetPack 7.1 için:

    export CUDA_VER=13.0
  3. Kitaplığı derle.

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. config_infer_primary_yolo26.txt dosyasını modeline göre düzenle (80 sınıflı YOLO26s için).

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
YOLO26 doğruluk ayarları

YOLO26, giriş boyutunu merkezden dolguyla yeniden boyutlandırır ve NMS olmadan çalışır. En iyi doğruluk için config_infer_primary_yolo26.txt dosyasının [property] bölümüne aşağıdakileri ekle:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. deepstream_app_config dosyasını düzenle.

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. deepstream_app_config dosyasındaki video kaynağını da değiştirebilirsin. Burada varsayılan bir video dosyası yüklenir.

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

Çıkarımı Çalıştır#

deepstream-app -c deepstream_app_config.txt
Not

Çıkarım başlamadan önce TensorRT motor dosyasının oluşturulması uzun sürecektir. Lütfen sabırlı ol.

YOLO26 with deepstream
İpucu

Modeli FP16 hassasiyetine dönüştürmek istiyorsan config_infer_primary_yolo26.txt içindeki model-engine-file=model_b1_gpu0_fp16.engine ve network-mode=2 değerlerini ayarlaman yeterli.

INT8 Kalibrasyonu#

Çıkarım için INT8 hassasiyetini kullanmak istiyorsan aşağıdaki adımları uygulaman gerekir:

Not

INT8 şu anda TensorRT 10.x ile çalışmıyor. Kılavuzun bu bölümü, çalışması beklenen TensorRT 8.x ile test edilmiştir.

  1. OPENCV ortam değişkenini ayarla.

    export OPENCV=1
  2. Kitaplığı derle.

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. COCO veri kümesi için val2017 dosyasını indir, ayıkla ve DeepStream-Yolo klasörüne taşı.

  4. Kalibrasyon görüntüleri için yeni bir dizin oluştur.

    mkdir calibration
  5. Kalibrasyon için COCO veri kümesinden rastgele 1000 görüntü seçmek üzere aşağıdakini çalıştır.

    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do
      cp ${jpg} calibration/
    done
Not

NVIDIA, iyi bir doğruluk elde etmek için en az 500 görüntü önerir. Bu örnekte, daha iyi doğruluk elde etmek için 1000 görüntü seçilmiştir (daha fazla görüntü = daha yüksek doğruluk). Bu sayıyı head -1000 üzerinden ayarlayabilirsin. Örneğin, 2000 görüntü için head -2000 kullan. Bu işlem uzun sürebilir.

  1. Seçilen tüm görüntüleri içeren calibration.txt dosyasını oluştur.

    realpath calibration/*jpg > calibration.txt
  2. Ortam değişkenlerini ayarla.

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
Not

Daha yüksek INT8_CALIB_BATCH_SIZE değerleri daha iyi doğruluk ve daha hızlı kalibrasyon sağlar. Değeri GPU belleğine göre ayarla.

  1. config_infer_primary_yolo26.txt dosyasını güncelle.

    Şundan

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...

    Şuna

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...

INT8 Çıkarımını Çalıştır#

INT8 motorunu oluşturup çıkarımı başlatmak için aynı komutu çalıştır:

deepstream-app -c deepstream_app_config.txt

Çoklu Akış Kurulumu#



İzle: Jetson Orin'de NVIDIA DeepStream kullanarak Ultralytics YOLO26 ile çoklu akış çıkarımı nasıl yapılır 🚀

Tek bir DeepStream uygulamasında birden fazla akış kurmak için deepstream_app_config.txt dosyasında aşağıdaki değişiklikleri yap:

  1. Görüntülemek istediğin akış sayısına göre ızgara düzeni oluşturmak için satır ve sütun sayılarını değiştir. Örneğin, 4 akış için 2 satır ve 2 sütun ekleyebilirsin.

    [tiled-display]
    rows=2
    columns=2
  2. Her akış için ayrı bir [sourceN] grubu ekle; her grubun kendine ait uri ve num-sources=1 değerleri olsun.

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

Çoklu Akış Çıkarımını Çalıştır#

Döşenmiş ekranda tüm akışları başlatmak için aynı komutu çalıştır:

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

Kıyaslama Sonuçları#

Aşağıdaki kıyaslamalar, NVIDIA Jetson Orin NX 16GB üzerinde 640x640 giriş boyutuyla TensorRT'nin farklı hassasiyet düzeylerinde YOLO11 modellerinin performansını özetler. YOLO26, yukarıda açıklanan aynı DeepStream dışa aktarma ve çıkarım iş akışını kullanır.

Karşılaştırma grafiği#

NVIDIA Jetson DeepStream performance benchmarks

Ayrıntılı karşılaştırma tablosu#

Performans
BiçimDurumÇıkarım süresi (ms/im)
TensorRT (FP32)✅8.64
TensorRT (FP16)✅5.27
TensorRT (INT8)✅4.54

Teşekkür#

Bu kılavuz ilk olarak Seeed Studio'daki dostlarımız Lakshantha ve Elaine tarafından hazırlandı.

Sık Sorulan Sorular#

  • Ultralytics YOLO26'yı bir NVIDIA Jetson cihazına kurmak için öncelikle JetPack sürümünle uyumlu DeepStream SDK'yı yüklemen gerekir. NVIDIA Jetson'ı YOLO26 dağıtımı için yapılandırmak üzere Hızlı Başlangıç Kılavuzumuzdaki adım adım talimatları izle.

  • YOLO26 ile TensorRT kullanmak, modeli çıkarım için optimize ederek NVIDIA Jetson cihazlarında gecikmeyi önemli ölçüde azaltır ve verimi artırır. TensorRT; katman birleştirme, hassasiyet kalibrasyonu ve çekirdek otomatik ayarı yoluyla yüksek performanslı, düşük gecikmeli derin öğrenme çıkarımı sağlar. Böylece özellikle video analizi ve otonom makineler gibi gerçek zamanlı uygulamalarda daha hızlı ve verimli çalışır.

  • Evet, Ultralytics YOLO26'yı DeepStream SDK ve TensorRT ile dağıtma kılavuzu tüm NVIDIA Jetson ürün serisiyle uyumludur. Buna JetPack 5.1.3 kullanan Jetson Orin NX 16GB ve JetPack 4.6.4 kullanan Jetson Nano 4GB gibi cihazlar dahildir. Ayrıntılı adımlar için YOLO26 için DeepStream Yapılandırması bölümüne bak.

  • Ultralytics dışa aktarıcısını kullanarak modeli NMS içermeyen başlıkla dışa aktar ve DeepStream'in sınıf adlarını okuduğu labels.txt dosyasını yaz:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # 'yolo26s.onnx' oluşturur
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    TensorRT 8.2 veya daha eski sürümler (DeepStream 6.0.1 ve öncesi) için opset=12 ekle. Model dönüştürme hakkında daha fazla bilgi için model dışa aktarma bölümümüze göz at.

  • INT8 çıkarımını çalıştırmak için modeli temsil edici bir görüntü kümesiyle kalibre et ve DeepStream yapılandırmasını INT8 moduna geçir. COCO val2017 görüntülerini indir, yaklaşık 1000 kalibrasyon görüntüsü seç, INT8_CALIB_IMG_PATH ve INT8_CALIB_BATCH_SIZE ortam değişkenlerini ayarla, ardından config_infer_primary_yolo26.txt dosyasını model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table ve network-mode=1 değerleriyle güncelle. Tüm adımlar için INT8 Kalibrasyonu bölümüne bak. INT8 şu anda TensorRT 8.x gerektirir.

  • Tek bir DeepStream uygulamasında birden fazla akışı işlemek için döşenmiş ekran ızgarası ekleyip her kaynak URI'sini listelemek üzere deepstream_app_config.txt dosyasını düzenle. Izgarayı oluşturmak için [tiled-display] altında rows ve columns değerlerini ayarla; her akış için kendine ait uri ve num-sources=1 değerleri olan ayrı bir [sourceN] grubu ekle ve ızgarayı akış sayısına göre düzenle. Tam bir örnek için Çoklu Akış Kurulumu bölümüne bak.

  • NVIDIA Jetson Orin NX 16GB'taki YOLO11 modellerinin performansı, TensorRT hassasiyet düzeylerine göre değişir. Örneğin, YOLO11s modelleri şu sonuçları elde eder:

    • FP32 Hassasiyeti: 14.53 ms/im, 68.8 FPS
    • FP16 Hassasiyeti: 7.91 ms/im, 126 FPS
    • INT8 Hassasiyeti: 6.05 ms/im, 165 FPS

    Bu kıyaslamalar, NVIDIA Jetson donanımında TensorRT ile optimize edilmiş YOLO11 modellerini kullanmanın verimliliğini ve yeteneklerini ortaya koyuyor. Daha fazla ayrıntı için Kıyaslama Sonuçları bölümüne bak.

Yorumlar