Ultralytics YOLO27 :
Get Started

Export CoreML pour les modèles YOLO26#

Apple intègre une puce dédiée à l'IA — le Neural Engine — à chaque iPhone, iPad et Mac moderne, et CoreML est aujourd'hui le parcours pris en charge par Ultralytics pour y déployer des modèles. L'export des modèles Ultralytics YOLO26 vers CoreML transforme un point de contrôle .pt entraîné en un .mlpackage natif qui exécute les sept tâches YOLO sur l'appareil avec une faible latence, sans connexion réseau et sans que les données quittent l'appareil.

Exécute YOLO dès aujourd'hui sur Apple Neural Engine avec les applications mobiles officielles

Le SDK iOS officiel Ultralytics YOLO et le plugin Flutter exécutent les exports CoreML sur Apple Neural Engine dès l'installation : inférence de caméra en temps réel, prédiction sur une seule image et téléchargement automatique de modèles pour les sept tâches YOLO26, y compris la profondeur. Pour le déploiement sur NPU Android, consulte l'intégration Qualcomm QNN.

Tailles d'entrée mobiles officielles

Exporter les modèles de classification à imgsz=224. Exporter les modèles de détection, de segmentation, de segmentation sémantique, de profondeur, de pose et OBB à imgsz=640. Cette norme 224/640 est commune aux ressources mobiles officielles CoreML, LiteRT et QNN.

Le nouveau format Core AI d’Apple

Apple a introduit le nouveau framework Core AI et le format .aimodel pour la génération iOS 27 et macOS 27, et Ultralytics l’exporte avec format="coreai". CoreML reste le format par défaut des SDK Ultralytics pour iOS et Flutter, qui chargent Core AI en option sur les appareils iOS 27, ainsi que le format offrant une compatibilité plus étendue avec les appareils Apple.



À regarder : Comment exporter Ultralytics YOLO26 vers CoreML avec une quantification INT8 | Déploiement sur Apple | iOS/MacOS 🍎

Qu’est-ce que CoreML ?#

Apple CoreML deployment pipeline

CoreML (nommé « Core ML » par Apple) est le framework d’apprentissage automatique intégré aux appareils d’Apple. Il charge les modèles au format moderne ML Program — le bundle .mlpackage produit par l’exportateur Ultralytics — et les répartit entre le CPU, le GPU et l’Apple Neural Engine (ANE) de l’appareil, le NPU dédié présent dans chaque puce Apple Silicon. Comme tout s’exécute localement, l’inférence fonctionne hors ligne, n’ajoute aucune latence réseau et conserve les données utilisateur sur l’appareil.

CoreML s’intègre directement au framework Vision d’Apple, qui gère le redimensionnement et l’orientation des images avant leur entrée dans le modèle — c’est ainsi que le SDK Ultralytics pour iOS transmet les images de la caméra à YOLO avec un coût de prétraitement pratiquement nul.

Pourquoi exporter YOLO26 vers CoreML ?#

  • Vitesse du Neural Engine : CoreML planifie les opérations prises en charge sur le Neural Engine d’Apple pour une inférence à faible latence sur l’appareil. Consulte le tableau des appareils physiques ci-dessous et évalue précisément ton export sur le matériel cible.
  • Choisir la sortie : les exports par défaut laissent le NMS à ton application. Utilise nms=True pour intégrer le NMS, ou nms=False pour la tête sans NMS de YOLO26.
  • Confidentialité et fonctionnement hors ligne : tous les calculs restent sur l’appareil — aucun aller-retour vers le cloud, aucune clé API, confidentialité totale des données.
  • Un seul export pour tout l’écosystème : le même .mlpackage fonctionne sur iOS, iPadOS, macOS, watchOS, tvOS et visionOS, et alimente le SDK iOS et le plugin Flutter officiels d’Ultralytics.

Performances mesurées#

