YOLO Vision 2026 :

Ultralytics YOLO26 sur NVIDIA Jetson utilisant le DeepStream SDK et TensorRT#



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

Ce guide complet propose une procédure détaillée pour déployer Ultralytics YOLO26 sur des appareils NVIDIA Jetson à l'aide du DeepStream SDK et de TensorRT. Nous utilisons ici TensorRT pour optimiser les performances d'inférence sur la plateforme Jetson.

Ce guide aborde la configuration de DeepStream pour YOLO26, la calibration INT8, la configuration multi-flux et les résultats des benchmarks.

NVIDIA DeepStream SDK on Jetson platform
Remarque

Ce guide a été testé avec le kit NVIDIA Jetson Orin Nano Super Developer Kit exécutant la dernière version stable de JetPack JP6.1, le Seeed Studio reComputer J4012 basé sur le NVIDIA Jetson Orin NX 16GB exécutant la version de JetPack JP5.1.3 et le Seeed Studio reComputer J1020 v2 basé sur le NVIDIA Jetson Nano 4GB exécutant la version de JetPack JP4.6.4. Il devrait fonctionner sur toute la gamme de matériel NVIDIA Jetson, qu'il s'agisse des modèles récents ou plus anciens.

Qu'est-ce que NVIDIA DeepStream ?#

Le DeepStream SDK de NVIDIA est une boîte à outils complète d'analyse de flux basée sur GStreamer pour le traitement multi-capteurs alimenté par l'IA, ainsi que pour la compréhension de vidéos, de l'audio et des images. Elle est idéale pour les développeurs d'IA pour la vision, les partenaires logiciels, les startups et les équipementiers qui créent des applications 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 de neurones 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 une analyse en temps réel sur des données vidéo, d'image et de capteurs. La prise en charge multi-plateforme de DeepStream te offre un moyen plus rapide et plus simple de développer des applications et des services d'IA de vision sur site, en 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 des paquets Debian pour installer le DeepStream SDK sur l'appareil Jetson. Tu peux également visiter DeepStream SDK sur Jetson (Archivé) pour accéder aux versions antérieures de DeepStream.

Configuration DeepStream pour YOLO26#

Nous utilisons ici le dépôt GitHub marcoslucianops/DeepStream-Yolo qui inclut la prise en charge du NVIDIA DeepStream SDK pour les modèles YOLO. Nous remercions marcoslucianops pour ses contributions !

  1. Installe 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. Clone le dépôt DeepStream-Yolo

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

    cp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics
    cd ultralytics
  4. Télécharge un modèle de détection Ultralytics YOLO26 (.pt) de ton choix depuis le projet YOLO26. Nous utilisons ici yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Remarque

Tu peux également utiliser un modèle YOLO26 entraîné sur mesure.

  1. Convertis le modèle en ONNX

    python3 export_yolo26.py -w yolo26s.pt
Passe les arguments ci-dessous à la commande précédente

Pour DeepStream 5.1, supprime l'argument --dynamic et utilise opset 12 ou inférieur. La valeur par défaut opset est 17.

--opset 12

Pour changer la taille d'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 une taille de lot dynamique (DeepStream >= 6.1)

--dynamic

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

--batch 4
  1. Copie le fichier de modèle généré .onnx et le fichier labels.txt dans le dossier DeepStream-Yolo

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Définis la version CUDA en fonction de la version 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
  3. Compile la bibliothèque

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. Modifie le fichier config_infer_primary_yolo26.txt en fonction de ton modèle (pour YOLO26s avec 80 classes)

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
Paramètres de précision de YOLO26

YOLO26 redimensionne l'entrée avec un remplissage central (center padding) et s'exécute sans NMS. Pour obtenir la meilleure précision, ajoute ce qui suit à la section [property] de config_infer_primary_yolo26.txt :

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. Modifie le fichier deepstream_app_config

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. Tu peux également changer la source vidéo dans le fichier deepstream_app_config. Ici, un fichier vidéo par défaut est chargé

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

Exécute l'inférence#

deepstream-app -c deepstream_app_config.txt
Remarque

Il faudra un certain temps pour générer le fichier moteur TensorRT avant de commencer l'inférence. Sois donc patient.

YOLO26 with deepstream
Astuce

Si tu souhaites convertir le modèle en précision FP16, définis simplement model-engine-file=model_b1_gpu0_fp16.engine et network-mode=2 dans config_infer_primary_yolo26.txt

Calibration INT8#

Si tu veux utiliser la précision INT8 pour l'inférence, tu dois suivre les étapes ci-dessous :

