Link to this sectionEsportazione Sony IMX500 per Ultralytics YOLO11#
Questa guida copre l'esportazione e la distribuzione di modelli Ultralytics YOLO11 su Raspberry Pi AI Camera dotate di sensore Sony IMX500.
Distribuire modelli di computer vision su dispositivi con potenza di calcolo limitata, come la Raspberry Pi AI Camera, può essere complesso. Utilizzare un formato di modello ottimizzato per prestazioni più elevate fa un'enorme differenza.
Il formato del modello IMX500 è progettato per utilizzare un consumo energetico minimo, offrendo al contempo prestazioni veloci per le reti neurali. Ti consente di ottimizzare i tuoi modelli Ultralytics YOLO11 per un'inferenza ad alta velocità e basso consumo energetico. In questa guida, ti guideremo attraverso l'esportazione e la distribuzione dei tuoi modelli nel formato IMX500, facilitando al contempo il raggiungimento di ottime prestazioni sulla Raspberry Pi AI Camera.
Link to this sectionPerché dovresti esportare in IMX500?#
Il sensore di visione intelligente IMX500 di Sony è un componente hardware rivoluzionario nell'elaborazione edge AI. È il primo sensore di visione intelligente al mondo con funzionalità 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 delle prestazioni. 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.
Link to this sectionEsportazione Sony IMX500 per modelli YOLO11#
L'IMX500 è progettato per trasformare il modo in cui i dispositivi gestiscono i dati direttamente sul sensore, senza la necessità di inviarli 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 in locale, 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 principali di IMX500:
- Output dei metadati: Invece di trasmettere solo immagini, l'IMX500 può inviare sia immagini che metadati (risultati dell'inferenza), e può inviare solo metadati per ridurre al minimo la dimensione dei dati, diminuire la larghezza di banda e abbassare i costi.
- Gestione delle preoccupazioni sulla privacy: Elaborando i dati sul dispositivo, l'IMX500 affronta le preoccupazioni sulla privacy, rendendolo ideale per applicazioni incentrate sulle persone come il conteggio delle persone e il monitoraggio dell'occupazione.
- Elaborazione in tempo reale: L'elaborazione rapida 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, la Guida alla preparazione dei dati e la Guida alla regolazione degli iperparametri.
Link to this sectionAttività supportate#
Al momento, puoi esportare nel formato IMX500 solo i modelli che includono le seguenti attività.
L'esportazione IMX è progettata e testata per YOLOv8n e YOLO11n (nano). Altre architetture e scale di modello non sono supportate.
Link to this sectionEsempi di Utilizzo#
Esporta un modello Ultralytics YOLO11 nel formato IMX500 ed esegui l'inferenza con il modello esportato.
Il formato IMX500 supporta le modalità Esportazione, Predizione e Validazione. L'inferenza e la validazione vengono eseguite sulla Raspberry Pi AI Camera (IMX500).
Qui eseguiamo l'inferenza solo per assicurarci che il modello funzioni come previsto. Tuttavia, per la distribuzione e l'inferenza sulla Raspberry Pi AI Camera, ti preghiamo di passare alla sezione Utilizzo dell'esportazione IMX500 nella distribuzione.
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") 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") 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) 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") 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")Il pacchetto Ultralytics installa dipendenze di esportazione aggiuntive in fase di runtime. La prima volta che esegui il comando di esportazione, potresti dover riavviare la tua console per assicurarti che funzioni correttamente.
Link to this sectionArgomenti 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 | Desired image size for the model input. Can be an integer for square images or a tuple (height, width) for specific dimensions. |
int8 | bool | True | Attiva la quantizzazione INT8, comprimendo ulteriormente il modello e accelerando l'inferenza con una perdita di precisione minima, principalmente per dispositivi edge. |
data | str | 'coco8.yaml' | Percorso al file di configurazione del dataset (predefinito: coco8.yaml), essenziale per la quantizzazione. |
fraction | float | 1.0 | Specifica la frazione del dataset da utilizzare per la calibrazione della quantizzazione INT8. Consente la calibrazione su un sottoinsieme del dataset completo, utile per esperimenti o quando le risorse sono limitate. Se non specificato con INT8 abilitato, verrà utilizzato il dataset completo. |
nms | bool | False | Aggiunge la soppressione dei non massimi (NMS) al modello esportato. Quando True, vengono accettati anche conf, iou e agnostic_nms. |
device | str | None | Specifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu). |
Se stai esportando su una GPU con supporto CUDA, ti preghiamo di passare l'argomento device=0 per un'esportazione più rapida.
Per ulteriori dettagli sul processo di esportazione, visita la pagina della documentazione di Ultralytics 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, essenziale per impacchettare il modello per la distribuzione 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.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtLink to this sectionUtilizzo dell'esportazione IMX500 nella distribuzione#
Dopo aver esportato il modello Ultralytics YOLO11n nel formato IMX500, questo può essere distribuito sulla Raspberry Pi AI Camera per l'inferenza.
Link to this sectionPrerequisiti hardware#
Assicurati di avere l'hardware seguente:
- Raspberry Pi 5 o Raspberry Pi 4 Model B
- 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.
Link to this sectionPrerequisiti software#
Questa guida è stata testata con Raspberry Pi OS Bookworm in esecuzione 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-upgradePassaggio 2: Installa il firmware IMX500 necessario per far funzionare il sensore IMX500.
sudo apt install imx500-allPassaggio 3: Riavvia il Raspberry Pi affinché le modifiche abbiano effetto.
sudo rebootPassaggio 4: Installa la libreria del modulo applicativo Aitrios Raspberry Pi.
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitPassaggio 5: Esegui il rilevamento oggetti, la stima della posa, la classificazione e la segmentazione di YOLO11 utilizzando gli script seguenti disponibili negli esempi della libreria del modulo applicativo aitrios-rpi.
Assicurati di sostituire le directory model_file e labels.txt in base al tuo ambiente prima di eseguire questi script.
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()Link to this sectionBenchmark#
I benchmark di YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls e YOLO11n-cls riportati di seguito sono stati eseguiti dal team Ultralytics sulla Raspberry Pi AI Camera con il formato del modello imx, misurandone velocità e precisione.
| Modello | Formato | Dimensioni (pixel) | Dimensione di packerOut.zip (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| Modello | Formato | Dimensioni (pixel) | Dimensione di packerOut.zip (MB) | acc (top1) | acc (top5) | Tempo di inferenza (ms/im) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
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 il dataset ImageNet10 per i modelli di classificazione.
Link to this sectionCosa c'è sotto il cofano?#
Link to this sectionSony Model Compression Toolkit (MCT)#
Il Model Compression Toolkit (MCT) di Sony è un potente strumento per ottimizzare i modelli di deep learning tramite quantizzazione e potatura (pruning). Supporta vari metodi di quantizzazione e fornisce algoritmi avanzati per ridurre la dimensione del modello e la complessità computazionale senza sacrificare significativamente la precisione. MCT è particolarmente utile per distribuire modelli su dispositivi con risorse limitate, garantendo un'inferenza efficiente e una latenza ridotta.
Link to this sectionFunzionalità supportate di MCT#
L'MCT di Sony offre una gamma di funzionalità progettate per ottimizzare i modelli di rete neurale:
- Ottimizzazioni del grafo: Trasforma i modelli in versioni più efficienti ripiegando strati come la normalizzazione batch negli strati precedenti.
- Ricerca dei parametri di quantizzazione: Riduce al minimo il rumore di quantizzazione utilizzando metriche come l'errore quadratico medio (Mean-Square-Error), il No-Clipping e l'errore medio assoluto (Mean-Average-Error).
- Algoritmi di quantizzazione avanzati:
- Correzione dello spostamento negativo (Shift Negative Correction): Risolve i problemi di prestazioni derivanti dalla quantizzazione dell'attivazione simmetrica.
- Filtro degli outlier: Utilizza il punteggio z per rilevare e rimuovere gli outlier.
- Clustering: Utilizza griglie di quantizzazione non uniformi per una migliore corrispondenza della distribuzione.
- Ricerca a precisione mista (Mixed-Precision Search): Assegna diverse larghezze di bit di quantizzazione per strato in base alla sensibilità.
- Visualizzazione: Utilizza TensorBoard per osservare gli insight sulle prestazioni del modello, le fasi di quantizzazione e le configurazioni della larghezza di bit.
Link to this sectionQuantizzazione#
MCT supporta diversi metodi di quantizzazione per ridurre le dimensioni del modello e migliorare la velocità di inferenza:
- Quantizzazione post-addestramento (PTQ):
- Disponibile tramite le API di Keras e PyTorch.
- Complessità: Bassa
- Costo computazionale: Basso (minuti CPU)
- Quantizzazione post-addestramento basata sul gradiente (GPTQ):
- Disponibile tramite le API di Keras e PyTorch.
- Complessità: Media
- Costo computazionale: Moderato (2-3 ore GPU)
- Addestramento consapevole della quantizzazione (QAT):
- Complessità: Alta
- Costo computazionale: Alto (12-36 ore GPU)
MCT supporta anche vari schemi di quantizzazione per pesi e attivazioni:
- Potenza di due (ottimizzato per l'hardware)
- Simmetrica
- Uniforme
Link to this sectionPruning strutturato#
MCT introduce il pruning del modello strutturato e consapevole dell'hardware, progettato per specifiche architetture hardware. Questa tecnica sfrutta le capacità Single Instruction, Multiple Data (SIMD) della piattaforma di destinazione tramite il pruning di gruppi SIMD. Ciò riduce le dimensioni e la complessità del modello ottimizzando al contempo l'utilizzo dei canali, allineandosi con l'architettura SIMD per un utilizzo mirato delle risorse di memoria dei pesi. Disponibile tramite API Keras e PyTorch.
Link to this sectionStrumento di conversione IMX500 (Compilatore)#
Lo strumento di conversione IMX500 è parte integrante del set di strumenti IMX500 e consente la compilazione di modelli per il deployment sul sensore IMX500 di Sony (ad esempio, le Raspberry Pi AI Cameras). Questo strumento facilita la transizione dei modelli Ultralytics YOLO11 elaborati tramite il software Ultralytics, garantendo che siano compatibili e funzionino in modo efficiente sull'hardware specificato. La procedura di esportazione che segue la quantizzazione del modello comporta la generazione di file binari che racchiudono dati essenziali e configurazioni specifiche del dispositivo, snellendo il processo di deployment sulla Raspberry Pi AI Camera.
Link to this sectionCasi d'uso nel mondo reale#
L'esportazione nel formato IMX500 ha un'ampia applicabilità in tutti i 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: Utilizza i modelli YOLO11 esportati per 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 nei sistemi di punto vendita o negli scaffali intelligenti.
Link to this sectionConclusione#
L'esportazione dei 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 in modo significativo la precisione.
Per ulteriori informazioni e linee guida dettagliate, fai riferimento al sito web IMX500 di Sony.
Link to this sectionFAQ#
Link to this sectionCome posso esportare un modello YOLO11 nel formato IMX500 per Raspberry Pi AI Camera?#
Per esportare un modello YOLO11 nel formato IMX500, utilizza l'API Python o il comando CLI:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.export(format="imx") # Exports with PTQ quantization by defaultIl processo di esportazione creerà una directory contenente i file necessari per il deployment, incluso packerOut.zip.
Link to this sectionQuali 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
- Produce sia immagini che metadati (risultato dell'inferenza) invece delle sole immagini
- Maggiore privacy 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
Link to this sectionQuali prerequisiti hardware e software sono necessari per il deployment di 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)
Link to this sectionQuali prestazioni posso aspettarmi dai modelli YOLO11 su IMX500?#
Basato sui benchmark di Ultralytics su Raspberry Pi AI Camera:
- YOLO11n ottiene 58,82 ms di tempo di inferenza per immagine
- mAP50-95 di 0,517 sul dataset COCO128
- Dimensioni del modello di soli 2,2 MB dopo la quantizzazione
Ciò dimostra che il formato IMX500 fornisce un'inferenza in tempo reale efficiente mantenendo una buona precisione per le applicazioni di Edge AI.