Inférence de bout en bout sur une seule image pour les ressources CoreML INT8 YOLO26n standardisées v8.3.0 sur un iPhone 17 Pro doté de 12 Go de mémoire et d’iOS 26.5.2. Sa puce A19 Pro comprend un CPU à 6 cœurs (2 cœurs Performance et 4 cœurs Efficiency), un GPU à 6 cœurs avec accélérateurs neuronaux et un Neural Engine à 16 cœurs. Chaque cellule indique le temps total (prétraitement + inférence + post-traitement, hors annotation), avec le détail par étape juste en dessous. Sous iOS, Vision effectue le redimensionnement de l’entrée dans la requête d’inférence ; le prétraitement est donc indiqué à 0 et son coût est inclus dans l’inférence.

ModèleTâchetaille
(pixels)
CPU
Core ML .cpuOnly
(ms)
CPU + ANE privilégié
Core ML .cpuAndNeuralEngine
(ms)
YOLO26nDétection6409.2
0.0 / 9.2 / 0.0
3.2
0.0 / 3.2 / 0.0
YOLO26n-segSegmentation64012.6
0.0 / 12.0 / 0.5
4.8
0.0 / 4.2 / 0.6
YOLO26n-semSémantique6409.7
0.0 / 9.2 / 0.5
4.6
0.0 / 4.2 / 0.5
YOLO26n-depthProfondeur64025.0
0.0 / 24.1 / 0.9
5.3
0.0 / 4.5 / 0.9
YOLO26n-clsClassification2242.2
0.0 / 2.2 / 0.0
1.9
0.0 / 1.9 / 0.0
YOLO26n-posePose64011.9
0.0 / 11.9 / 0.0
3.9
0.0 / 3.9 / 0.0
YOLO26n-obbOBB64010.6
0.0 / 10.6 / 0.0
3.4
0.0 / 3.4 / 0.0
  • Les ressources de publication exactes v8.3.0 déclarent des entrées de 224×224 pour la classification et de 640×640 pour toutes les autres tâches.
  • Les valeurs de vitesse correspondent à des latences en rafale sur une seule image — la moyenne de 15 exécutions après 3 exécutions de préchauffage sur bus.jpg, mesurées à chaque étape via le SDK iOS, à l’aide du banc d’essai du plugin Flutter en mode profil (code natif optimisé). L’ordre CPU/accélérateur a alterné entre les tâches lors d’un seul passage séquentiel. Les lignes CPU demandent Core ML .cpuOnly ; les lignes CPU + ANE privilégié demandent .cpuAndNeuralEngine, Core ML déterminant finalement le placement des opérations. En fonctionnement continu de la caméra en temps réel, les valeurs sont plus élevées, car le pipeline de capture et de mise à l’échelle ainsi que la stabilisation thermique sont pris en compte. Lors d’une mesure historique sur caméra, avant la standardisation, on a obtenu 11.3 ms/image pour la détection avec YOLO26n et 16.5 ms/image pour la profondeur avec YOLO26n sur le même appareil — consulte la documentation sur les performances du SDK iOS pour le profilage en régime stabilisé.
  • Compare les résultats CPU/GPU sur Android dans l’intégration LiteRT et les résultats du NPU Snapdragon dans l’intégration Qualcomm QNN.

Tâches prises en charge#

L’export CoreML prend en charge les sept tâches Ultralytics. La segmentation sémantique et l’estimation de profondeur sont uniquement disponibles avec YOLO26, la seule famille qui inclut ces têtes.

TâcheYOLOv8YOLO11YOLO26
Détecter✅✅✅
Segmenter✅✅✅
Sémantique❌❌✅
Profondeur❌❌✅
Classifier✅✅✅
Pose✅✅✅
OBB✅✅✅

Exporter des modèles YOLO26 vers CoreML#

Installation#

Pour installer le package requis, exécute :

Installation
# Install the required package for YOLO26
pip install ultralytics

Le convertisseur coremltools s’installe automatiquement lors du premier export. L’export s’exécute sous macOS ou Linux x86 ; pour obtenir des instructions détaillées et des bonnes pratiques, consulte notre guide d’installation et notre guide des problèmes courants.

Utilisation#

Le format CoreML prend en charge les modes Export, Predict et Validate. L’inférence et la validation avec CoreML fonctionnent uniquement sous macOS. Exporte ton modèle, puis charge le modèle exporté pour effectuer l’inférence ou valider sa précision.

Export
from ultralytics import YOLO

# Charger un modèle YOLO26
model = YOLO("yolo26n.pt")

