Skip to content

Ultralytics YOLO11 sur NVIDIA Jetson en utilisant DeepStream SDK et TensorRT



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

Ce guide complet fournit une marche à suivre détaillée pour déployer Ultralytics YOLO11 sur NVIDIA Jetson devices en utilisant DeepStream SDK et TensorRT. Ici, nous utilisons TensorRT pour maximiser les performances d'inférence sur la plateforme Jetson.

DeepStream sur NVIDIA Jetson

Note

Ce guide a été testé avec le Seeed Studio reComputer J4012 qui est basé sur NVIDIA Jetson Orin NX 16GB exécutant la version JP5.1.3 de JetPack et le Seeed Studio reComputer J1020 v2 qui est basé sur NVIDIA Jetson Nano 4GB exécutant la version JP4.6.4 de JetPack. Il devrait fonctionner sur l'ensemble de la gamme de matériel NVIDIA Jetson, y compris les plus récents et les plus anciens.

Qu'est-ce que NVIDIA DeepStream ?

NVIDIADeepStream SDK est une boîte à outils complète d'analyse en continu basée sur GStreamer pour le traitement multi-capteurs basé sur l'IA, la compréhension de la vidéo, de l'audio et de l'image. Il est idéal pour les développeurs d'IA visionnaire, les partenaires logiciels, les startups et les équipementiers 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, le codage/décodage vidéo et le rendu vidéo. Ces pipelines permettent l'analyse en temps réel des données vidéo, des images et des capteurs. La prise en charge multiplateforme de DeepStream vous permet de développer plus rapidement et plus facilement des applications et des services d'IA visionnaire sur site, en périphérie et dans le nuage.

Conditions préalables

Avant de commencer à suivre ce guide :

Conseil

Dans ce guide, nous avons utilisé la méthode du paquet Debian pour installer le SDK DeepStream sur l'appareil Jetson. Vous pouvez également visiter le site DeepStream SDK on Jetson (Archivé) pour accéder aux anciennes versions de DeepStream.

Configuration de DeepStream pour YOLO11

Nous utilisons ici le dépôt GitHub marcoslucianops/DeepStream-Yolo qui inclut NVIDIA DeepStream SDK support pour les modèles YOLO . Nous apprécions les efforts de marcoslucianops pour ses contributions !

  1. Installer les dépendances

    pip install cmake
    pip install onnxsim
    
  2. Cloner le dépôt suivant

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Téléchargez Ultralytics YOLO11 modèle de détection (.pt) de votre choix à partir de YOLO11 releases. Nous utilisons ici yolov8s.pt.

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

    Note

    Vous pouvez également utiliser un modèle de formation personnalisé YOLO11 .

  4. Convertir le modèle en ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    Passez les arguments suivants à la commande ci-dessus

    Pour DeepStream 6.0.1, utilisez l'opset 12 ou une valeur inférieure. L'opset par défaut est 16.

    --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 dynamique des lots (DeepStream >= 6.1)

    --dynamic
    

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

    --batch 4
    
  5. 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
    
  6. Compiler la bibliothèque

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. Modifier le config_infer_primary_yoloV8.txt selon votre modèle (pour YOLOv8s avec 80 classes)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. Modifier le deepstream_app_config fichier

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. 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

Note

Il faudra beaucoup de temps pour générer le fichier du moteur TensorRT avant de commencer l'inférence. Veuillez donc faire preuve de patience.

YOLO11 avec deepstream

Conseil

Si vous souhaitez convertir le modèle en FP16 précisionil suffit de fixer model-engine-file=model_b1_gpu0_fp16.engine et network-mode=2 à l'intérieur config_infer_primary_yoloV8.txt

INT8 Calibration

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

  1. Set (jeu de mots) 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 le jeu de données COCO, téléchargez le fichier val2017, l'extraire et la déplacer vers DeepStream-Yolo dossier

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

    mkdir calibration
    
  5. Exécutez le programme suivant pour sélectionner 1000 images aléatoires de l'ensemble de données COCO afin de procéder à l'étalonnage.

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

    Note

    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 régler le nombre d'images à partir de -1000. Par exemple, pour 2000 images, la tête est fixée à -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
    

    Note

    Des valeurs plus élevées de INT8_CALIB_BATCH_SIZE se traduiront par une plus grande précision et une vitesse d'étalonnage plus rapide. Réglez-la en fonction de votre mémoire GPU .

  8. Mettre à jour le config_infer_primary_yoloV8.txt fichier

    De

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

    Vers

    ...
    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 du multi-stream

Pour mettre en place plusieurs flux dans le cadre d'une seule application deepstream, vous pouvez apporter les modifications suivantes au fichier deepstream_app_config.txt fichier

  1. Modifiez les lignes et les colonnes pour construire une grille d'affichage 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. Set (jeu de mots) num-sources=4 et ajouter uri de l'ensemble des 4 flux

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

Exécuter l'inférence

deepstream-app -c deepstream_app_config.txt
Configuration multi-flux

Résultats de l'évaluation comparative

Le tableau suivant résume les performances des modèles YOLOv8s à différents niveaux de précision TensorRT avec une taille d'entrée de 640x640 sur NVIDIA Jetson Orin NX 16GB.

Nom du modèle Précision Temps d'inférence (ms/im) FPS
YOLOv8s FP32 15.63 64
16ÈME PCRD 7.94 126
INT8 5.53 181

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 les étapes de 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 Jetson NVIDIA . TensorRT fournit une inférence d'apprentissage profond haute performance et à faible latence grâce à la fusion des couches, à l'étalonnage de précision et à l'auto-réglage du noyau. Cela permet 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 de Ultralytics YOLO11 avec le SDK DeepStream et TensorRT est compatible avec l'ensemble de la gamme NVIDIA Jetson. Cela inclut des appareils tels que la Jetson Orin NX 16GB avec JetPack 5.1.3 et la Jetson Nano 4GB avec JetPack 4.6.4. Reportez-vous à la section Configuration DeepStream pour YOLO11 pour connaître les étapes détaillées.

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

Pour convertir un modèle YOLO11 au format ONNX afin de le déployer avec DeepStream, utilisez la fonction utils/export_yoloV8.py à partir du script DeepStream-Yolo dépôt.

Voici un exemple de commande :

python3 utils/export_yoloV8.py -w yolov8s.pt --opset 12 --simplify

Pour plus de détails sur la conversion des 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 YOLOv8s atteignent :

  • Précision FP32: 15,63 ms/im, 64 FPS
  • Précision FP16: 7,94 ms/im, 126 FPS
  • Précision INT8: 5,53 ms/im, 181 FPS

TensorRTCes repères soulignent l'efficacité et la capacité d'utilisation des modèles YOLO11 optimisés sur le matériel NVIDIA Jetson. Pour plus de détails, voir notre section Résultats des tests de performance.

📅C réé il y a 5 mois ✏️ Mis à jour il y a 2 mois

Commentaires