Passer au contenu

Exportation de modèles avec Ultralytics YOLO

Écosystème et intégrations Ultralytics YOLO

Introduction

L'objectif ultime de l'entraînement d'un modèle est de le déployer pour des applications réelles. Le mode d'exportation dans Ultralytics YOLO26 offre une gamme polyvalente d'options pour exporter votre modèle entraîné vers différents formats, le rendant déployable sur diverses plateformes et appareils. Ce guide complet vise à vous accompagner à travers les nuances de l'exportation de modèles, en vous montrant comment atteindre une compatibilité et des performances maximales.



Regarder : Comment exporter un modèle Ultralytics YOLO entraîné personnalisé et exécuter l'inférence en direct sur une webcam.

Pourquoi choisir le mode d'exportation de YOLO26 ?

  • Polyvalence : Exportation vers plusieurs formats, notamment ONNX, TensorRT, CoreML, et plus encore.
  • Performance : Bénéficiez d'une accélération GPU jusqu'à 5x avec TensorRT et d'une accélération CPU 3x avec ONNX ou OpenVINO.
  • Compatibilité : Rendez votre modèle universellement déployable dans de nombreux environnements matériels et logiciels.
  • Facilité d'utilisation : API simple en ligne de commande (CLI) et en python pour une exportation de modèle rapide et directe.

Principales caractéristiques du mode d'exportation

Voici quelques-unes des fonctionnalités les plus remarquables :

  • Exportation en un clic : Commandes simples pour exporter vers différents formats.
  • Exportation par lots : Exportez des modèles capables d'inférence par lots.
  • Inférence optimisée : Les modèles exportés sont optimisés pour des temps d'inférence plus rapides.
  • Vidéos tutorielles : Guides et tutoriels approfondis pour une expérience d'exportation fluide.

Astuce

  • Exportez vers ONNX ou OpenVINO pour une accélération CPU jusqu'à 3x.
  • Exportez vers TensorRT pour une accélération GPU jusqu'à 5x.

Exemples d'utilisation

Exportez un modèle YOLO26n vers un format différent comme ONNX ou TensorRT. Consultez la section Arguments ci-dessous pour une liste complète des arguments d'exportation.

Exemple

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo26n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

Arguments

Ce tableau détaille les configurations et les options disponibles pour l'exportation des modèles YOLO vers différents formats. Ces paramètres sont essentiels pour optimiser les performances, la taille et la compatibilité du modèle exporté sur diverses plateformes et dans divers environnements. Une configuration appropriée garantit que le modèle est prêt à être déployé dans l'application prévue avec une efficacité optimale.

