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/repositoryfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
path = model.export(format="nxp", imgsz=640, data="coco128.yaml")
# Crée yolo26n_nxp.tfliteUtilise 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.
| Argument | Description |
|---|---|
imgsz | Taille d’image d’entrée fixe, par exemple 640 ou (480, 640). |
quantize | INT8 (8) ; activé automatiquement. Les autres précisions ne sont pas prises en charge. |
data | Fichier YAML du jeu de données de calibration, ou jeu de données de classification. |
fraction | Fraction ou nombre d’images de calibration. |
device | Appareil 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 :
from ultralytics import YOLO
model = YOLO("yolo26n_nxp.tflite")
results = model.predict("https://ultralytics.com/images/bus.jpg", imgsz=640)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.soCouverture 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 ouyolo export model=best.pt format=nxp data=your_dataset.yamldans 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 produitbest_nxp.tflite. Suis les exemples d’export pour un modèle YOLO26n préentraîné.Oui. Charge
YOLO("best_nxp.tflite")et appellepredict()ouval(), ou utiliseyolo predictetyolo val. Les deux méthodes utilisent le runtime TensorFlow Lite et le délégué Neutron de la carte. Conserve le suffixe_nxp.tflitedu 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.
Commentaires
Pose une question, partage tes résultats ou aide quelqu’un d’autre.