İçeriğe geç

Ultralytics YOLOv8 NVIDIA Jetson'da DeepStream SDK kullanarak ve TensorRT

Bu kapsamlı kılavuz, DeepStream SDK ve TensorRT kullanarak Ultralytics YOLOv8 adresini NVIDIA Jetson cihazlarına dağıtmak için ayrıntılı bir yol gösterir. Burada, Jetson platformunda çıkarım performansını en üst düzeye çıkarmak için TensorRT adresini kullanıyoruz.

NVIDIA Jetson üzerinde DeepStream

Not

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

NVIDIA DeepStream nedir?

NVIDIA'nın DeepStream SDK 'sı, yapay zeka tabanlı çoklu sensör işleme, video, ses ve görüntü anlama için GStreamer tabanlı eksiksiz bir akış analizi araç setidir. IVA (Akıllı Video Analizi) uygulamaları ve hizmetleri geliştiren vizyon yapay zeka geliştiricileri, yazılım ortakları, startup'lar 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 işleme görevlerini içeren akış işleme ardışık düzenleri oluşturabilirsiniz. Bu işlem hatları video, görüntü ve sensör verileri üzerinde gerçek zamanlı analitik sağlar. DeepStream'in çoklu platform desteği, şirket içinde, uçta ve bulutta vizyon yapay zeka uygulamaları ve hizmetleri geliştirmenin daha hızlı ve kolay bir yolunu sunar.

Ön Koşullar

Bu kılavuzu izlemeye başlamadan önce:

İpucu

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

Şunun için DeepStream Yapılandırması YOLOv8

Burada, YOLO modelleri için NVIDIA DeepStream SDK desteğini içeren marcoslucianops/DeepStream-Yolo GitHub deposunu kullanıyoruz. marcoslucianops'a katkılarından dolayı teşekkür ederiz!

  1. Yükleme bağımlılıkları

    pip install cmake
    pip install onnxsim
    
  2. Aşağıdaki depoyu kopyalayın

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. YOLOv8 sürümlerinden seçtiğiniz Ultralytics YOLOv8 algılama modelini (.pt) indirin. Burada yolov8s.pt kullanıyoruz.

    wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
    

    Not

    Özel eğitimli bir YOLOv8 modeli de kullanabilirsiniz.

  4. Modeli şuna dönüştür ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    Aşağıdaki bağımsız değişkenleri yukarıdaki komuta iletin

    DeepStream 6.0.1 için opset 12 veya daha düşük bir sürümü kullanın. Varsayılan işlem kümesi 16'dır.

    --opset 12
    

    Çıkarım boyutunu değiştirmek için (varsayılan: 640)

    -s SIZE
    --size SIZE
    -s HEIGHT WIDTH
    --size HEIGHT WIDTH
    

    1280 için örnek:

    -s 1280
    or
    -s 1280 1280
    

    Basitleştirmek için ONNX modeli (DeepStream >= 6.0)

    --simplify
    

    Dinamik toplu iş boyutu kullanmak için (DeepStream >= 6.1)

    --dynamic
    

    Statik toplu iş boyutu kullanmak için (toplu iş boyutu = 4 için örnek)

    --batch 4
    
  5. CUDA sürümünü, yüklü JetPack sürümüne göre ayarlayın

    JetPack 4.6.4 için:

    export CUDA_VER=10.2
    

    JetPack 5.1.3 için:

    export CUDA_VER=11.4
    
  6. Kitaplığı derleyin

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. Düzenleyin config_infer_primary_yoloV8.txt modelinize göre dosya ( YOLOv8s 80 sınıflı)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. Düzenleyin deepstream_app_config dosya

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. Video kaynağını şuradan da değiştirebilirsiniz: deepstream_app_config dosya. 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

Oluşturmak uzun zaman alacak TensorRT Çıkarıma başlamadan önce motor dosyası. Bu yüzden lütfen sabırlı olun.

YOLOv8 deepstream ile

İpucu

Modeli FP16 hassasiyetine dönüştürmek istiyorsanız, model-engine-file=model_b1_gpu0_fp16.engine ve network-mode=2 içinde config_infer_primary_yoloV8.txt

INT8 Kalibrasyonu

Çıkarım için INT8 hassasiyetini kullanmak istiyorsanız, aşağıdaki adımları izlemeniz gerekir

  1. Ayarlamak OPENCV ortam değişkeni

    export OPENCV=1
    
  2. Kitaplığı derleyin

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. COCO veri kümesi için val2017'ye gidin, çıkarın ve DeepStream-Yolo klasör

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

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

    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 fazla doğruluk). Baş -1000 arasında ayarlayabilirsiniz. Örneğin, 2000 görüntü için head -2000. Bu işlem uzun sürebilir.

  6. Oluştur calibration.txt Seçilen tüm görüntüleri içeren dosya

    realpath calibration/*jpg > calibration.txt
    
  7. Ortam değişkenlerini ayarlama

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    Not

    Daha yüksek INT8_CALIB_BATCH_SIZE değerleri, daha fazla doğruluk ve daha hızlı kalibrasyon hızı ile sonuçlanacaktır. GPU belleğinize göre ayarlayın.

  8. Güncelle config_infer_primary_yoloV8.txt dosya

    Kimden

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

    için

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

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

deepstream-app -c deepstream_app_config.txt

MultiStream Kurulumu

Tek bir derin akış uygulaması altında birden fazla akış ayarlamak için, deepstream_app_config.txt dosya

  1. Sahip olmak istediğiniz akış sayısına göre bir ızgara görüntüsü oluşturmak için satırları ve sütunları değiştirin. Örneğin, 4 akış için 2 satır ve 2 sütun ekleyebiliriz.

    [tiled-display]
    rows=2
    columns=2
    
  2. Ayarlamak num-sources=4 ve ekle uri 4 akışın tümünün

    [source0]
    enable=1
    type=3
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

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

deepstream-app -c deepstream_app_config.txt
Çoklu akış kurulumu

Benchmark Sonuçları

Aşağıdaki tabloda nasıl olduğu özetlenmektedir YOLOv8s modeller farklı performanslar sergiliyor TensorRT NVIDIA Jetson Orin NX 16 GB'ta 640x640 giriş boyutuna sahip hassasiyet seviyeleri.

Model Adı Hassasiyet Çıkarım Süresi (ms/im) FPS
YOLOv8s FP32 15.63 64
FP16 7.94 126
INT8 5.53 181

Teşekkür

Bu rehber başlangıçta Seeed Studio, Lakshantha ve Elaine'deki arkadaşlarımız tarafından oluşturuldu.



2024-07-01 tarihinde oluşturuldu, 2024-07-01 tarihinde güncellendi
Yazarlar: lakshanthad (1)

Yorumlar