YOLO Vision 2026:

Sony IMX500 Export für Ultralytics YOLO11#

Diese Anleitung behandelt den Export und die Bereitstellung von Ultralytics YOLO11-Modellen auf Raspberry Pi AI Cameras, die über den Sony IMX500-Sensor verfügen.

Das Bereitstellen von Computer-Vision-Modellen auf Geräten mit begrenzter Rechenleistung, wie der Raspberry Pi AI Camera, kann knifflig sein. Die Verwendung eines Modellformats, das für eine schnellere Leistung optimiert ist, macht einen riesigen Unterschied.

Das IMX500-Modellformat ist so konzipiert, dass es minimalen Strom verbraucht und gleichzeitig eine schnelle Leistung für neuronale Netze liefert. Damit kannst du deine Ultralytics YOLO11-Modelle für Hochgeschwindigkeits- und Low-Power-Inferenz optimieren. In diesem Leitfaden führen wir dich durch den Export und die Bereitstellung deiner Modells im IMX500-Format und erleichtern es deinen Modellen, auf der Raspberry Pi AI Camera gute Leistung zu erbringen.

Raspberry Pi AI Camera with Sony IMX500 sensor

Warum solltest du in das IMX500-Format exportieren?#

Sonys IMX500 Intelligent Vision Sensor ist eine bahnbrechende Hardware im Bereich Edge-AI-Processing. Er ist der weltweit erste intelligente Vision-Sensor mit On-Chip-KI-Funktionen. Dieser Sensor hilft, viele Herausforderungen bei Edge-AI zu bewältigen, darunter Datenverarbeitungs-Engpässe, Datenschutzbedenken und Leistungseinschränkungen. Während andere Sensoren lediglich Bilder und Frames weiterleiten, erzählt der IMX500 eine ganze Geschichte. Er verarbeitet Daten direkt auf dem Sensor, sodass Geräte in Echtzeit Erkenntnisse generieren können.

Sonys IMX500 Export für YOLO11-Modelle#

Der IMX500 wurde entwickelt, um die Art und Weise zu verändern, wie Geräte Daten direkt auf dem Sensor handhaben, ohne diese zur Verarbeitung in die Cloud senden zu müssen.

Der IMX500 arbeitet mit quantisierten Modellen. Quantisierung macht Modelle kleiner und schneller, ohne nennenswerte Genauigkeit zu verlieren. Sie ist ideal für die begrenzten Ressourcen des Edge-Computing und ermöglicht es Anwendungen, durch reduzierte Latenz schnell zu reagieren und Daten schnell lokal zu verarbeiten, ganz ohne Cloud-Abhängigkeit. Die lokale Verarbeitung hält Benutzerdaten zudem privat und sicher, da sie nicht an einen Remote-Server gesendet werden.

Hauptmerkmale des IMX500:

  • Metadatenausgabe: Anstatt nur Bilder zu übertragen, kann der IMX500 sowohl Bild als auch Metadaten (Inferenzergebnis) ausgeben und kann nur Metadaten ausgeben, um die Datengröße zu minimieren, die Bandbreite zu reduzieren und Kosten zu senken.
  • Adressiert Datenschutzbedenken: Durch die Verarbeitung der Daten auf dem Gerät adressiert der IMX500 Datenschutzbedenken, was ideal für menschenzentrierte Anwendungen wie Personenzählung und Belegungsverfolgung ist.
  • Echtzeitverarbeitung: Schnelle Sensor-nahe Verarbeitung unterstützt Echtzeitentscheidungen, perfekt für Edge-KI-Anwendungen wie autonome Systeme.

Bevor du beginnst: Stelle für optimale Ergebnisse sicher, dass dein YOLO11-Modell gut auf den Export vorbereitet ist, indem du unserem Modell-Trainings-Leitfaden, Datenvorbereitungs-Leitfaden und Hyperparameter-Tuning-Leitfaden folgst.

Unterstützte Aufgaben#

Der IMX500-Export unterstützt vier der sieben Ultralytics-Aufgaben und dies nur für YOLOv8n und YOLO11n: Andere Modellfamilien, Skalierungen und Architekturen werden nicht unterstützt, und der Export eines Modells für semantische Segmentierung, OBB oder Tiefenschätzung führt zu einem Fehler.

