Vai al contenuto

Sony IMX500 Esportazione per Ultralytics YOLOv8

Questa guida tratta l'esportazione e la distribuzione dei modelli di Ultralytics YOLOv8 nelle fotocamere AI Raspberry Pi con sensore Sony IMX500.

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.

Il formato del modello IMX500 è stato progettato per consumare pochissima energia e offrire al contempo prestazioni elevate per le reti neurali. Consente di ottimizzare i modelli Ultralytics YOLOv8 modelli per un inferencing ad alta velocità e a basso consumo. In questa guida vi spiegheremo come esportare e distribuire i vostri modelli nel formato IMX500, facilitando le prestazioni dei vostri modelli sulla 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.

Esportazione dell'IMX500 di Sony per i modelli YOLOv8

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.

Prima di iniziare: Per ottenere risultati ottimali, assicuratevi che il vostro modello YOLOv8 sia ben preparato per l'esportazione seguendo la nostra Guida all'addestramento del modello, la Guida alla preparazione dei dati e la Guida alla regolazione degli iperparametri.

Esempi di utilizzo

Esportare un modello Ultralytics YOLOv8 in formato IMX500 ed eseguire l'inferenza con il modello esportato.

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 YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model
model.export(format="imx")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolov8n_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolov8n.pt format=imx

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

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.

yolov8n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolov8n_imx.onnx
├── yolov8n_imx500_model_MemoryReport.json
└── yolov8n_imx500_model.pbtxt

Argomenti

Quando si esporta un modello in formato IMX500, è possibile specificare vari argomenti:

Chiave Valore Descrizione
format imx Formato in cui esportare (imx)
int8 True Abilita la quantizzazione INT8 per il modello (valore predefinito): True)
imgsz 640 Dimensione dell'immagine per l'input del modello (default: 640)

Utilizzo dell'esportazione IMX500 nella distribuzione

Dopo aver esportato il modello Ultralytics YOLOv8n in formato IMX500, è possibile distribuirlo alla telecamera AI di Raspberry Pi per l'inferenza.

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 <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 -b next https://github.com/raspberrypi/picamera2
cd picamera2
pip install -e .  --break-system-packages
cd examples/imx500

Fase 3: Eseguire il rilevamento degli oggetti YOLOv8 , utilizzando il file labels.txt generato durante l'esportazione di IMX500.

python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --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 I benchmark riportati di seguito sono stati eseguiti dal team di Ultralytics su Raspberry Pi AI Camera con imx formato modello che misura velocità e precisione.

Modello Formato Stato Dimensione (MB) mAP50-95(B) Tempo di inferenza (ms/im)
YOLOv8n imx 2.9 0.522 66.66

Nota

La validazione per il benchmark di cui sopra è stata effettuata utilizzando il dataset coco8.

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)

Lo strumento IMX500 Converter è parte integrante del set di strumenti IMX500 e consente la compilazione di modelli per la distribuzione sul sensore IMX500 di Sony (ad esempio, telecamere AI Raspberry Pi). Questo strumento facilita la transizione dei modelli Ultralytics YOLOv8 elaborati attraverso il software Ultralytics , assicurando 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 incapsulano i dati essenziali e le configurazioni specifiche del dispositivo, semplificando il processo di distribuzione sulla fotocamera Raspberry Pi AI.

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.
  • Città intelligenti: Utilizzate i modelli YOLOv8 esportati da IMX500 per il monitoraggio del traffico e l'analisi della sicurezza con un'elaborazione più rapida e una latenza minima.
  • 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

L'esportazione dei modelli Ultralytics YOLOv8 nel formato IMX500 di Sony consente di distribuire i modelli per un'inferenza efficiente su telecamere basate su IMX500. Sfruttando tecniche di quantizzazione avanzate, è possibile ridurre le dimensioni del modello e migliorare la velocità di inferenza senza compromettere in modo significativo la precisione.

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

FAQ

Come si esporta un modello YOLOv8 in formato IMX500 per la telecamera AI di Raspberry Pi?

Per esportare un modello YOLOv8 in formato IMX500, usare l'API Python o il comando CLI :

from ultralytics import YOLO

model = YOLO("yolov8n.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)

Quali prestazioni posso aspettarmi dai modelli YOLOv8 su IMX500?

Basato sui benchmark di Ultralytics su Raspberry Pi AI Camera:

  • YOLOv8n raggiunge un tempo di inferenza di 66,66 ms per immagine
  • 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 <output folder>
    
  2. Clonare e installare picamera2:

    git clone -b next 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 25 --bbox-normalization --labels <path to labels.txt>
    
📅C reato 1 mese fa ✏️ Aggiornato 10 giorni fa

Commenti