Ultralytics YOLOv8 sur NVIDIA Jetson à l’aide du SDK DeepStream et TensorRT
Ce guide complet fournit une marche à suivre détaillée pour déployer Ultralytics YOLOv8 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.
Note
Ce guide a été testé avec le Seeed Studio reComputer J4012 qui est basé sur la NVIDIA Jetson Orin NX 16GB et la version JP5.1.3 de JetPack et le Seeed Studio reComputer J1020 v2 qui est basé sur la NVIDIA Jetson Nano 4GB et la version JP4.6.4 de JetPack. Il devrait fonctionner sur toute la gamme de matériel NVIDIA Jetson, y compris les plus récents et les plus anciens.
Qu’est-ce que NVIDIA DeepStream ?
Le SDK DeepStream de NVIDIA 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 vidéo, l'audio et la compréhension des images. Il est idéal pour les développeurs d'IA de vision, les partenaires logiciels, les startups et les équipementiers qui créent des apps et des services IVA (Intelligent Video Analytics). Tu peux 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 comme le suivi, le codage/décodage vidéo et le rendu vidéo. Ces pipelines permettent de réaliser des analyses en temps réel sur des données vidéo, d'images et de capteurs. La prise en charge multiplateforme de DeepStream te permet de développer plus rapidement et plus facilement des applications et des services d'IA de vision sur site, à la périphérie et dans le cloud.
Conditions préalables
Avant de commencer Ă suivre ce guide :
- Consulte notre documentation, Guide de démarrage rapide : NVIDIA Jetson avec Ultralytics YOLOv8 pour configurer ton appareil NVIDIA Jetson avec Ultralytics YOLOv8
-
Installe DeepStream SDK en fonction de la version de JetPack.
- Pour JetPack 4.6.4, installe DeepStream 6.0.1
- Pour JetPack 5.1.3, installe DeepStream 6.3
Astuce
Dans ce guide, nous avons utilisé la méthode du paquet Debian pour installer le SDK DeepStream sur l'appareil Jetson. Tu peux aussi visiter le site DeepStream SDK on Jetson (Archivé) pour accéder aux anciennes versions de DeepStream.
Configuration de DeepStream pour YOLOv8
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 les dépendances
-
Clonez le référentiel suivant
-
Télécharge Ultralytics YOLOv8 modèle de détection (.pt) de ton choix parmi les versionsYOLOv8 . Nous utilisons ici yolov8s.pt.
Note
Tu peux aussi utiliser un modèle YOLOv8 formé sur mesure.
-
Convertir le modèle en ONNX
Transmettez les arguments ci-dessous Ă la commande ci-dessus
Pour DeepStream 6.0.1, utilisez opset 12 ou version antérieure. L’ensemble d’opérations par défaut est 16.
Pour modifier la taille de l’inférence (par défaut : 640)
Exemple pour 1280 :
Pour simplifier le ONNX modèle (DeepStream >= 6.0)
Pour utiliser la taille de lot dynamique (DeepStream >= 6.1)
Pour utiliser la taille de lot statique (exemple pour la taille de lot = 4)
-
Définissez la version CUDA en fonction de la version de JetPack installée
Pour JetPack 4.6.4 :
Pour JetPack 5.1.3 :
-
Compiler la bibliothèque
-
Modifier le
config_infer_primary_yoloV8.txt
selon votre modèle (pour YOLOv8s avec 80 classes) -
Modifier le
deepstream_app_config
fichier -
Vous pouvez également modifier la source vidéo dans
deepstream_app_config
lime. Ici, un fichier vidéo par défaut est chargé
Exécuter l’inférence
Note
Il faudra beaucoup de temps pour générer le TensorRT avant de commencer l’inférence. Alors s’il vous plaît, soyez patient.
Astuce
Si vous souhaitez convertir le modèle en précision FP16, il suffit de définir model-engine-file=model_b1_gpu0_fp16.engine
et network-mode=2
dedans config_infer_primary_yoloV8.txt
Calibrage INT8
Si tu veux utiliser la précision INT8 pour l'inférence, tu dois suivre les étapes suivantes
-
Poser
OPENCV
variable d’environnement -
Compiler la bibliothèque
-
Pour le jeu de données COCO, télécharge le val2017extrais, et déplace-toi vers
DeepStream-Yolo
dossier -
Créer un nouveau répertoire pour les images d’étalonnage
-
Exécutez ce qui suit pour sélectionner 1000 images aléatoires dans l’ensemble de données COCO pour exécuter l’étalonnage
Note
NVIDIA recommande au moins 500 images pour obtenir une bonne précision. Sur cet exemple, 1000 images sont choisies pour obtenir une meilleure précision (plus d'images = plus de précision). Tu peux régler le nombre d'images de tête à 1000. Par exemple, pour 2000 images, la tête -2000. Ce processus peut prendre beaucoup de temps.
-
Créez le
calibration.txt
avec toutes les images sélectionnées -
Définir des variables d’environnement
Note
Des valeurs INT8_CALIB_BATCH_SIZE plus élevées se traduiront par une plus grande précision et une vitesse d’étalonnage plus rapide. Réglez-le en fonction de votre mémoire GPU.
-
Mettez Ă jour le
config_infer_primary_yoloV8.txt
fichierDe
Pour
Exécuter l’inférence
Configuration de MultiStream
Pour configurer plusieurs flux sous une seule application deepstream, vous pouvez apporter les modifications suivantes Ă la commande 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.
-
Poser
num-sources=4
et ajoutezuri
des 4 volets
Exécuter l’inférence
Résultats de l’analyse comparative
Le tableau suivant résume comment YOLOv8s les modèles fonctionnent à différents niveaux TensorRT niveaux de précision avec une taille d’entrée de 640x640 sur NVIDIA Jetson Orin NX 16 Go.
Nom du modèle | Précision | Temps d'inférence (ms/im) | FPS |
---|---|---|---|
YOLOv8s | FP32 | 15.63 | 64 |
FP16 | 7.94 | 126 | |
INT8 | 5.53 | 181 |
Remerciements
Ce guide a été initialement créé par nos amis de Seeed Studio, Lakshantha et Elaine.