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

This guide has been tested with NVIDIA Jetson Orin Nano Super Developer Kit running the latest stable JetPack release of JP6.1, Seeed Studio reComputer J4012 which is based on NVIDIA Jetson Orin NX 16GB running JetPack release of JP5.1.3 and Seeed Studio reComputer J1020 v2 which is based on NVIDIA Jetson Nano 4GB running JetPack release of JP4.6.4. It is expected to work across all the NVIDIA Jetson hardware lineup including latest and legacy.

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. Install Ultralytics with necessary dependencies

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
    
  2. Clone the DeepStream-Yolo repository

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. Copy the export_yoloV8.py file from DeepStream-Yolo/utils directory to the ultralytics dossier

    cp ~/DeepStream-Yolo/utils/export_yoloV8.py ~/ultralytics
    cd ultralytics
    

    Note

    export_yoloV8.py works for both YOLOv8 and YOLO11 models.

  4. Download Ultralytics YOLO11 detection model (.pt) of your choice from YOLO11 releases. Here we use yolo11s.pt.

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

    Note

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

  5. Convertir le modèle en ONNX

    python3 export_yoloV8.py -w yolo11s.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
    
  6. Copy the generated .onnx model file and labels.txt file to the 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
    

    For 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_yoloV8.txt file according to your model (for YOLO11s with 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_yoloV8.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

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

If you want to convert the model to FP16 precision, simply set 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

Note

Currently INT8 does not work with TensorRT 10.x. This section of the guide has been tested with TensorRT 8.x which is expected to work.

  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

The following benchmarks summarizes how YOLO11 models perform at different TensorRT precision levels with an input size of 640x640 on NVIDIA Jetson Orin NX 16GB.

Tableau de comparaison

Jetson DeepStream Benchmarks Chart

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 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 yolo11s.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 ?

The performance of YOLO11 models on NVIDIA Jetson Orin NX 16GB varies based on TensorRT precision levels. For example, YOLO11s models achieve:

  • FP32 Precision: 14.6 ms/im, 68.5 FPS
  • PrĂ©cision FP16: 7,94 ms/im, 126 FPS
  • INT8 Precision: 5.95 ms/im, 168 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.

📅 Created 6 months ago ✏️ Updated 4 days ago

Commentaires