Sony IMX500-Export für Ultralytics YOLO11

Dieser Leitfaden behandelt das Exportieren und Bereitstellen von Ultralytics YOLO11-Modellen auf Raspberry Pi AI Cameras, die mit dem Sony IMX500-Sensor ausgestattet sind.

Die Bereitstellung von Computer-Vision-Modellen auf Geräten mit begrenzter Rechenleistung, wie der Raspberry Pi AI Camera, kann schwierig sein. Die Verwendung eines für schnellere Leistung optimierten Modellformats macht einen riesigen Unterschied.

Das IMX500-Modellformat ist darauf ausgelegt, minimalen Stromverbrauch bei gleichzeitig schneller Performance für neuronale Netze zu bieten. Es ermöglicht dir, deine Ultralytics YOLO11-Modelle für High-Speed- und Low-Power-Inferenz zu optimieren. In diesem Leitfaden führen wir dich durch den Export und die Bereitstellung deiner Modelle im IMX500-Format und erleichtern es deinen Modellen, auf der Raspberry Pi AI Camera optimal zu funktionieren.

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 in der Edge AI-Verarbeitung. Er ist der weltweit erste intelligente Bildsensor mit On-Chip-KI-Funktionen. Dieser Sensor hilft, viele Herausforderungen bei der Edge AI zu überwinden, einschließlich Datenverarbeitungsengpässen, Datenschutzbedenken und Leistungsbeschränkungen. Während andere Sensoren lediglich Bilder und Frames weiterleiten, erzählt der IMX500 eine ganze Geschichte. Er verarbeitet Daten direkt auf dem Sensor, was es Geräten ermöglicht, Erkenntnisse in Echtzeit zu generieren.

Sony 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 für die Verarbeitung in die Cloud senden zu müssen.

Der IMX500 arbeitet mit quantisierten Modellen. Quantisierung macht Modelle kleiner und schneller, ohne dabei viel Genauigkeit einzubüßen. Dies ist ideal für die begrenzten Ressourcen des Edge Computings und ermöglicht Anwendungen eine schnelle Reaktion durch reduzierte Latenz sowie eine zügige lokale Datenverarbeitung ohne Cloud-Abhängigkeit. Die lokale Verarbeitung hält Nutzerdaten zudem privat und sicher, da sie nicht an einen entfernten Server gesendet werden.

IMX500 Hauptmerkmale:

  • Metadatenausgabe: Anstatt nur Bilder zu übertragen, kann der IMX500 sowohl Bilder als auch Metadaten (Inferenzergebnis) ausgeben oder zur Minimierung der Datengröße, Reduzierung der Bandbreite und Kostensenkung nur Metadaten ausgeben.
  • Adressiert Datenschutzbedenken: Durch die Verarbeitung von Daten auf dem Gerät adressiert der IMX500 Datenschutzbedenken, was ideal für menschenzentrierte Anwendungen wie Personenzählung und Belegungserkennung ist.
  • Echtzeitverarbeitung: Die schnelle Verarbeitung auf dem Sensor unterstützt Echtzeitentscheidungen, perfekt für Edge AI-Anwendungen wie autonome Systeme.

Bevor du beginnst: Um beste Ergebnisse zu erzielen, stelle sicher, dass dein YOLO11-Modell für den Export gut vorbereitet ist, indem du unseren Modell-Trainingsleitfaden, Datenvorbereitungsleitfaden und Leitfaden zur Hyperparameter-Optimierung befolgst.

Unterstützte Aufgaben

Aktuell kannst du nur Modelle in das IMX500-Format exportieren, die die folgenden Aufgaben beinhalten.

Unterstützte Modellvarianten

Der IMX-Export wurde für YOLOv8n und YOLO11n (nano) entwickelt und gebenchmarkt. Andere Architekturen und Modellskalierungen werden nicht unterstützt.

Anwendungsbeispiele

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

Hinweis

Hier führen wir eine Inferenz durch, nur um sicherzustellen, dass das Modell wie erwartet funktioniert. Für die Bereitstellung und Inferenz auf der Raspberry Pi AI Camera springe bitte jedoch zum Abschnitt Verwendung 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")
Warnung

