Ultralytics YOLO27 : Rejoins la liste d’attente.
Commencer

Export NXP i.MX95 avec Neutron

Exporte Ultralytics YOLO avec format="nxp" pour produire un modèle .tflite INT8 compilé pour le NPU NXP i.MX95 Neutron. L’exporteur réutilise le pipeline de conversion et de calibration LiteRT, puis lance le compilateur Neutron SDK 3.3.0 de NXP pour le déploiement de l’IA en périphérie.

Cette cible est distincte de Sony IMX500 (format="imx"). Les NXP i.MX8M Plus, i.MX93 et autres processeurs NXP utilisent des piles d’accélération différentes ; un artefact i.MX95 n’est pas interchangeable avec ceux de ces cibles.

Export#

Effectue l’export sur Linux x86_64, avec Python 3.10 ou version ultérieure. La compilation a été validée avec Python 3.13 et 3.14. Ultralytics installe les dépendances de conversion si nécessaire. Le Neutron SDK provient du dépôt de paquets de NXP.

pip install -U ultralytics
pip install eiq-neutron-sdk==3.3.0 --extra-index-url https://eiq.nxp.com/repository
Exporter vers NXP i.MX95
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
path = model.export(format="nxp", imgsz=640, data="coco128.yaml")
# Crée yolo26n_nxp.tflite

Utilise des images de calibration représentatives de ton déploiement, notamment de sa caméra, de son éclairage et de la taille des objets. La quantification INT8 peut réduire la précision ; compare donc le modèle intermédiaire yolo26n_int8.tflite au modèle PyTorch sur l’hôte. coco128.yaml est un exemple pratique, mais ne remplace pas une calibration propre à l’application ni un jeu de données de validation indépendant.

ArgumentDescription
imgszTaille d’image d’entrée fixe, par exemple 640 ou (480, 640).
quantizeINT8 (8) ; activé automatiquement. Les autres précisions ne sont pas prises en charge.
dataFichier YAML du jeu de données de calibration, ou jeu de données de classification.
fractionFraction ou nombre d’images de calibration.
deviceAppareil utilisé pendant l’export et la calibration. La cible compilée reste l’i.MX95.

La taille de lot est fixée à 1. Les exports de détection utilisent des prédictions brutes pour la NMS externe ; Ultralytics applique ce post-traitement lors de la prédiction et de la validation. La NMS embarquée et la sortie top-k sans NMS de YOLO26 ne sont pas prises en charge par cet export.

Plateforme#

Dans Ultralytics Platform, ouvre l’onglet Export d’un modèle et sélectionne NXP. Choisis la taille d’image et télécharge l’artefact compilé _nxp.tflite une fois l’export terminé. Platform exécute le compilateur sur ses processeurs CPU ; une carte NXP n’est nécessaire que pour le déploiement et les mesures de performance. Consulte le guide pas à pas d’export de modèle avec Platform pour connaître le processus général.

Platform affiche INT8 comme paramètre fixe et utilise le jeu de données de calibration par défaut de l’exporteur pour la tâche du modèle. Pour le moment, elle ne propose pas de commandes de calibration data ou fraction. Utilise les exemples d’export Python ou CLI ci-dessus pour effectuer la calibration avec tes propres images représentatives.

Déployer sur i.MX95#

Installe le runtime TensorFlow Lite, libneutron_delegate.so, le pilote Neutron et le firmware fournis par NXP pour un BSP compatible avec Neutron SDK 3.3.0. Suis le guide de déploiement de NXP pour configurer la carte et vérifier la compatibilité du runtime.

Le runtime Ultralytics charge le tflite_runtime et le délégué Neutron de la carte. Conserve le suffixe _nxp.tflite pour qu’Ultralytics sélectionne le runtime NXP. Exécute les exemples de prédiction et de validation suivants sur la carte :

Effectuer une prédiction avec un modèle NXP
from ultralytics import YOLO

model = YOLO("yolo26n_nxp.tflite")
results = model.predict("https://ultralytics.com/images/bus.jpg", imgsz=640)
Valider un modèle NXP
from ultralytics import YOLO

