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
- Jetson Nano modülü ile üretilen Seeed reComputer J1010
- Jetson Xavier NX modülü ile üretilen Seeed reComputer J2021
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,
- SD Kart Görüntü Yöntemi
- 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
- Adım 2. Aşağıdaki repoyu klonlayın
- Adım 3. requirements.txt dosyasını açın
- 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
Not: torch ve torchvision daha sonra kurulacakları için şimdilik hariç tutulmuştur.
- Adım 6. Aşağıdaki bağımlılığı yükleyin
- Adım 7. Gerekli paketleri yükleyin
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
- file_name: torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- URL: https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
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
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
Adım 1. JetPack sürümünüze göre torch adresini aşağıdaki biçimde yükleyin
Ö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
- Adım 2. DeepStream-Yolo /utils adresinden gen_wts_yoloV5.py dosyasını kopyalayın. yolov5 dizin
- Adım 3. yolov5 reposunun içinde, pt dosyasını YOLOv5 sürümlerinden indirin (YOLOv5s 6.1 için örnek)
- Adım 4. cfg ve wts dosyalarını oluşturun
Not: Çıkarım boyutunu değiştirmek için (varsayılan: 640)
- Adım 5. Oluşturulan cfg ve wts dosyalarını DeepStream-Yolo klasörüne kopyalayın
- 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
- Adım 8. deepstream_app_config dosyasını düzenleyin
- 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
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
- 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
- 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
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
- Adım 7. Ortam değişkenlerini ayarlayın
- Adım 8. config_infer_primary_yoloV5.txt dosyasını güncelleyin
Kimden
için
- Adım 9. Çıkarsamayı çalıştırın
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.