# Exporter vers CoreML avec une quantification des poids INT8, comme pour les modèles officiels de l’application
model.export(format="coreml", quantize=8, imgsz=640)  # utiliser imgsz=224 pour la classification
Prédiction
from ultralytics import YOLO

# Charger le modèle CoreML exporté (macOS)
model = YOLO("yolo26n.mlpackage")

# Exécuter l’inférence
results = model("https://ultralytics.com/images/bus.jpg")
Valider
from ultralytics import YOLO

# Charger le modèle CoreML exporté (macOS)
model = YOLO("yolo26n.mlpackage")

# Valider la précision sur le jeu de données COCO8
metrics = model.val(data="coco8.yaml")

Arguments d’exportation#

ArgumentTypeValeur par défautDescription
formatstr'coreml'Format cible du modèle exporté, qui définit sa 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 ou un tuple (height, width) pour définir des dimensions spécifiques.
quantizeint ou strNonePrécision de quantification (uniquement les poids pour CoreML) : 16 (FP16), 8 (INT8), "w8a16" (poids INT8 avec activations FP16) ou 32/non défini (FP32). Les programmes ML NMS utilisent FP16 (pour l’aperçu Xcode et, obligatoirement, pour segment et pose) ; passe 32 pour remplacer ce réglage en détection. Remplace les options obsolètes half/int8.
nmsbool, facultatifNoneSélectionne la sortie brute (None, par défaut), le NMS intégré (True) ou la tête sans NMS (False). Le NMS intégré prend en charge la détection, la segmentation et la pose avec dynamic=False.
dynamicboolFalsePermet des tailles d’entrée dynamiques. Non pris en charge pour les modèles de classification ou RT-DETR, et incompatible avec nms=True.
batchint1Définit la taille de lot pour l’inférence du modèle exporté, c’est-à-dire le nombre maximal d’images que le modèle exporté traitera simultanément en mode predict. Les valeurs supérieures à 1 nécessitent dynamic=True.
devicestrNoneDéfinit l’appareil utilisé pour l’export : GPU (device=0), CPU (device=cpu), MPS pour Apple Silicon (device=mps).

Pour en savoir plus sur le processus d’export, consulte la page de la documentation Ultralytics consacrée à l’export.

Cibler le Neural Engine#

CoreML choisit le matériel via MLModelConfiguration.computeUnits. Par défaut, le SDK Ultralytics pour iOS utilise .cpuAndNeuralEngine sous iOS 16 et versions ultérieures, plutôt que .all : dans une application de caméra en temps réel, le GPU est déjà occupé à composer l’aperçu et les incrustations. L’exclure évite donc la contention et les variations du temps de trame, tandis que l’ANE prend en charge l’essentiel du travail. Ne fixe .cpuOnly que pour tester la compatibilité — le tableau ci-dessus montre le coût associé.

L’exécution d’un modèle CoreML depuis Python sur un hôte Mac (via Ultralytics ou coremltools) suit la même règle : Ultralytics charge le modèle avec ComputeUnit.CPU_AND_NE (macOS 13 et versions ultérieures, avec repli sur CPU_ONLY sous les anciennes versions de macOS), ce qui maintient l’inférence sur le Neural Engine (~3× plus rapide que sur CPU). Cela évite également une limitation actuelle de macOS sur l’hôte : le réglage par défaut ComputeUnit.ALL / CPU_AND_GPU — qui ajoute le chemin de compilation GPU/MPSGraph — interrompt le processus avec une assertion Error: MLIR pass manager failed sur coremltools 9.x.

Déployer les modèles YOLO26 CoreML exportés#

Le moyen le plus rapide consiste à utiliser le SDK Ultralytics YOLO officiel pour iOS, le même package Swift qui alimente l’application Ultralytics pour iOS et le plugin Flutter. Il résout automatiquement les noms de modèles officiels, télécharge et met en cache le .mlpackage, puis renvoie des résultats entièrement décodés :

import UltralyticsYOLO

// Loads the official INT8 model (downloaded and cached on first use), then runs inference
let yolo = YOLO("yolo26n", task: .detect) { result in
    if case .success(let model) = result {
        let results = model(uiImage)  // boxes, labels, confidences, timing
    }
}