AufgabeYOLOv8YOLO11YOLO26
Detect
Segment
Semantic
Depth
Classify
Pose
OBB

Anwendungsbeispiele#

Exportiere ein Ultralytics YOLO11-Modell in das IMX500-Format und führe eine Inferenz mit dem exportierten Modell durch.

Das IMX500-Format unterstützt die Modi Exportieren (Export), Vorhersagen (Predict) und Validieren (Validate). Inferenz und Validierung laufen auf der Raspberry Pi AI Camera (IMX500).

Hinweis

Hier führen wir die Inferenz nur durch, um sicherzustellen, dass das Modell wie erwartet funktioniert. Für die Bereitstellung und Inferenz auf der Raspberry Pi AI Camera springe jedoch bitte zum Abschnitt Verwenden des IMX500-Exports bei der Bereitstellung.

Objekterkennung
 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")
Pose Estimation
 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")
Klassifizierung
 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)
Instanzsegmentierung
 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")
Validieren
 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")
Warnung

Das Ultralytics-Paket installiert zur Laufzeit zusätzliche Export-Abhängigkeiten. Beim ersten Ausführen des Exportbefehls musst du eventuell deine Konsole neu starten, um sicherzustellen, dass alles korrekt funktioniert.

Export-Argumente#

ArgumentTypStandardBeschreibung
formatstr'imx'Zielformat für das exportierte Modell, das die Kompatibilität mit verschiedenen Bereitstellungsumgebungen definiert.
imgszint oder tuple640Gewünschte Bildgröße für die Modelleingabe. Kann eine Ganzzahl für quadratische Bilder oder ein Tupel (height, width) für bestimmte Abmessungen sein.
quantizeint oder str8/autoQuantisierungsgenauigkeit. 8 (INT8/PTQ) wird für den IMX500 automatisch aktiviert; "w8a16" exportiert INT8-Gewichtungen mit FP16-Aktivierungen. FP32- und reine FP16-Exporte werden nicht unterstützt. Ersetzt die veralteten Flags half/int8.
datastrNonePfad zum Dataset-YAML, wichtig für die Quantisierung; die Klassifizierung erfordert stattdessen ein Dataset-Verzeichnis oder einen integrierten Dataset-Namen. Wenn dies bei quantize=8 oder 'w8a16' weggelassen wird, wählt Ultralytics das Standard-Kalibrierungs-Dataset für die Modellaufgabe aus.
fractionfloat, int oder list1.0Kalibrierungs-Teilmenge als Verhältnis, Bildanzahl oder [train, val]-Verhältnisse/-Anzahlen; eine Liste schränkt train oder val ein, während test vollständig bleibt.
nmsboolFalseFügt Non-Maximum Suppression (NMS) zum exportierten Modell hinzu. Wenn True, conf, iou und agnostic_nms ebenfalls akzeptiert werden.
devicestrNoneGibt das Gerät für den Export an: GPU (device=0), CPU (device=cpu).
Tipp

Wenn du auf einer GPU mit CUDA-Unterstützung exportierst, übergib bitte das Argument device=0 für einen schnelleren Export.

Weitere Details zum Exportprozess findest du auf der Ultralytics-Dokumentationsseite zum Exportieren.

Der Exportprozess erstellt ein ONNX-Modell zur Quantisierungsvalidierung zusammen mit einem Verzeichnis namens <model-name>_imx_model. Dieses Verzeichnis enthält die Datei packerOut.zip, die für das Paketieren des Modells zur Bereitstellung auf der IMX500-Hardware unerlässlich ist. Darüber hinaus enthält der Ordner <model-name>_imx_model eine Textdatei (labels.txt), in der alle mit dem Modell verknüpften Labels aufgelistet sind.

Ordnerstruktur
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

Verwendung des IMX500-Exports bei der Bereitstellung#

Nach dem Export des Ultralytics YOLO11n-Modells in das IMX500-Format kann es zur Inferenz auf der Raspberry Pi AI Camera bereitgestellt werden.

Hardware-Voraussetzungen#

Stelle sicher, dass du über die folgende Hardware verfügst:

  1. Raspberry Pi 5 oder Raspberry Pi 4 Model B
  2. 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.

Software-Voraussetzungen#

Hinweis

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-upgrade

