İçeriğe geç

TensorRT ve DeepStream SDK kullanarak NVIDIA Jetson'a dağıtın

📚 Bu kılavuz, eğitilmiş bir modelin NVIDIA Jetson Platformuna nasıl dağıtılacağını ve TensorRT ve DeepStream SDK kullanılarak nasıl çıkarım yapılacağını açıklamaktadır. Burada, Jetson platformunda çıkarım performansını en üst düzeye çıkarmak için TensorRT adresini kullanıyoruz.

Donanım Doğrulaması

Bu kılavuzu aşağıdaki Jetson cihazlarında test ettik ve doğruladık

Başlamadan Önce

Bu kılavuz için gerekli olan CUDA, TensorRT ve DeepStream SDK'yı içerdiğinden, JetPack SDK'yı tüm SDK Bileşenleri ve DeepStream SDK ile birlikte Jetson cihazına düzgün bir şekilde yüklediğinizden emin olun.

JetPack SDK, donanım hızlandırmalı AI-at-the-edge geliştirme için eksiksiz bir geliştirme ortamı sağlar. Tüm Jetson modülleri ve geliştirici kitleri JetPack SDK tarafından desteklenmektedir.

Aşağıdakileri içeren iki ana kurulum yöntemi vardır,

  1. SD Kart Görüntü Yöntemi
  2. NVIDIA SDK Yöneticisi Yöntemi

NVIDIA resmi web sitesinden çok ayrıntılı bir kurulum kılavuzu bulabilirsiniz. Ayrıca yukarıda bahsedilen reComputer J1010 ve reComputer J2021 ile ilgili kılavuzları da bulabilirsiniz.

Gerekli Paketleri Yükleyin

  • Adım 1. Jetson cihazının terminaline erişin, pip yükleyin ve yükseltin
sudo apt update
sudo apt install -y python3-pip
pip3 install --upgrade pip
  • Adım 2. Aşağıdaki repoyu klonlayın
git clone https://github.com/ultralytics/yolov5
  • Adım 3. requirements.txt dosyasını açın
cd yolov5
vi requirements.txt
  • Adım 5. Aşağıdaki satırları düzenleyin. Burada düzenleme moduna girmek için önce i tuşuna basmanız gerekir. ESC tuşuna basın, ardından kaydetmek ve çıkmak için :wq yazın
# torch>=1.8.0
# torchvision>=0.9.0

Not: torch ve torchvision daha sonra kurulacakları için şimdilik hariç tutulmuştur.

  • Adım 6. Aşağıdaki bağımlılığı yükleyin
sudo apt install -y libfreetype6-dev
  • Adım 7. Gerekli paketleri yükleyin
pip3 install -r requirements.txt

PyTorch ve Torchvision'ı yükleyin

ARM aarch64 mimarisine dayanan Jetson platformunda çalışmak için uyumlu olmadıklarından PyTorch ve Torchvision'ı pip'ten yükleyemeyiz. Bu nedenle, önceden oluşturulmuş PyTorch pip wheel'i manuel olarak yüklememiz ve Torchvision'ı kaynaktan derlememiz / yüklememiz gerekir.

Tüm PyTorch ve Torchvision bağlantılarına erişmek için bu sayfayı ziyaret edin.

JetPack 4.6 ve üzeri tarafından desteklenen sürümlerden bazıları şunlardır.

PyTorch v1.10.0

JetPack 4.4 (L4T R32.4.3) / JetPack 4.4.1 (L4T R32.4.4) / JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1) / JetPack 4.6 (L4T R32.6.1) tarafından Python 3.6 ile desteklenir

PyTorch v1.12.0

JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) tarafından Python 3.8 ile desteklenir

wget <URL> -O <file_name>
pip3 install <file_name>

Örneğin, burada JP4.6.1 çalıştırıyoruz ve bu nedenle PyTorch v1. 10.0'ı seçiyoruz

cd ~
sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
  • Adım 2. Yüklediğiniz PyTorch sürümüne bağlı olarak torchvision'ı yükleyin. Örneğin, PyTorch v1 .10.0'ı seçtik, bu da Torchvision v0.11.1'i seçmemiz gerektiği anlamına geliyor
sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python3 setup.py install

Burada, PyTorch sürümüne göre yüklemeniz gereken ilgili torchvision sürümünün bir listesi bulunmaktadır:

  • PyTorch v1.10 - torchvision v0.11.1
  • PyTorch v1.12 - torchvision v0.13.0

