Skip to main content

Esportazione Sony IMX500 per Ultralytics YOLO11

Questa guida copre l'esportazione e il deployment di modelli Ultralytics YOLO11 su Raspberry Pi AI Camera dotate di sensore Sony IMX500.

Il deployment di modelli di computer vision su dispositivi con potenza computazionale limitata, come Raspberry Pi AI Camera, può essere complesso. Utilizzare un formato di modello ottimizzato per prestazioni più veloci fa una grande differenza.

Il formato di modello IMX500 è progettato per consumare pochissima energia offrendo prestazioni rapide per le reti neurali. Ti consente di ottimizzare i tuoi Ultralytics YOLO11 modelli per un'inferenza ad alta velocità e basso consumo. In questa guida, ti accompagneremo nell'esportazione e nel deployment dei tuoi modelli nel formato IMX500, facilitando le prestazioni dei tuoi modelli sulla Raspberry Pi AI Camera.

Raspberry Pi AI Camera with Sony IMX500 sensor

Perché dovresti esportare in IMX500?

Il sensore IMX500 Intelligent Vision Sensor di Sony è un componente hardware rivoluzionario nell'edge AI. È il primo sensore di visione intelligente al mondo con capacità AI on-chip. Questo sensore aiuta a superare molte sfide nell'edge AI, inclusi i colli di bottiglia nell'elaborazione dei dati, le preoccupazioni sulla privacy e le limitazioni prestazionali. Mentre altri sensori si limitano a trasmettere immagini e fotogrammi, l'IMX500 racconta una storia completa. Elabora i dati direttamente sul sensore, consentendo ai dispositivi di generare insight in tempo reale.

Esportazione Sony IMX500 per modelli YOLO11

L'IMX500 è progettato per trasformare il modo in cui i dispositivi gestiscono i dati direttamente sul sensore, senza doverli inviare al cloud per l'elaborazione.

L'IMX500 funziona con modelli quantizzati. La quantizzazione rende i modelli più piccoli e veloci senza perdere molta precisione. È ideale per le risorse limitate dell'edge computing, consentendo alle applicazioni di rispondere rapidamente riducendo la latenza e permettendo un'elaborazione rapida dei dati localmente, senza dipendenza dal cloud. L'elaborazione locale mantiene anche i dati dell'utente privati e sicuri poiché non vengono inviati a un server remoto.

Caratteristiche chiave dell'IMX500:

  • Output di metadati: Invece di trasmettere solo immagini, l'IMX500 può fornire sia l'immagine che i metadati (risultato dell'inferenza), e può trasmettere solo i metadati per ridurre le dimensioni dei dati, ridurre la larghezza di banda e abbattere i costi.
  • Affronta le preoccupazioni sulla privacy: Elaborando i dati sul dispositivo, l'IMX500 affronta le preoccupazioni sulla privacy, ideale per applicazioni incentrate sulle persone come il conteggio delle persone e il monitoraggio dell'occupazione.
  • Elaborazione in tempo reale: L'elaborazione veloce on-sensor supporta decisioni in tempo reale, perfetta per applicazioni edge AI come i sistemi autonomi.

Prima di iniziare: Per ottenere i migliori risultati, assicurati che il tuo modello YOLO11 sia ben preparato per l'esportazione seguendo la nostra Guida all'addestramento del modello, Guida alla preparazione dei dati, e Guida alla regolazione degli iperparametri.

Attività supportate

Attualmente, puoi esportare nel formato IMX500 solo i modelli che includono i seguenti task.

Varianti di modello supportate

L'esportazione IMX è progettata e testata per YOLOv8n e YOLO11n (nano). Altre architetture e scale di modelli non sono supportate.

Esempi di utilizzo

Esporta un modello Ultralytics YOLO11 nel formato IMX500 ed esegui l'inferenza con il modello esportato.

Nota

Qui eseguiamo l'inferenza solo per assicurarci che il modello funzioni come previsto. Tuttavia, per il deployment e l'inferenza sulla Raspberry Pi AI Camera, passa a Utilizzo dell'esportazione IMX500 nel deploymentargomenti di inferenza

Object Detection
 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")
Classificazione
 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)