Das Ultralytics-Paket installiert zur Laufzeit zusätzliche Export-Abhängigkeiten. Wenn du den Exportbefehl zum ersten Mal ausführst, musst du möglicherweise 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 den Modelleingang. Kann eine Ganzzahl für quadratische Bilder oder ein Tupel (height, width) für spezifische Dimensionen sein.
int8boolTrueAktiviert die INT8-Quantisierung, die das Modell weiter komprimiert und die Inferenz mit minimalem Verlust an accuracy beschleunigt, hauptsächlich für Edge-Geräte.
datastr'coco8.yaml'Pfad zur Konfigurationsdatei für das Datenset (Standard: coco8.yaml), essenziell für die Quantisierung.
fractionfloat1.0Gibt den Anteil des Datensatzes an, der für die INT8-Quantisierungskalibrierung verwendet werden soll. Ermöglicht die Kalibrierung auf einer Teilmenge des gesamten Datensatzes, was für Experimente oder bei begrenzten Ressourcen nützlich ist. Wenn bei aktivierter INT8-Option nichts angegeben ist, wird der gesamte Datensatz verwendet.
nmsboolFalseFügt Non-Maximum Suppression (NMS) zum exportierten Modell hinzu. Wenn True, werden auch conf, iou und agnostic_nms akzeptiert.
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, übergebe bitte das Argument device=0 für einen schnelleren Export.

Weitere Details zum Exportprozess 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 das Paketieren des Modells zur Bereitstellung auf der IMX500-Hardware unerlässlich ist. Zusätzlich enthält der Ordner <model-name>_imx_model eine Textdatei (labels.txt), die alle dem Modell zugeordneten Labels auflistet.

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

Nachdem das Ultralytics YOLO11n-Modell in das IMX500-Format exportiert wurde, 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 am 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 die Aitrios Raspberry Pi application module library.

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

Schritt 5: Führe die YOLO11-Objekterkennung, Pose-Schätzung, Klassifizierung und Segmentierung unter Verwendung der folgenden Skripte aus, die in den aitrios-rpi-application-module-library examples verfügbar sind.

Hinweis