DeepStream Yapılandırması için YOLOv5

  • Adım 1. Aşağıdaki repoyu klonlayın
cd ~
git clone https://github.com/marcoslucianops/DeepStream-Yolo
  • Adım 2. DeepStream-Yolo /utils adresinden gen_wts_yoloV5.py dosyasını kopyalayın. yolov5 dizin
cp DeepStream-Yolo/utils/gen_wts_yoloV5.py yolov5
  • Adım 3. yolov5 reposunun içinde, pt dosyasını YOLOv5 sürümlerinden indirin (YOLOv5s 6.1 için örnek)
cd yolov5
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
  • Adım 4. cfg ve wts dosyalarını oluşturun
python3 gen_wts_yoloV5.py -w yolov5s.pt

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

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

Example for 1280:

-s 1280
or
-s 1280 1280
  • Adım 5. Oluşturulan cfg ve wts dosyalarını DeepStream-Yolo klasörüne kopyalayın
cp yolov5s.cfg ~/DeepStream-Yolo
cp yolov5s.wts ~/DeepStream-Yolo
  • Adım 6. DeepStream-Yolo klasörünü açın ve kütüphaneyi derleyin
cd ~/DeepStream-Yolo
CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.1
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.0.1 / 6.0
  • Adım 7. config_infer_primary_yoloV5.txt dosyasını modelinize göre düzenleyin
[property]
...
custom-network-config=yolov5s.cfg
model-file=yolov5s.wts
...
  • Adım 8. deepstream_app_config dosyasını düzenleyin
...
[primary-gie]
...
config-file=config_infer_primary_yoloV5.txt
  • Adım 9. deepstream_app_config dosyasındaki video kaynağını değiştirin. Burada aşağıda görebileceğiniz gibi varsayılan bir video dosyası yüklenir
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

Çıkarsamayı Çalıştırın

deepstream-app -c deepstream_app_config.txt
YOLOv5 deepstream FP32 ile

Yukarıdaki sonuç Jetson Xavier NX üzerinde FP32 ve YOLOv5s 640x640 ile çalışmaktadır. FPS 'nin 30 civarında olduğunu görebiliyoruz.

INT8 Kalibrasyonu

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

  • Adım 1. OpenCV'yi yükleyin
sudo apt-get install libopencv-dev
  • Adım 2. OpenCV desteği ile nvdsinfer_custom_impl_Yolo kütüphanesini derleyin/yeniden derleyin
cd ~/DeepStream-Yolo
CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.1
CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.0.1 / 6.0
  • Adım 3. COCO veri seti için val2017'yi indirin, ayıklayın ve DeepStream-Yolo klasörüne taşıyın

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

mkdir calibration
  • Adım 5. Kalibrasyonu çalıştırmak üzere COCO veri setinden 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). 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. Baş -1000 arasında ayarlayabilirsiniz. Örneğin 2000 görüntü için head -2000. Bu işlem uzun sürebilir.

  • Adım 6. Seçilen tüm görüntüleri içeren calibration.txt dosyasını oluşturun
realpath calibration/*jpg > calibration.txt
  • Adım 7. Ortam değişkenlerini ayarlayın
export INT8_CALIB_IMG_PATH=calibration.txt
export INT8_CALIB_BATCH_SIZE=1
  • Adım 8. config_infer_primary_yoloV5.txt dosyasını güncelleyin

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
...
  • Adım 9. Çıkarsamayı çalıştırın
deepstream-app -c deepstream_app_config.txt
YOLOv5 deepstream INT8 ile

Yukarıdaki sonuç INT8 ve YOLOv5s 640x640 ile Jetson Xavier NX üzerinde çalışıyor. FPS 'nin 60 civarında olduğunu görebiliyoruz.

Benchmark sonuçları

Aşağıdaki tabloda farklı modellerin Jetson Xavier NX üzerinde nasıl performans gösterdiği özetlenmektedir.

Model Adı Hassasiyet Çıkarım Boyutu Çıkarım Süresi (ms) FPS
YOLOv5s FP32 320x320 16.66 60
FP32 640x640 33.33 30
INT8 640x640 16.66 60
YOLOv5n FP32 640x640 16.66 60

Ek

Bu eğitim seeed'deki arkadaşlarımız @lakshanthad ve Elaine tarafından yazılmıştır.



Oluşturma 2023-11-12, Güncelleme 2024-01-07
Yazarlar: glenn-jocher (5)

Yorumlar