NXP i.MX95-Export mit Neutron
Exportiere Ultralytics YOLO mit format="nxp", um ein INT8-.tflite-Modell zu erstellen, das für die Neutron-NPU des NXP i.MX95 kompiliert ist. Der Exporter verwendet die LiteRT-Konvertierungs- und Kalibrierungspipeline erneut und führt anschließend den Neutron SDK 3.3.0-Compiler von NXP für die Bereitstellung von Edge-KI aus.
Dieses Ziel unterscheidet sich von Sony IMX500 (format="imx"). NXP i.MX8M Plus, i.MX93 und andere NXP-Prozessoren verwenden andere Beschleuniger-Stacks; ein i.MX95-Artefakt ist mit diesen Zielen nicht austauschbar.
Exportieren#
Führe den Export unter Linux x86_64 mit Python 3.10 oder höher aus. Die Kompilierung wurde mit Python 3.13 und 3.14 validiert. Ultralytics installiert bei Bedarf die Abhängigkeiten für die Konvertierung. Das Neutron SDK ist im Paket-Repository von NXP verfügbar.
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")
# Erstellt yolo26n_nxp.tfliteVerwende Kalibrierungsbilder, die für deinen Einsatz repräsentativ sind, einschließlich der Kamera, der Beleuchtung und der Objektgrößen. INT8-Quantisierung kann die Genauigkeit verringern. Vergleiche daher das Zwischenmodell yolo26n_int8.tflite auf dem Host mit dem PyTorch-Modell. coco128.yaml ist ein praktisches Beispiel, ersetzt aber weder eine anwendungsspezifische Kalibrierung noch einen unabhängigen Validierungsdatensatz.
| Argument | Beschreibung |
|---|---|
imgsz | Feste Eingabebildgröße, zum Beispiel 640 oder (480, 640). |
quantize | INT8 (8); wird automatisch aktiviert. Andere Genauigkeiten werden nicht unterstützt. |
data | YAML-Datei des Kalibrierungsdatensatzes oder ein Klassifizierungsdatensatz. |
fraction | Anteil oder Anzahl der Kalibrierungsbilder. |
device | Gerät, das beim Export und bei der Kalibrierung verwendet wird. Das kompilierte Ziel bleibt i.MX95. |
Die Batchgröße ist auf 1 festgelegt. Bei Erkennungsexporten werden Rohvorhersagen für die externe NMS verwendet; Ultralytics führt diese Nachverarbeitung bei der Vorhersage und Validierung aus. Eingebettete NMS und die NMS-freie Top-k-Ausgabe von YOLO26 werden von diesem Export nicht unterstützt.
Plattform#
Öffne in der Ultralytics Platform den Tab Export eines Modells und wähle NXP aus. Lege die Bildgröße fest und lade nach Abschluss des Exports das kompilierte Artefakt _nxp.tflite herunter. Die Platform führt den Compiler auf ihren CPU-Workern aus; ein NXP-Board wird nur für die Bereitstellung und Leistungsmessungen benötigt. Eine allgemeine Anleitung zum Ablauf findest du in der Schritt-für-Schritt-Anleitung zum Modellexport auf der Platform.
Die Platform zeigt INT8 als feste Einstellung an und verwendet den Standardkalibrierungsdatensatz des Exporters für die jeweilige Aufgabe. Derzeit sind keine Steuerelemente für die Kalibrierung data oder fraction verfügbar. Verwende die obigen Python- oder CLI-Exportbeispiele, um eigene repräsentative Bilder für die Kalibrierung zu nutzen.
Auf i.MX95 bereitstellen#
Installiere die TensorFlow Lite-Laufzeitumgebung, libneutron_delegate.so, den Neutron-Treiber und die Firmware, die NXP für ein mit Neutron SDK 3.3.0 kompatibles BSP bereitstellt. Folge der Bereitstellungsanleitung von NXP, um das Board einzurichten und die Kompatibilität der Laufzeitumgebung sicherzustellen.
Die Ultralytics-Laufzeitumgebung lädt tflite_runtime und den Neutron-Delegate des Boards. Behalte die Endung _nxp.tflite bei, damit Ultralytics die NXP-Laufzeitumgebung auswählt. Führe die folgenden Beispiele für Vorhersagen und Validierung auf dem Board aus:
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)Für einen direkten TensorFlow Lite-Benchmark verwende das Benchmark-Programm des Boards:
benchmark_model --graph=yolo26n_nxp.tflite --external_delegate_path=/usr/lib/libneutron_delegate.soAbdeckung der Operatoren und Leistung#
Bei der Kompilierung werden unterstützte Teilgraphen durch NeutronGraph-Operationen ersetzt. Nicht unterstützte Operatoren werden auf der CPU ausgeführt. Ein erfolgreicher Export bedeutet nicht, dass alle Operationen auf der NPU laufen oder dass der Wechsel zwischen CPU und NPU keinen zusätzlichen Aufwand verursacht. Attention, Änderungen des Tensorlayouts und die Nachverarbeitung können weiterhin eine Ausführung auf der CPU erfordern.
Das Exportprotokoll enthält Statistiken des NXP-Compilers: konvertierte Operatoren, NPU-Partitionen, Speicherschätzungen und geschätzte NPU-Zyklen. Diese Schätzungen berücksichtigen weder CPU-Operatoren noch Vorverarbeitung, Nachverarbeitung oder den Laufzeitaufwand. Miss die vollständige Bildlatenz, den maximalen RAM-Verbrauch und den Speicherbedarf der Bereitstellung auf dem Zielboard; theoretische TOPS-Werte und die Größe der kompilierten Datei reichen nicht aus, um diese Werte zu bestimmen.
Validiere das kalibrierte Zwischenmodell anhand des PyTorch-Modells und validiere anschließend das kompilierte Modell auf dem Board mit demselben Datensatz und derselben Bildgröße. Eine Kompilierung auf dem Host und Genauigkeitsprüfungen des Zwischenmodells belegen weder numerische Übereinstimmung noch die Latenz auf der NPU. In den Best Practices für die Modellbereitstellung erfährst du, wie du die Validierung auf Anwendungsebene planst.
Häufig gestellte Fragen#
Verwende unter Linux x86_64
model.export(format="nxp", data="your_dataset.yaml")in Python oderyolo export model=best.pt format=nxp data=your_dataset.yamlin der CLI. Der Exporter kalibriert das Modell auf INT8 und kompiliert es mit Neutron SDK 3.3.0, wodurchbest_nxp.tfliteerstellt wird. Die Exportbeispiele zeigen, wie du ein vortrainiertes YOLO26n-Modell exportierst.Ja. Lade
YOLO("best_nxp.tflite")und rufepredict()oderval()auf, oder verwendeyolo predictundyolo val. Beide Wege nutzen die TensorFlow Lite-Laufzeitumgebung und den Neutron-Delegate des Boards. Behalte die Dateiendung_nxp.tflitebei und installiere die kompatible NXP-Laufzeitumgebung, die unter Auf i.MX95 bereitstellen beschrieben ist.Dieser Export ist nur für i.MX95 vorgesehen. Andere NXP-Prozessoren verwenden andere Beschleuniger und Bereitstellungs-Toolchains. Ein i.MX95-Neutron-Artefakt kann daher nicht auf i.MX8M Plus oder i.MX93 wiederverwendet werden. Die separate Option
format="imx"ist für Sony IMX500 vorgesehen, nicht für NXP i.MX-Prozessoren.Neutron kompiliert unterstützte Teilgraphen für die NPU und belässt nicht unterstützte Operatoren in TensorFlow Lite, wo sie auf der CPU ausgeführt werden. Attention, Änderungen des Layouts und die Nachverarbeitung können mehrere Partitionen und zusätzlichen Aufwand für Datentransfers verursachen. Prüfe die Statistiken der konvertierten Operatoren im Compiler und profiliere anschließend die gesamte Anwendung auf dem Board. Eine erfolgreiche Kompilierung garantiert nicht, dass die gesamte Ausführung auf der NPU stattfindet.
Kalibriere das Modell mit repräsentativen Bildern und vergleiche PyTorch, das INT8-Zwischenmodell und das kompilierte Modell anhand eines unabhängigen Validierungsdatensatzes. Verwende den Validierungsmodus, um die Genauigkeit zu ermitteln, und miss auf dem i.MX95-Board die Bildlatenz, den maximalen RAM-Verbrauch des Prozesses und den Speicherbedarf der Bereitstellung. Speicherschätzungen des Compilers, die Modellgröße und eine TOPS-Angabe reichen nicht aus, um die Anwendungsleistung zu bestimmen.
Kommentare
Stell eine Frage, teile deine Ergebnisse oder hilf jemand anderem.