Exportation TensorRT pour les modèles YOLO11
Le déploiement de modèles de vision par ordinateur dans des environnements à hautes performances peut nécessiter un format qui maximise la vitesse et l'efficacité. Cela est particulièrement vrai lorsque vous déployez votre modèle sur des GPU NVIDIA.
En utilisant le format d'exportation TensorRT, vous pouvez améliorer vos modèles Ultralytics YOLO11 pour une inférence rapide et efficace sur le matériel NVIDIA. Ce guide vous fournira des étapes faciles à suivre pour le processus de conversion et vous aidera à tirer le meilleur parti de la technologie avancée de NVIDIA dans vos projets de deep learning.
TensorRT
TensorRT, développé par NVIDIA, est un kit de développement logiciel (SDK) avancé conçu pour l'inférence d'apprentissage profond à haute vitesse. Il est bien adapté aux applications en temps réel comme la détection d'objets.
Cette boîte à outils optimise les modèles d'apprentissage profond pour les GPU NVIDIA et permet des opérations plus rapides et plus efficaces. Les modèles TensorRT subissent une optimisation TensorRT, qui comprend des techniques telles que la fusion de couches, l'étalonnage de la précision (INT8 et FP16), la gestion dynamique de la mémoire tensorielle et l'auto-tuning du noyau. La conversion des modèles d'apprentissage profond au format TensorRT permet aux développeurs de réaliser pleinement le potentiel des GPU NVIDIA.
TensorRT est reconnu pour sa compatibilité avec divers formats de modèles, notamment TensorFlow, PyTorch et ONNX, offrant aux développeurs une solution flexible pour l'intégration et l'optimisation de modèles provenant de différents frameworks. Cette polyvalence permet un déploiement de modèles efficace dans divers environnements matériels et logiciels.
Principales caractéristiques des modèles TensorRT
Les modèles TensorRT offrent une gamme de fonctionnalités clés qui contribuent à leur efficacité et à leur efficacité dans l'inférence d'apprentissage profond à haute vitesse :
-
Calibration de précision : TensorRT prend en charge la calibration de précision, permettant d'affiner les modèles pour des exigences de précision spécifiques. Cela inclut la prise en charge des formats de précision réduite comme INT8 et FP16, ce qui peut encore améliorer la vitesse d'inférence tout en maintenant des niveaux de précision acceptables.
-
Fusion de couches : Le processus d’optimisation TensorRT comprend la fusion de couches, où plusieurs couches d’un réseau neuronal sont combinées en une seule opération. Cela réduit la surcharge de calcul et améliore la vitesse d’inférence en minimisant l’accès à la mémoire et le calcul.
-
Gestion dynamique de la mémoire tensorielle : TensorRT gère efficacement l'utilisation de la mémoire tensorielle pendant l'inférence, réduisant ainsi la surcharge de mémoire et optimisant l'allocation de mémoire. Il en résulte une utilisation plus efficace de la mémoire du GPU.
-
Réglage automatique du noyau : TensorRT applique un réglage automatique du noyau pour sélectionner le noyau GPU le plus optimisé pour chaque couche du modèle. Cette approche adaptative garantit que le modèle tire pleinement parti de la puissance de calcul des GPU.
Options de déploiement dans TensorRT
Avant d'examiner le code d'exportation des modèles YOLO11 au format TensorRT, comprenons où les modèles TensorRT sont normalement utilisés.
TensorRT offre plusieurs options de déploiement, et chaque option équilibre différemment la facilité d'intégration, l'optimisation des performances et la flexibilité :
- Déploiement dans TensorFlow : Cette méthode intègre TensorRT dans TensorFlow, ce qui permet d’exécuter des modèles optimisés dans un environnement TensorFlow familier. Elle est utile pour les modèles comportant un mélange de couches prises en charge et non prises en charge, car TF-TRT peut les gérer efficacement.
-
API d'exécution TensorRT autonome : Offre un contrôle granulaire, idéal pour les applications critiques en termes de performances. Elle est plus complexe, mais permet une implémentation personnalisée des opérateurs non pris en charge.
-
Serveur d’inférence NVIDIA Triton : Une option qui prend en charge les modèles de divers frameworks. Particulièrement adapté à l’inférence dans le cloud ou en périphérie, il offre des fonctionnalités telles que l’exécution simultanée de modèles et l’analyse de modèles.
Exporter des modèles YOLO11 vers TensorRT
Vous pouvez améliorer l'efficacité de l'exécution et optimiser les performances en convertissant les modèles YOLO11 au format TensorRT.
Installation
Pour installer le paquet requis, exécutez :
Installation
# Install the required package for YOLO11
pip install ultralytics
Pour des instructions détaillées et les meilleures pratiques relatives au processus d'installation, consultez notre guide d'installation YOLO11. Si vous rencontrez des difficultés lors de l'installation des packages requis pour YOLO11, consultez notre guide des problèmes courants pour obtenir des solutions et des conseils.
Utilisation
Avant de plonger dans les instructions d'utilisation, assurez-vous de consulter la gamme de modèles YOLO11 proposés par Ultralytics. Cela vous aidera à choisir le modèle le plus approprié pour les exigences de votre projet.
Utilisation
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo11n.engine'
# Load the exported TensorRT model
tensorrt_model = YOLO("yolo11n.engine")
# Run inference
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to TensorRT format
yolo export model=yolo11n.pt format=engine # creates 'yolo11n.engine''
# Run inference with the exported model
yolo predict model=yolo11n.engine source='https://ultralytics.com/images/bus.jpg'
Arguments d'exportation
Argument | Type | Par défaut | Description |
---|---|---|---|
format |
str |
'engine' |
Format cible pour le modèle exporté, définissant la compatibilité avec divers environnements de déploiement. |
imgsz |
int ou tuple |
640 |
Taille d'image souhaitée pour l'entrée du modèle. Peut être un entier pour les images carrées ou un tuple (height, width) pour des dimensions spécifiques. |
half |
bool |
False |
Active la quantification FP16 (demi-précision), réduisant la taille du modèle et accélérant potentiellement l'inférence sur le matériel pris en charge. |
int8 |
bool |
False |
Active la quantification INT8, compressant davantage le modèle et accélérant l'inférence avec une perte de précision minimale, principalement pour les appareils périphériques. |
dynamic |
bool |
False |
Permet des tailles d'entrée dynamiques, améliorant la flexibilité dans la gestion des différentes dimensions d'image. |
simplify |
bool |
True |
Simplifie le graphe du modèle avec onnxslim , améliorant potentiellement les performances et la compatibilité. |
workspace |
float ou None |
None |
Définit la taille maximale de l'espace de travail en GiB pour les optimisations TensorRT, équilibrant l'utilisation de la mémoire et les performances ; utiliser None pour l'allocation automatique par TensorRT jusqu'au maximum de l'appareil. |
nms |
bool |
False |
Ajoute la suppression non maximale (NMS), essentielle pour un post-traitement de détection précis et efficace. |
batch |
int |
1 |
Spécifie la taille du lot d'inférence du modèle d'exportation ou le nombre maximal d'images que le modèle exporté traitera simultanément en predict mode. |
data |
str |
'coco8.yaml' |
Chemin d'accès au ensemble de données fichier de configuration (par défaut : coco8.yaml ), essentiel pour la quantification. |
fraction |
float |
1.0 |
Spécifie la fraction de l'ensemble de données à utiliser pour le calibrage de la quantification INT8. Permet de calibrer sur un sous-ensemble de l'ensemble de données complet, ce qui est utile pour les expériences ou lorsque les ressources sont limitées. S'il n'est pas spécifié avec INT8 activé, l'ensemble de données complet sera utilisé. |
device |
str |
None |
Spécifie le dispositif pour l'exportation : GPU (device=0 ), DLA pour NVIDIA Jetson (device=dla:0 ou device=dla:1 ). |
Astuce
Veuillez vous assurer d’utiliser un GPU avec prise en charge de CUDA lors de l’exportation vers TensorRT.
Pour plus de détails sur le processus d'exportation, consultez la page de la documentation Ultralytics sur l'exportation.
Exporter TensorRT avec la quantification INT8
L'exportation de modèles Ultralytics YOLO à l'aide de TensorRT avec une précision INT8 exécute la quantification post-entraînement (PTQ). TensorRT utilise la calibration pour la PTQ, qui mesure la distribution des activations dans chaque tenseur d'activation lorsque le modèle YOLO traite l'inférence sur des données d'entrée représentatives, puis utilise cette distribution pour estimer les valeurs d'échelle pour chaque tenseur. Chaque tenseur d'activation qui est un candidat à la quantification a une échelle associée qui est déduite par un processus de calibration.
Lors du traitement des réseaux quantifiés implicitement, TensorRT utilise INT8 de manière opportuniste pour optimiser le temps d'exécution des couches. Si une couche s'exécute plus rapidement en INT8 et a des échelles de quantification attribuées sur ses entrées et sorties de données, alors un noyau avec une précision INT8 est attribué à cette couche, sinon TensorRT sélectionne une précision de FP32 ou FP16 pour le noyau en fonction de ce qui entraîne un temps d'exécution plus rapide pour cette couche.
Astuce
Il est essentiel de s'assurer que le même appareil qui utilisera les poids du modèle TensorRT pour le déploiement est utilisé pour l'exportation avec une précision INT8, car les résultats de la calibration peuvent varier d'un appareil à l'autre.
Configuration de l'exportation INT8
Les arguments fournis lors de l'utilisation de export pour un modèle Ultralytics YOLO grandement influencent les performances du modèle exporté. Ils devront également être sélectionnés en fonction des ressources disponibles sur l'appareil, cependant les arguments par défaut devrait fonctionne pour la plupart Processeurs graphiques discrets NVIDIA Ampere (ou plus récents). L'algorithme d'étalonnage utilisé est "MINMAX_CALIBRATION"
et vous pouvez lire plus de détails sur les options disponibles dans le Guide du développeur TensorRT. Les tests Ultralytics ont révélé que "MINMAX_CALIBRATION"
était le meilleur choix et les exportations sont corrigées pour utiliser cet algorithme.
-
workspace
: Contrôle la taille (en GiB) de l'allocation de mémoire du dispositif lors de la conversion des poids du modèle.-
Ajuster le
workspace
valeur en fonction de vos besoins d'étalonnage et de la disponibilité des ressources. Bien qu'une plus grandeworkspace
peut augmenter le temps d'étalonnage, mais permet à TensorRT d'explorer un plus large éventail de tactiques d'optimisation, améliorant potentiellement les performances du modèle et précision. Inversement, un plus petitworkspace
peut réduire le temps d'étalonnage, mais peut limiter les stratégies d'optimisation, affectant la qualité du modèle quantifié. -
La valeur par défaut est
workspace=None
, ce qui permettra à TensorRT d'allouer automatiquement de la mémoire. Lors d'une configuration manuelle, cette valeur peut devoir être augmentée si l'étalonnage plante (se termine sans avertissement). -
TensorRT signalera
UNSUPPORTED_STATE
pendant l'exportation si la valeur deworkspace
est supérieur à la mémoire disponible pour l'appareil, ce qui signifie que la valeur deworkspace
doit être abaissée ou réglée surNone
. -
Si
workspace
est définie sur la valeur maximale et l'étalonnage échoue/plante, envisagez d'utiliserNone
pour l'allocation automatique ou en réduisant les valeurs deimgsz
etbatch
afin de réduire les besoins en mémoire. -
N’oubliez pas que l’étalonnage pour INT8 est spécifique à chaque appareil, emprunter un GPU « haut de gamme » pour l’étalonnage peut entraîner de mauvaises performances lorsque l’inférence est exécutée sur un autre appareil.
-
-
batch
: La taille maximale de lot qui sera utilisée pour l'inférence. Pendant l'inférence, des lots plus petits peuvent être utilisés, mais l'inférence n'acceptera pas de lots plus grands que ce qui est spécifié.
Remarque
Pendant la calibration, deux fois le batch
taille fournie sera utilisée. L'utilisation de petits lots peut entraîner une mise à l'échelle inexacte pendant la calibration. En effet, le processus s'ajuste en fonction des données qu'il reçoit. Les petits lots peuvent ne pas saisir toute la gamme de valeurs, ce qui entraîne des problèmes avec la calibration finale, donc la batch
la taille est automatiquement doublée. Si aucune taille de lot est spécifié batch=1
, l'étalonnage sera exécuté à batch=1 * 2
afin de réduire les erreurs d’échelle d’étalonnage.
L'expérimentation par NVIDIA les a amenés à recommander l'utilisation d'au moins 500 images d'étalonnage qui sont représentatives des données de votre modèle, avec un étalonnage de quantification INT8. Il s'agit d'une directive et non d'une difficile exigence, et vous devrez expérimenter avec ce qui est nécessaire pour bien performer pour votre ensemble de données. Étant donné que les données d'étalonnage sont nécessaires pour l'étalonnage INT8 avec TensorRT, assurez-vous d'utiliser les data
argument lorsque int8=True
pour TensorRT et utiliser data="my_dataset.yaml"
, qui utilisera les images de validation pour calibrer. Lorsqu'aucune valeur n'est passée pour data
avec l'exportation vers TensorRT avec la quantification INT8, la valeur par défaut sera d'utiliser l'un des des ensembles de données d'exemple « petits » basés sur la tâche du modèle au lieu de générer une erreur.
Exemple
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
int8=True,
data="coco.yaml", # (4)!
)
# Load the exported TensorRT INT8 model
model = YOLO("yolov8n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
- Exportations avec des axes dynamiques, ceci sera activé par défaut lors de l'exportation avec
int8=True
même lorsqu'il n'est pas explicitement défini. Voir arguments d'exportation pour plus d'informations. - Définit la taille maximale de lot à 8 pour le modèle exporté, qui calibre avec
batch = 2 * 8
pour éviter les erreurs de mise à l'échelle pendant la calibration. - Alloue 4 Gio de mémoire au lieu d'allouer l'ensemble du dispositif pour le processus de conversion.
- Utilise le jeu de données COCO pour le calibrage, en particulier les images utilisées pour la validation (5 000 au total).
# Export a YOLO11n PyTorch model to TensorRT format with INT8 quantization
yolo export model=yolo11n.pt format=engine batch=8 workspace=4 int8=True data=coco.yaml # creates 'yolov8n.engine''
# Run inference with the exported TensorRT quantized model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'
Cache d'étalonnage
TensorRT va générer un étalonnage .cache
qui peut être réutilisé pour accélérer l'exportation des futurs poids du modèle en utilisant les mêmes données, mais cela peut entraîner un mauvais étalonnage lorsque les données sont très différentes ou si le batch
valeur est radicalement modifiée. Dans ces circonstances, le .cache
doit être renommé et déplacé vers un autre répertoire ou supprimé complètement.
Avantages de l'utilisation de YOLO avec TensorRT INT8
-
Taille de modèle réduite : La quantification de FP32 à INT8 peut réduire la taille du modèle de 4x (sur le disque ou en mémoire), ce qui entraîne des temps de téléchargement plus rapides, des exigences de stockage plus faibles et une empreinte mémoire réduite lors du déploiement d'un modèle.
-
Consommation d’énergie réduite : Les opérations de précision réduite pour les modèles YOLO exportés en INT8 peuvent consommer moins d’énergie que les modèles FP32, en particulier pour les appareils alimentés par batterie.
-
Vitesses d'inférence améliorées : TensorRT optimise le modèle pour le matériel cible, ce qui peut entraîner des vitesses d'inférence plus rapides sur les GPU, les appareils embarqués et les accélérateurs.
Remarque sur les vitesses d'inférence
On peut s'attendre à ce que les premiers appels d'inférence avec un modèle exporté vers TensorRT INT8 aient des temps de prétraitement, d'inférence et/ou de post-traitement plus longs que d'habitude. Cela peut également se produire lors du changement imgsz
pendant l'inférence, surtout quand imgsz
n'est pas identique à ce qui a été spécifié lors de l'exportation (exportation imgsz
est défini comme profil TensorRT "optimal").
Inconvénients de l'utilisation de YOLO avec TensorRT INT8
-
Diminutions des métriques d'évaluation : L'utilisation d'une précision inférieure signifiera que
mAP
,Precision
,Recall
ou tout autre mesure utilisée pour évaluer les performances du modèle risque d'être légèrement moins bonne. Voir le Section des résultats de performance pour comparer les différences dansmAP50
etmAP50-95
lors de l'exportation avec INT8 sur un petit échantillon de divers appareils. -
Augmentation des temps de développement : Trouver les paramètres "optimaux" pour l'étalonnage INT8 pour l'ensemble de données et l'appareil peut prendre beaucoup de tests.
-
Dépendance matérielle : L’étalonnage et les gains de performance pourraient être fortement dépendants du matériel et les poids du modèle sont moins transférables.
Performances de l'exportation Ultralytics YOLO TensorRT
NVIDIA A100
Performance
Testé avec Ubuntu 22.04.3 LTS, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
Consultez la documentation sur la détection pour des exemples d'utilisation avec ces modèles entraînés sur COCO, qui comprennent 80 classes pré-entraînées.
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prédire | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prédire | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prédire | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
Consultez la documentation sur la segmentation pour des exemples d'utilisation avec ces modèles entraînés sur COCO, qui comprennent 80 classes pré-entraînées.
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n-seg.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(M) |
mAPval 50-95(M) |
batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|---|---|
FP32 | Prédire | 0.62 | 0.61 | 0.68 | 8 | 640 | ||||
FP32 | COCOval | 0.63 | 0.52 | 0.36 | 0.49 | 0.31 | 1 | 640 | |
FP16 | Prédire | 0.40 | 0.39 | 0.44 | 8 | 640 | ||||
FP16 | COCOval | 0.43 | 0.52 | 0.36 | 0.49 | 0.30 | 1 | 640 | |
INT8 | Prédire | 0.34 | 0.33 | 0.37 | 8 | 640 | ||||
INT8 | COCOval | 0.36 | 0.46 | 0.32 | 0.43 | 0.27 | 1 | 640 |
Consultez la documentation sur la classification pour des exemples d'utilisation avec ces modèles entraînés sur ImageNet, qui comprennent 1 000 classes pré-entraînées.
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n-cls.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
top-1 | top-5 | batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prédire | 0.26 | 0.25 | 0.28 | 8 | 640 | ||
FP32 | ImageNetval | 0.26 | 0.35 | 0.61 | 1 | 640 | |
FP16 | Prédire | 0.18 | 0.17 | 0.19 | 8 | 640 | ||
FP16 | ImageNetval | 0.18 | 0.35 | 0.61 | 1 | 640 | |
INT8 | Prédire | 0.16 | 0.15 | 0.57 | 8 | 640 | ||
INT8 | ImageNetval | 0.15 | 0.32 | 0.59 | 1 | 640 |
Consultez la documentation sur l'estimation de pose pour des exemples d'utilisation avec ces modèles entraînés sur COCO, qui incluent 1 classe pré-entraînée, "personne".
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n-pose.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(P) |
mAPval 50-95(P) |
batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|---|---|
FP32 | Prédire | 0.54 | 0.53 | 0.58 | 8 | 640 | ||||
FP32 | COCOval | 0.55 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
FP16 | Prédire | 0.37 | 0.35 | 0.41 | 8 | 640 | ||||
FP16 | COCOval | 0.36 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
INT8 | Prédire | 0.29 | 0.28 | 0.33 | 8 | 640 | ||||
INT8 | COCOval | 0.30 | 0.90 | 0.68 | 0.78 | 0.47 | 1 | 640 |
Consultez la documentation sur la détection orientée pour des exemples d'utilisation avec ces modèles entraînés sur DOTAv1, qui incluent 15 classes pré-entraînées.
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n-obb.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prédire | 0.52 | 0.51 | 0.59 | 8 | 640 | ||
FP32 | DOTAv1val | 0.76 | 0.50 | 0.36 | 1 | 640 | |
FP16 | Prédire | 0.34 | 0.33 | 0.42 | 8 | 640 | ||
FP16 | DOTAv1val | 0.59 | 0.50 | 0.36 | 1 | 640 | |
INT8 | Prédire | 0.29 | 0.28 | 0.33 | 8 | 640 | ||
INT8 | DOTAv1val | 0.32 | 0.45 | 0.32 | 1 | 640 |
GPU grand public
Performance de détection (COCO)
Testé avec Windows 10.0.19045, python 3.10.9
, ultralytics==8.2.4
, tensorrt==10.0.0b6
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prédire | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prédire | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prédire | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Testé avec Windows 10.0.22631, python 3.11.9
, ultralytics==8.2.4
, tensorrt==10.0.1
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prédire | 1.76 | 1.69 | 1.87 | 8 | 640 | ||
FP32 | COCOval | 1.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prédire | 0.86 | 0.75 | 1.00 | 8 | 640 | ||
FP16 | COCOval | 1.43 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prédire | 0.80 | 0.75 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 1.35 | 0.47 | 0.33 | 1 | 640 |
Testé avec Pop!_OS 22.04 LTS, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prédire | 2.84 | 2.84 | 2.85 | 8 | 640 | ||
FP32 | COCOval | 2.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prédire | 1.09 | 1.09 | 1.10 | 8 | 640 | ||
FP16 | COCOval | 1.20 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prédire | 0.75 | 0.74 | 0.75 | 8 | 640 | ||
INT8 | COCOval | 0.76 | 0.47 | 0.33 | 1 | 640 |
Appareils embarqués
Performance de détection (COCO)
Testé avec JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS, python 3.10.12
, ultralytics==8.2.16
, tensorrt==10.0.1
Remarque
Temps d'inférence indiqués pour mean
, min
(le plus rapide), et max
(le plus lent) pour chaque test en utilisant des poids pré-entraînés yolov8n.engine
Précision | Test d'évaluation | moyenne (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Taille (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prédire | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prédire | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prédire | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Info
Consultez notre guide de démarrage rapide sur NVIDIA Jetson avec Ultralytics YOLO pour en savoir plus sur la configuration.
Méthodes d'évaluation
Développez les sections ci-dessous pour obtenir des informations sur la manière dont ces modèles ont été exportés et testés.
Configurations d'exportation
Consultez le mode d'exportation pour plus de détails concernant les arguments de configuration d'exportation.
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)
# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, half=True)
# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, int8=True, data="coco8.yaml"
)
Boucle de prédiction
Consultez le mode predict pour plus d'informations.
import cv2
from ultralytics import YOLO
model = YOLO("yolov8n.engine")
img = cv2.imread("path/to/image.jpg")
for _ in range(100):
result = model.predict(
[img] * 8, # batch=8 of the same image
verbose=False,
device="cuda",
)
Configuration de la validation
Voir val
mode pour en savoir plus sur les arguments de configuration de la validation.
from ultralytics import YOLO
model = YOLO("yolov8n.engine")
results = model.val(
data="data.yaml", # COCO, ImageNet, or DOTAv1 for appropriate model task
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)
Déploiement de modèles YOLO11 TensorRT exportés
Après avoir exporté avec succès vos modèles Ultralytics YOLO11 au format TensorRT, vous êtes maintenant prêt à les déployer. Pour des instructions détaillées sur le déploiement de vos modèles TensorRT dans différents contextes, consultez les ressources suivantes :
-
Déployer Ultralytics avec un serveur Triton : Notre guide sur l'utilisation du serveur d'inférence Triton de NVIDIA (anciennement TensorRT Inference) spécifiquement pour une utilisation avec les modèles Ultralytics YOLO.
-
Déploiement de réseaux neuronaux profonds avec NVIDIA TensorRT : Cet article explique comment utiliser NVIDIA TensorRT pour déployer efficacement des réseaux neuronaux profonds sur des plateformes de déploiement basées sur GPU.
-
IA de bout en bout pour les PC basés sur NVIDIA : Déploiement de NVIDIA TensorRT : Cet article de blog explique l'utilisation de NVIDIA TensorRT pour optimiser et déployer des modèles d'IA sur des PC basés sur NVIDIA.
-
Référentiel GitHub pour NVIDIA TensorRT:: Il s'agit du référentiel GitHub officiel qui contient le code source et la documentation de NVIDIA TensorRT.
Résumé
Dans ce guide, nous nous sommes concentrés sur la conversion des modèles Ultralytics YOLO11 au format de modèle TensorRT de NVIDIA. Cette étape de conversion est essentielle pour améliorer l'efficacité et la vitesse des modèles YOLO11, les rendant plus efficaces et adaptés à divers environnements de déploiement.
Pour plus d'informations sur les détails d'utilisation, consultez la documentation officielle de TensorRT.
Si vous êtes curieux de connaître les intégrations supplémentaires d'Ultralytics YOLO11, notre page de guide d'intégration fournit une vaste sélection de ressources et d'informations utiles.
FAQ
Comment convertir les modèles YOLO11 au format TensorRT ?
Pour convertir vos modèles Ultralytics YOLO11 au format TensorRT pour une inférence NVIDIA GPU optimisée, suivez ces étapes :
-
Installer le paquet requis :
pip install ultralytics
-
Exporter votre modèle YOLO11 :
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="engine") # creates 'yolo11n.engine' # Run inference model = YOLO("yolo11n.engine") results = model("https://ultralytics.com/images/bus.jpg")
Pour plus de détails, consultez le guide d'installation de YOLO11 et la documentation sur l'exportation.
Quels sont les avantages de l'utilisation de TensorRT pour les modèles YOLO11 ?
L'utilisation de TensorRT pour optimiser les modèles YOLO11 offre plusieurs avantages :
- Vitesse d'inférence plus rapide : TensorRT optimise les couches du modèle et utilise l'étalonnage de précision (INT8 et FP16) pour accélérer l'inférence sans sacrifier de manière significative la précision.
- Efficacité de la mémoire: TensorRT gère la mémoire des tenseurs de manière dynamique, réduisant ainsi la surcharge et améliorant l'utilisation de la mémoire du GPU.
- Fusion de couches : Combine plusieurs couches en opérations uniques, réduisant ainsi la complexité computationnelle.
- Réglage automatique du noyau : Sélectionne automatiquement les noyaux GPU optimisés pour chaque couche de modèle, assurant ainsi une performance maximale.
Pour en savoir plus, consultez la documentation TensorRT officielle de NVIDIA et notre présentation détaillée de TensorRT.
Puis-je utiliser la quantification INT8 avec TensorRT pour les modèles YOLO11 ?
Oui, vous pouvez exporter des modèles YOLO11 en utilisant TensorRT avec la quantification INT8. Ce processus implique une quantification post-entraînement (PTQ) et un étalonnage :
-
Exporter avec INT8 :
from ultralytics import YOLO model = YOLO("yolov8n.pt") model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
-
Exécuter l'inférence :
from ultralytics import YOLO model = YOLO("yolov8n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
Pour plus de détails, consultez la section sur l'exportation TensorRT avec quantification INT8.
Comment déployer les modèles YOLO11 TensorRT sur un serveur d'inférence NVIDIA Triton ?
Le déploiement de modèles YOLO11 TensorRT sur un serveur d'inférence NVIDIA Triton peut être effectué à l'aide des ressources suivantes :
- Déployer Ultralytics YOLOv8 avec le serveur Triton : Instructions étape par étape sur la configuration et l'utilisation du serveur d'inférence Triton.
- Documentation du serveur d'inférence NVIDIA Triton : Documentation NVIDIA officielle pour les options de déploiement et les configurations détaillées.
Ces guides vous aideront à intégrer efficacement les modèles YOLOv8 dans divers environnements de déploiement.
Quelles sont les améliorations de performance observées avec les modèles YOLOv8 exportés vers TensorRT ?
Les améliorations de performance avec TensorRT peuvent varier en fonction du matériel utilisé. Voici quelques bancs d'essai typiques :
-
NVIDIA A100 :
- Inférence FP32 : ~0,52 ms / image
- Inférence FP16 : ~0,34 ms / image
- Inférence INT8 : ~0,28 ms / image
- Légère réduction de la mAP avec la précision INT8, mais amélioration significative de la vitesse.
-
Processeurs graphiques grand public (par exemple, RTX 3080) :
- Inférence FP32 : ~1,06 ms / image
- Inférence FP16 : ~0,62 ms / image
- Inférence INT8 : ~0,52 ms / image
Des benchmarks de performance détaillés pour différentes configurations matérielles sont disponibles dans la section performance.
Pour des informations plus complètes sur les performances de TensorRT, consultez la documentation Ultralytics et nos rapports d'analyse des performances.