Ultralytics YOLO27:

DeepStream SDK ve TensorRT kullanarak NVIDIA Jetson üzerinde Ultralytics YOLO26#



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

Bu kapsamlı kılavuz, NVIDIA Jetson cihazlarında DeepStream SDK ve TensorRT kullanarak Ultralytics YOLO26 dağıtımını ayrıntılı şekilde ele alır. Burada, Jetson platformunda çı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 karşılaştırma sonuçları adım adım açıklanır.

NVIDIA DeepStream SDK on Jetson platform
Not

Bu kılavuz, JP6.1 sürümünün en güncel kararlı 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 dâhil olmak üzere tüm NVIDIA Jetson donanım serisinde çalışması beklenir.

NVIDIA DeepStream nedir?#

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

Ön koşullar#

Bu kılavuzu uygulamaya başlamadan önce:

İpucu

Bu kılavuzda DeepStream SDK'yı Jetson cihazına kurmak için Debian paketi yöntemini kullandık. DeepStream'in eski sürümlerine erişmek için Jetson üzerinde 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ı için marcoslucianops'un çabalarını takdir ediyoruz!

  1. Ultralytics'i gerekli bağımlılıklarla kur

    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

Ayrıca özel olarak eğitilmiş bir YOLO26 modeli de kullanabilirsin.

  1. Modeli ONNX formatına denüş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)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
Dışa aktarma argümanları

nms=False, NMS içermeyen kafayı dışa aktarır ve agnostic_nms=True, algılama başına tek bir sınıf tutar; böylece DeepStream yapılandırmasındaki cluster-mode=4 (kümeleme yok) bir kutuyu iki kez çizmez. Çıkarım boyutunu (varsayılan: 640) değiştirmek için imgsz=1280, 4'lük bir yığın boyutu için batch=4 (dışa aktarılan yığın 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 argümanları bölümüne göz at.

  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ü kurulu 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, girdiyi merkezden doldurma ile 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ğıdakini 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. Bu yüzden lütfen sabırlı ol.

YOLO26 with deepstream
İpucu

Modeli FP16 hassasiyetine dönüştürmek istiyorsan config_infer_primary_yolo26.txt içinde yalnızca model-engine-file=model_b1_gpu0_fp16.engine ve network-mode=2 değerlerini ayarla

INT8 Kalibrasyonu#

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

Not

Şu anda INT8, 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, çıkart ve DeepStream-Yolo klasörüne taşı

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

    mkdir calibration
  5. COCO veri kümesinden kalibrasyon çalıştırmak üzere rastgele 1000 görüntü seçmek için aşağıdaki komutu ç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). Bunu head -1000 değerinden 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ülerle 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 yüksek 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şturmak ve çıkarımı başlatmak için aynı komutu çalıştır:

deepstream-app -c deepstream_app_config.txt

MultiStream Kurulumu#



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

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

  1. Sahip olmak istediğin akış sayısına göre ızgara görünümü oluşturmak için satır ve sütunları değiştir. Örneğin 4 akış için 2 satır ve 2 sütun ekleyebiliriz.

    [tiled-display]
    rows=2
    columns=2
  2. Her akış için, kendine ait uri ve num-sources=1 değerlerini içeren ayrı bir [sourceN] grubu ekle.

    [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#

Tüm akışları döşeli görünümde başlatmak için aynı komutu çalıştır:

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

Karşılaştırma Sonuçları#

Aşağıdaki karşılaştırmalar, NVIDIA Jetson Orin NX 16GB üzerinde 640x640 giriş boyutuyla farklı TensorRT 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ürler#

Bu kılavuz ilk olarak Seeed Studio'daki arkadaşlarımız Lakshantha ve Elaine tarafından oluşturulmuştur.

SSS#

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

  • TensorRT'yi YOLO26 ile kullanmak modeli çıkarım için optimize eder, NVIDIA Jetson cihazlarında gecikmeyi önemli ölçüde azaltır ve işlem hacmini artırır. TensorRT; katman birleştirme, hassasiyet kalibrasyonu ve çekirdek otomatik ayarlama sayesinde yüksek performanslı, düşük gecikmeli derin öğrenme çıkarımı sağlar. Bu, özellikle video analitiği ve otonom makineler gibi gerçek zamanlı uygulamalarda daha hızlı ve verimli çalışmayla sonuçlanır.

  • Evet, Ultralytics YOLO26'yı DeepStream SDK ve TensorRT ile dağıtmaya yönelik bu kılavuz, tüm NVIDIA Jetson serisiyle uyumludur. Buna JetPack 5.1.3 kullanan Jetson Orin NX 16GB ve JetPack 4.6.4 kullanan Jetson Nano 4GB gibi cihazlar da dâhildir. 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 kafayla 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)  # creates 'yolo26s.onnx'
    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üşümü hakkında daha fazla ayrıntı için model dışa aktarma bölümü kısmına göz at.

  • INT8 çıkarımını çalıştırmak için modeli temsili 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 ile 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öşeli görünüm ızgarası eklemek ve 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ğerlerine sahip ayrı bir [sourceN] grubu ekle ve ızgarayı akış sayısına uyacak şekilde düzenle. Eksiksiz bir örnek için MultiStream Kurulumu bölümüne bak.

  • NVIDIA Jetson Orin NX 16GB üzerindeki 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 karşılaştırmalar, TensorRT ile optimize edilmiş YOLO11 modellerinin NVIDIA Jetson donanımındaki verimliliğini ve yeteneklerini ortaya koyar. Daha fazla ayrıntı için Karşılaştırma Sonuçları bölümümüze bak.

Yorumlar