Segmentazione delle istanze
 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")
Avviso

Il pacchetto Ultralytics installa dipendenze di esportazione aggiuntive al runtime. La prima volta che esegui il comando di esportazione, potresti dover riavviare la console per assicurarti che funzioni correttamente.

Argomenti di esportazione

ArgomentoTipoPredefinitoDescrizione
formatstr'imx'Formato di destinazione per il modello esportato, definendo la compatibilità con vari ambienti di distribuzione.
imgszint o tuple640Dimensione dell'immagine desiderata per l'input del modello. Può essere un intero per immagini quadrate o una tupla(height, width) per dimensioni specifiche.
int8boolTrueAttiva la quantizzazione INT8, comprimendo ulteriormente il modello e accelerando l'inferenza con una perdita minima di precisione loss, principalmente per dispositivi edge.
datastr'coco8.yaml'Percorso verso il file di configurazione del dataset file di configurazione (predefinito: coco8.yaml), essenziale per la quantizzazione.
fractionfloat1.0Specifica la frazione del dataset da utilizzare per la calibrazione della quantizzazione INT8. Consente di calibrare su un sottoinsieme del dataset completo, utile per esperimenti o quando le risorse sono limitate. Se non specificato con INT8 abilitato, verrà utilizzato l'intero dataset.
nmsboolFalseAggiunge la Non-Maximum Suppression (NMS) al modello esportato. Quando True, conf, iou, e agnostic_nms sono anch'essi accettati.
devicestrNoneSpecifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu).
Suggerimento

Se stai esportando su una GPU con supporto CUDA, passa l'argomento device=0 per un'esportazione più rapida.

Per maggiori dettagli sul processo di esportazione, visita il pagina della documentazione di Ultralytics sull'esportazione.

Il processo di esportazione creerà un modello ONNX per la validazione della quantizzazione, insieme a una directory chiamata <model-name>_imx_model. Questa directory includerà il file packerOut.zip, essenziale per impacchettare il modello per il deployment sull'hardware IMX500. Inoltre, la cartella <model-name>_imx_model conterrà un file di testo (labels.txt) che elenca tutte le etichette associate al modello.

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

Utilizzo dell'esportazione IMX500 nel deployment

Dopo aver esportato il modello Ultralytics YOLO11n nel formato IMX500, può essere implementato su Raspberry Pi AI Camera per l'inferenza.

Prerequisiti hardware

Assicurati di avere l'hardware sottostante:

  1. Raspberry Pi 5 o Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

Collega la Raspberry Pi AI camera al connettore MIPI CSI a 15 pin sul Raspberry Pi e accendi il Raspberry Pi

Prerequisiti software

Nota

Questa guida è stata testata con Raspberry Pi OS Bookworm su un Raspberry Pi 5

Passaggio 1: Apri una finestra di terminale ed esegui i seguenti comandi per aggiornare il software del Raspberry Pi all'ultima versione.

sudo apt update && sudo apt full-upgrade

Passaggio 2: Installa il firmware IMX500 richiesto per far funzionare il sensore IMX500.

sudo apt install imx500-all

Passaggio 3: Riavvia Raspberry Pi affinché le modifiche abbiano effetto

sudo reboot

Passaggio 4: Installa Aitrios Raspberry Pi application module library

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

Passaggio 5: Esegui il rilevamento oggetti, la stima della posa, la classificazione e la segmentazione YOLO11 utilizzando gli script sottostanti disponibili in aitrios-rpi-application-module-library examples.

Nota

Assicurati di sostituire le directory model_file e labels.txt in base al tuo ambiente prima di eseguire questi script.

Script Python
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()

Benchmark

I benchmark YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls e YOLO11n-cls sottostanti sono stati eseguiti dal team Ultralytics su Raspberry Pi AI Camera con formato di modello imx misurando velocità e accuratezza.