Schritt 2: Installiere die IMX500-Firmware, die für den Betrieb des IMX500-Sensors erforderlich ist.

sudo apt install imx500-all

Schritt 3: Starte den Raspberry Pi neu, damit die Änderungen wirksam werden.

sudo reboot

Schritt 4: Installiere das Aitrios Raspberry Pi application module library

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

Schritt 5: Führe YOLO11-Objekterkennung, Schätzung der Körperhaltung (Pose Estimation), Klassifizierung und Segmentierung aus, indem du die folgenden Skripte verwendest, die in den aitrios-rpi-application-module-library examples verfügbar sind.

Hinweis

Stelle vor dem Ausführen dieser Skripte sicher, dass du die Verzeichnisse model_file und labels.txt entsprechend deiner Umgebung ersetzt hast.

Python-Skripte
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 nachfolgenden 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 ausgeführt, wobei Geschwindigkeit und Genauigkeit gemessen wurden.

ModellFormatGröße (Pixel)Größe von packerOut.zip (MB)mAP50-95(B)Inferenzzeit (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
ModellFormatGröße (Pixel)Größe von packerOut.zip (MB)Gen (top1)Gen (top5)Inferenzzeit (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
Hinweis

Die Validierung für die obigen Benchmarks erfolgte unter Verwendung des COCO128-Datensatzes für Erkennungsmodelle, des COCO8-Pose-Datensatzes für Pose-Schätzmodelle und ImageNet10 für Klassifizierungsmodelle.

Was steckt unter der Haube?#

Sony IMX500 YOLO model deployment workflow

Sony Model Compression Toolkit (MCT)#

Sony's Model Compression Toolkit (MCT) ist ein leistungsstarkes Tool zur Optimierung von Deep-Learning-Modellen durch Quantisierung und Pruning. Es unterstützt verschiedene Quantisierungsmethoden und bietet fortschrittliche Algorithmen, um die Modellgröße und Rechenkomplexität zu reduzieren, ohne die Genauigkeit nennenswert zu beeinträchtigen. MCT ist besonders nützlich für die Bereitstellung von Modellen auf ressourcenbeschränkten Geräten, um eine effiziente Inferenz und eine verringerte Latenz sicherzustellen.

Unterstützte Funktionen von MCT#

Sonys MCT bietet eine Reihe von Funktionen, die darauf ausgelegt sind, neuronale Netzwerkmodelle zu optimieren:

  1. Graph-Optimierungen: Transformiert Modelle in effizientere Versionen, indem Schichten wie Batch-Normalisierung in vorangegangene Schichten gefaltet werden.
  2. Suche nach Quantisierungsparametern: Minimiert Quantisierungsrauschen unter Verwendung von Metriken wie Mean-Square-Error, No-Clipping und Mean-Average-Error.
  3. Fortgeschrittene Quantisierungsalgorithmen:
    • Shift Negative Correction: Adressiert Leistungsprobleme durch symmetrische Aktivierungsquantisierung.
    • Outliers Filtering: Verwendet den Z-Score, um Ausreißer zu erkennen und zu entfernen.
    • Clustering: Nutzt nicht-gleichförmige Quantisierungsgitter für eine bessere Verteilungsanpassung.
    • Mixed-Precision-Suche: Weist je nach Empfindlichkeit unterschiedliche Quantisierungs-Bitbreiten pro Schicht zu.
  4. Visualisierung: Nutze TensorBoard, um Einblicke in die Modellleistung, Quantisierungsphasen und Bitbreiten-Konfigurationen zu erhalten.

Quantisierung#

MCT unterstützt verschiedene Quantisierungsmethoden, um die Modellgröße zu reduzieren und die Inferenzgeschwindigkeit zu verbessern:

  1. Post-Training Quantization (PTQ):
    • Verfügbar über Keras- und PyTorch-APIs.
    • Komplexität: Niedrig
    • Rechenaufwand: Niedrig (CPU-Minuten)
  2. Gradient-based Post-Training Quantization (GPTQ):
    • Verfügbar über Keras- und PyTorch-APIs.
    • Komplexität: Mittel
    • Rechenaufwand: Moderat (2-3 GPU-Stunden)
  3. Quantization-Aware Training (QAT):
    • Komplexität: Hoch
    • Rechenaufwand: Hoch (12-36 GPU-Stunden)

MCT unterstützt zudem verschiedene Quantisierungsschemata für Gewichte und Aktivierungen:

  1. Power-of-Two (hardwarefreundlich)
  2. Symmetrisch
  3. Gleichförmig

Strukturiertes Pruning#

MCT führt strukturiertes, hardwareorientiertes Modell-Pruning ein, das für spezifische Hardwarearchitekturen konzipiert ist. Diese Technik nutzt die Single Instruction, Multiple Data (SIMD)-Fähigkeiten der Zielplattform durch das Pruning von SIMD-Gruppen. Dies reduziert die Modellgröße und -komplexität bei gleichzeitiger Optimierung der Kanalauslastung, abgestimmt auf die SIMD-Architektur für eine gezielte Ressourcennutzung des Speicherplatzes für Gewichte. Verfügbar über Keras- und PyTorch-APIs.

IMX500 Converter Tool (Compiler)#

Das IMX500 Converter Tool ist fester Bestandteil des IMX500-Toolsets und ermöglicht die Kompilierung von Modellen für den Einsatz auf dem Sony IMX500-Sensor (zum Beispiel Raspberry Pi AI Cameras). Dieses Tool erleichtert den Transfer von Ultralytics YOLO11-Modellen, die mittels Ultralytics-Software verarbeitet wurden, und stellt sicher, dass sie kompatibel sind und auf der angegebenen Hardware effizient funktionieren. Das Exportverfahren nach der Modellquantisierung beinhaltet die Erstellung von Binärdateien, die wesentliche Daten und gerätespezifische Konfigurationen enthalten, was den Bereitstellungsprozess auf der Raspberry Pi AI Camera optimiert.

Anwendungsfälle aus der Praxis#

Der Export in das IMX500-Format bietet branchenübergreifend vielfältige Einsatzmöglichkeiten. Hier sind einige Beispiele:

  • Edge AI und IoT: Ermögliche Objekterkennung auf Drohnen oder Sicherheitskameras, bei denen Echtzeitverarbeitung auf Geräten mit geringem Stromverbrauch essenziell ist.
  • Wearables: Implementiere Modelle, die für KI-Verarbeitung im kleinen Maßstab auf gesundheitsüberwachenden Wearables optimiert sind.
  • Smart Cities: Nutze IMX500-exportierte YOLO11-Modelle für Verkehrsüberwachung und Sicherheitsanalysen mit schnellerer Verarbeitung und minimaler Latenz.
  • Einzelhandelsanalytik: Verbessere die Überwachung im Geschäft durch den Einsatz optimierter Modelle in Point-of-Sale-Systemen oder intelligenten Regalen.

Fazit#

Der Export von Ultralytics YOLO11-Modellen in das IMX500-Format von Sony ermöglicht es dir, deine Modelle für eine effiziente Inferenz auf IMX500-basierten Kameras bereitzustellen. Durch die Nutzung fortschrittlicher Quantisierungstechniken kannst du die Modellgröße reduzieren und die Inferenzgeschwindigkeit verbessern, ohne die Genauigkeit maßgeblich zu beeinträchtigen.

Weitere Informationen und detaillierte 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 default

    Der Exportvorgang erstellt ein Verzeichnis mit den für die Bereitstellung erforderlichen Dateien, einschließlich packerOut.zip.

  • Das IMX500-Format bietet verschiedene wichtige Vorteile für die Edge-Bereitstellung:

    • On-Chip-KI-Verarbeitung reduziert Latenz und Stromverbrauch
    • Gibt sowohl Bilder als auch Metadaten (Inferenzergebnis) aus, anstatt nur Bilder
    • Erhöhte Privatsphäre durch lokale Datenverarbeitung ohne Cloud-Abhängigkeit
    • Echtzeit-Verarbeitungsfähigkeiten ideal für zeitkritische Anwendungen
    • Optimierte Quantisierung für effiziente Modellbereitstellung auf ressourcenbeschränkten Geräten
  • 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 auf der Raspberry Pi AI Camera:

    • YOLO11n erreicht 58,82 ms Inferenzzeit 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 Echtzeit-Inferenz bietet und gleichzeitig eine gute Genauigkeit für Edge-KI-Anwendungen beibehält.

Kommentare