Esportazione di Sony IMX500 per Ultralytics YOLO11#
Questa guida illustra come esportare e distribuire i modelli Ultralytics YOLO11 sulle fotocamere Raspberry Pi AI Camera dotate di sensore Sony IMX500.
Distribuire modelli di visione artificiale su dispositivi con potenza di calcolo limitata, come Raspberry Pi AI Camera, può essere complicato. L'uso di un formato di modello ottimizzato per prestazioni più rapide fa una grande differenza.
Il formato del modello IMX500 è progettato per ridurre al minimo il consumo energetico e offrire prestazioni elevate per le reti neurali. Ti consente di ottimizzare i modelli Ultralytics YOLO11 per inferenze rapide e a basso consumo. In questa guida vedremo come esportare e distribuire i tuoi modelli in formato IMX500, facilitandone l'esecuzione efficiente su Raspberry Pi AI Camera.
Perché esportare in formato IMX500?#
Il sensore di visione intelligente IMX500 di Sony è una novità rivoluzionaria nell'elaborazione di IA edge. È il primo sensore di visione intelligente al mondo dotato di funzionalità IA integrate nel chip. Questo sensore aiuta a superare molte sfide dell'IA edge, tra cui i colli di bottiglia nell'elaborazione dei dati, i problemi di privacy e i limiti di prestazioni. Mentre gli 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 informazioni utili in tempo reale.
Esportazione di Sony IMX500 per i modelli YOLO11#
IMX500 è progettato per trasformare il modo in cui i dispositivi gestiscono i dati direttamente sul sensore, senza doverli inviare al cloud per l'elaborazione.
IMX500 è compatibile con i modelli quantizzati. La quantizzazione riduce le dimensioni e aumenta la velocità dei modelli senza compromettere in modo significativo la precisione. È ideale per le risorse limitate dell'edge computing: consente alle applicazioni di rispondere rapidamente riducendo la latenza e permettendo l'elaborazione locale e rapida dei dati, senza dipendere dal cloud. L'elaborazione locale protegge inoltre la privacy e la sicurezza dei dati degli utenti, poiché non vengono inviati a un server remoto.
Funzionalità principali di IMX500:
- Output dei metadati: Invece di trasmettere soltanto immagini, IMX500 può fornire sia le immagini sia i metadati (risultati dell'inferenza), oppure soltanto i metadati per ridurre al minimo la quantità di dati, il consumo di banda e i costi.
- Tutela della privacy: Elaborando i dati sul dispositivo, IMX500 affronta i problemi di privacy ed è ideale per applicazioni incentrate sulle persone, come il conteggio delle persone e il monitoraggio dell'occupazione degli spazi.
- Elaborazione in tempo reale: L'elaborazione rapida direttamente sul sensore permette di prendere decisioni in tempo reale ed è perfetta per applicazioni di IA edge come i sistemi autonomi.
Prima di iniziare: Per ottenere i risultati migliori, assicurati che il modello YOLO11 sia pronto per l'esportazione seguendo la nostra guida all'addestramento dei modelli, la guida alla preparazione dei dati e la guida all'ottimizzazione degli iperparametri.
Attività supportate#
L'esportazione IMX500 supporta quattro dei sette task Ultralytics, esclusivamente per YOLOv8n e YOLO11n: le altre famiglie di modelli, dimensioni e architetture non sono supportate; inoltre, l'esportazione di un modello di segmentazione semantica, OBB o stima della profondità genera un errore.
| Attività | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Rilevamento | ✅ | ✅ | ❌ |
| Segmentazione | ✅ | ✅ | ❌ |
| Semantica | ❌ | ❌ | ❌ |
| Profondità | ❌ | ❌ | ❌ |
| Classificazione | ✅ | ✅ | ❌ |
| Stima della posa | ✅ | ✅ | ❌ |
| OBB | ❌ | ❌ | ❌ |
Esempi d'uso#
Esporta un modello Ultralytics YOLO11 in formato IMX500 ed esegui l'inferenza con il modello esportato.
Il formato IMX500 supporta le modalità Esportazione, Predizione e Convalida. L'inferenza e la convalida vengono eseguite su Raspberry Pi AI Camera (IMX500).
Qui eseguiamo l'inferenza solo per verificare che il modello funzioni come previsto. Per la distribuzione e l'inferenza su Raspberry Pi AI Camera, passa invece alla sezione Usare l'esportazione IMX500 nella distribuzione.
from ultralytics import YOLO
# Carica un modello YOLO11n PyTorch
model = YOLO("yolo11n.pt")
# Esporta il modello
model.export(format="imx", data="coco8.yaml") # esporta con la quantizzazione PTQ per impostazione predefinita
# Carica il modello esportato
imx_model = YOLO("yolo11n_imx_model")
# Esegui l'inferenza
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Carica un modello YOLO11n-pose PyTorch
model = YOLO("yolo11n-pose.pt")
# Esporta il modello
model.export(format="imx", data="coco8-pose.yaml") # esporta con la quantizzazione PTQ per impostazione predefinita
# Carica il modello esportato
imx_model = YOLO("yolo11n-pose_imx_model")
# Esegui l'inferenza
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Carica un modello YOLO11n-cls PyTorch
model = YOLO("yolo11n-cls.pt")
# Esporta il modello
model.export(format="imx", data="imagenet10") # esporta con la quantizzazione PTQ per impostazione predefinita
# Carica il modello esportato
imx_model = YOLO("yolo11n-cls_imx_model")
# Esegui l'inferenza
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)from ultralytics import YOLO
# Carica un modello YOLO11n-seg PyTorch
model = YOLO("yolo11n-seg.pt")
# Esporta il modello
model.export(format="imx", data="coco8-seg.yaml") # esporta con la quantizzazione PTQ per impostazione predefinita
# Carica il modello esportato
imx_model = YOLO("yolo11n-seg_imx_model")
# Esegui l'inferenza
results = imx_model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Carica il modello IMX500 esportato
model = YOLO("yolo11n_imx_model")
# # Convalida l'accuratezza sul dataset COCO8
metrics = model.val(data="coco8.yaml")L'esportazione IMX è supportata solo su Linux con Python 3.9 o versioni successive e richiede Java 17 o versioni successive. Il pacchetto Ultralytics installa ulteriori dipendenze per l'esportazione durante l'esecuzione. La prima volta che esegui il comando di esportazione, potrebbe essere necessario riavviare la console per assicurarti che funzioni correttamente.
Argomenti di esportazione#
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
format | str | 'imx' | Formato di destinazione del modello esportato, che definisce la compatibilità con i vari ambienti di distribuzione. |
imgsz | int o tuple | 640 | Dimensione dell'immagine desiderata per l'input del modello. Può essere un intero per immagini quadrate o una tupla (height, width) per dimensioni specifiche. |
quantize | int o str | 8/auto | Precisione della quantizzazione. 8 (INT8/PTQ) è obbligatorio e viene abilitato automaticamente per IMX500. L'esportazione solo in FP32 e FP16 non è supportata. Sostituisce i flag deprecati half/int8. |
data | str | None | Percorso al file YAML del dataset, indispensabile per la quantizzazione; per la classificazione, invece, è necessario specificare una directory del dataset o il nome di un dataset integrato. Se non lo specifichi, Ultralytics seleziona il dataset di calibrazione predefinito per il task del modello. |
fraction | float, int o list | 1.0 | Sottoinsieme di calibrazione espresso come rapporto, numero di immagini o rapporti/conteggi [train, val, test]. Gli elenchi di due elementi lasciano completo test, mentre 0 lo esclude. |
nms | bool, facoltativo | None | Seleziona l'output grezzo (None, predefinito), NMS integrato (True) oppure la testa senza NMS (False). IMX richiede nms=True per detect, segment e pose e lo seleziona automaticamente. |
device | str | None | Specifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu). |
Se esegui l'esportazione su una GPU con supporto CUDA, passa l'argomento device=0 per velocizzare l'esportazione.
Per ulteriori dettagli sul processo di esportazione, visita la pagina della documentazione Ultralytics dedicata all'esportazione.
Il processo di esportazione crea un modello ONNX per la convalida della quantizzazione e una directory chiamata <model-name>_imx_model. Questa directory include il file packerOut.zip, indispensabile per preparare il modello alla distribuzione sull'hardware IMX500. Inoltre, la cartella <model-name>_imx_model contiene un file di testo (labels.txt) con l'elenco di tutte le etichette associate al modello.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtUsare l'esportazione IMX500 nella distribuzione#
Dopo aver esportato il modello Ultralytics YOLO11n in formato IMX500, puoi distribuirlo su Raspberry Pi AI Camera per l'inferenza.
Requisiti hardware#
Assicurati di disporre del seguente hardware:
- Raspberry Pi 5 o Raspberry Pi 4 Model B
- Videocamera Raspberry Pi AI
Collega la fotocamera Raspberry Pi AI Camera al connettore MIPI CSI a 15 pin del Raspberry Pi, quindi accendi il Raspberry Pi
Requisiti software#
Questa guida è stata testata con Raspberry Pi OS Bookworm su un Raspberry Pi 5
Passaggio 1: apri una finestra del terminale ed esegui i seguenti comandi per aggiornare il software Raspberry Pi alla versione più recente.
sudo apt update && sudo apt full-upgradePassaggio 2: installa il firmware IMX500 necessario per utilizzare il sensore IMX500.
sudo apt install imx500-allPassaggio 3: riavvia Raspberry Pi affinché le modifiche abbiano effetto
sudo rebootPassaggio 4: installa la libreria del modulo applicativo Aitrios per Raspberry Pi
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitPassaggio 5: esegui il rilevamento di oggetti, la stima della posa, la classificazione e la segmentazione YOLO11 utilizzando gli script seguenti, disponibili negli esempi della libreria del modulo applicativo aitrios-rpi.
Prima di eseguire questi script, assicurati di sostituire le directory model_file e labels.txt in base al tuo ambiente.
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()Benchmark#
I benchmark riportati di seguito per YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls e YOLO11n-cls sono stati eseguiti dal team Ultralytics su Raspberry Pi AI Camera con il formato del modello imx, misurando velocità e precisione.
| Modello | Formato | Dimensioni (pixel) | Dimensioni 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) | Dimensioni 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 convalida dei benchmark riportati sopra è stata eseguita con 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 succede sotto il cofano?#
Toolkit di compressione dei modelli Sony (MCT)#
Toolkit di compressione dei modelli di Sony (MCT) è uno strumento potente per ottimizzare i modelli di deep learning tramite quantizzazione e pruning. Supporta diversi metodi di quantizzazione e offre algoritmi avanzati per ridurre le dimensioni e la complessità computazionale dei modelli senza comprometterne significativamente la precisione. MCT è particolarmente utile per distribuire modelli su dispositivi con risorse limitate, garantendo inferenze efficienti e latenza ridotta.
Funzionalità supportate di MCT#
MCT di Sony offre una serie di funzionalità progettate per ottimizzare i modelli di reti neurali:
- Ottimizzazioni del grafo: trasforma i modelli in versioni più efficienti, incorporando nei livelli precedenti livelli come quelli di normalizzazione del batch.
- Ricerca dei parametri di quantizzazione: riduce al minimo il rumore di quantizzazione usando metriche come l'errore quadratico medio, l'assenza di clipping e l'errore medio assoluto.
- Algoritmi avanzati di quantizzazione:
- Correzione degli shift negativi: risolve i problemi di prestazioni derivanti dalla quantizzazione simmetrica delle attivazioni.
- Filtraggio dei valori anomali: usa lo z-score per rilevare e rimuovere i valori anomali.
- Clustering: usa griglie di quantizzazione non uniformi per adattarsi meglio alla distribuzione.
- Ricerca a precisione mista: assegna a ogni livello una diversa larghezza di bit per la quantizzazione in base alla sensibilità.
- Visualizzazione: usa TensorBoard per esaminare informazioni sulle 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 dei modelli e migliorare la velocità di inferenza:
- Quantizzazione post-addestramento (PTQ):
- Disponibile tramite le API Keras e PyTorch.
- Complessità: bassa
- Costo computazionale: basso (minuti di CPU)
- Quantizzazione post-addestramento basata sul gradiente (GPTQ):
- Disponibile tramite le API Keras e PyTorch.
- Complessità: media
- Costo computazionale: moderato (2-3 ore di GPU)
- Addestramento consapevole della quantizzazione (QAT):
- Complessità: alta
- Costo computazionale: elevato (12-36 ore di GPU)
MCT supporta inoltre diversi schemi di quantizzazione per pesi e attivazioni:
- Potenza di due (adatta all'hardware)
- Simmetrica
- Uniforme
Pruning strutturato#
MCT introduce il pruning strutturato dei modelli, consapevole dell'hardware e progettato per architetture hardware specifiche. Questa tecnica sfrutta le funzionalità SIMD (istruzione singola, dati multipli) della piattaforma di destinazione applicando il pruning ai gruppi SIMD. Ciò riduce le dimensioni e la complessità del modello, ottimizzando al contempo l'utilizzo dei canali, in linea con l'architettura SIMD, per indirizzare l'utilizzo delle risorse e l'ingombro in memoria dei pesi. Disponibile tramite le API Keras e PyTorch.
Strumento di conversione IMX500 (compilatore)#
Lo strumento di conversione IMX500 è una parte essenziale del set di strumenti IMX500 e consente di compilare modelli da distribuire sul sensore IMX500 di Sony (ad esempio, sulle fotocamere AI per Raspberry Pi). Questo strumento facilita la transizione dei modelli Ultralytics YOLO11 elaborati tramite il software Ultralytics, garantendone la compatibilità e prestazioni efficienti sull'hardware specificato. La procedura di esportazione successiva alla quantizzazione del modello genera file binari che contengono dati essenziali e configurazioni specifiche del dispositivo, semplificando la distribuzione sulla fotocamera AI per Raspberry Pi.
Casi d’uso nel mondo reale#
L'esportazione nel formato IMX500 è applicabile in molti settori. Ecco alcuni esempi:
- AI edge e IoT: abilita il rilevamento degli oggetti su droni o telecamere di sicurezza, dove è essenziale elaborare i dati in tempo reale su dispositivi a basso consumo.
- Dispositivi indossabili: distribuisci modelli ottimizzati per l'elaborazione AI su piccola scala su dispositivi indossabili per il monitoraggio della salute.
- Città intelligenti: usa i modelli YOLO11 esportati in IMX500 per il monitoraggio del traffico e l'analisi della sicurezza, con elaborazione più rapida e latenza minima.
- Analisi per il commercio al dettaglio: migliora il monitoraggio in negozio distribuendo modelli ottimizzati nei sistemi di pagamento o sugli scaffali intelligenti.
Conclusione#
Esportare i modelli Ultralytics YOLO11 nel formato IMX500 di Sony ti consente di distribuirli per eseguire inferenze in modo efficiente sulle telecamere basate su IMX500. Sfruttando tecniche di quantizzazione avanzate, puoi ridurre le dimensioni dei modelli e migliorare la velocità di inferenza senza comprometterne significativamente la precisione.
Per ulteriori informazioni e indicazioni dettagliate, consulta il sito web IMX500 di Sony.
Domande frequenti#
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") # Esporta con quantizzazione PTQ per impostazione predefinitaIl processo di esportazione creerà una directory contenente i file necessari per la distribuzione, incluso
packerOut.zip.Il formato IMX500 offre diversi importanti vantaggi per la distribuzione edge:
- L'elaborazione AI sul chip riduce la latenza e il consumo energetico
- Fornisce sia l'immagine sia i metadati (risultato dell'inferenza), anziché solo le immagini
- Maggiore privacy grazie all'elaborazione locale dei dati, senza dipendere dal cloud
- Capacità di elaborazione in tempo reale, ideali per le applicazioni sensibili ai tempi
- Quantizzazione ottimizzata per distribuire i modelli in modo efficiente su dispositivi con risorse limitate
Per distribuire modelli IMX500, ti serviranno:
Hardware:
- Raspberry Pi 5 o Raspberry Pi 4 Model B
- Fotocamera AI per Raspberry Pi con sensore IMX500
Software:
- Raspberry Pi OS Bookworm
- Firmware e strumenti IMX500 (
sudo apt install imx500-all)
In base ai benchmark di Ultralytics sulla fotocamera AI per Raspberry Pi:
- YOLO11n raggiunge un tempo di inferenza di 58.82ms per immagine
- mAP50-95 pari a 0.517 sul dataset COCO128
- Dimensioni del modello di soli 2.2MB dopo la quantizzazione
Questo dimostra che il formato IMX500 consente inferenze efficienti in tempo reale, mantenendo una buona precisione per le applicazioni di AI edge.