Remarque

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

  1. Définis la variable d'environnement OPENCV

    export OPENCV=1
  2. Compile la bibliothèque

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. Pour le dataset COCO, télécharge le fichier val2017, extrait-le et déplace-le dans le dossier DeepStream-Yolo

  4. Crée un nouveau répertoire pour les images de calibration

    mkdir calibration
  5. Exécute ce qui suit pour sélectionner 1000 images aléatoires du jeu de données COCO afin d'effectuer la calibration

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

NVIDIA recommande d'utiliser 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). Tu peux configurer cela avec head -1000. Par exemple, pour 2000 images, utilise head -2000. Ce processus peut prendre un certain temps.

  1. Crée le fichier calibration.txt avec toutes les images sélectionnées

    realpath calibration/*jpg > calibration.txt
  2. Définis les variables d'environnement

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
Remarque

Des valeurs plus élevées pour INT8_CALIB_BATCH_SIZE entraîneront une meilleure précision et une vitesse de calibration plus rapide. Règle-les en fonction de la mémoire de ton GPU.

  1. Mets à jour le fichier config_infer_primary_yolo26.txt

    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 INT8#

Exécute la même commande pour construire le moteur INT8 et démarrer l'inférence :

deepstream-app -c deepstream_app_config.txt

Configuration MultiStream#



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

Pour configurer plusieurs flux sous une seule application DeepStream, apporte les modifications suivantes au fichier deepstream_app_config.txt :

  1. Change les lignes et colonnes pour créer une grille d'affichage selon le nombre de flux que tu souhaites avoir. Par exemple, pour 4 flux, nous pouvons ajouter 2 lignes et 2 colonnes.

    [tiled-display]
    rows=2
    columns=2
  2. Ajoute un groupe [sourceN] distinct pour chaque flux, chacun avec son propre uri et num-sources=1.

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

Exécuter l'inférence multi-flux#

Exécute la même commande pour lancer tous les flux dans l'affichage en mosaïque :

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

Résultats des tests de performance#

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 le NVIDIA Jetson Orin NX 16GB. YOLO26 utilise le même flux d'exportation et d'inférence DeepStream décrit ci-dessus.

Tableau de comparaison#

NVIDIA Jetson DeepStream performance benchmarks

Tableau de comparaison détaillé#

Performance
FormatStatutTemps d'inférence (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

Remerciements#

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

FAQ#

  • Pour configurer Ultralytics YOLO26 sur un appareil NVIDIA Jetson, tu dois d'abord installer le DeepStream SDK compatible avec ta version de JetPack. Suis le guide étape par étape dans notre Guide de démarrage rapide pour configurer ton NVIDIA Jetson pour le déploiement de YOLO26.

  • L'utilisation de TensorRT avec YOLO26 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 deep learning haute performance et à faible latence grâce à la fusion de couches, à la calibration de la précision et au réglage automatique des noyaux (kernel auto-tuning). 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.

  • Oui, le guide pour déployer Ultralytics YOLO26 avec le DeepStream SDK et TensorRT est compatible avec l'ensemble de la gamme NVIDIA Jetson. Cela inclut des appareils tels que le Jetson Orin NX 16GB avec JetPack 5.1.3 et le Jetson Nano 4GB avec JetPack 4.6.4. Consulte la section Configuration de DeepStream pour YOLO26 pour connaître les étapes détaillées.

  • Pour convertir un modèle YOLO26 au format ONNX en vue d'un déploiement avec DeepStream, utilise le script utils/export_yolo26.py du dépôt DeepStream-Yolo.

    Voici un exemple de commande :

    python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplify

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

  • Pour exécuter l'inférence INT8, calibre le modèle sur un ensemble d'images représentatif et bascule la configuration DeepStream en mode INT8. Télécharge les images COCO val2017, sélectionne environ 1000 images de calibration, définis les variables d'environnement INT8_CALIB_IMG_PATH et INT8_CALIB_BATCH_SIZE, puis mets à jour config_infer_primary_yolo26.txt avec model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table et network-mode=1. Consulte la section Calibration INT8 pour connaître la procédure complète. L'INT8 nécessite actuellement TensorRT 8.x.

  • Pour traiter plusieurs flux dans une seule application DeepStream, modifie le fichier deepstream_app_config.txt afin d'ajouter une grille d'affichage en mosaïque (tiled-display) et de lister chaque URI de source. Définis rows et columns sous [tiled-display] pour créer la grille, ajoute un groupe [sourceN] distinct par flux avec son propre uri et num-sources=1, et ajuste la grille pour qu'elle corresponde au nombre de flux. Consulte la section Configuration multi-flux pour voir un exemple complet.

  • 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,53 ms/im, 68,8 FPS
    • Précision FP16 : 7,91 ms/im, 126 FPS
    • Précision INT8 : 6,05 ms/im, 165 FPS

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

Commentaires