Passer au contenu

Ultralytics YOLO11 sur NVIDIA Jetson utilisant DeepStream SDK et TensorRT



Regarder : Comment utiliser les modèles Ultralytics YOLO11 avec NVIDIA Deepstream sur Jetson Orin NX 🚀

Ce guide complet fournit une procédure détaillée pour le déploiement d'Ultralytics YOLO11 sur les appareils NVIDIA Jetson à l'aide de DeepStream SDK et TensorRT. Ici, nous utilisons TensorRT pour maximiser les performances d'inférence sur la plateforme Jetson.

DeepStream sur NVIDIA Jetson

Remarque

Ce guide a été testé avec NVIDIA Jetson Orin Nano Super Developer Kit exécutant la dernière version stable de JetPack JP6.1, Seeed Studio reComputer J4012 qui est basé sur NVIDIA Jetson Orin NX 16GB exécutant la version JetPack de JP5.1.3 et Seeed Studio reComputer J1020 v2 qui est basé sur NVIDIA Jetson Nano 4GB exécutant la version JetPack de JP4.6.4. Il est prévu qu'il fonctionne sur toute la gamme de matériel NVIDIA Jetson, y compris les versions les plus récentes et les versions héritées.

Qu'est-ce que NVIDIA DeepStream ?

NVIDIA's DeepStream SDK est une boîte à outils complète d'analyse de flux basée sur GStreamer pour le traitement multi-capteurs basé sur l'IA, la vidéo, l'audio et la compréhension d'images. Il est idéal pour les développeurs d'IA de vision, les partenaires logiciels, les startups et les OEM qui créent des applications et des services IVA (Intelligent Video Analytics). Vous pouvez désormais créer des pipelines de traitement de flux qui intègrent des réseaux neuronaux et d'autres tâches de traitement complexes telles que le suivi, l'encodage/décodage vidéo et le rendu vidéo. Ces pipelines permettent l'analyse en temps réel des données vidéo, d'image et de capteur. La prise en charge multiplateforme de DeepStream vous offre un moyen plus rapide et plus facile de développer des applications et des services d'IA de vision sur site, à la périphérie et dans le cloud.

Prérequis

Avant de commencer à suivre ce guide :

Astuce

Dans ce guide, nous avons utilisé la méthode d'installation du paquet Debian de DeepStream SDK sur le périphérique Jetson. Vous pouvez également consulter la page DeepStream SDK sur Jetson (Archivé) pour accéder aux anciennes versions de DeepStream.

Configuration DeepStream pour YOLO11

Ici, nous utilisons le dépôt GitHub marcoslucianops/DeepStream-Yolo qui inclut la prise en charge du SDK NVIDIA DeepStream pour les modèles YOLO. Nous apprécions les efforts de marcoslucianops pour ses contributions !

  1. Installer Ultralytics avec les dépendances nécessaires

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
    
  2. Clonez le référentiel DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. Copier le export_yolo11.py fichier depuis DeepStream-Yolo/utils répertoire vers le ultralytics dossier

    cp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics
    cd ultralytics
    
  4. Téléchargez le modèle de détection Ultralytics YOLO11 (.pt) de votre choix depuis les versions de YOLO11. Ici, nous utilisons yolo11s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
    

    Remarque

    Vous pouvez également utiliser un modèle YOLO11 entraîné personnalisé.

  5. Convertir le modèle en ONNX

    python3 export_yolo11.py -w yolo11s.pt
    

    Passez les arguments ci-dessous à la commande ci-dessus

    Pour DeepStream 5.1, supprimez le --dynamic arg et utiliser opset 12 ou moins. La valeur par défaut opset est de 17.

    --opset 12
    

    Pour modifier la taille de l'inférence (par défaut : 640)

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

    Exemple pour 1280 :

    -s 1280
    or
    -s 1280 1280
    

    Pour simplifier le modèle ONNX (DeepStream >= 6.0)

    --simplify
    

    Pour utiliser la taille de lot dynamique (DeepStream >= 6.1)

    --dynamic
    

    Pour utiliser une taille de lot statique (exemple pour une taille de lot = 4)

    --batch 4
    
  6. Copier le code généré .onnx fichier de modèle et labels.txt fichier au DeepStream-Yolo dossier

    cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. Définir la version de CUDA en fonction de la version de JetPack installée

    Pour JetPack 4.6.4 :

    export CUDA_VER=10.2
    

    Pour JetPack 5.1.3 :

    export CUDA_VER=11.4
    

    Pour Jetpack 6.1 :

    export CUDA_VER=12.6
    
  8. Compiler la bibliothèque

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. Modifier le config_infer_primary_yolo11.txt fichier en fonction de votre modèle (pour les YOLO11s avec 80 classes)

    [property]
    ...
    onnx-file=yolo11s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. Modifier le deepstream_app_config fichier

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo11.txt
    
  11. Vous pouvez également modifier la source vidéo dans deepstream_app_config fichier. Ici, un fichier vidéo par défaut est chargé

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

