Sony IMX500-Export für Ultralytics YOLO11#
In dieser Anleitung erfährst du, wie du Ultralytics YOLO11-Modelle für Raspberry Pi AI Cameras mit Sony IMX500-Sensor exportierst und bereitstellst.
Die Bereitstellung von Computer-Vision-Modellen auf Geräten mit begrenzter Rechenleistung, wie der Raspberry Pi AI Camera, kann schwierig sein. Ein für höhere Leistung optimiertes Modellformat macht einen großen Unterschied.
Das IMX500-Modellformat wurde entwickelt, um möglichst wenig Energie zu verbrauchen und gleichzeitig eine hohe Geschwindigkeit bei neuronalen Netzen zu bieten. Es ermöglicht dir, deine Ultralytics YOLO11-Modelle für schnelle Inferenz bei geringem Energieverbrauch zu optimieren. In dieser Anleitung zeigen wir dir, wie du deine Modelle ins IMX500-Format exportierst und bereitstellst, damit sie auf der Raspberry Pi AI Camera optimale Leistung erzielen.
Warum solltest du ins IMX500-Format exportieren?#
Der intelligente Bildsensor IMX500 von Sony ist eine bahnbrechende Hardware für Edge-KI-Verarbeitung. Er ist der weltweit erste intelligente Bildsensor mit integrierten KI-Funktionen. Dieser Sensor hilft, viele Herausforderungen im Bereich 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 Gesamtbild. Er verarbeitet Daten direkt auf dem Sensor, sodass Geräte in Echtzeit Erkenntnisse gewinnen können.
Sonys IMX500-Export für YOLO11-Modelle#
Der IMX500 wurde entwickelt, um die direkte Verarbeitung von Daten auf dem Sensor zu ermöglichen, ohne dass diese zur Verarbeitung an die Cloud gesendet werden müssen.
Der IMX500 unterstützt quantisierte Modelle. Durch Quantisierung werden Modelle kleiner und schneller, ohne dass die Genauigkeit wesentlich leidet. Das eignet sich ideal für die begrenzten Ressourcen des Edge-Computing: Anwendungen reagieren schneller, weil die Latenz sinkt und Daten lokal zügig verarbeitet werden können, ohne auf die Cloud angewiesen zu sein. Die lokale Verarbeitung schützt außerdem die Privatsphäre und Sicherheit der Nutzerdaten, da diese nicht an einen Remote-Server gesendet werden.
Wichtige Funktionen des IMX500:
- Metadatenausgabe: Statt ausschließlich Bilder zu übertragen, kann der IMX500 sowohl Bilder als auch Metadaten (Inferenzergebnisse) ausgeben. Zur Verringerung der Datenmenge, des Bandbreitenbedarfs und der Kosten kann er auch ausschließlich Metadaten ausgeben.
- Schutz der Privatsphäre: Da der IMX500 Daten auf dem Gerät verarbeitet, trägt er dem Datenschutz Rechnung und eignet sich ideal für menschenbezogene Anwendungen wie das Zählen von Personen und die Erfassung der Belegung.
- Echtzeitverarbeitung: Die schnelle Verarbeitung direkt auf dem Sensor ermöglicht Entscheidungen in Echtzeit und eignet sich ideal für Edge-KI-Anwendungen wie autonome Systeme.
Vorbereitung: Um optimale Ergebnisse zu erzielen, solltest du dein YOLO11-Modell sorgfältig für den Export vorbereiten. Folge dazu unserer Anleitung zum Modelltraining, Anleitung zur Datenaufbereitung und Anleitung zur Hyperparameteroptimierung.
Unterstützte Aufgaben#
Der IMX500-Export unterstützt vier der sieben Ultralytics-Aufgaben und zwar nur für YOLOv8n und YOLO11n: Andere Modellfamilien, Größen und Architekturen werden nicht unterstützt. Beim Export eines Modells für semantische Segmentierung, OBB oder Tiefenschätzung wird ein Fehler ausgegeben.
| Aufgabe | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Erkennung | ✅ | ✅ | ❌ |
| Segmentierung | ✅ | ✅ | ❌ |
| Semantik | ❌ | ❌ | ❌ |
| Tiefe | ❌ | ❌ | ❌ |
| Klassifizierung | ✅ | ✅ | ❌ |
| Pose | ✅ | ✅ | ❌ |
| OBB | ❌ | ❌ | ❌ |
Anwendungsbeispiele#
Exportiere ein Ultralytics YOLO11-Modell ins 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 aus, um sicherzustellen, dass das Modell wie erwartet funktioniert. Informationen zur Bereitstellung und Inferenz auf der Raspberry Pi AI Camera findest du im Abschnitt IMX500-Export bei der Bereitstellung verwenden.
from ultralytics import YOLO
# YOLO11n-PyTorch-Modell laden
model = YOLO("yolo11n.pt")
# Modell exportieren
model.export(format="imx", data="coco8.yaml") # exportiert standardmäßig mit PTQ-Quantisierung
# Exportiertes Modell laden
imx_model = YOLO("yolo11n_imx_model")
# Inferenz ausführen
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# YOLO11n-pose-PyTorch-Modell laden
model = YOLO("yolo11n-pose.pt")
# Modell exportieren
model.export(format="imx", data="coco8-pose.yaml") # exportiert standardmäßig mit PTQ-Quantisierung
# Exportiertes Modell laden
imx_model = YOLO("yolo11n-pose_imx_model")
# Inferenz ausführen
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# YOLO11n-cls-PyTorch-Modell laden
model = YOLO("yolo11n-cls.pt")
# Modell exportieren
model.export(format="imx", data="imagenet10") # exportiert standardmäßig mit PTQ-Quantisierung
# Exportiertes Modell laden
imx_model = YOLO("yolo11n-cls_imx_model")
# Inferenz ausführen
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)from ultralytics import YOLO
# YOLO11n-seg-PyTorch-Modell laden
model = YOLO("yolo11n-seg.pt")
# Modell exportieren
model.export(format="imx", data="coco8-seg.yaml") # exportiert standardmäßig mit PTQ-Quantisierung
# Exportiertes Modell laden
imx_model = YOLO("yolo11n-seg_imx_model")
# Inferenz ausführen
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Exportiertes IMX500-Modell laden
model = YOLO("yolo11n_imx_model")
# Die Genauigkeit anhand des COCO8-Datensatzes validieren
metrics = model.val(data="coco8.yaml")Der IMX-Export wird nur unter Linux mit Python 3.9 oder höher unterstützt und erfordert Java 17 oder höher. Das Ultralytics-Paket installiert zur Laufzeit zusätzliche Exportabhängigkeiten. Wenn du den Exportbefehl zum ersten Mal ausführst, musst du möglicherweise die Konsole neu starten, damit er ordnungsgemäß funktioniert.
Exportargumente#
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
format | str | 'imx' | Zielformat des exportierten Modells, das die Kompatibilität mit verschiedenen Bereitstellungsumgebungen festlegt. |
imgsz | int oder tuple | 640 | Gewünschte Bildgröße für die Modelleingabe. Kann eine Ganzzahl für quadratische Bilder oder ein Tupel (height, width) für bestimmte Abmessungen sein. |
quantize | int oder str | 8/automatisch | Quantisierungsgenauigkeit. 8 (INT8/PTQ) ist erforderlich und wird für IMX500 automatisch aktiviert. Exporte nur mit FP32 und FP16 werden nicht unterstützt. Ersetzt die veralteten Flags half/int8. |
data | str | None | Pfad zur YAML-Datei des Datensatzes, die für die Quantisierung erforderlich ist. Bei der Klassifizierung ist stattdessen ein Datensatzverzeichnis oder der Name eines integrierten Datensatzes anzugeben. Wenn du nichts angibst, wählt Ultralytics den standardmäßigen Kalibrierungsdatensatz für die Modellaufgabe aus. |
fraction | float, int oder list | 1.0 | Kalibrierungsteilstichprobe als Verhältnis, Bildanzahl oder [train, val, test]-Verhältnisse/-Anzahlen. Bei Listen mit zwei Elementen bleibt test vollständig erhalten, während 0 es überspringt. |
nms | bool, optional | None | Wähle rohe Ausgaben (None, Standard), eingebettetes NMS (True) oder den NMS-freien Kopf (False). Für Erkennung, Segmentierung und Pose erfordert IMX nms=True und wählt diese Option automatisch aus. |
device | str | None | Legt das Gerät für den Export fest: GPU (device=0), CPU (device=cpu). |
Wenn du den Export auf einer GPU mit CUDA-Unterstützung ausführst, gib für einen schnelleren Export das Argument device=0 an.
Weitere Informationen zum Exportvorgang findest du auf der Ultralytics-Dokumentationsseite zum Export.
Beim Export wird ein ONNX-Modell zur Validierung der Quantisierung sowie ein Verzeichnis namens <model-name>_imx_model erstellt. 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 eines Ultralytics YOLO11n-Modells ins IMX500-Format kannst du es für Inferenzen auf der Raspberry Pi AI Camera bereitstellen.
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#
Diese Anleitung 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 Software des Raspberry Pi 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 Bibliothek des Aitrios-Anwendungsmoduls für Raspberry Pi
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitSchritt 5: Führe mit den folgenden Skripten Objekterkennung, Pose-Schätzung, Klassifizierung und Segmentierung mit YOLO11 aus. Die Skripte sind in den Beispielen der aitrios-rpi-application-module-library verfügbar.
Ersetze vor dem Ausführen dieser Skripte die Verzeichnisse model_file und labels.txt durch die entsprechenden Pfade in 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 der Raspberry Pi AI Camera mit dem Modellformat imx durchgeführt; dabei wurden Geschwindigkeit und Genauigkeit gemessen.
| 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) | acc (top1) | acc (top5) | 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 der oben genannten Benchmarks erfolgte mit dem COCO128-Datensatz für Erkennungsmodelle, dem COCO8-Pose-Datensatz für Pose-Schätzmodelle und ImageNet10 für Klassifizierungsmodelle.
Was steckt dahinter?#
Sony-Toolkit zur Modellkomprimierung (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 Rechenaufwand zu verringern, ohne die Genauigkeit wesentlich zu beeinträchtigen. MCT eignet sich besonders für die Bereitstellung von Modellen auf Geräten mit begrenzten Ressourcen und gewährleistet eine effiziente Inferenz bei geringerer Latenz.
Unterstützte Funktionen von MCT#
MCT von Sony bietet zahlreiche Funktionen zur Optimierung neuronaler Netze:
- Graphoptimierungen: Wandelt Modelle in effizientere Versionen um, indem es beispielsweise Ebenen wie die Batch-Normalisierung in vorhergehende Ebenen integriert.
- Suche nach Quantisierungsparametern: Minimiert Quantisierungsrauschen anhand von Kennzahlen wie mittlerem quadratischem Fehler, keinem Clipping und mittlerem absoluten Fehler.
- Fortschrittliche Quantisierungsalgorithmen:
- Korrektur negativer Verschiebungen: Behebt Leistungseinbußen durch symmetrische Aktivierungsquantisierung.
- Ausreißerfilterung: Erkennt und entfernt Ausreißer mithilfe des z-Werts.
- Clustering: Verwendet nicht gleichmäßige Quantisierungsgitter, um die Verteilung besser abzubilden.
- Suche nach gemischter Präzision: Weist jeder Ebene abhängig von ihrer Empfindlichkeit eine andere Quantisierungsbitbreite zu.
- Visualisierung: Nutze TensorBoard, um Einblicke in die Modellleistung, Quantisierungsphasen und Bitbreitenkonfigurationen zu erhalten.
Quantisierung#
MCT unterstützt mehrere Quantisierungsmethoden, um die Modellgröße zu verringern und die Inferenz zu beschleunigen:
- Quantisierung nach dem Training (PTQ):
- Über Keras- und PyTorch-APIs verfügbar.
- Komplexität: Niedrig
- Rechenaufwand: Niedrig (CPU-Minuten)
- Gradientenbasierte Quantisierung nach dem Training (GPTQ):
- Über Keras- und PyTorch-APIs verfügbar.
- Komplexität: Mittel
- Rechenaufwand: Mittel (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:
- Zweierpotenzen (hardwarefreundlich)
- Symmetrisch
- Gleichmäßig
Strukturiertes Pruning#
MCT bietet strukturiertes, hardwarebewusstes Pruning von Modellen, das auf bestimmte Hardwarearchitekturen ausgelegt ist. Bei dieser Technik werden die Fähigkeiten der Zielplattform für Einzelinstruktion, mehrere Daten (SIMD) genutzt, indem SIMD-Gruppen entfernt werden. Dadurch werden Modellgröße und Komplexität verringert und zugleich die Kanalauslastung optimiert. Die Optimierung ist an die SIMD-Architektur angepasst, um die Speichernutzung der Gewichte gezielt zu optimieren. Über Keras- und PyTorch-APIs verfügbar.
IMX500-Konverterwerkzeug (Compiler)#
Das IMX500-Konverterwerkzeug ist ein zentraler Bestandteil des IMX500-Werkzeugsatzes und ermöglicht das Kompilieren von Modellen für die Bereitstellung auf dem IMX500-Sensor von Sony, beispielsweise in Raspberry Pi AI Cameras. Mit diesem Werkzeug lassen sich Ultralytics YOLO11-Modelle, die mit Ultralytics-Software verarbeitet wurden, so umwandeln, dass sie mit der angegebenen Hardware kompatibel sind und effizient darauf laufen. Beim Export nach der Modellquantisierung werden Binärdateien erzeugt, die wichtige Daten und gerätespezifische Konfigurationen enthalten. Das vereinfacht die Bereitstellung auf der Raspberry Pi AI Camera.
Anwendungsfälle in der Praxis#
Der Export ins IMX500-Format eignet sich für zahlreiche Branchen. Hier sind einige Beispiele:
- Edge AI und IoT: Ermögliche die Objekterkennung auf Drohnen oder Überwachungskameras, bei denen die Echtzeitverarbeitung auf Geräten mit geringem Stromverbrauch wichtig ist.
- Tragbare Geräte: Stelle Modelle bereit, die für KI-Verarbeitung im kleinen Maßstab auf tragbaren Geräten zur Gesundheitsüberwachung optimiert sind.
- Intelligente Städte: Nutze exportierte YOLO11-Modelle im IMX500-Format zur Verkehrsüberwachung und Sicherheitsanalyse mit schnellerer Verarbeitung und minimaler Latenz.
- Einzelhandelsanalysen: Verbessere die Überwachung in Geschäften, indem du optimierte Modelle in Kassensystemen oder intelligenten Regalen einsetzt.
Fazit#
Wenn du Ultralytics YOLO11-Modelle ins IMX500-Format von Sony exportierst, kannst du sie für eine effiziente Inferenz auf Kameras mit IMX500 bereitstellen. Mit fortschrittlichen Quantisierungstechniken kannst du die Modellgröße verringern und die Inferenz beschleunigen, ohne die Genauigkeit wesentlich zu beeinträchtigen.
Weitere Informationen und ausführliche Anleitungen findest du auf der IMX500-Website von Sony.
Häufig gestellte Fragen#
Zum Export eines YOLO11-Modells ins IMX500-Format verwendest du entweder die Python-API oder den CLI-Befehl:
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="imx") # Exportiert standardmäßig mit PTQ-QuantisierungBeim Export wird ein Verzeichnis mit den erforderlichen Bereitstellungsdateien erstellt, darunter
packerOut.zip.Das IMX500-Format bietet mehrere wichtige Vorteile für die Bereitstellung am Netzwerkrand:
- KI-Verarbeitung auf dem Chip verringert Latenz und Stromverbrauch
- Gibt sowohl Bilder als auch Metadaten (Inferenzergebnis) aus, statt nur Bilder
- Mehr Datenschutz durch lokale Datenverarbeitung ohne Abhängigkeit von der Cloud
- Echtzeitverarbeitung, 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 -Werkzeuge (
sudo apt install imx500-all)
Basierend auf den 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
Das zeigt, dass das IMX500-Format eine effiziente Echtzeit-Inferenz ermöglicht und dabei eine gute Genauigkeit für Edge-AI-Anwendungen beibehält.