Exporter des modèles YOLO vers LiteRT pour un déploiement sur les périphériques Edge et Web#
LiteRT (diminutif de Lite Runtime) est le moteur haute performance de Google pour l'IA sur appareil. C'est la nouvelle génération et le nouveau nom de TensorFlow Lite (TFLite), et il exécute le même format de modèle .tflite. Avec LiteRT, un seul modèle Ultralytics YOLO exporté se déploie sur le mobile, l'embarqué, l'edge et le navigateur — couvrant tout ce que les anciens formats d'exportation tflite et tfjs géraient séparément, désormais sous un même toit.
Le format d'exportation LiteRT optimise tes modèles pour des tâches telles que la détection d'objets, la segmentation, l'estimation de pose et la classification afin qu'ils s'exécutent rapidement et hors ligne sur un large éventail d'appareils.
Le plugin Flutter Ultralytics YOLO officiel exécute les exports LiteRT .tflite sur Android dès la sortie de la boîte — inférence caméra en temps réel, prédiction d'image unique, accélération GPU et téléchargement automatique de modèle pour les sept tâches YOLO26, y compris la profondeur. Pour les appareils Apple, utilise l'export CoreML ; pour les NPU Qualcomm Snapdragon, consulte l'intégration Qualcomm QNN.
Exporte les modèles de classification à imgsz=224. Exporte les modèles de détection, de segmentation, sémantiques, de profondeur, de pose et OBB à
imgsz=640. Cette norme 224/640 est partagée par les actifs mobiles officiels LiteRT, CoreML et QNN.
Le paquet NPM Ultralytics YOLO officiel exécute les exports LiteRT .tflite directement dans le navigateur via LiteRT.js sans serveur ni Python requis — avec une inférence par webcam en temps réel, une prédiction d'image unique et une accélération WebGPU (avec repli automatique CPU/WASM) sur les six tâches YOLO26 (détection, segmentation, pose, OBB, classification, sémantique). Sur WebGPU, il est souvent ~2 fois plus rapide que ONNX Runtime Web.
npm i @ultralytics/yolo @litertjs/corePourquoi devrais-tu exporter vers LiteRT ?#
LiteRT est un framework open-source conçu pour l'inférence sur appareil, également connu sous le nom d'edge computing. Il donne aux développeurs les outils pour exécuter des modèles entraînés sur des appareils mobiles, embarqués et IoT, des ordinateurs traditionnels, et — via LiteRT.js — directement dans les navigateurs web et Node.js.
Un seul format de modèle, toutes les cibles :
- Mobile et embarqué : Android, iOS, Linux embarqué et microcontrôleurs (MCU).
- Accélérateurs Edge : Compatible avec le Coral Edge TPU pour une accélération supplémentaire.
- Navigateur et Node.js : LiteRT.js exécute le même modèle
.tflitesur le web avec une accélération WebGPU/WASM — éliminant le besoin d'un export TensorFlow.js séparé.
Fonctionnalités clés des modèles LiteRT#
- Optimisation sur appareil : Réduit la latence en traitant les données localement, améliore la confidentialité en ne transmettant pas de données personnelles et minimise la taille du modèle pour économiser de l'espace.
- Support multiplateforme : S'exécute sur Android, iOS, Linux embarqué, microcontrôleurs et les navigateurs web modernes.
- Accélération matérielle : Tire parti de XNNPACK sur CPU et de l'accélération GPU via OpenCL, Metal et WebGPU. Le délégué GPU s'exécute en FP16 par défaut pour plus de vitesse.
- Quantification : Prend en charge FP32, INT8 statique (
quantize=8, poids int8 + activations int8), INT16 statique pour les activations (quantize="w8a16", poids int8 + activations int16 pour une plus grande précision) et INT8 dynamique (quantize="w8a32", poids int8 + activations FP32, sans données de calibration nécessaires) pour compresser les modèles et accélérer l'inférence avec une perte de précision minimale. - Support linguistique diversifié : Compatible avec Java/Kotlin, Swift, Objective-C, C++, Python et JavaScript.
Performances mesurées#
Matériel : Xiaomi 17 avec 12 Go de mémoire LPDDR5X et Android 16 / API 36. Son Snapdragon 8 Elite Gen 5 3 nm (SM8850) possède un processeur Qualcomm Oryon à 8 cœurs (2 cœurs Prime jusqu'à 4,6 GHz et 6 cœurs Performance jusqu'à 3,62 GHz), un GPU Adreno et un NPU Hexagon.
| Modèle | Tâche | taille (pixels) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Détection | 640 | 52.2 1.8 / 48.1 / 2.4 | 15.8 2.3 / 8.9 / 4.6 |
| YOLO26n-seg | Segmentation | 640 | 73.4 1.8 / 65.6 / 6.0 | 33.2 1.8 / 23.8 / 7.6 |
| YOLO26n-sem | Sémantique | 640 | 61.2 1.8 / 51.1 / 8.3 | 34.2 1.8 / 24.0 / 8.3 |
| YOLO26n-depth | Depth | 640 | 124.4 1.9 / 115.1 / 7.4 | 23.0 1.8 / 13.5 / 7.7 |
| YOLO26n-cls | Classification | 224 | 4.4 0.4 / 4.0 / 0.0 | 3.1 0.8 / 2.1 / 0.2 |
| YOLO26n-pose | Pose | 640 | 57.4 1.8 / 53.8 / 1.8 | 16.6 2.7 / 10.1 / 3.9 |
| YOLO26n-obb | OBB | 640 | 50.3 1.8 / 47.2 / 1.4 | 11.7 1.8 / 7.8 / 2.0 |
- Les valeurs de vitesse sont des latences en rafale pour une seule image — la moyenne de 15 exécutions après 3 exécutions d'échauffement sur
bus.jpg, mesurées avec le plugin Flutter Ultralytics0.6.10et les actifs standardisésv0.6.6. L'ordre CPU/GPU a alterné entre les tâches lors d'un balayage séquentiel. Les journaux natifs ont confirmé que chaque ligne CPU utilisait LiteRT CPU/XNNPACK et chaque ligne GPU déléguait le graphe complet à LiteRT OpenCL (LITERT_CL). - L'export LiteRT trace directement le modèle PyTorch, produisant un
.tfliteNCHW avec une entrée flottante — le délégué GPU compile l'ensemble du graphe (les sept tâches s'exécutent sur le GPU Adreno ici), etw8a32ne nécessite aucune donnée de calibration. Les consommateurs doivent lire les formes de tenseurs et les noms de signature au lieu de supposer la disposition héritée onnx2tf NHWC ou les noms de sortieIdentity; emballez les données RGB directement sous forme de CHW planaire ou transposez-les avant l'inférence. Les exports sémantiques renvoient des logits NCHW et nécessitent un argmax de classe côté hôte. Les actifs Android officiels sont hébergés sur la version yolo-flutter-appv0.6.6, avec le rapport de référence détaillé dans la documentation de performance Flutter. - Les chiffres correspondants pour le NPU Hexagon de Snapdragon et le CPU/GPU LiteRT se trouvent dans l'intégration Qualcomm QNN.
- Compare les résultats du CPU/accélérateur Apple dans l'intégration CoreML.
Les balayages d'appareils suivants utilisent les mêmes actifs standardisés v0.6.6.
Google Pixel 10#
Matériel : Google Pixel 10 avec 12 Go de mémoire et Android 16 / API 36. Son Google Tensor G5 de 3 nm possède un processeur à 8 cœurs (1 cœur Prime jusqu'à 3,78 GHz, 5 cœurs Performance jusqu'à 3,05 GHz et 2 cœurs d'efficacité jusqu'à 2,25 GHz), un GPU PowerVR D-Series et un TPU Google. Les fréquences d'horloge et le nom du pilote GPU ont été lus à partir de l'appareil de référence car Google ne les publie pas dans les spécifications liées.
| Modèle | Tâche | taille (pixels) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Détection | 640 | 53.3 1.5 / 50.2 / 1.6 | 45.5 3.8 / 37.7 / 4.0 |
| YOLO26n-seg | Segmentation | 640 | 87.7 1.8 / 78.5 / 7.5 | 50.9 3.0 / 36.9 / 10.9 |
| YOLO26n-sem | Sémantique | 640 | 68.6 1.5 / 59.0 / 8.0 | 71.6 1.5 / 59.5 / 10.6 |
| YOLO26n-depth | Depth | 640 | 120.3 1.5 / 112.5 / 6.3 | 52.5 2.0 / 37.5 / 13.0 |
| YOLO26n-cls | Classification | 224 | 4.0 0.3 / 3.4 / 0.2 | 17.6 0.9 / 16.7 / 0.1 |
| YOLO26n-pose | Pose | 640 | 59.7 1.5 / 57.0 / 1.2 | 46.6 3.8 / 39.2 / 3.5 |
| YOLO26n-obb | OBB | 640 | 52.0 1.5 / 48.9 / 1.7 | 45.5 4.0 / 38.5 / 2.9 |
Benchmark : Moyenne de 15 appels predict() après 3 échauffements sur bus.jpg, en utilisant ultralytics_yolo 0.6.10 et les
actifs officiels v0.6.6. L'ordre CPU/GPU alterne entre les tâches lors d'un balayage séquentiel. Les journaux natifs ont confirmé que
chaque ligne CPU utilisait LiteRT CPU/XNNPACK et chaque ligne GPU déléguait le graphe complet à LiteRT OpenCL (LITERT_CL).
Samsung Galaxy S26#
Matériel : Samsung Galaxy S26 (SM-S942B) avec 12 Go de mémoire et Android 16 / API 36. Son Exynos 2600 de 2 nm possède un processeur Armv9.3 à 10 cœurs (1 cœur C1-Ultra jusqu'à 3,8 GHz, 3 cœurs performance C1-Pro jusqu'à 3,26 GHz et 6 cœurs d'efficacité C1-Pro jusqu'à 2,76 GHz), un GPU Xclipse 960 et un NPU Samsung.
| Modèle | Tâche | taille (pixels) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Détection | 640 | 36.7 1.3 / 33.8 / 1.7 | 16.4 1.4 / 12.3 / 2.6 |
| YOLO26n-seg | Segmentation | 640 | 54.6 1.2 / 48.0 / 5.3 | 32.8 1.3 / 24.5 / 7.0 |
| YOLO26n-sem | Sémantique | 640 | 47.8 1.2 / 38.4 / 8.1 | 34.2 1.3 / 24.9 / 8.0 |
| YOLO26n-depth | Depth | 640 | 92.9 1.2 / 84.8 / 6.9 | 33.5 1.3 / 22.4 / 9.8 |
| YOLO26n-cls | Classification | 224 | 2.7 0.2 / 2.3 / 0.2 | 2.6 0.2 / 2.4 / 0.0 |
| YOLO26n-pose | Pose | 640 | 42.8 1.3 / 40.5 / 1.0 | 18.4 1.4 / 14.1 / 2.9 |
| YOLO26n-obb | OBB | 640 | 37.5 1.3 / 35.1 / 1.2 | 18.8 2.5 / 14.6 / 1.8 |
Benchmark : Moyenne de 15 appels predict() après 3 échauffements sur bus.jpg, en utilisant ultralytics_yolo 0.6.10 et les
actifs officiels v0.6.6. L'ordre CPU/GPU alterne entre les tâches lors d'un balayage séquentiel. Les journaux natifs ont confirmé que
chaque ligne CPU utilisait LiteRT CPU/XNNPACK et chaque ligne GPU déléguait le graphe complet à LiteRT OpenCL (LITERT_CL).
Xiaomi 17T Pro#
Matériel : Xiaomi 17T Pro (2602EPTC0G) avec 12 Go de mémoire LPDDR5X et Android 16 / API 36. Son MediaTek Dimensity 9500 (MT6993) de 3 nm possède un processeur Armv9.3 à 8 cœurs (1 cœur C1-Ultra jusqu'à 4,21 GHz, 3 cœurs C1-Premium jusqu'à 3,5 GHz et 4 cœurs C1-Pro jusqu'à 2,7 GHz), un GPU Mali-G1 Ultra MC12 et un NPU MediaTek 990.
| Modèle | Tâche | taille (pixels) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Détection | 640 | 45.4 1.3 / 42.1 / 2.0 | 26.6 1.9 / 22.0 / 2.7 |
| YOLO26n-seg | Segmentation | 640 | 126.2 2.6 / 113.9 / 9.7 | 46.7 2.6 / 33.3 / 10.8 |
| YOLO26n-sem | Sémantique | 640 | 117.9 2.6 / 98.8 / 16.5 | 74.3 2.6 / 54.7 / 17.0 |
| YOLO26n-depth | Depth | 640 | 182.4 2.5 / 167.6 / 12.3 | 47.8 2.5 / 32.3 / 12.9 |
| YOLO26n-cls | Classification | 224 | 6.2 0.4 / 5.3 / 0.4 | 7.4 0.4 / 6.9 / 0.1 |
| YOLO26n-pose | Pose | 640 | 97.6 2.5 / 93.3 / 1.8 | 28.6 2.5 / 23.3 / 2.8 |
| YOLO26n-obb | OBB | 640 | 91.5 2.6 / 85.8 / 3.2 | 27.5 2.7 / 21.8 / 2.9 |
Benchmark : Moyenne de 15 appels predict() après 3 échauffements sur bus.jpg, en utilisant ultralytics_yolo 0.6.10 et les
actifs officiels v0.6.6. L'ordre CPU/GPU alterne entre les tâches lors d'un balayage séquentiel. Les journaux natifs ont confirmé que
chaque ligne CPU utilisait LiteRT CPU/XNNPACK et chaque ligne GPU déléguait le graphe complet à LiteRT OpenCL (LITERT_CL).
Tâches prises en charge#
L'export LiteRT prend en charge les sept tâches d'Ultralytics. La segmentation sémantique et l'estimation de la profondeur ne sont disponibles qu'avec YOLO26, la seule famille qui intègre ces têtes.
Exporter vers LiteRT : Convertir ton modèle YOLO#
Tu peux améliorer l'efficacité de l'exécution sur appareil et élargir les options de déploiement en convertissant tes modèles au format LiteRT.
Installation#
Pour installer le package requis, exécute :
# Install the required package for YOLO
pip install ultralyticsPour des instructions détaillées et les meilleures pratiques, consulte notre guide d'installation Ultralytics. Si tu rencontres des difficultés, consulte notre guide des problèmes courants.
L'export LiteRT est actuellement pris en charge sur Linux x86_64 et macOS. Le modèle exporté .tflite lui-même s'exécute sur toutes les plateformes prenant en charge LiteRT (mobile, embarqué, edge et navigateur).
Utilisation#
Tous les modèles Ultralytics YOLO prennent en charge l'exportation par défaut. Le format LiteRT prend en charge les modes Export, Predict et Validate, ce qui te permet d'exporter un modèle, puis de le charger pour exécuter une inférence ou valider sa précision localement.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to LiteRT format
model.export(format="litert", imgsz=640) # use imgsz=224 for classificationfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Dynamic INT8: int8 weights, FP32 activations - no calibration data needed
model.export(format="litert", quantize="w8a32", imgsz=640) # use imgsz=224 for classification
# Static INT8: int8 weights + int8 activations - needs calibration data
model.export(format="litert", quantize=8, data="coco8.yaml", imgsz=640) # use 224 for classification
# Static w8a16: int8 weights + int16 activations (higher accuracy) - needs calibration data
model.export(format="litert", quantize="w8a16", data="coco8.yaml", imgsz=640) # use 224 for classificationfrom ultralytics import YOLO
# Load the exported LiteRT model
model = YOLO("yolo26n.tflite")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported LiteRT model
model = YOLO("yolo26n.tflite")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Arguments d'exportation#
| Argument | Type | Défaut | Description |
|---|---|---|---|
format | str | 'litert' | 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 des images carrées ou un tuple (height, width) pour des dimensions spécifiques. |
quantize | int ou str | None | Précision de la quantification : 8 (INT8 statique, poids int8 + activations int8 ; nécessite une calibration data/fraction), 'w8a16' (statique, poids int8 + activations int16 ; nécessite une calibration data/fraction), 'w8a32' (INT8 dynamique, poids int8 + activations FP32 ; aucune calibration nécessaire), ou 32/non défini (FP32). Le format FP16 n'est pas exporté séparément (voir la note ci-dessous). Remplace les indicateurs obsolètes half/int8. |
batch | int | 1 | Spécifie la taille d'inférence par lots du modèle exporté ou le nombre maximal d'images que le modèle exporté traitera simultanément en mode predict. |
data | str | None | YAML de dataset utilisé pour la calibration INT8 ; la classification prend à la place un répertoire de dataset ou un nom de dataset intégré. S'il est omis avec quantize=8 ou 'w8a16', Ultralytics sélectionne le dataset de calibration par défaut pour la tâche du modèle. |
device | str | None | Spécifie l'appareil pour l'exportation. L'exportation LiteRT s'exécute sur le processeur (device=cpu). |
Contrairement à l'ancien export tflite, LiteRT ne nécessite pas d'export FP16 séparé. Un modèle FP32 .tflite s'exécute en demi-précision à l'exécution lors de l'utilisation d'un délégué GPU (WebGPU, OpenCL, Metal) — c'est l'approche officielle de LiteRT pour l'inférence en FP16.
Pour plus de détails sur le processus d'exportation, visite la page de documentation d'Ultralytics sur l'exportation.
Déploiement des modèles YOLO LiteRT exportés#
Après avoir exporté ton modèle Ultralytics YOLO vers LiteRT, tu peux le déployer sur plusieurs plateformes. Le moyen le plus rapide de le vérifier localement est la méthode YOLO("yolo26n.tflite") présentée ci-dessus. Pour un déploiement dans d'autres environnements, consulte les ressources suivantes :
Mobile et embarqué#
- Android : Un guide de démarrage rapide pour intégrer LiteRT dans des applications Android.
- iOS : Un guide pour intégrer et déployer des modèles LiteRT dans des applications iOS.
- Linux embarqué et Raspberry Pi : Exécute des modèles LiteRT sur des ordinateurs monocarte, avec une accélération optionnelle via un Coral Edge TPU.
- Microcontrôleurs : Déploie sur des MCU dotés de seulement quelques kilo-octets de mémoire — le moteur d'exécution principal tient dans environ 16 Ko sur un Arm Cortex-M3.
Navigateur et Node.js (LiteRT.js)#
- Aperçu de LiteRT.js : Exécute le même modèle
.tflitedirectement dans le navigateur avec l'accélération WebGPU/WASM, éliminant le calcul côté serveur et maintenant les données sur l'appareil de l'utilisateur. - Exemples de bout en bout : Exemples pratiques et tutoriels pour implémenter LiteRT sur mobile, edge et web.
Résumé#
Dans ce guide, nous avons couvert la manière d'exporter des modèles Ultralytics YOLO au format LiteRT. En regroupant le déploiement mobile/edge (anciennement TFLite) et navigateur (anciennement TF.js) dans un seul modèle .tflite, LiteRT rend tes modèles YOLO plus rapides, plus petits et portables sur pratiquement toutes les cibles sur appareil.
Pour plus de détails, visite la documentation officielle de LiteRT.
De plus, si tu es curieux de découvrir d'autres intégrations Ultralytics YOLO, consulte notre page du guide d'intégration pour trouver de nombreuses ressources utiles.
FAQ#
Comment exporter un modèle YOLO au format LiteRT ?#
Utilise la bibliothèque Ultralytics pour exporter un modèle YOLO vers LiteRT (.tflite). Tout d'abord, installe le paquet :
pip install ultralyticsEnsuite, exporte ton modèle :
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to LiteRT format
model.export(format="litert", imgsz=640) # use imgsz=224 for classificationPour les utilisateurs CLI :
yolo export model=yolo26n.pt format=litert imgsz=640 # use imgsz=224 for classificationPour plus de détails, consulte le guide d'exportation Ultralytics.
Quelle est la différence entre LiteRT, TFLite et TF.js ?#
LiteRT est le nouveau nom de TensorFlow Lite — même format de modèle .tflite, même lignée d'exécution, rebaptisé par Google. Dans Ultralytics, le format d'exportation unique litert couvre désormais les deux cas d'utilisation qui nécessitaient auparavant deux formats distincts :
- L'ancien format
tflite→ déploiement mobile, embarqué et edge. - L'ancien format
tfjs→ déploiement sur navigateur et Node.js, désormais géré par LiteRT.js exécutant le même fichier.tflite.
Si tu possèdes un fichier .tflite existant, tu peux le charger directement avec YOLO("model.tflite") et il s'exécutera via le backend LiteRT.
Puis-je exécuter des modèles YOLO LiteRT sur un Raspberry Pi ?#
Oui. Exporte ton modèle au format LiteRT, puis exécute-le sur un Raspberry Pi pour améliorer les vitesses d'inférence. Pour une optimisation supplémentaire, envisage un Coral Edge TPU. Pour des étapes détaillées, réfère-toi à notre guide de déploiement Raspberry Pi.
Puis-je exécuter des modèles YOLO dans le navigateur avec LiteRT ?#
Oui. LiteRT.js exécute le même modèle exporté .tflite directement dans un navigateur web ou une application Node.js, avec l'accélération WebGPU/WASM. Cela remplace le flux de travail TensorFlow.js précédent — il n'y a pas d'exportation de navigateur séparée, il suffit de déployer ton modèle LiteRT avec le moteur d'exécution LiteRT.js.
LiteRT supporte-t-il l'inférence FP16 (demi-précision) ?#
Oui — à l'exécution. Un modèle LiteRT FP32 s'exécute automatiquement en FP16 lorsqu'il est exécuté sur un délégué GPU (WebGPU, OpenCL ou Metal), ce qui constitue l'approche officielle de LiteRT. Tu n'as donc pas besoin d'un export FP16 dédié ; pour une compression supplémentaire, utilise la quantification INT8 avec quantize=8.
Comment résoudre les problèmes courants lors de l'exportation LiteRT ?#
Si tu rencontres des erreurs lors de l'exportation des modèles YOLO vers LiteRT, les solutions courantes incluent :
- Vérifier la plateforme : L'exportation LiteRT est supportée sur Linux x86_64 et macOS. Vérifie que ton environnement correspond.
- Vérifie la compatibilité des paquets : Assure-toi d'utiliser une version compatible d'Ultralytics. Consulte notre guide d'installation.
- Problèmes de quantification : Lors de l'utilisation de la quantification INT8, assure-toi que le chemin de ton dataset est correctement spécifié dans le paramètre
data.
Pour des conseils de dépannage supplémentaires, visite notre guide des problèmes courants.