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.
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 :
- Consultez notre documentation, Guide de démarrage rapide : NVIDIA Jetson avec Ultralytics YOLO11 pour configurer votre appareil NVIDIA Jetson avec Ultralytics YOLO11.
- Installer SDK DeepStream selon la version de JetPack
- Pour JetPack 4.6.4, installez DeepStream 6.0.1.
- Pour JetPack 5.1.3, installez DeepStream 6.3.
- Pour JetPack 6.1, installez DeepStream 7.1.
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 !
-
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
-
Clonez le référentiel DeepStream-Yolo
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo
-
Copier le
export_yolo11.py
fichier depuisDeepStream-Yolo/utils
répertoire vers leultralytics
dossiercp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
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é.
-
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 utiliseropset
12 ou moins. La valeur par défautopset
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
-
Copier le code généré
.onnx
fichier de modèle etlabels.txt
fichier auDeepStream-Yolo
dossiercp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
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
-
Compiler la bibliothèque
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
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 ...
-
Modifier le
deepstream_app_config
fichier... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
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.

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.
-
Définir
OPENCV
variable d'environnementexport OPENCV=1
-
Compiler la bibliothèque
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Pour l'ensemble de données COCO, téléchargez le val2017, extraire et déplacer vers
DeepStream-Yolo
dossier -
Créer un nouveau répertoire pour les images d'étalonnage
mkdir calibration
-
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.
-
Créer le
calibration.txt
fichier avec toutes les images sélectionnéesrealpath calibration/*jpg > calibration.txt
-
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.
-
Mettre à jour le
config_infer_primary_yolo11.txt
fichierDe
... 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
-
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
-
Définir
num-sources=4
et ajouteruri
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

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