Sony IMX500-Export für Ultralytics YOLO11#
Dieser Leitfaden beschreibt den Export und die Bereitstellung von Ultralytics YOLO11-Modellen auf Raspberry Pi AI Cameras mit dem Sony IMX500-Sensor.
Die Bereitstellung von Computer-Vision-Modellen auf Geräten mit begrenzter Rechenleistung, etwa der Raspberry Pi AI Camera, kann schwierig sein. Ein für höhere Geschwindigkeit optimiertes Modellformat macht einen großen Unterschied.
Das IMX500-Modellformat wurde entwickelt, um möglichst wenig Energie zu verbrauchen und gleichzeitig eine hohe Geschwindigkeit für neuronale Netze zu bieten. Damit kannst du deine Ultralytics YOLO11-Modelle für schnelle Inferenz bei geringem Energieverbrauch optimieren. In diesem Leitfaden zeigen wir dir, wie du deine Modelle in das IMX500-Format exportierst und dafür bereitstellst, damit sie auf der Raspberry Pi AI Camera zuverlässig funktionieren.
Warum solltest du nach IMX500 exportieren?#
Der intelligente Bildsensor IMX500 von Sony ist eine wegweisende Hardware für Edge-KI-Verarbeitung. Er ist der weltweit erste intelligente Bildsensor mit integrierten KI-Funktionen. Dieser Sensor hilft, viele Herausforderungen der Edge-KI zu bewältigen, darunter Engpässe bei der Datenverarbeitung, Datenschutzbedenken und Leistungseinschränkungen. Während andere Sensoren lediglich Bilder und Einzelbilder weiterleiten, liefert der IMX500 ein umfassendes Ergebnis. Er verarbeitet Daten direkt auf dem Sensor, sodass Geräte in Echtzeit Erkenntnisse gewinnen können.
Sony IMX500-Export für YOLO11-Modelle#
Der IMX500 wurde entwickelt, um die direkte Datenverarbeitung auf dem Sensor zu ermöglichen, ohne Daten zur Verarbeitung in die Cloud senden zu müssen.
Der IMX500 funktioniert mit quantisierten Modellen. Quantisierung macht Modelle kleiner und schneller, ohne die Genauigkeit wesentlich zu beeinträchtigen. Das ist ideal für die begrenzten Ressourcen des Edge Computing: Anwendungen reagieren schneller, da die Latenz sinkt und Daten lokal zügig verarbeitet werden können, ohne von der Cloud abhängig zu sein. Die lokale Verarbeitung schützt außerdem die Privatsphäre und Sicherheit der Nutzerdaten, da diese nicht an einen entfernten Server gesendet werden.
Wichtige Funktionen des IMX500:
- Metadatenausgabe: Anstatt nur Bilder zu übertragen, kann der IMX500 sowohl Bilder als auch Metadaten (Inference-Ergebnis) ausgeben oder ausschließlich Metadaten übertragen, um die Datenmenge, Bandbreite und Kosten zu reduzieren.
- Berücksichtigt Datenschutzbedenken: Durch die Verarbeitung der Daten auf dem Gerät trägt der IMX500 Datenschutzbedenken Rechnung und eignet sich ideal für menschenbezogene Anwendungen wie das Zählen von Personen und die Belegungsverfolgung.
- Echtzeitverarbeitung: Die schnelle Verarbeitung auf dem Sensor unterstützt Entscheidungen in Echtzeit und eignet sich ideal für Edge-KI-Anwendungen wie autonome Systeme.
Vorbereitung: Um optimale Ergebnisse zu erzielen, bereite dein YOLO11-Modell mithilfe unseres Leitfadens zum Modelltraining, Leitfadens zur Datenvorbereitung und Leitfadens zur Hyperparameteroptimierung auf den Export vor.
Unterstützte Aufgaben#
Der IMX500-Export unterstützt vier der sieben Ultralytics-Aufgaben und dies ausschließlich für YOLOv8n und YOLO11n: Andere Modellfamilien, Größen und Architekturen werden nicht unterstützt. Der Export eines Modells für semantische Segmentierung, OBB oder Tiefenschätzung führt zu einem Fehler.
| Aufgabe | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Erkennen | ✅ | ✅ | ❌ |
| Segmentieren | ✅ | ✅ | ❌ |
| Semantisch | ❌ | ❌ | ❌ |
| Tiefe | ❌ | ❌ | ❌ |
| Klassifizieren | ✅ | ✅ | ❌ |
| Pose | ✅ | ✅ | ❌ |
| OBB | ❌ | ❌ | ❌ |
Verwendungsbeispiele#
Exportiere ein Ultralytics YOLO11-Modell in das IMX500-Format und führe mit dem exportierten Modell eine Inferenz aus.
Das IMX500-Format unterstützt die Modi Export, Vorhersage und Validierung. Inferenz und Validierung werden auf der Raspberry Pi AI Camera (IMX500) ausgeführt.
Hier führen wir eine Inferenz nur durch, um sicherzustellen, dass das Modell wie erwartet funktioniert. Für die Bereitstellung und Inferenz auf der Raspberry Pi AI Camera gehe jedoch zum Abschnitt IMX500-Export bei der Bereitstellung verwenden.
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model
model.export(format="imx", data="coco8.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load a YOLO11n-pose PyTorch model
model = YOLO("yolo11n-pose.pt")
# Export the model
model.export(format="imx", data="coco8-pose.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-pose_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load a YOLO11n-cls PyTorch model
model = YOLO("yolo11n-cls.pt")
# Export the model
model.export(format="imx", data="imagenet10") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-cls_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)from ultralytics import YOLO
# Load a YOLO11n-seg PyTorch model
model = YOLO("yolo11n-seg.pt")
# Export the model
model.export(format="imx", data="coco8-seg.yaml") # exports with PTQ quantization by default
# Load the exported model
imx_model = YOLO("yolo11n-seg_imx_model")
# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported IMX500 model
model = YOLO("yolo11n_imx_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Das Ultralytics-Paket installiert zusätzliche Abhängigkeiten für den Export zur Laufzeit. Wenn du den Exportbefehl zum ersten Mal ausführst, musst du möglicherweise deine Konsole neu starten, damit er korrekt funktioniert.
Exportargumente#
| Argument | Typ | Standardwert | Beschreibung |
|---|---|---|---|
format | str | 'imx' | Zielformat für das exportierte Modell, das die Kompatibilität mit verschiedenen Bereitstellungsumgebungen festlegt. |
imgsz | int oder tuple | 640 | Gewünschte Bildgröße für die Modelleingabe. Kann für quadratische Bilder eine Ganzzahl oder für bestimmte Abmessungen ein Tupel (height, width) sein. |
quantize | int oder str | 8/auto | Quantisierungsgenauigkeit. 8 (INT8/PTQ) wird für IMX500 automatisch aktiviert; "w8a16" exportiert INT8-Gewichte mit FP16-Aktivierungen. Ein Export nur mit FP32 oder FP16 wird nicht unterstützt. Ersetzt die veralteten Flags half/int8. |
data | str | None | Pfad zur Datensatz-YAML-Datei, die für die Quantisierung erforderlich ist; bei der Klassifizierung wird stattdessen ein Datensatzverzeichnis oder der Name eines integrierten Datensatzes verwendet. Wird der Pfad zusammen mit quantize=8 oder 'w8a16' weggelassen, wählt Ultralytics den standardmäßigen Kalibrierungsdatensatz für die Modellaufgabe aus. |
fraction | float, int oder list | 1.0 | Kalibrierungs-Teilmenge als Verhältnis, Bildanzahl oder [train, val, test]-Verhältnisse bzw. -Anzahlen. Bei Listen mit zwei Elementen bleibt test vollständig, während 0 übersprungen wird. |
nms | bool, optional | None | Wähle Rohausgabe (None, Standard), eingebettete NMS (True) oder den NMS-freien Kopf (False). IMX erfordert nms=True für Detektion, Segmentierung und Pose und wählt diesen automatisch aus. |
device | str | None | Gibt das Gerät für den Export an: GPU (device=0), CPU (device=cpu). |
Wenn du den Export auf einer GPU mit CUDA-Unterstützung durchführst, übergib für einen schnelleren Export das Argument device=0.
Weitere Informationen zum Exportvorgang findest du auf der Ultralytics-Dokumentationsseite zum Export.
Der Exportprozess erstellt ein ONNX-Modell zur Validierung der Quantisierung sowie ein Verzeichnis namens <model-name>_imx_model. Dieses Verzeichnis enthält die Datei packerOut.zip, die für die Paketierung des Modells zur Bereitstellung auf der IMX500-Hardware erforderlich ist. Außerdem enthält der Ordner <model-name>_imx_model eine Textdatei (labels.txt) mit allen Bezeichnungen, die dem Modell zugeordnet sind.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtIMX500-Export bei der Bereitstellung verwenden#
Nach dem Export des Ultralytics YOLO11n-Modells in das IMX500-Format kann es für die Inferenz auf der Raspberry Pi AI Camera bereitgestellt werden.
Hardwarevoraussetzungen#
Stelle sicher, dass die folgende Hardware vorhanden ist:
- Raspberry Pi 5 oder Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
Verbinde die Raspberry Pi AI Camera mit dem 15-poligen MIPI-CSI-Anschluss des Raspberry Pi und schalte den Raspberry Pi ein.
Softwarevoraussetzungen#
Dieser Leitfaden wurde mit Raspberry Pi OS Bookworm auf einem Raspberry Pi 5 getestet.
Schritt 1: Öffne ein Terminalfenster und führe die folgenden Befehle aus, um die Raspberry-Pi-Software auf die neueste Version zu aktualisieren.
sudo apt update && sudo apt full-upgradeSchritt 2: Installiere die IMX500-Firmware, die für den Betrieb des IMX500-Sensors erforderlich ist.
sudo apt install imx500-allSchritt 3: Starte den Raspberry Pi neu, damit die Änderungen wirksam werden.
sudo rebootSchritt 4: Installiere die Aitrios Raspberry Pi application module library.
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitSchritt 5: Führe die Objekterkennung, Posenschätzung, Klassifizierung und Segmentierung mit YOLO11 mithilfe der folgenden Skripte aus, die in den Beispielen der aitrios-rpi-application-module-library verfügbar sind.
Ersetze vor der Ausführung dieser Skripte die Verzeichnisse model_file und labels.txt entsprechend deiner Umgebung.
import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics
class YOLO(Model):
"""YOLO model for IMX500 deployment."""
def __init__(self):
"""Initialize the YOLO model for IMX500 deployment."""
super().__init__(
model_file="yolo11n_imx_model/packerOut.zip", # replace with proper directory
model_type=MODEL_TYPE.CONVERTED,
color_format=COLOR_FORMAT.RGB,
preserve_aspect_ratio=False,
)
self.labels = np.genfromtxt(
"yolo11n_imx_model/labels.txt", # replace with proper directory
dtype=str,
delimiter="\n",
)
def post_process(self, output_tensors):
"""Post-process the output tensors for object detection."""
return pp_od_yolo_ultralytics(output_tensors)
device = AiCamera(frame_rate=16) # Optimal frame rate for maximum FPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)
annotator = Annotator()
with device as stream:
for frame in stream:
detections = frame.detections[frame.detections.confidence > 0.55]
labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]
annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
frame.display()Benchmarks#
Die folgenden Benchmarks für YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls und YOLO11n-cls wurden vom Ultralytics-Team auf einer Raspberry Pi AI Camera mit dem Modellformat imx durchgeführt, wobei Geschwindigkeit und Genauigkeit gemessen wurden.
| Modell | Format | Größe (Pixel) | Größe von packerOut.zip (MB) | mAP50-95(B) | Inferenzzeit (ms/Bild) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| Modell | Format | Größe (Pixel) | Größe von packerOut.zip (MB) | Genauigkeit (Top-1) | Genauigkeit (Top-5) | Inferenzzeit (ms/Bild) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
Die Validierung für die obigen Benchmarks wurde mit dem COCO128-Datensatz für Erkennungsmodelle, dem COCO8-Pose-Datensatz für Posenbestimmungsmodelle und ImageNet10 für Klassifizierungsmodelle durchgeführt.
Was steckt dahinter?#
Sony Model Compression Toolkit (MCT)#
Das Model Compression Toolkit (MCT) von Sony ist ein leistungsstarkes Werkzeug zur Optimierung von Deep-Learning-Modellen durch Quantisierung und Pruning. Es unterstützt verschiedene Quantisierungsmethoden und bietet fortschrittliche Algorithmen, um Modellgröße und Rechenkomplexität zu reduzieren, ohne die Genauigkeit wesentlich zu beeinträchtigen. MCT eignet sich besonders für die Bereitstellung von Modellen auf Geräten mit begrenzten Ressourcen und sorgt für eine effiziente Inferenz und geringere Latenz.
Unterstützte MCT-Funktionen#
Das MCT von Sony bietet zahlreiche Funktionen zur Optimierung neuronaler Netzmodelle:
- Diagrammoptimierungen: Wandelt Modelle in effizientere Varianten um, indem es Schichten wie die Batch-Normalisierung in die jeweils vorhergehenden Schichten integriert.
- Suche nach Quantisierungsparametern: Minimiert Quantisierungsrauschen mithilfe von Metriken wie Mean-Square-Error, No-Clipping und Mean-Average-Error.
- Fortschrittliche Quantisierungsalgorithmen:
- Korrektur negativer Verschiebungen: Behebt Leistungsprobleme, die durch symmetrische Aktivierungsquantisierung entstehen.
- Filterung von Ausreißern: Verwendet den z-Score, um Ausreißer zu erkennen und zu entfernen.
- Clustering: Verwendet nicht uniforme Quantisierungsgitter für eine bessere Anpassung an die Verteilung.
- Suche nach gemischter Präzision: Weist jeder Schicht abhängig von ihrer Empfindlichkeit unterschiedliche Quantisierungsbitbreiten zu.
- Visualisierung: Verwende TensorBoard, um Einblicke in die Modellleistung, Quantisierungsphasen und Bitbreitenkonfigurationen zu erhalten.
Quantisierung#
MCT unterstützt mehrere Quantisierungsmethoden, um die Modellgröße zu reduzieren und die Inferenzgeschwindigkeit zu erhöhen:
- Quantisierung nach dem Training (PTQ):
- Verfügbar über Keras- und PyTorch-APIs.
- Komplexität: Niedrig
- Rechenaufwand: Niedrig (CPU-Minuten)
- Gradientenbasierte Quantisierung nach dem Training (GPTQ):
- Verfügbar über Keras- und PyTorch-APIs.
- Komplexität: Mittel
- Rechenaufwand: Moderat (2–3 GPU-Stunden)
- Quantisierungsbewusstes Training (QAT):
- Komplexität: Hoch
- Rechenaufwand: Hoch (12–36 GPU-Stunden)
MCT unterstützt außerdem verschiedene Quantisierungsschemata für Gewichte und Aktivierungen:
- Zweierpotenz (hardwarefreundlich)
- Symmetrisch
- Uniform
Strukturiertes Pruning#
MCT führt strukturiertes, hardwarebewusstes Pruning ein, das für bestimmte Hardwarearchitekturen entwickelt wurde. Diese Technik nutzt die Fähigkeiten der Zielplattform für Single Instruction, Multiple Data (SIMD), indem sie SIMD-Gruppen entfernt. Dadurch werden Modellgröße und Komplexität reduziert und gleichzeitig die Kanalnutzung optimiert. Die Methode ist auf die SIMD-Architektur abgestimmt, um die Nutzung der für die Gewichtsspeichergröße vorgesehenen Ressourcen zu optimieren. Verfügbar über Keras- und PyTorch-APIs.
IMX500 Converter Tool (Compiler)#
Das IMX500 Converter Tool ist ein wesentlicher Bestandteil des IMX500-Werkzeugsatzes und ermöglicht die Kompilierung von Modellen für die Bereitstellung auf dem IMX500-Sensor von Sony, beispielsweise in Raspberry Pi AI Cameras. Das Tool erleichtert die Umwandlung von Ultralytics YOLO11-Modellen, die mit der Ultralytics-Software verarbeitet wurden, und stellt ihre Kompatibilität und effiziente Ausführung auf der jeweiligen Hardware sicher. Beim Export nach der Modellquantisierung werden Binärdateien erzeugt, die wichtige Daten und gerätespezifische Konfigurationen enthalten. Dadurch wird die Bereitstellung auf der Raspberry Pi AI Camera vereinfacht.
Praxisnahe Anwendungsfälle#
Der Export in das IMX500-Format ist in vielen Branchen einsetzbar. Hier sind einige Beispiele:
- Edge-KI und IoT: Ermöglicht die Objekterkennung auf Drohnen oder Überwachungskameras, bei denen Echtzeitverarbeitung auf Geräten mit geringem Energieverbrauch entscheidend ist.
- Tragbare Geräte: Stelle für die Verarbeitung von KI im kleinen Maßstab optimierte Modelle auf tragbaren Geräten zur Gesundheitsüberwachung bereit.
- Intelligente Städte: Verwende in das IMX500 exportierte YOLO11-Modelle für Verkehrsüberwachung und Sicherheitsanalysen mit schnellerer Verarbeitung und minimaler Latenz.
- Einzelhandelsanalysen: Verbessere die Überwachung in Geschäften, indem du optimierte Modelle in Kassensystemen oder intelligenten Regalen bereitstellst.
Fazit#
Durch den Export von Ultralytics YOLO11-Modellen in das IMX500-Format kannst du deine Modelle für eine effiziente Inferenz auf IMX500-basierten Kameras bereitstellen. Mithilfe fortschrittlicher Quantisierungstechniken kannst du die Modellgröße reduzieren und die Inferenzgeschwindigkeit erhöhen, ohne die Genauigkeit wesentlich zu beeinträchtigen.
Weitere Informationen und ausführliche Richtlinien findest du auf der IMX500-Website von Sony.
FAQ#
Um ein YOLO11-Modell in das IMX500-Format zu exportieren, verwende entweder die Python-API oder den CLI-Befehl:
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="imx") # Exports with PTQ quantization by defaultDer Exportprozess erstellt ein Verzeichnis mit den für die Bereitstellung erforderlichen Dateien, einschließlich
packerOut.zip.Das IMX500-Format bietet mehrere wichtige Vorteile für die Bereitstellung am Netzwerkrand:
- Die KI-Verarbeitung auf dem Chip reduziert Latenz und Energieverbrauch.
- Es gibt sowohl Bilder als auch Metadaten (Inference-Ergebnis) statt ausschließlich Bilder aus.
- Der Datenschutz wird verbessert, da die Daten lokal und ohne Abhängigkeit von der Cloud verarbeitet werden.
- Echtzeitverarbeitungsfunktionen, ideal für zeitkritische Anwendungen.
- Optimierte Quantisierung für die effiziente Bereitstellung von Modellen auf Geräten mit begrenzten Ressourcen.
Für die Bereitstellung von IMX500-Modellen benötigst du:
Hardware:
- Raspberry Pi 5 oder Raspberry Pi 4 Model B
- Raspberry Pi AI Camera mit IMX500-Sensor
Software:
- Raspberry Pi OS Bookworm
- IMX500-Firmware und -Tools (
sudo apt install imx500-all)
Basierend auf Ultralytics-Benchmarks mit der Raspberry Pi AI Camera:
- YOLO11n erreicht eine Inferenzzeit von 58,82 ms pro Bild
- mAP50-95 von 0,517 auf dem COCO128-Datensatz
- Modellgröße von nur 2,2 MB nach der Quantisierung
Dies zeigt, dass das IMX500-Format eine effiziente Echtzeitinferenz ermöglicht und gleichzeitig eine gute Genauigkeit für Edge-KI-Anwendungen bietet.