ModelloFormatoDimensioni (pixel)Dimensioni di packerOut.zip (MB)mAP50-95(B)Tempo di inferenza (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
ModelloFormatoDimensioni (pixel)Dimensioni di packerOut.zip (MB)acc (top1)acc (top5)Tempo di inferenza (ms/im)
YOLOv8n-clsimx2242,30.250.533.31
YOLO11n-clsimx2242,30.250.41733.31
Nota

La validazione per i benchmark sopra indicati è stata effettuata utilizzando il dataset COCO128 per i modelli di rilevamento, il dataset COCO8-Pose per i modelli di stima della posa e ImageNet10 per i modelli di classificazione.

Cosa c'è sotto il cofano?

Sony IMX500 YOLO model deployment workflow

Sony Model Compression Toolkit (MCT)

Sony's Model Compression Toolkit (MCT) è un potente strumento per ottimizzare i modelli di deep learning tramite quantizzazione e potatura. Supporta vari metodi di quantizzazione e fornisce algoritmi avanzati per ridurre la dimensione del modello e la complessità computazionale senza sacrificare significativamente l'accuratezza. MCT è particolarmente utile per il deployment di modelli su dispositivi con risorse limitate, garantendo un'inferenza efficiente e una latenza ridotta.

Funzionalità supportate di MCT

L'MCT di Sony offre una gamma di funzionalità progettate per ottimizzare i modelli di reti neurali:

  1. Ottimizzazioni dei grafi: Trasforma i modelli in versioni più efficienti ripiegando layer come la normalizzazione batch in layer precedenti.
  2. Ricerca dei parametri di quantizzazione: Minimizza il rumore di quantizzazione utilizzando metriche come Mean-Square-Error, No-Clipping e Mean-Average-Error.
  3. Algoritmi di quantizzazione avanzati:
    • Correzione dello shift negativo: Risolve i problemi di prestazioni derivanti dalla quantizzazione simmetrica dell'attivazione.
    • Filtraggio degli outlier: Utilizza lo z-score per rilevare e rimuovere gli outlier.
    • Clustering: Utilizza griglie di quantizzazione non uniformi per una migliore corrispondenza della distribuzione.
    • Ricerca a precisione mista: Assegna diverse ampiezze di bit di quantizzazione per livello in base alla sensibilità.
  4. Visualizzazione: Usa TensorBoard per osservare gli insight sulle prestazioni del modello, le fasi di quantizzazione e le configurazioni dell'ampiezza di bit.

Quantizzazione

MCT supporta diversi metodi di quantizzazione per ridurre le dimensioni del modello e migliorare la velocità di inferenza:

  1. Quantizzazione post-addestramento (PTQ):
    • Disponibile tramite API Keras e PyTorch.
    • Complessità: Bassa
    • Costo computazionale: Basso (minuti di CPU)
  2. Quantizzazione post-addestramento basata su gradiente (GPTQ):
    • Disponibile tramite API Keras e PyTorch.
    • Complessità: Media
    • Costo computazionale: Moderato (2-3 ore di GPU)
  3. Addestramento consapevole della quantizzazione (QAT):
    • Complessità: Alta
    • Costo computazionale: Alto (12-36 ore di GPU)

MCT supporta anche vari schemi di quantizzazione per pesi e attivazioni:

  1. Power-of-Two (ottimizzato per l'hardware)
  2. Simmetrico
  3. Uniforme

Pruning strutturato

MCT introduce un pruning del modello strutturato e consapevole dell'hardware, progettato per specifiche architetture hardware. Questa tecnica sfrutta le capacità SIMD (Single Instruction, Multiple Data) della piattaforma target eseguendo il pruning dei gruppi SIMD. Ciò riduce la dimensione e la complessità del modello ottimizzando al contempo l'utilizzo dei canali, allineandosi all'architettura SIMD per un utilizzo mirato delle risorse del footprint di memoria dei pesi. Disponibile tramite API Keras e PyTorch.

Strumento di conversione IMX500 (Compilatore)

L'IMX500 Converter Tool è parte integrante del set di strumenti IMX500 e consente la compilazione di modelli per il deployment sul sensore IMX500 di Sony (ad esempio, Raspberry Pi AI Cameras). Questo strumento facilita la transizione dei modelli Ultralytics YOLO11 elaborati tramite il software Ultralytics, garantendo che siano compatibili e che funzionino in modo efficiente sull'hardware specificato. La procedura di esportazione successiva alla quantizzazione del modello prevede la generazione di file binari che racchiudono dati essenziali e configurazioni specifiche del dispositivo, semplificando il processo di deployment sulla Raspberry Pi AI Camera.

Casi d'uso nel mondo reale

L'esportazione nel formato IMX500 ha un'ampia applicabilità in vari settori. Ecco alcuni esempi:

  • Edge AI e IoT: Abilita il rilevamento di oggetti su droni o telecamere di sicurezza, dove l'elaborazione in tempo reale su dispositivi a basso consumo è essenziale.
  • Dispositivi indossabili: Esegui il deployment di modelli ottimizzati per l'elaborazione AI su piccola scala su dispositivi indossabili per il monitoraggio della salute.
  • Smart Cities: Usa i modelli YOLO11 esportati in IMX500 per il monitoraggio del traffico e l'analisi della sicurezza con un'elaborazione più rapida e una latenza minima.
  • Retail Analytics: Migliora il monitoraggio in negozio eseguendo il deployment di modelli ottimizzati in sistemi di punto vendita o scaffali intelligenti.

Conclusione

Esportare i modelli Ultralytics YOLO11 nel formato IMX500 di Sony ti consente di eseguire il deployment dei tuoi modelli per un'inferenza efficiente su telecamere basate su IMX500. Sfruttando tecniche di quantizzazione avanzate, puoi ridurre le dimensioni del modello e migliorare la velocità di inferenza senza compromettere significativamente l'accuratezza.

Per maggiori informazioni e linee guida dettagliate, consulta il sito web IMX500.

FAQ

Come esporto un modello YOLO11 nel formato IMX500 per Raspberry Pi AI Camera?

Per esportare un modello YOLO11 nel formato IMX500, usa l'API Python o il comando CLI:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.export(format="imx")  # Exports with PTQ quantization by default

Il processo di esportazione creerà una directory contenente i file necessari per il deployment, inclusi packerOut.zip.

Quali sono i principali vantaggi dell'utilizzo del formato IMX500 per il deployment di edge AI?

Il formato IMX500 offre diversi vantaggi importanti per il deployment edge:

  • L'elaborazione AI on-chip riduce la latenza e il consumo energetico
  • Restituisce sia immagini che metadati (risultato dell'inferenza) invece di sole immagini
  • Privacy migliorata elaborando i dati localmente senza dipendenza dal cloud
  • Capacità di elaborazione in tempo reale ideali per applicazioni sensibili al fattore tempo
  • Quantizzazione ottimizzata per un efficiente deployment del modello su dispositivi con risorse limitate

Quali prerequisiti hardware e software sono necessari per il deployment su IMX500?

Per il deployment di modelli IMX500, avrai bisogno di:

Hardware:

  • Raspberry Pi 5 o Raspberry Pi 4 Model B
  • Raspberry Pi AI Camera con sensore IMX500

Software:

  • Raspberry Pi OS Bookworm
  • Firmware e strumenti IMX500 (sudo apt install imx500-all)

Che prestazioni posso aspettarmi dai modelli YOLO11 su IMX500?

Basato sui benchmark di Ultralytics su Raspberry Pi AI Camera:

  • YOLO11n ottiene un tempo di inferenza di 62,50ms per immagine
  • mAP50-95 di 0,492 sul dataset COCO128
  • Dimensione del modello di soli 3,2MB dopo la quantizzazione

Ciò dimostra che il formato IMX500 fornisce un'inferenza in tempo reale efficiente mantenendo una buona accuratezza per le applicazioni di edge AI.

Commenti