Ultralytics YOLO27 :

Ultralytics YOLO26 sur NVIDIA Jetson avec DeepStream SDK et TensorRT#



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

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

Ce guide présente la configuration de DeepStream pour YOLO26, la calibration INT8, la configuration mult flux et les résultats des benchmarks.

NVIDIA DeepStream SDK on Jetson platform
Remarque

Ce guide a été testé avec le 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 NVIDIA Jetson Orin NX 16GB et exécutant la version JP5.1.3 de JetPack, ainsi que le Seeed Studio reComputer J1020 v2, basé sur NVIDIA Jetson Nano 4GB et exécutant la version JP4.6.4 de JetPack. Il devrait fonctionner sur toute la gamme de matériel NVIDIA Jetson, y compris les modèles les plus récents et les modèles hérités.

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, destinée au traitement multisensoriel par IA et à la compréhension des vidéos, des fichiers audio et des images. Elle est idéale pour les développeurs en IA visuelle, les partenaires logiciels, les startups et les fabricants OEM qui créent des applications et des services d'IVA (Intelligence vidéo). Tu peux désormais créer des pipelines de traitement de flux intégrant des réseaux neuronaux et d'autres tâches de traitement complexes comme le suivi, l'encodage et le décodage vidéo, ainsi que le rendu vidéo. Ces pipelines permettent d'effectuer des analyses en temps réel sur des données vidéo, d'image 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 visuelle sur site, en périphérie et dans le cloud.

Prérequis#

Avant de commencer ce guide :

Conseil

Dans ce guide, nous avons utilisé la méthode d'installation par paquet Debian de DeepStream SDK sur l'appareil Jetson. Tu peux également consulter DeepStream SDK sur Jetson (archivé) pour accéder aux anciennes versions de DeepStream.

Configuration de DeepStream pour YOLO26#

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

  1. Installer Ultralytics avec les dépendances nécessaires

    pip install ultralytics onnx onnxslim
  2. Cloner le dépôt DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. 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 et écris le fichier labels.txt duquel DeepStream lit les noms des classes

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
Arguments d'exportation

nms=False exporte la tête sans NMS, et agnostic_nms=True conserve une seule classe par détection afin que cluster-mode=4 (sans regroupement) dans la configuration de DeepStream ne dessine pas deux fois une boîte. Ajoute imgsz=1280 pour modifier la taille d'inférence (par défaut : 640), batch=4 pour une taille de lot de 4 (le lot exporté est statique, il doit donc correspondre à batch-size dans la configuration de DeepStream), et opset=12 pour TensorRT 8.2 ou antérieur (DeepStream 6.0.1 et antérieur). Consulte les export arguments pour obtenir la liste complète.

  1. Copie le fichier de modèle .onnx généré 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 de CUDA selon 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

    Pour JetPack 7.1 :

    export CUDA_VER=13.0
  3. Compiler 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 selon 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 centré et s'exécute sans NMS. Pour une précision optimale, 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 modifier 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écuter l'inférence#

deepstream-app -c deepstream_app_config.txt
Remarque

La génération du fichier de moteur TensorRT prendra beaucoup de temps avant le démarrage de l'inférence. Merci donc de patienter.

YOLO26 with deepstream
Conseil

Si tu veux 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, INT8 ne fonctionne pas avec TensorRT 10.x. Cette section du guide a été testée avec TensorRT 8.x, qui devrait fonctionner.

  1. Définis la variable d'environnement OPENCV

    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écharge val2017, extrais-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 la commande suivante 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 au moins 500 images pour obtenir une bonne précision. Dans cet exemple, 1000 images sont sélectionnées pour obtenir une meilleure précision (plus d'images = plus de précision). Tu peux modifier cette valeur avec head -1000. Par exemple, pour 2000 images, utilise head -2000. Ce processus peut prendre beaucoup de 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 de INT8_CALIB_BATCH_SIZE produiront une meilleure précision et une calibration plus rapide. Définis cette valeur 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 créer 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 dans une seule application DeepStream, apporte les modifications suivantes au fichier deepstream_app_config.txt :

  1. Modifie le nombre de lignes et de colonnes pour créer une grille d'affichage correspondant au nombre de flux souhaité. Par exemple, pour 4 flux, tu peux ajouter 2 lignes et 2 colonnes.

    [tiled-display]
    rows=2
    columns=2
  2. Ajoute un groupe [sourceN] distinct pour chaque flux, chacun avec ses propres 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 multistream#

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 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. YOLO26 utilise le même flux d'exportation et d'inférence DeepStream que celui décrit ci-dessus.

Graphique comparatif#

NVIDIA Jetson DeepStream performance benchmarks

Tableau comparatif détaillé#

Performances
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 les étapes de notre guide de démarrage rapide pour configurer ton NVIDIA Jetson en vue du 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 fournit une inférence de deep learning hautes performances et à faible latence grâce à la fusion des couches, à la calibration de la précision et à l'auto-optimisation des noyaux. Cela permet une exécution plus rapide et plus efficace, particulièrement utile pour les applications en temps réel comme l'analyse vidéo et les machines autonomes.

  • Oui, le guide de déploiement d'Ultralytics YOLO26 avec DeepStream SDK et TensorRT est compatible avec toute la gamme NVIDIA Jetson. Cela inclut des appareils comme 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.

  • Exporte le modèle avec la tête sans NMS en utilisant l'exportateur Ultralytics, et écris le fichier labels.txt duquel DeepStream lit les noms des classes :

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    Ajoute opset=12 pour TensorRT 8.2 ou antérieur (DeepStream 6.0.1 et antérieur). Pour plus de détails sur la conversion de modèles, consulte notre model export section.

  • Pour exécuter une inférence INT8, calibre le modèle sur un ensemble d'images représentatif et passe la configuration de 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 toutes les étapes. 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 et de répertorier l'URI de chaque source. Définis rows et columns sous [tiled-display] pour créer la grille, ajoute un groupe [sourceN] distinct pour chaque flux avec ses propres uri et num-sources=1, puis ajuste la grille au nombre de flux. Consulte la section Configuration multistream pour voir un exemple complet.

  • Les performances des modèles YOLO11 sur NVIDIA Jetson Orin NX 16GB varient selon les 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 des 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