Déploie YOLO26 sur mobile et en périphérie avec ExecuTorch#
Le déploiement de modèles de vision par ordinateur sur des appareils périphériques tels que les smartphones, les tablettes et les systèmes embarqués nécessite un runtime optimisé qui équilibre les performances et les contraintes de ressources. ExecuTorch, la solution de PyTorch pour l’informatique en périphérie, permet une inférence efficace sur l’appareil pour les modèles Ultralytics YOLO.
Ce guide explique comment exporter les modèles Ultralytics YOLO au format ExecuTorch, afin de te permettre de déployer tes modèles sur des appareils mobiles et périphériques avec des performances optimisées.
Pourquoi exporter vers ExecuTorch ?#
ExecuTorch est la solution de bout en bout de PyTorch pour permettre l’inférence sur l’appareil sur les appareils mobiles et périphériques. Conçu pour être portable et efficace, ExecuTorch peut être utilisé pour exécuter des programmes PyTorch sur une grande variété de plateformes informatiques.
Fonctionnalités clés d’ExecuTorch#
ExecuTorch offre plusieurs fonctionnalités puissantes pour déployer les modèles Ultralytics YOLO sur des appareils périphériques :
-
Format de modèle portable : ExecuTorch utilise le format
.pte(PyTorch ExecuTorch), optimisé pour la taille et la vitesse de chargement sur les appareils soumis à des contraintes de ressources. -
Backend XNNPACK : l’intégration par défaut de XNNPACK fournit une inférence hautement optimisée sur les CPU mobiles, avec d’excellentes performances sans nécessiter de matériel spécialisé.
-
Prêt pour la quantification : l’écosystème ExecuTorch prend en charge les techniques de quantification pour réduire la taille des modèles et améliorer la vitesse d’inférence ; Ultralytics exporte actuellement des modèles FP32 via le backend XNNPACK.
-
Efficacité mémoire : la gestion optimisée de la mémoire réduit l’empreinte mémoire à l’exécution, ce qui convient aux appareils disposant d’une RAM limitée.
-
Métadonnées des modèles : les modèles exportés incluent les métadonnées (taille des images, noms des classes, etc.) dans un fichier YAML distinct pour faciliter l’intégration.
Options de déploiement avec ExecuTorch#
Les modèles ExecuTorch peuvent être déployés sur différentes plateformes mobiles et périphériques :
-
Applications mobiles : déploie-les dans des applications iOS et Android avec des performances natives, afin de permettre la détection d’objets en temps réel dans les applications mobiles.
-
Systèmes embarqués : exécute-les sur des appareils Linux embarqués tels que Raspberry Pi, NVIDIA Jetson et d’autres systèmes basés sur ARM, avec des performances optimisées.
-
Appareils d’IA en périphérie : déploie-les sur du matériel spécialisé d’IA en périphérie avec des délégués personnalisés pour accélérer l’inférence.
-
Appareils IoT : intègre-les à des appareils IoT pour effectuer l’inférence sur l’appareil sans nécessiter de connexion au cloud.
Tâches prises en charge#
L’export ExecuTorch prend en charge les sept tâches Ultralytics. La segmentation sémantique et l’estimation de profondeur sont disponibles uniquement avec YOLO26, la seule famille à fournir ces têtes.
| Tâche | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Détection | ✅ | ✅ | ✅ |
| Segmentation | ✅ | ✅ | ✅ |
| Sémantique | ❌ | ❌ | ✅ |
| Profondeur | ❌ | ❌ | ✅ |
| Classification | ✅ | ✅ | ✅ |
| Pose | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Exporter les modèles Ultralytics YOLO26 vers ExecuTorch#
La conversion des modèles Ultralytics YOLO26 au format ExecuTorch permet un déploiement efficace sur les appareils mobiles et périphériques.
Installation#
L’export ExecuTorch nécessite Python 3.10-3.13 et PyTorch >= 2.9.0, ainsi que le package executorch :
# Install Ultralytics package
pip install ultralyticsPour obtenir des instructions détaillées et connaître les bonnes pratiques liées au processus d’installation, consulte notre guide d’installation de YOLO26. Si tu rencontres des difficultés lors de l’installation des packages requis pour YOLO26, consulte notre guide des problèmes courants pour trouver des solutions et des conseils.
Utilisation#
L’export des modèles YOLO26 vers ExecuTorch est simple :
Le format ExecuTorch prend en charge les modes Export, Predict et Validate. Exporte ton modèle, puis charge le modèle exporté pour exécuter l’inférence ou valider sa précision.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to ExecuTorch format
model.export(format="executorch") # creates 'yolo26n_executorch_model'from ultralytics import YOLO
# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Les exports ExecuTorch génèrent un répertoire qui comprend un fichier .pte et les métadonnées. Utilise le runtime ExecuTorch dans ton application mobile ou embarquée pour charger le modèle .pte et effectuer l’inférence.
Arguments d'exportation#
Lors de l’export au format ExecuTorch, tu peux spécifier les arguments suivants :
| Argument | Type | Valeur par défaut | Description |
|---|---|---|---|
format | str | 'executorch' | Format cible du modèle exporté, définissant sa compatibilité avec différents 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. |
quantize | int ou str | None | Export FP32 fixe. L’export ExecuTorch ne prend pas en charge la conversion de précision FP16, INT8 ou W8A16 au moment de l’export. |
batch | int | 1 | Indique la taille du lot d'inférence du modèle exporté ou le nombre maximal d'images que le modèle exporté traitera simultanément en mode predict. |
device | str | None | Indique l’appareil utilisé pour l’exportation : GPU (device=0), CPU (device=cpu), MPS pour Apple Silicon (device=mps). |
Structure de sortie#
L’export ExecuTorch crée un répertoire contenant le modèle et les métadonnées :
yolo26n_executorch_model/
├── model.pte # ExecuTorch model file
└── metadata.yaml # Model metadata (classes, image size, etc.)Utiliser les modèles ExecuTorch exportés#
Après avoir exporté ton modèle, tu devras l’intégrer à ton application cible à l’aide du runtime ExecuTorch.
Intégration mobile#
Pour les applications mobiles (iOS/Android), tu devras :
- Ajouter le runtime ExecuTorch : inclure la bibliothèque du runtime ExecuTorch dans ton projet mobile
- Charger le modèle : charger le fichier
.ptedans ton application - Exécuter l’inférence : traiter les images et obtenir les prédictions
iOS#
Exemple d’intégration iOS (Objective-C/C++) :
// iOS uses C++ APIs for model loading and inference
// See https://pytorch.org/executorch/stable/using-executorch-ios.html for complete examples
#include <executorch/extension/module/module.h>
using namespace ::executorch::extension;
// Load the model
Module module("/path/to/model.pte");
// Create input tensor
float input[1 * 3 * 640 * 640];
auto tensor = from_blob(input, {1, 3, 640, 640});
// Run inference
const auto result = module.forward(tensor);Android#
Ajoute l’AAR Android ExecuTorch depuis Maven Central :
dependencies {
implementation("org.pytorch:executorch-android:<version>")
}Exemple d’intégration Android (Kotlin) :
import org.pytorch.executorch.EValue
import org.pytorch.executorch.Module
import org.pytorch.executorch.Tensor
// Load the model
val module = Module.load("/path/to/model.pte")
// Prepare input tensor
val inputTensor = Tensor.fromBlob(floatData, longArrayOf(1, 3, 640, 640))
val inputEValue = EValue.from(inputTensor)
// Run inference
val outputs = module.forward(inputEValue)
val scores = outputs[0].toTensor().dataAsFloatArrayLinux embarqué#
Pour les systèmes Linux embarqués, utilise l’API C++ d’ExecuTorch :
#include <executorch/extension/module/module.h>
#include <executorch/extension/tensor/tensor.h>
using namespace ::executorch::extension;
// Load model
Module module("model.pte");
// Prepare input
std::vector<float> input_data = preprocessImage(image);
auto input_tensor = from_blob(input_data.data(), {1, 3, 640, 640});
// Run inference
const auto outputs = module.forward(input_tensor);Pour plus de détails sur l’intégration d’ExecuTorch dans tes applications, consulte la documentation d’ExecuTorch.
Optimisation des performances#
Optimisation de la taille des modèles#
Pour réduire la taille du modèle lors du déploiement :
- Utiliser des modèles plus petits : commence avec YOLO26n (nano) pour obtenir l’empreinte la plus réduite
- Réduire la résolution d’entrée : utilise des tailles d’image plus petites (par exemple,
imgsz=320ouimgsz=416) - Quantification : applique des techniques de quantification (prises en charge dans les prochaines versions d’ExecuTorch)
Optimisation de la vitesse d’inférence#
Pour accélérer l’inférence :
- Backend XNNPACK : le backend XNNPACK par défaut fournit une inférence CPU optimisée
- Accélération matérielle : utilise des délégués spécifiques à la plateforme (par exemple, CoreML pour iOS)
- Traitement par lots : traite plusieurs images lorsque cela est possible
Benchmarks#
L’équipe Ultralytics a évalué les performances des modèles YOLO26 en comparant la vitesse et la précision entre PyTorch et ExecuTorch.
| Modèle | Format | Statut | Taille (Mo) | metrics/mAP50-95(B) | Temps d’inférence (ms/im) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.4790 | 314.80 |
| YOLO26n | ExecuTorch | ✅ | 9.4 | 0.4800 | 142 |
| YOLO26s | PyTorch | ✅ | 19.5 | 0.5730 | 930.90 |
| YOLO26s | ExecuTorch | ✅ | 36.5 | 0.5780 | 376.1 |
Le temps d’inférence n’inclut pas le prétraitement ni le post-traitement.
Dépannage#
Problèmes courants#
Problème : Python version error
Solution : ExecuTorch requiert Python 3.10 à 3.13. Crée un environnement avec une version prise en charge :
# Using conda
conda create -n executorch python=3.10
conda activate executorchProblème : Export fails during first run
Solution : vérifie que la dernière wheel précompilée executorch est installée :
pip install --upgrade executorchProblème : Import errors for ExecuTorch modules
Solution : vérifie qu’ExecuTorch est correctement installé :
pip install executorch --force-reinstallPour obtenir davantage d’aide concernant le dépannage, consulte les problèmes Ultralytics sur GitHub ou la documentation d’ExecuTorch.
Résumé#
L’export des modèles YOLO26 au format ExecuTorch permet un déploiement efficace sur les appareils mobiles et périphériques. Grâce à son intégration native à PyTorch, à sa prise en charge multiplateforme et à ses performances optimisées, ExecuTorch constitue un excellent choix pour les applications d’IA en périphérie.
Points clés à retenir :
- ExecuTorch fournit un déploiement en périphérie natif de PyTorch avec d’excellentes performances
- L’export est simple avec le paramètre
format='executorch' - Les modèles sont optimisés pour les CPU mobiles via le backend XNNPACK
- Prend en charge les plateformes iOS, Android et Linux embarqué
- Nécessite Python 3.10-3.13 et PyTorch >= 2.9.0
FAQ#
L’export ExecuTorch nécessite :
- Python 3.10 à 3.13
- Le package
executorch(à installer viapip install executorch) - PyTorch (installé automatiquement avec ultralytics)
Remarque : le package
executorchfournit des wheels précompilées (avec le backend XNNPACK), aucune étape de compilation supplémentaire n’est donc nécessaire lors de l’export.Les modèles ExecuTorch peuvent être chargés directement avec
YOLO()pour effectuer l’inférence et la validation en Python (voir les exemples Predict/Validate ci-dessus), et peuvent également être déployés sur des appareils mobiles et périphériques à l’aide des bibliothèques du runtime ExecuTorch.ExecuTorch prend en charge :
- Mobile : iOS et Android
- Linux embarqué : Raspberry Pi, NVIDIA Jetson et autres appareils ARM
- Bureau : Linux, macOS et Windows (pour le développement)
ExecuTorch et LiteRT sont tous deux excellents pour le déploiement mobile :
- ExecuTorch : meilleure intégration à PyTorch, workflow PyTorch natif et écosystème en pleine croissance
- LiteRT : solution plus mature, prise en charge matérielle plus large, davantage d’exemples de déploiement, et exécution du même modèle sur Android, iOS et dans le navigateur
Choisis ExecuTorch si tu utilises déjà PyTorch et que tu veux un chemin de déploiement natif. Choisis LiteRT pour une compatibilité maximale et des outils matures.
Oui ! ExecuTorch prend en charge l’accélération matérielle via différents backends :
- GPU mobile : via des délégués Vulkan, Metal ou OpenCL
- NPU/DSP : via des délégués spécifiques à la plateforme
- Par défaut : XNNPACK pour une inférence CPU optimisée
Consulte la documentation d’ExecuTorch pour la configuration spécifique à chaque backend.
Exporte un modèle YOLO26 vers ExecuTorch avec Python ou la CLI :
ou