model = YOLO("yolo26n_nxp.tflite")
metrics = model.val(data="coco128.yaml", imgsz=640, batch=1)

Pour effectuer un benchmark TensorFlow Lite direct, utilise l’exécutable de benchmark de la carte :

benchmark_model --graph=yolo26n_nxp.tflite --external_delegate_path=/usr/lib/libneutron_delegate.so

Couverture des opérateurs et performances#

La compilation remplace les sous-graphes pris en charge par des opérations NeutronGraph. Les opérateurs non pris en charge restent exécutés sur le CPU. Une exportation réussie ne signifie pas que toutes les opérations s’exécutent sur le NPU ni que la surcharge liée aux basculements entre CPU et NPU a été éliminée. L’attention, les changements de disposition des tenseurs et le post-traitement peuvent encore nécessiter une exécution sur le CPU.

Le journal d’export inclut les statistiques du compilateur NXP : opérateurs convertis, partitions NPU, estimations de mémoire et cycles NPU estimés. Ces estimations excluent les opérateurs CPU, le prétraitement, le post-traitement et la surcharge du runtime. Mesure la latence totale par image, la RAM maximale et l’espace de stockage nécessaire au déploiement sur la carte cible ; le nombre théorique de TOPS et la taille du fichier compilé ne permettent pas de déterminer ces valeurs.

Valide le modèle intermédiaire calibré par rapport au modèle PyTorch, puis valide le modèle compilé sur la carte avec le même jeu de données et la même taille d’image. La compilation sur l’hôte et les vérifications de précision du modèle intermédiaire ne permettent pas d’établir la parité numérique ni la latence sur le NPU. Consulte les bonnes pratiques de déploiement de modèles pour planifier la validation au niveau de l’application.

FAQ#

  • Utilise model.export(format="nxp", data="your_dataset.yaml") en Python ou yolo export model=best.pt format=nxp data=your_dataset.yaml dans la CLI sous Linux x86_64. L’exporteur calibre le modèle en INT8 et le compile avec Neutron SDK 3.3.0, ce qui produit best_nxp.tflite. Suis les exemples d’export pour un modèle YOLO26n préentraîné.

  • Oui. Charge YOLO("best_nxp.tflite") et appelle predict() ou val(), ou utilise yolo predict et yolo val. Les deux méthodes utilisent le runtime TensorFlow Lite et le délégué Neutron de la carte. Conserve le suffixe _nxp.tflite du nom de fichier et installe le runtime NXP compatible décrit dans Déployer sur i.MX95.

  • Cet export cible uniquement l’i.MX95. Les autres processeurs NXP ont des accélérateurs et des chaînes d’outils de déploiement différents ; un artefact i.MX95 Neutron ne peut donc pas être réutilisé sur i.MX8M Plus ou i.MX93. L’option distincte format="imx" cible Sony IMX500, et non les processeurs NXP i.MX.

  • Neutron compile les sous-graphes pris en charge pour le NPU et laisse les opérateurs non pris en charge dans TensorFlow Lite pour une exécution sur le CPU. L’attention, les changements de disposition et le post-traitement peuvent créer plusieurs partitions et entraîner une surcharge liée aux transferts. Consulte les statistiques des opérateurs convertis par le compilateur, puis profile l’application complète sur la carte ; une compilation réussie ne garantit pas une exécution intégrale sur le NPU.

  • Effectue la calibration avec des images représentatives et compare PyTorch, le modèle intermédiaire INT8 et le modèle compilé sur un jeu de validation indépendant. Utilise le mode Validate pour mesurer la précision, puis mesure la latence par image, la RAM maximale du processus et l’espace de stockage nécessaire au déploiement sur la carte i.MX95. Les estimations de mémoire du compilateur, la taille du fichier du modèle et le nombre de TOPS ne suffisent pas à déterminer les performances de l’application.

Contributeurs

Commentaires

Pose une question, partage tes résultats ou aide quelqu’un d’autre.