Ultralytics YOLO27 :
Get Started

Ultralytics YOLO26 sur NVIDIA Jetson avec DeepStream SDK et TensorRT#



À regarder : Comment utiliser les modèles Ultralytics YOLO26 avec NVIDIA DeepStream sur Jetson Orin NX 🚀

Ce guide complet détaille le déploiement d’Ultralytics YOLO26 sur les appareils NVIDIA Jetson avec DeepStream SDK et TensorRT. Nous utilisons ici TensorRT pour optimiser les performances d’inférence sur la plateforme Jetson.

Ce guide explique 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 NVIDIA Jetson Orin Nano Super Developer Kit exécutant la version JetPack de JP6.1, le Seeed Studio reComputer J4012, basé sur NVIDIA Jetson Orin NX 16 Go et exécutant la version JetPack de JP5.1.3, ainsi que le Seeed Studio reComputer J1020 v2, basé sur NVIDIA Jetson Nano 4 Go et exécutant la version JetPack de JP4.6.4. Le guide devrait fonctionner sur toute la gamme de matériel NVIDIA Jetson, y compris les modèles les plus récents et les 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, destinée au traitement multi-capteurs et à la compréhension de vidéos, d’audio et d’images par l’IA. Elle est idéale pour les développeurs d’IA visuelle, les partenaires logiciels, les startups et les OEM qui conçoivent des applications et services d’IVA (analyse vidéo intelligente). Tu peux désormais créer des pipelines de traitement de flux intégrant des réseaux de neurones ainsi que d’autres tâches de traitement complexes, comme le suivi, l’encodage et le décodage vidéo, et le rendu vidéo. Ces pipelines permettent d’effectuer des analyses en temps réel sur des données vidéo, image et capteur. La prise en charge multiplateforme de DeepStream permet de développer plus rapidement et plus facilement des applications et services d’IA visuelle sur site, en périphérie et dans le cloud.

Prérequis#

Avant de suivre ce guide :

Conseil

Dans ce guide, nous avons utilisé la méthode du paquet Debian pour installer 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 prend en charge les modèles YOLO avec NVIDIA DeepStream SDK. Nous remercions marcoslucianops pour ses contributions !

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

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

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Télécharge le 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 au format ONNX et écris le fichier labels.txt à partir duquel DeepStream lit les noms de classes.

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # crée '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 DeepStream ne dessine pas deux fois la même 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 et doit donc correspondre à batch-size dans la configuration DeepStream), et opset=12 pour TensorRT 8.2 ou une version antérieure (DeepStream 6.0.1 et versions antérieures). Consulte la liste complète des arguments d’exportation.

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

    Pour JetPack 7.1 :

    export CUDA_VER=13.0
  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 en ajoutant une marge centrée et s’exécute sans NMS. Pour obtenir la meilleure précision, ajoute les lignes suivantes à 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 du moteur TensorRT prendra beaucoup de temps avant le démarrage de l’inférence. Il faut donc patienter.

YOLO26 with deepstream
Conseil

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

Pour utiliser la précision INT8 lors de l’inférence, suis 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, avec lequel elle 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 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 1 000 images aléatoires du jeu de données COCO et 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, 1 000 images sont sélectionnées pour améliorer la précision (plus il y a d’images, meilleure est la précision). Tu peux régler ce nombre avec head -1000. Par exemple, pour 2 000 images, utilise head -2000. Ce processus peut prendre beaucoup de temps.

  1. Crée le fichier calibration.txt contenant 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 améliorent la précision et accélèrent la calibration. 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 multi-flux#



À regarder : Comment effectuer une inférence sur plusieurs flux avec Ultralytics YOLO26 et NVIDIA DeepStream sur Jetson Orin 🚀

Pour configurer plusieurs flux dans une même 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 adaptée au nombre de flux souhaité. Par exemple, pour 4 flux, ajoute 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 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 benchmarks#

Les benchmarks suivants résument les performances des modèles YOLO11 avec différents niveaux de précision TensorRT, pour une taille d’entrée de 640x640 sur NVIDIA Jetson Orin NX 16 Go. YOLO26 utilise le même processus d’exportation et d’inférence DeepStream 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é créé à l’origine par nos amis Lakshantha et Elaine, de Seeed Studio.

FAQ#

  • Pour configurer Ultralytics YOLO26 sur un appareil NVIDIA Jetson, tu dois d’abord installer DeepStream SDK, compatible avec ta version de JetPack. Suis les étapes détaillées 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, ce qui réduit considérablement la latence et améliore le débit sur les appareils NVIDIA Jetson. TensorRT offre une inférence de deep learning à hautes performances et faible latence grâce à la fusion de couches, à la calibration de la précision et à l’optimisation automatique des noyaux. L’exécution est ainsi plus rapide et plus efficace, ce qui est 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. Il couvre notamment les appareils Jetson Orin NX 16 Go avec JetPack 5.1.3 et Jetson Nano 4 Go avec JetPack 4.6.4. Consulte la section Configuration de DeepStream pour YOLO26 pour obtenir des instructions détaillées.

  • Exporte le modèle avec la tête sans NMS à l’aide de l’outil d’exportation Ultralytics, puis écris le fichier labels.txt à partir duquel DeepStream lit les noms de classes :

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

    Ajoute opset=12 pour TensorRT 8.2 ou une version antérieure (DeepStream 6.0.1 et versions antérieures). Pour en savoir plus sur la conversion de modèles, consulte notre section sur l’exportation des modèles.

  • Pour exécuter l’inférence INT8, calibre le modèle sur un ensemble représentatif d’images et passe la configuration DeepStream en mode INT8. Télécharge les images COCO val2017, sélectionne environ 1 000 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 suivre 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 pour ajouter une grille d’affichage en mosaïque et répertorier l’URI de chaque source. Définis rows et columns dans [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 en fonction du 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 16 Go varient selon le niveau de précision TensorRT. Par exemple, les modèles YOLO11s obtiennent les résultats suivants :

    • 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 avec TensorRT sur le matériel NVIDIA Jetson. Pour en savoir plus, consulte la section Résultats des benchmarks.

Commentaires