Vai al contenuto

Sony IMX500 Export for Ultralytics YOLO11

This guide covers exporting and deploying Ultralytics YOLO11 models to Raspberry Pi AI Cameras that feature the Sony IMX500 sensor.

L'implementazione di modelli di computer vision su dispositivi con potenza di calcolo limitata, come la Raspberry Pi AI Camera, può essere complicata. L'uso di un formato di modello ottimizzato per prestazioni più veloci fa un'enorme differenza.

The IMX500 model format is designed to use minimal power while delivering fast performance for neural networks. It allows you to optimize your Ultralytics YOLO11 models for high-speed and low-power inferencing. In this guide, we'll walk you through exporting and deploying your models to the IMX500 format while making it easier for your models to perform well on the Raspberry Pi AI Camera.

Raspberry Pi AI Camera

Perché esportare in IMX500

Il sensore di visione intelligente IMX500 di Sony è un hardware innovativo per l'elaborazione dell'intelligenza artificiale. È il primo sensore di visione intelligente al mondo con funzionalità AI on-chip. Questo sensore aiuta a superare molte sfide dell'IA edge, tra cui i colli di bottiglia dell'elaborazione dei dati, i problemi di privacy e le limitazioni delle prestazioni.
Mentre altri sensori si limitano a trasmettere immagini e fotogrammi, l'IMX500 racconta un'intera storia. Elabora i dati direttamente sul sensore, consentendo ai dispositivi di generare approfondimenti in tempo reale.

Sony's IMX500 Export for YOLO11 Models

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 più veloci senza perdere in precisione. È ideale per le risorse limitate dell'edge computing, in quanto consente alle applicazioni di rispondere rapidamente riducendo la latenza e permettendo una rapida elaborazione dei dati a livello locale, senza dipendere dal cloud. L'elaborazione locale mantiene inoltre i dati dell'utente privati e sicuri, poiché non vengono inviati a un server remoto.

IMX500 Caratteristiche principali:

  • Uscita di metadati: Invece di trasmettere solo immagini, l'IMX500 può emettere sia immagini che metadati (risultati dell'inferenza) e può emettere solo metadati per ridurre al minimo le dimensioni dei dati, la larghezza di banda e i costi.
  • Risponde ai problemi di privacy: Elaborando i dati sul dispositivo, l'IMX500 risolve i problemi di privacy, ideale per le applicazioni incentrate sulle persone, come il conteggio delle persone e il monitoraggio degli occupanti.
  • Elaborazione in tempo reale: L'elaborazione rapida e on-sensor supporta decisioni in tempo reale, perfette per le applicazioni di intelligenza artificiale di frontiera come i sistemi autonomi.

Before You Begin: For best results, ensure your YOLO11 model is well-prepared for export by following our Model Training Guide, Data Preparation Guide, and Hyperparameter Tuning Guide.

Esempi di utilizzo

Export an Ultralytics YOLO11 model to IMX500 format and run inference with the exported model.

Nota

Qui eseguiamo l'inferenza solo per assicurarci che il modello funzioni come previsto. Tuttavia, per la distribuzione e l'inferenza sulla telecamera AI di Raspberry Pi, si prega di passare alla sezione Utilizzo dell'esportazione IMX500 nella sezione Distribuzione.

Esempio

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")
# Export a YOLO11n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n.pt format=imx data=coco8.yaml

# Run inference with the exported model
yolo predict model=yolo11n_imx_model source='https://ultralytics.com/images/bus.jpg'

Avvertenze

The Ultralytics package installs additional export dependencies at runtime. The first time you run the export command, you may need to restart your console to ensure it works correctly.

Argomenti di esportazione

Argomento Tipo Predefinito Descrizione
format str 'imx' Formato di destinazione per il modello esportato, che definisce la compatibilità con vari ambienti di distribuzione.
imgsz int o tuple 640 Dimensione desiderata dell'immagine per l'input del modello. Può essere un numero intero per le immagini quadrate o una tupla (height, width) per le dimensioni specifiche.
int8 bool True Attiva la quantizzazione INT8, comprimendo ulteriormente il modello e velocizzando l'inferenza con una perdita minima di precisione, soprattutto per i dispositivi edge.
data str 'coco8.yaml' Percorso verso il set di dati file di configurazione (predefinito: coco8.yaml), essenziale per la quantizzazione.
fraction float 1.0 Specifica la frazione del set di dati da utilizzare per la calibrazione della quantizzazione INT8. Consente di calibrare su un sottoinsieme dell'intero set di dati, utile per gli esperimenti o quando le risorse sono limitate. Se non viene specificato con INT8 abilitato, verrà utilizzato l'intero set di dati.
device str None Specifica il dispositivo da esportare: GPU (device=0), CPU (device=cpu).

Suggerimento