Exécuter l'inférence

deepstream-app -c deepstream_app_config.txt

Remarque

La génération du fichier moteur TensorRT prendra beaucoup de temps avant de démarrer l'inférence. Veuillez donc patienter.

YOLO11 avec deepstream

Astuce

Si vous souhaitez convertir le modèle en précision FP16, définissez simplement model-engine-file=model_b1_gpu0_fp16.engine et network-mode=2 à l'intérieur de config_infer_primary_yolo11.txt

Calibration INT8

Si vous souhaitez utiliser la précision INT8 pour l'inférence, vous devez suivre les étapes ci-dessous

Remarque

Actuellement, INT8 ne fonctionne pas avec TensorRT 10.x. Cette section du guide a été testée avec TensorRT 8.x, qui devrait fonctionner.

  1. Définir OPENCV variable d'environnement

    export OPENCV=1
    
  2. Compiler la bibliothèque

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Pour l'ensemble de données COCO, téléchargez le val2017, extraire et déplacer vers DeepStream-Yolo dossier

  4. Créer un nouveau répertoire pour les images d'étalonnage

    mkdir calibration
    
  5. Exécutez la commande suivante pour sélectionner 1 000 images aléatoires du jeu de données COCO afin d'exécuter la calibration.

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

    Remarque

    NVIDIA recommande au moins 500 images pour obtenir une bonne précision. Dans cet exemple, 1000 images sont choisies pour obtenir une meilleure précision (plus d'images = plus de précision). Vous pouvez le définir à partir de head -1000. Par exemple, pour 2000 images, head -2000. Ce processus peut prendre beaucoup de temps.

  6. Créer le calibration.txt fichier avec toutes les images sélectionnées

    realpath calibration/*jpg > calibration.txt
    
  7. Définir les variables d'environnement

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    Remarque

    Des valeurs INT8_CALIB_BATCH_SIZE plus élevées entraîneront une plus grande précision et une vitesse d'étalonnage plus rapide. Définissez-le en fonction de votre mémoire GPU.

  8. Mettre à jour le config_infer_primary_yolo11.txt fichier

    De

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

    À

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

Exécuter l'inférence

deepstream-app -c deepstream_app_config.txt

Configuration MultiStream



Regarder : Comment exécuter plusieurs flux avec DeepStream SDK sur Jetson Nano en utilisant Ultralytics YOLO11 🎉

Pour configurer plusieurs flux sous une seule application DeepStream, vous pouvez apporter les modifications suivantes au deepstream_app_config.txt fichier

  1. Modifiez les lignes et les colonnes pour créer un affichage en grille en fonction du nombre de flux que vous souhaitez avoir. Par exemple, pour 4 flux, nous pouvons ajouter 2 lignes et 2 colonnes.

    [tiled-display]
    rows=2
    columns=2
    
  2. Définir num-sources=4 et ajouter uri des 4 flux

    [source0]
    enable=1
    type=3
    uri=path/to/video1.jpg
    uri=path/to/video2.jpg
    uri=path/to/video3.jpg
    uri=path/to/video4.jpg
    num-sources=4
    

Exécuter l'inférence

deepstream-app -c deepstream_app_config.txt
Configuration multiflux

Résultats des benchmarks

Les benchmarks suivants résument les performances des modèles YOLO11 à différents niveaux de précision TensorRT avec une taille d'entrée de 640x640 sur NVIDIA Jetson Orin NX 16GB.

Tableau comparatif

Tableau des benchmarks Jetson DeepStream

Tableau comparatif détaillé

Performance

Format Statut Temps d'inférence (ms/im)
TensorRT (FP32) 8.64
TensorRT (FP16) 5.27
TensorRT (INT8) 4.54
Format Statut Temps d'inférence (ms/im)
TensorRT (FP32) 14.53
TensorRT (FP16) 7.91
TensorRT (INT8) 6.05
Format Statut Temps d'inférence (ms/im)
TensorRT (FP32) 32.05
TensorRT (FP16) 15.55
TensorRT (INT8) 10.43
Format Statut Temps d'inférence (ms/im)
TensorRT (FP32) 39.68
TensorRT (FP16) 19.88
TensorRT (INT8) 13.64
Format Statut Temps d'inférence (ms/im)
TensorRT (FP32) 80.65
TensorRT (FP16) 39.06
TensorRT (INT8) 22.83

Remerciements

Ce guide a été initialement créé par nos amis de Seeed Studio, Lakshantha et Elaine.

FAQ

Comment configurer Ultralytics YOLO11 sur un appareil NVIDIA Jetson ?

Pour configurer Ultralytics YOLO11 sur un appareil NVIDIA Jetson, vous devez d'abord installer le SDK DeepStream compatible avec votre version de JetPack. Suivez le guide étape par étape dans notre Guide de démarrage rapide pour configurer votre NVIDIA Jetson pour le déploiement de YOLO11.

Quel est l'avantage d'utiliser TensorRT avec YOLO11 sur NVIDIA Jetson ?

L'utilisation de TensorRT avec YOLO11 optimise le modèle pour l'inférence, réduisant considérablement la latence et améliorant le débit sur les appareils NVIDIA Jetson. TensorRT offre une inférence d'apprentissage profond à haute performance et à faible latence grâce à la fusion de couches, à l'étalonnage de la précision et à l'auto-réglage du noyau. Cela conduit à une exécution plus rapide et plus efficace, particulièrement utile pour les applications en temps réel telles que l'analyse vidéo et les machines autonomes.

Puis-je exécuter Ultralytics YOLO11 avec DeepStream SDK sur différents matériels NVIDIA Jetson ?

Oui, le guide de déploiement d'Ultralytics YOLO11 avec le SDK DeepStream et TensorRT est compatible avec toute la gamme NVIDIA Jetson. Cela inclut des appareils tels que le Jetson Orin NX 16 Go avec JetPack 5.1.3 et le Jetson Nano 4 Go avec JetPack 4.6.4. Consultez la section Configuration de DeepStream pour YOLO11 pour connaître les étapes détaillées.

Comment puis-je convertir un modèle YOLO11 au format ONNX pour DeepStream ?

Pour convertir un modèle YOLO11 au format ONNX pour un déploiement avec DeepStream, utilisez le utils/export_yolo11.py script à partir du DeepStream-Yolo référentiel.

Voici un exemple de commande :

python3 utils/export_yolo11.py -w yolo11s.pt --opset 12 --simplify

Pour plus de détails sur la conversion de modèles, consultez notre section sur l'exportation de modèles.

Quels sont les benchmarks de performance pour YOLO sur NVIDIA Jetson Orin NX ?

Les performances des modèles YOLO11 sur NVIDIA Jetson Orin NX 16GB varient en fonction des niveaux de précision TensorRT. Par exemple, les modèles YOLO11s atteignent :

  • Précision FP32 : 14,6 ms/im, 68,5 FPS
  • Précision FP16 : 7,94 ms/im, 126 FPS
  • Précision INT8 : 5,95 ms/im, 168 FPS

Ces benchmarks soulignent l'efficacité et la capacité d'utiliser des modèles YOLO11 optimisés par TensorRT sur le matériel NVIDIA Jetson. Pour plus de détails, consultez notre section Résultats des benchmarks.



📅 Créé il y a 1 an ✏️ Mis à jour il y a 2 mois

Commentaires