ArgumentTypePar défautDescription
formatstr'torchscript'Format cible pour le modèle exporté, tel que 'onnx', 'torchscript', 'engine' (TensorRT), ou autres. Chaque format permet la compatibilité avec différents environnements de déploiement.
imgszint ou tuple640Taille d'image souhaitée pour l'entrée du modèle. Peut être un entier pour les images carrées (p. ex., 640 pour 640×640) ou un tuple (height, width) pour des dimensions spécifiques.
kerasboolFalsePermet l'exportation au format Keras pour TensorFlow SavedModel, assurant la compatibilité avec les services et API TensorFlow.
optimizeboolFalseApplique une optimisation pour les appareils mobiles lors de l'exportation vers TorchScript, ce qui peut réduire la taille du modèle et améliorer les performances d'inférence. Non compatible avec le format NCNN ou les appareils CUDA.
halfboolFalseActive 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. Non compatible avec la quantification INT8 ou les exportations CPU uniquement. Uniquement disponible pour certains formats, par exemple ONNX (voir ci-dessous).
int8boolFalseActive 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. Lorsqu'elle est utilisée avec TensorRT, effectue une quantification post-entraînement (PTQ).
dynamicboolFalsePermet des tailles d'entrée dynamiques pour les exportations ONNX, TensorRT et OpenVINO, améliorant ainsi la flexibilité dans la gestion des différentes dimensions d'image. Automatiquement défini sur True lors de l'utilisation de TensorRT avec INT8.
simplifyboolTrueSimplifie le graphe du modèle pour les exportations ONNX avec onnxslim, améliorant potentiellement les performances et la compatibilité avec les moteurs d'inférence.
opsetintNoneSpécifie la version d'opset ONNX pour la compatibilité avec différents analyseurs et environnements d'exécution ONNX. Si elle n'est pas définie, la dernière version prise en charge est utilisée.
workspacefloat ou NoneNoneDéfinit la taille maximale de l'espace de travail en Gio pour TensorRT optimisations, équilibrant l'utilisation de la mémoire et les performances. Utiliser None pour l'allocation automatique par TensorRT jusqu'au maximum de l'appareil.
nmsboolFalseAjoute la suppression non maximale (NMS) au modèle exporté lorsque cela est pris en charge (voir Formats d'exportation), améliorant ainsi l'efficacité du post-traitement de la détection. Non disponible pour les modèles end2end.
batchint1Spé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 dans predict mode. Pour les exportations Edge TPU, ceci est automatiquement réglé sur 1.
devicestrNoneSpécifie le dispositif pour l'exportation : GPU (device=0), CPU (device=cpu), MPS pour Apple Silicon (device=mps) ou DLA pour NVIDIA Jetson (device=dla:0 ou device=dla:1). Les exportations TensorRT utilisent automatiquement le GPU.
datastr'coco8.yaml'Chemin d'accès au ensemble de données fichier de configuration, essentiel pour la calibration de la quantification INT8. S'il n'est pas spécifié avec INT8 activé, coco8.yaml sera utilisé comme solution de repli pour la calibration.
fractionfloat1.0Spé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é.
end2endboolNoneRemplace le mode de bout en bout dans YOLO qui prennent en charge l'inférence NMS(YOLO26, YOLOv10). Le régler sur False vous permet d'exporter ces modèles afin qu'ils soient compatibles avec le pipeline de post-traitement traditionnel NMS.

L'ajustement de ces paramètres permet de personnaliser le processus d'exportation pour répondre à des exigences spécifiques, telles que l'environnement de déploiement, les contraintes matérielles et les objectifs de performance. La sélection du format et des paramètres appropriés est essentielle pour obtenir le meilleur équilibre entre la taille du modèle, la vitesse et la précision.

Formats d'exportation

Les formats d'exportation YOLO26 disponibles sont présentés dans le tableau ci-dessous. Vous pouvez exporter vers n'importe quel format en utilisant le format argument, c'est-à-dire format='onnx' ou format='engine'. Vous pouvez prédire ou valider directement sur les modèles exportés, c'est-à-dire, yolo predict model=yolo26n.onnx. Des exemples d'utilisation sont présentés pour votre modèle une fois l'exportation terminée.

Formatformat ArgumentModèleMétadonnéesArguments
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, int8, nms, batch, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n_imx_model/imgsz, int8, data, fraction, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, device
Axeleraaxelerayolo26n_axelera_model/imgsz, int8, data, fraction, device

FAQ

Comment exporter un modèle YOLO26 au format ONNX ?

L'exportation d'un modèle YOLO26 au format ONNX est simple avec Ultralytics. Ultralytics propose des méthodes Python et CLI pour l'exportation de modèles.

Exemple

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo26n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

Pour plus de détails sur le processus, y compris les options avancées comme la gestion de différentes tailles d'entrée, consultez le guide d'intégration ONNX.

Quels sont les avantages de l'utilisation de TensorRT pour l'exportation de modèles ?

L'utilisation de TensorRT pour l'exportation de modèles offre des améliorations de performances significatives. Les modèles YOLO26 exportés vers TensorRT peuvent atteindre une accélération GPU jusqu'à 5x, ce qui les rend idéaux pour les applications d'inférence en temps réel.

  • Polyvalence : Optimisez les modèles pour une configuration matérielle spécifique.
  • Vitesse : Obtenez une inférence plus rapide grâce à des optimisations avancées.
  • Compatibilité : Intégration fluide avec le matériel NVIDIA.

Pour en savoir plus sur l'intégration de TensorRT, consultez le guide d'intégration de TensorRT.

Comment activer la quantification INT8 lors de l'exportation de mon modèle YOLO26 ?

La quantification INT8 est un excellent moyen de compresser le modèle et d'accélérer l'inférence, en particulier sur les appareils périphériques. Voici comment activer la quantification INT8 :

Exemple

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo26n.pt format=engine int8=True # export TensorRT model with INT8 quantization

La quantification INT8 peut être appliquée à différents formats, tels que TensorRT, OpenVINO, et CoreML. Pour des résultats de quantification optimaux, fournissez un ensemble de données en utilisant le data paramètre.

Pourquoi la taille d'entrée dynamique est-elle importante lors de l'exportation de modèles ?

La taille d'entrée dynamique permet au modèle exporté de gérer différentes dimensions d'image, offrant ainsi une flexibilité et optimisant l'efficacité du traitement pour différents cas d'utilisation. Lors de l'exportation vers des formats tels que ONNX ou TensorRT, l'activation de la taille d'entrée dynamique garantit que le modèle peut s'adapter de manière transparente à différentes formes d'entrée.

Pour activer cette fonctionnalité, utilisez l'indicateur dynamic=True lors de l'exportation :

Exemple

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo26n.pt format=onnx dynamic=True

Le dimensionnement dynamique de l'entrée est particulièrement utile pour les applications où les dimensions de l'entrée peuvent varier, comme le traitement vidéo ou lors de la gestion d'images provenant de différentes sources.

Quels sont les principaux arguments d'exportation à prendre en compte pour optimiser les performances du modèle ?

Comprendre et configurer les arguments d'exportation est essentiel pour optimiser les performances du modèle :

  • format: Le format cible pour le modèle exporté (par exemple, onnx, torchscript, tensorflow).
  • imgsz: Taille d'image souhaitée pour l'entrée du modèle (par exemple, 640 ou (height, width)).
  • half: Active la quantification FP16, réduisant la taille du modèle et accélérant potentiellement l'inférence.
  • optimize: Applique des optimisations spécifiques pour les environnements mobiles ou contraints.
  • int8: Active la quantification INT8, très bénéfique pour IA embarquée déploiements.

Pour le déploiement sur des plateformes matérielles spécifiques, envisagez d'utiliser des formats d'exportation spécialisés comme TensorRT pour les GPU NVIDIA, CoreML pour les appareils Apple ou Edge TPU pour les appareils Google Coral.

Que représentent les tensors de sortie dans les modèles YOLO exportés ?

Lorsque vous exportez un modèle YOLO vers des formats comme ONNX ou TensorRT, la structure du tensor de sortie dépend de la tâche du modèle. Comprendre ces sorties est crucial pour les implémentations d'inférence personnalisées.

Pour modèles de détection (par exemple, yolo26n.pt), la sortie est généralement un unique tensor de forme (batch_size, 4 + num_classes, num_predictions) où les canaux représentent les coordonnées des boîtes et les scores par classe, et num_predictions dépend de la résolution d'entrée de l'exportation (et peut être dynamique).

Pour modèles de segmentation (par exemple, yolo26n-seg.pt), vous obtiendrez généralement deux sorties : le premier tensor de forme (batch_size, 4 + num_classes + mask_dim, num_predictions) (boîtes, scores de classe et coefficients de masque), et le second tensor de forme (batch_size, mask_dim, proto_h, proto_w) contenant les prototypes de masque utilisés avec les coefficients pour générer les masques d'instance. Les tailles dépendent de la résolution d'entrée de l'exportation (et peuvent être dynamiques).

Pour modèles de pose (par exemple, yolo26n-pose.pt), le tensor de sortie est généralement de forme (batch_size, 4 + num_classes + keypoint_dims, num_predictions), où keypoint_dims dépend de la spécification de la pose (par exemple, le nombre de points clés et si la confiance est incluse), et num_predictions dépend de la résolution d'entrée de l'exportation (et peut être dynamique).

Les exemples dans les exemples d'inférence ONNX montrent comment traiter ces sorties pour chaque type de modèle.



📅 Créé il y a 2 ans ✏️ Mis à jour il y a 2 jours
glenn-jocherBurhan-QUltralyticsAssistantambitious-octopusKayzwerraimbekovmpderrengerY-T-Gjk4eMatthewNoyceRizwanMunawar

Commentaires