Stelle sicher, dass du die Verzeichnisse model_file und labels.txt gemäß deiner Umgebung ersetzt, bevor du diese Skripte ausführst.

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 DPS 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 unten stehenden 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 imx-Modellformat durchgefü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)acc (top1)acc (top5)Inferenzzeit (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
Hinweis

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

Was steckt unter der Haube?

Sony IMX500 YOLO model deployment workflow

Sony Model Compression Toolkit (MCT)

Sonys Model Compression Toolkit (MCT) ist ein leistungsstarkes Werkzeug 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 wesentlich zu beeinträchtigen. MCT ist besonders nützlich für die Bereitstellung von Modellen auf ressourcenbeschränkten Geräten und sorgt für eine effiziente Inferenz und reduzierte Latenz.

Unterstützte Funktionen von MCT

Sonys MCT bietet eine Reihe von Funktionen, die für die Optimierung neuronaler Netzwerkmodelle entwickelt wurden:

  1. Graph-Optimierungen: Transformiert Modelle in effizientere Versionen, indem Layer wie Batch Normalization in vorherige Layer 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: Behebt Leistungsprobleme durch symmetrische Aktivierungsquantisierung.
    • Outliers Filtering: Verwendet den Z-Score, um Ausreißer zu erkennen und zu entfernen.
    • Clustering: Nutzt ungleichmäßige Quantisierungsgitter für eine bessere Verteilungsanpassung.
    • Suche nach gemischter Präzision: Weist verschiedenen Layern basierend auf ihrer Sensitivität unterschiedliche Quantisierungs-Bitbreiten zu.
  4. Visualisierung: Verwende TensorBoard, um Erkenntnisse zur Modellleistung, Quantisierungsphasen und Bitbreitenkonfigurationen zu beobachten.

Quantisierung

MCT unterstützt mehrere 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. Uniform

Strukturiertes Pruning

MCT führt strukturiertes, hardwarebewusstes Modell-Pruning ein, das für spezifische Hardwarearchitekturen entwickelt wurde. Diese Technik nutzt die SIMD-Fähigkeiten (Single Instruction, Multiple Data) der Zielplattform durch das Beschneiden von SIMD-Gruppen. Dies reduziert die Modellgröße und Komplexität bei gleichzeitiger Optimierung der Kanalauslastung, angepasst an 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 ein wesentlicher Bestandteil des IMX500-Toolsets und ermöglicht die Kompilierung von Modellen für die Bereitstellung auf Sonys IMX500-Sensor (z. B. Raspberry Pi AI Cameras). Dieses Tool erleichtert die Überführung von Ultralytics YOLO11-Modellen, die mit der Ultralytics-Software verarbeitet wurden, und stellt sicher, dass sie kompatibel sind und effizient auf der angegebenen Hardware funktionieren. Das Exportverfahren nach der Modellquantisierung beinhaltet die Erzeugung von Binärdateien, die wesentliche Daten und gerätespezifische Konfigurationen enthalten, wodurch der Bereitstellungsprozess auf der Raspberry Pi AI Camera optimiert wird.

Anwendungsfälle aus der Praxis

Der Export in das IMX500-Format hat eine breite Anwendbarkeit in verschiedenen Branchen. Hier sind einige Beispiele:

  • Edge AI und IoT: Ermöglicht Objekterkennung auf Drohnen oder Überwachungskameras, bei denen eine Echtzeitverarbeitung auf stromsparenden Geräten unerlässlich ist.
  • Tragbare Geräte (Wearables): Bereitstellung von Modellen, die für kleine KI-Verarbeitungen auf Wearables zur Gesundheitsüberwachung optimiert sind.
  • Smart Cities: Nutze IMX500-exportierte YOLO11-Modelle für die Verkehrsüberwachung und Sicherheitsanalyse mit schnellerer Verarbeitung und minimaler Latenz.
  • Einzelhandelsanalytik: Optimiere die Ladenüberwachung durch den Einsatz optimierter Modelle in Kassensystemen oder intelligenten Regalen.

Fazit

Das Exportieren von Ultralytics YOLO11-Modellen in das Sony IMX500-Format 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 wesentlich zu beeinträchtigen.

Weitere Informationen und detaillierte Richtlinien findest du auf Sonys IMX500-Website.

FAQ

Wie exportiere ich ein YOLO11-Modell in das IMX500-Format für die Raspberry Pi AI Camera?

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 Exportprozess erstellt ein Verzeichnis mit den notwendigen Dateien für die Bereitstellung, einschließlich packerOut.zip.

Was sind die Hauptvorteile der Verwendung des IMX500-Formats für die Edge AI-Bereitstellung?

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

  • On-Chip-KI-Verarbeitung reduziert Latenz und Stromverbrauch
  • Ausgabe von Bild und Metadaten (Inferenzergebnis) statt nur Bildern
  • Erhöhter Datenschutz durch lokale Datenverarbeitung ohne Cloud-Abhängigkeit
  • Echtzeit-Verarbeitungsfähigkeiten, ideal für zeitkritische Anwendungen
  • Optimierte Quantisierung für eine effiziente Modellbereitstellung auf ressourcenbeschränkten Geräten

Welche Hardware- und Softwarevoraussetzungen sind für die IMX500-Bereitstellung erforderlich?

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)

Welche Leistung kann ich von YOLO11-Modellen auf dem IMX500 erwarten?

Basierend auf Ultralytics Benchmarks auf der Raspberry Pi AI Camera:

  • YOLO11n erreicht 62,50 ms Inferenzzeit pro Bild
  • mAP50-95 von 0,492 auf dem COCO128-Datensatz
  • Modellgröße von nur 3,2 MB nach der Quantisierung

Dies zeigt, dass das IMX500-Format eine effiziente Echtzeit-Inferenz bietet und gleichzeitig eine gute Genauigkeit für Edge AI-Anwendungen beibehält.

Kommentare