Se si esporta su una GPU con supporto CUDA , passare l'argomento device=0 per un'esportazione più rapida.

Per maggiori dettagli sul processo di esportazione, visitare la pagina di documentazioneUltralytics sull'esportazione.

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

yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n_imx.onnx
├── yolo11n_imx500_model_MemoryReport.json
└── yolo11n_imx500_model.pbtxt

Utilizzo dell'esportazione IMX500 nella distribuzione

After exporting Ultralytics YOLO11n model to IMX500 format, it can be deployed to Raspberry Pi AI Camera for inference.

Prerequisiti hardware

Assicurarsi di disporre dell'hardware indicato di seguito:

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

Collegare la telecamera Raspberry Pi AI al connettore MIPI CSI a 15 pin di Raspberry Pi e accendere Raspberry Pi.

Prerequisiti del software

Nota

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

Fase 1: aprire una finestra di terminale ed eseguire i seguenti comandi per aggiornare il software del Raspberry Pi alla versione più recente.

sudo apt update && sudo apt full-upgrade

Fase 2: installare il firmware IMX500, necessario per il funzionamento del sensore IMX500, insieme allo strumento packager.

sudo apt install imx500-all imx500-tools

Passo 3: Installare i prerequisiti per l'esecuzione picamera2 applicazione. Questa applicazione verrà utilizzata in seguito per il processo di distribuzione.

sudo apt install python3-opencv python3-munkres

Passo 4: Riavviare il Raspberry Pi per rendere effettive le modifiche

sudo reboot

Pacchetto del modello e distribuzione alla telecamera AI

Dopo aver ottenuto packerOut.zip dal processo di conversione IMX500, è possibile passare questo file allo strumento packager per ottenere un file RPK. Questo file può quindi essere distribuito direttamente alla telecamera AI usando picamera2.

Fase 1: confezionamento del modello in un file RPK

imx500-package -i path/to/packerOut.zip -o path/to/output/folder

Quanto sopra genererà un file network.rpk all'interno della cartella di output specificata.

Passo 2: clonazione picamera2 installarlo e navigare verso gli esempi di imx500

git clone https://github.com/raspberrypi/picamera2
cd picamera2
pip install -e . --break-system-packages
cd examples/imx500

Step 3: Run YOLO11 object detection, using the labels.txt file that has been generated during the IMX500 export.

python imx500_object_detection_demo.py --model path/to/network.rpk --fps 17 --bbox-normalization --ignore-dash-labels --bbox-order xy --labels path/to/labels.txt

Sarà quindi possibile vedere l'output dell'inferenza in tempo reale come segue

Inferenza sulla telecamera AI di Raspberry Pi

Parametri di riferimento

YOLOv8 and YOLO11n benchmarks below were run by the Ultralytics team on Raspberry Pi AI Camera with imx formato modello che misura velocità e precisione.

Modello Formato Stato Size of RPK (MB) mAP50-95(B) Tempo di inferenza (ms/im)
YOLOv8n imx 3.1 0.602 58.82
YOLO11n imx 3.2 0.644 62.50

Nota

Validation for the above benchmark was done using coco8 dataset on a Raspberry Pi 5

Cosa c'è sotto il cappuccio?

Implementazione di IMX500

Toolkit di compressione dei modelli (MCT) di Sony

Model Compression Toolkit (MCT) di Sony è un potente strumento per ottimizzare i modelli di deep learning attraverso la quantizzazione e il pruning. Supporta diversi metodi di quantizzazione e fornisce algoritmi avanzati per ridurre le dimensioni del modello e la complessità computazionale senza sacrificare significativamente la precisione. MCT è particolarmente utile per distribuire i modelli su dispositivi con risorse limitate, garantendo un'inferenza efficiente e una latenza ridotta.

Caratteristiche supportate di MCT

MCT di Sony offre una serie di funzioni progettate per ottimizzare i modelli di rete neurale:

  1. Ottimizzazioni grafiche: Trasforma i modelli in versioni più efficienti ripiegando livelli come la normalizzazione dei lotti in livelli 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 negativa dello spostamento: Risolve i problemi di prestazioni dovuti alla quantizzazione simmetrica dell'attivazione.
    • Filtraggio dei valori anomali: Utilizza lo z-score per individuare e rimuovere gli outlier.
    • Raggruppamento: Utilizza griglie di quantizzazione non uniformi per una migliore corrispondenza della distribuzione.
    • Ricerca a precisione mista: Assegna diverse larghezze di bit di quantizzazione per strato in base alla sensibilità.
  4. Visualizzazione: Utilizzare TensorBoard per osservare le prestazioni del modello, le fasi di quantizzazione e le configurazioni della larghezza di bit.

Quantizzazione

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

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