Pour les applications de caméra, ajoute le YOLOView du SDK pour bénéficier de l’inférence en temps réel avec des incrustations natives, ou utilise le plugin Flutter pour créer des applications multiplateformes partageant une base de code avec Android.

Tu peux aussi facilement intégrer toi-même un .mlpackage brut avec la pile Apple : charge-le avec MLModel, enveloppe-le dans un VNCoreMLRequest et transmets les images via VNImageRequestHandler. Ces ressources détaillent la procédure :

Livre le modèle soit intégré au bundle de l’application (disponibilité immédiate, idéal pour les modèles nano/petits), soit téléchargé au premier lancement et mis en cache (binaire plus léger, mises à jour faciles du modèle). Les applications officielles combinent les deux approches : les modèles nano par défaut sont intégrés pour être disponibles immédiatement, tandis que les variantes plus volumineuses sont téléchargées à la demande et mises en cache localement.

  1. Entraîne ton modèle avec le mode Train d’Ultralytics, ou pars des poids officiels YOLO26
  2. Exporte avec model.export(format="coreml", quantize=8, imgsz=640) sous macOS ou Linux x86 (imgsz=224 pour la classification)
  3. Vérifie la précision avec model.val() sur un Mac, puis profile le modèle avec un rapport de performances Core ML de Xcode sur ton appareil cible
  4. Déploie avec le SDK iOS, le plugin Flutter ou ta propre intégration Vision, en ciblant .cpuAndNeuralEngine

Résumé#

Dans ce guide, tu as appris à exporter les modèles Ultralytics YOLO26 au format .mlpackage de CoreML, à les quantifier pour l’Apple Neural Engine et à les déployer avec des latences de quelques millisecondes — à l’aide du SDK iOS officiel et du plugin Flutter, ou de ta propre intégration Vision. Pour d’autres cibles de déploiement, consulte la page du guide d’intégration et compare les formats avec le mode Benchmark.

FAQ#

  • Exécute model.export(format="coreml", imgsz=640) dans Python ou yolo export model=yolo26n.pt format=coreml imgsz=640 depuis la CLI sous macOS ou Linux x86. Utilise imgsz=224 pour la classification et ajoute quantize=8 pour correspondre aux modèles officiels de l’application. L’export produit un programme ML yolo26n.mlpackage prêt à être utilisé avec Xcode, le SDK iOS ou le plugin Flutter.

  • Utilise nms=True si ton application a besoin de détections avec le NMS intégré. Par défaut, nms=None exporte des sorties brutes one-to-many que ton application peut traiter ; nms=False sélectionne la tête sans NMS de YOLO26. Le NMS intégré prend en charge la détection, la segmentation et la pose avec des formes statiques ; les autres tâches conservent leurs sorties natives.

  • Les modèles de l’application officielle Ultralytics sont distribués en INT8, ce qui réduit la taille du téléchargement au minimum et offre les vitesses indiquées dans le tableau ci-dessus. quantize=16 (FP16) est une solution prudente qui n’entraîne pratiquement aucune perte de précision. Valide ton export précis avec model.val() sur un Mac avant sa mise en production.

  • Définis MLModelConfiguration.computeUnits = .cpuAndNeuralEngine (valeur par défaut du SDK iOS sous iOS 16 et versions ultérieures). Évite .all dans les applications de caméra : le GPU est occupé à composer l’aperçu, et y planifier l’inférence entraîne des variations du temps de trame. Vérifie le placement à l’aide d’un rapport de performances Core ML de Xcode.

  • Oui, sous macOS : yolo predict model=yolo26n.mlpackage source=image.jpg et yolo val model=yolo26n.mlpackage data=coco8.yaml fonctionnent comme pour tout autre format. L’exécution de CoreML nécessite du matériel Apple ; ces modes ne sont donc pas disponibles sous Linux ni Windows.

  • Utilise le SDK Ultralytics YOLO officiel pour iOS (Swift Package) ou le plugin Flutter. Les deux chargent les modèles officiels par leur nom, les téléchargent et les mettent en cache automatiquement, les exécutent sur le Neural Engine et incluent des interfaces complètes pour la caméra en temps réel — le tableau de performances mesurées ci-dessus a été réalisé précisément avec cette pile.

Commentaires