MCT supporta anche diversi schemi di quantizzazione per i pesi e le attivazioni:

  1. Potenza di due (compatibile con l'hardware)
  2. Simmetrico
  3. Uniforme

Potatura strutturata

MCT introduce un model pruning strutturato e consapevole dell'hardware, progettato per architetture hardware specifiche. Questa tecnica sfrutta le capacità SIMD (Single Instruction, Multiple Data) della piattaforma di destinazione potando i gruppi SIMD. In questo modo si riducono le dimensioni e la complessità del modello, ottimizzando al contempo l'utilizzo dei canali, in linea con l'architettura SIMD per un utilizzo mirato delle risorse dell'impronta di memoria dei pesi. Disponibile tramite le API di Keras e PyTorch .

Strumento convertitore IMX500 (compilatore)

The IMX500 Converter Tool is integral to the IMX500 toolset, allowing the compilation of models for deployment on Sony's IMX500 sensor (for instance, Raspberry Pi AI Cameras). This tool facilitates the transition of Ultralytics YOLO11 models processed through Ultralytics software, ensuring they are compatible and perform efficiently on the specified hardware. The export procedure following model quantization involves the generation of binary files that encapsulate essential data and device-specific configurations, streamlining the deployment process on the Raspberry Pi AI Camera.

Casi d'uso nel mondo reale

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

  • Edge AI e IoT: Rilevamento di oggetti su droni o telecamere di sicurezza, dove è essenziale l'elaborazione in tempo reale su dispositivi a basso consumo.
  • Dispositivi indossabili: Implementare modelli ottimizzati per l'elaborazione dell'intelligenza artificiale su piccola scala su dispositivi indossabili per il monitoraggio della salute.
  • Smart Cities: Use IMX500-exported YOLO11 models for traffic monitoring and safety analysis with faster processing and minimal latency.
  • Analitica del commercio al dettaglio: Migliorare il monitoraggio all'interno del punto vendita implementando modelli ottimizzati nei sistemi dei punti vendita o negli scaffali intelligenti.

Conclusione

Exporting Ultralytics YOLO11 models to Sony's IMX500 format allows you to deploy your models for efficient inference on IMX500-based cameras. By leveraging advanced quantization techniques, you can reduce model size and improve inference speed without significantly compromising accuracy.

Per ulteriori informazioni e linee guida dettagliate, consultare il sito web IMX500 di Sony.

FAQ

How do I export a YOLO11 model to IMX500 format for Raspberry Pi AI Camera?

To export a YOLO11 model to IMX500 format, use either the Python API or CLI command:

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 la distribuzione, tra cui packerOut.zip che può essere utilizzato con lo strumento IMX500 packager su Raspberry Pi.

Quali sono i vantaggi principali dell'utilizzo del formato IMX500 per l'implementazione dell'intelligenza artificiale in ambito edge?

Il formato IMX500 offre diversi vantaggi importanti per l'implementazione edge:

  • L'elaborazione AI on-chip riduce la latenza e il consumo energetico
  • Emette sia l'immagine che i metadati (risultato dell'inferenza) invece che solo le immagini
  • Maggiore privacy grazie all'elaborazione dei dati in locale senza dipendere dal cloud
  • Funzionalità di elaborazione in tempo reale ideali per applicazioni sensibili al fattore tempo
  • Quantizzazione ottimizzata per un'efficiente distribuzione dei modelli su dispositivi a risorse limitate

Quali sono i prerequisiti hardware e software necessari per l'implementazione di IMX500?

Per distribuire i modelli IMX500, è necessario:

Hardware:

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

Software:

  • Il topo di biblioteca del sistema operativo Raspberry Pi
  • Firmware e strumenti IMX500 (sudo apt install imx500-all imx500-tools)
  • Python pacchetti per picamera2 (sudo apt install python3-opencv python3-munkres)

What performance can I expect from YOLO11 models on the IMX500?

Basato sui benchmark di Ultralytics su Raspberry Pi AI Camera:

  • YOLO11n achieves 58.82ms inference time per image
  • mAP50-95 di 0,522 sul set di dati COCO8
  • Dimensioni del modello di soli 2,9 MB dopo la quantizzazione

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

Come si impacchetta e si distribuisce il modello esportato alla telecamera AI di Raspberry Pi?

Dopo l'esportazione in formato IMX500:

  1. Utilizzare lo strumento packager per creare un file RPK:

    imx500-package -i path/to/packerOut.zip -o path/to/output/folder
    
  2. Clonare e installare picamera2:

    git clone https://github.com/raspberrypi/picamera2
    cd picamera2 && pip install -e . --break-system-packages
    
  3. Eseguire l'inferenza utilizzando il file RPK generato:

    python imx500_object_detection_demo.py --model path/to/network.rpk --fps 17 --bbox-normalization --labels path/to/labels.txt
    
📅C reato 5 mesi fa ✏️ Aggiornato 8 giorni fa

Commenti