Guida rapida: Raspberry Pi con Ultralytics YOLOv8
Questa guida completa fornisce una guida dettagliata per l'implementazione di Ultralytics YOLOv8 sui dispositivi Raspberry Pi. Inoltre, mostra i benchmark delle prestazioni per dimostrare le capacità di YOLOv8 su questi piccoli e potenti dispositivi.
Guarda: Aggiornamenti e miglioramenti del Raspberry Pi 5.
Nota
Questa guida è stata testata con Raspberry Pi 4 e Raspberry Pi 5 con l'ultima versione di Raspberry Pi OS Bookworm (Debian 12). L'utilizzo di questa guida per dispositivi Raspberry Pi più vecchi, come il Raspberry Pi 3, dovrebbe funzionare a patto che sia installato lo stesso Raspberry Pi OS Bookworm.
Che cos'è Raspberry Pi?
Raspberry Pi è un computer a scheda singola piccolo e conveniente. È diventato popolare per un'ampia gamma di progetti e applicazioni, dall'automazione domestica per gli hobbisti agli usi industriali. Le schede Raspberry Pi sono in grado di eseguire una varietà di sistemi operativi e offrono pin GPIO (General Purpose Input/Output) che consentono una facile integrazione con sensori, attuatori e altri componenti hardware. Sono disponibili in diversi modelli con specifiche diverse, ma tutti condividono la stessa filosofia di progettazione di base: basso costo, compattezza e versatilità.
Confronto tra le serie Raspberry Pi
Raspberry Pi 3 | Raspberry Pi 4 | Raspberry Pi 5 | |
---|---|---|---|
CPU | Broadcom BCM2837, SoC Cortex-A53 64Bit | Broadcom BCM2711, SoC Cortex-A72 a 64 bit | Broadcom BCM2712, SoC Cortex-A76 a 64 bit |
CPU Frequenza massima | 1.4GHz | 1.8GHz | 2.4GHz |
GPU | Videocore IV | Videocore VI | VideoCore VII |
GPU Frequenza massima | 400Mhz | 500Mhz | 800Mhz |
Memoria | 1GB LPDDR2 SDRAM | SDRAM DA 1GB, 2GB, 4GB, 8GB LPDDR4-3200 | 4GB, 8GB DI SDRAM LPDDR4X-4267 |
PCIe | N/D | N/D | Interfaccia 1xPCIe 2.0 |
Potenza massima assorbita | 2,5A@5V | 3A@5V | 5A@5V (PD abilitato) |
Che cos'è il sistema operativo Raspberry Pi?
Raspberry Pi OS (precedentemente noto come Raspbian) è un sistema operativo di tipo Unix basato sulla distribuzione Debian GNU/Linux per la famiglia di computer single-board compatti Raspberry Pi distribuiti dalla Raspberry Pi Foundation. Raspberry Pi OS è altamente ottimizzato per il Raspberry Pi con CPU ARM e utilizza un ambiente desktop LXDE modificato con il gestore di finestre Openbox. Raspberry Pi OS è in fase di sviluppo attivo, con particolare attenzione al miglioramento della stabilità e delle prestazioni del maggior numero possibile di pacchetti Debian su Raspberry Pi.
Flash Raspberry Pi OS su Raspberry Pi
La prima cosa da fare dopo aver messo le mani su Raspberry Pi è flashare una scheda micro-SD con Raspberry Pi OS, inserirla nel dispositivo e avviare il sistema operativo. Segui la dettagliata documentazione introduttiva di Raspberry Pi per preparare il dispositivo al primo utilizzo.
Configurazione Ultralytics
Esistono due modi per configurare il pacchetto Ultralytics su Raspberry Pi per realizzare il tuo prossimo progetto di Computer Vision. Puoi utilizzare uno dei due.
Iniziare con Docker
Il modo più veloce per iniziare a utilizzare Ultralytics YOLOv8 su Raspberry Pi è quello di eseguire un'immagine docker precostituita per Raspberry Pi.
Esegui il comando seguente per estrarre il contenitore Docker ed eseguirlo su Raspberry Pi. Questo è basato sull'immagine docker arm64v8/debian che contiene Debian 12 (Bookworm) in un ambiente Python3.
Fatto questo, passa alla sezione Utilizzare NCNN su Raspberry Pi.
Iniziare senza Docker
Installa il pacchetto Ultralytics
Qui installeremo Ultralytics pacchetto sul Raspberry Pi con dipendenze opzionali in modo da poter esportare il file PyTorch modelli ad altri formati diversi.
-
Aggiornare l'elenco dei pacchetti, installare pip e passare all'ultimo aggiornamento
-
Installa
ultralytics
pacchetto pip con dipendenze opzionali -
Riavvia il dispositivo
Usa NCNN su Raspberry Pi
Tra tutti i formati di esportazione dei modelli supportati da Ultralytics, NCNN offre le migliori prestazioni di inferenza quando si lavora con i dispositivi Raspberry Pi perché NCNN è altamente ottimizzato per piattaforme mobili/embedded (come l'architettura ARM). Per questo motivo il nostro consiglio è di utilizzare NCNN con Raspberry Pi.
Convertire il modello in NCNN ed eseguire l'inferenza
Il modello YOLOv8n in formato PyTorch viene convertito in NCNN per eseguire l'inferenza con il modello esportato.
Esempio
from ultralytics import YOLO
# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")
# Export the model to NCNN format
model.export(format="ncnn") # creates 'yolov8n_ncnn_model'
# Load the exported NCNN model
ncnn_model = YOLO("yolov8n_ncnn_model")
# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
Suggerimento
Per maggiori dettagli sulle opzioni di esportazione supportate, visita la pagina di documentazione diUltralytics sulle opzioni di distribuzione.
Raspberry Pi 5 vs Raspberry Pi 4 YOLOv8 Benchmark
YOLOv8 parametri di riferimento sono stati gestiti dal Ultralytics su nove diversi formati di modelli che misurano velocità e precisione: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN. I benchmark sono stati eseguiti sia su Raspberry Pi 5 che su Raspberry Pi 4 con una precisione FP32 con una dimensione predefinita dell'immagine di input di 640.
Nota
Abbiamo incluso solo i benchmark per i modelli YOLOv8n e YOLOv8s perché gli altri modelli sono troppo grandi per essere eseguiti su Raspberry Pis e non offrono prestazioni decenti.
Tabella di confronto
Prestazioni
Tabella comparativa dettagliata
La tabella seguente rappresenta i risultati dei benchmark per due diversi modelli (YOLOv8n, YOLOv8s) in nove formati diversi (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN), in esecuzione sia su Raspberry Pi 4 che su Raspberry Pi 5, fornendoci lo stato, le dimensioni, la metrica mAP50-95(B) e il tempo di inferenza per ogni combinazione.
Prestazioni
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 6.2 | 0.6381 | 508.61 |
TorchScript | ✅ | 12.4 | 0.6092 | 558.38 |
ONNX | ✅ | 12.2 | 0.6092 | 198.69 |
OpenVINO | ✅ | 12.3 | 0.6092 | 704.70 |
TF SavedModel | ✅ | 30.6 | 0.6092 | 367.64 |
TF GraphDef | ✅ | 12.3 | 0.6092 | 473.22 |
TF Lite | ✅ | 12.3 | 0.6092 | 380.67 |
PaddlePaddle | ✅ | 24.4 | 0.6092 | 703.51 |
NCNN | ✅ | 12.2 | 0.6034 | 94.28 |
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 21.5 | 0.6967 | 969.49 |
TorchScript | ✅ | 43.0 | 0.7136 | 1110.04 |
ONNX | ✅ | 42.8 | 0.7136 | 451.37 |
OpenVINO | ✅ | 42.9 | 0.7136 | 873.51 |
TF SavedModel | ✅ | 107.0 | 0.7136 | 658.15 |
TF GraphDef | ✅ | 42.8 | 0.7136 | 946.01 |
TF Lite | ✅ | 42.8 | 0.7136 | 1013.27 |
PaddlePaddle | ✅ | 85.5 | 0.7136 | 1560.23 |
NCNN | ✅ | 42.7 | 0.7204 | 211.26 |
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 6.2 | 0.6381 | 1068.42 |
TorchScript | ✅ | 12.4 | 0.6092 | 1248.01 |
ONNX | ✅ | 12.2 | 0.6092 | 560.04 |
OpenVINO | ✅ | 12.3 | 0.6092 | 534.93 |
TF SavedModel | ✅ | 30.6 | 0.6092 | 816.50 |
TF GraphDef | ✅ | 12.3 | 0.6092 | 1007.57 |
TF Lite | ✅ | 12.3 | 0.6092 | 950.29 |
PaddlePaddle | ✅ | 24.4 | 0.6092 | 1507.75 |
NCNN | ✅ | 12.2 | 0.6092 | 414.73 |
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 21.5 | 0.6967 | 2589.58 |
TorchScript | ✅ | 43.0 | 0.7136 | 2901.33 |
ONNX | ✅ | 42.8 | 0.7136 | 1436.33 |
OpenVINO | ✅ | 42.9 | 0.7136 | 1225.19 |
TF SavedModel | ✅ | 107.0 | 0.7136 | 1770.95 |
TF GraphDef | ✅ | 42.8 | 0.7136 | 2146.66 |
TF Lite | ✅ | 42.8 | 0.7136 | 2945.03 |
PaddlePaddle | ✅ | 85.5 | 0.7136 | 3962.62 |
NCNN | ✅ | 42.7 | 0.7136 | 1042.39 |
Riprodurre i nostri risultati
Per riprodurre i benchmark di Ultralytics su tutti i formati di esportazione, esegui questo codice:
Esempio
Si noti che i risultati dei benchmark possono variare in base all'esatta configurazione hardware e software di un sistema, nonché al carico di lavoro corrente del sistema al momento dell'esecuzione dei benchmark. Per ottenere i risultati più affidabili, usa un set di dati con un gran numero di immagini, ad es. data='coco8.yaml' (4 val images), or
data='coco.yaml'` (5000 immagini val).
Usa la fotocamera di Raspberry Pi
Quando si utilizza Raspberry Pi per progetti di Computer Vision, può essere fondamentale acquisire feed video in tempo reale per eseguire inferenze. Il connettore MIPI CSI integrato in Raspberry Pi ti permette di collegare i moduli telecamera ufficiali di Raspberry PI. In questa guida abbiamo utilizzato un modulo fotocamera Raspberry Pi 3 per acquisire i feed video ed eseguire l'inferenza utilizzando i modelli YOLOv8 .
Suggerimento
Scopri i diversi moduli per fotocamere offerti da Raspberry Pi e come iniziare a utilizzare i moduli per fotocamere di Raspberry Pi.
Nota
Il Raspberry Pi 5 utilizza connettori CSI più piccoli rispetto al Raspberry Pi 4 (15 pin contro 22 pin), quindi è necessario un cavo adattatore da 15 pin a 22 pin per collegarsi a una fotocamera Raspberry Pi.
Prova la videocamera
Esegui il seguente comando dopo aver collegato la videocamera a Raspberry Pi. Dovresti vedere un video in diretta dalla videocamera per circa 5 secondi.
Suggerimento
Per saperne di più rpicam-hello
utilizzo della documentazione ufficiale di Raspberry Pi
Inferenza con la telecamera
Esistono due metodi per utilizzare la fotocamera di Raspberry Pi per dedurre i modelli di YOLOv8 .
Utilizzo
Possiamo utilizzare picamera2
che viene preinstallato con Raspberry Pi OS per accedere alla fotocamera e ai modelli di inferenza YOLOv8 .
Esempio
import cv2
from picamera2 import Picamera2
from ultralytics import YOLO
# Initialize the Picamera2
picam2 = Picamera2()
picam2.preview_configuration.main.size = (1280, 720)
picam2.preview_configuration.main.format = "RGB888"
picam2.preview_configuration.align()
picam2.configure("preview")
picam2.start()
# Load the YOLOv8 model
model = YOLO("yolov8n.pt")
while True:
# Capture frame-by-frame
frame = picam2.capture_array()
# Run YOLOv8 inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the resulting frame
cv2.imshow("Camera", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) == ord("q"):
break
# Release resources and close windows
cv2.destroyAllWindows()
Dobbiamo avviare un flusso TCP con rpicam-vid
dalla videocamera collegata, in modo da poter utilizzare l'URL di questo flusso come input durante le successive operazioni di inferenza. Esegui il seguente comando per avviare il flusso TCP.
Per saperne di più rpicam-vid
utilizzo della documentazione ufficiale di Raspberry Pi
Suggerimento
Consulta il nostro documento sulle Sorgenti di inferenza se vuoi cambiare il tipo di input immagine/video.
Migliori pratiche per l'utilizzo di Raspberry Pi
Ci sono un paio di buone pratiche da seguire per ottenere il massimo delle prestazioni su Raspberry Pis con YOLOv8.
-
Usa un SSD
Quando si utilizza Raspberry Pi per un uso continuativo 24 ore su 24, 7 giorni su 7, è consigliabile utilizzare un SSD per il sistema perché una scheda SD non è in grado di sopportare scritture continue e potrebbe rompersi. Grazie al connettore PCIe integrato nel Raspberry Pi 5, ora è possibile collegare le unità SSD utilizzando un adattatore come NVMe Base for Raspberry Pi 5.
-
Flash senza interfaccia grafica
Quando flashi Raspberry Pi OS, puoi scegliere di non installare l'ambiente Desktop (Raspberry Pi OS Lite): in questo modo puoi risparmiare un po' di RAM sul dispositivo, lasciando più spazio per l'elaborazione della computer vision.
I prossimi passi
Congratulazioni per aver configurato con successo YOLO sul tuo Raspberry Pi! Per ulteriori informazioni e supporto, visita Ultralytics YOLOv8 Docs e Kashmir World Foundation.
Ringraziamenti e citazioni
Questa guida è stata inizialmente creata da Daan Eeltink per la Kashmir World Foundation, un'organizzazione che si dedica all'uso di YOLO per la conservazione delle specie in pericolo. Riconosciamo il loro lavoro pionieristico e la loro attenzione educativa nel campo delle tecnologie di rilevamento degli oggetti.
Per maggiori informazioni sulle attività della Kashmir World Foundation, puoi visitare il loro sito web.
DOMANDE FREQUENTI
Come posso configurare Ultralytics YOLOv8 su un Raspberry Pi senza usare Docker?
Per configurare Ultralytics YOLOv8 su un Raspberry Pi senza Docker, segui questi passaggi:
- Aggiorna l'elenco dei pacchetti e installa
pip
: - Installa il pacchetto Ultralytics con le dipendenze opzionali:
- Riavvia il dispositivo per applicare le modifiche:
Per istruzioni dettagliate, consulta la sezione Avviare senza Docker.
Perché dovrei usare il formato Ultralytics YOLOv8 's NCNN su Raspberry Pi per le attività di intelligenza artificiale?
Ultralytics YOLOv8Il formato NCNN è altamente ottimizzato per le piattaforme mobili ed embedded, il che lo rende ideale per l'esecuzione di attività di intelligenza artificiale su dispositivi Raspberry Pi. NCNN massimizza le prestazioni dell'inferenza sfruttando l'architettura ARM, fornendo un'elaborazione più veloce ed efficiente rispetto ad altri formati. Per maggiori dettagli sulle opzioni di esportazione supportate, visita la pagina di documentazione diUltralytics sulle opzioni di distribuzione.
Come posso convertire un modello YOLOv8 in formato NCNN per utilizzarlo su Raspberry Pi?
Puoi convertire un modello PyTorch YOLOv8 in formato NCNN utilizzando i comandi Python o CLI :
Esempio
from ultralytics import YOLO
# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")
# Export the model to NCNN format
model.export(format="ncnn") # creates 'yolov8n_ncnn_model'
# Load the exported NCNN model
ncnn_model = YOLO("yolov8n_ncnn_model")
# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
Per maggiori dettagli, consulta la sezione Utilizzare NCNN su Raspberry Pi.
Quali sono le differenze hardware tra Raspberry Pi 4 e Raspberry Pi 5 per l'esecuzione di YOLOv8?
Le differenze principali includono:
- CPU: Raspberry Pi 4 utilizza il SoC Broadcom BCM2711, Cortex-A72 a 64 bit, mentre Raspberry Pi 5 utilizza il SoC Broadcom BCM2712, Cortex-A76 a 64 bit.
- Frequenza massima CPU : Raspberry Pi 4 ha una frequenza massima di 1,8GHz, mentre Raspberry Pi 5 raggiunge i 2,4GHz.
- Memoria: Raspberry Pi 4 offre fino a 8GB di SDRAM LPDDR4-3200, mentre Raspberry Pi 5 dispone di SDRAM LPDDR4X-4267, disponibile nelle varianti da 4GB e 8GB.
Questi miglioramenti contribuiscono a migliorare i benchmark delle prestazioni dei modelli YOLOv8 su Raspberry Pi 5 rispetto a Raspberry Pi 4. Per maggiori dettagli, consulta la tabella comparativa della serie Raspberry Pi.
Come posso configurare un modulo fotocamera Raspberry Pi in modo che funzioni con Ultralytics YOLOv8 ?
Esistono due metodi per configurare una fotocamera Raspberry Pi per l'inferenza di YOLOv8 :
-
Utilizzando
picamera2
:import cv2 from picamera2 import Picamera2 from ultralytics import YOLO picam2 = Picamera2() picam2.preview_configuration.main.size = (1280, 720) picam2.preview_configuration.main.format = "RGB888" picam2.preview_configuration.align() picam2.configure("preview") picam2.start() model = YOLO("yolov8n.pt") while True: frame = picam2.capture_array() results = model(frame) annotated_frame = results[0].plot() cv2.imshow("Camera", annotated_frame) if cv2.waitKey(1) == ord("q"): break cv2.destroyAllWindows()
-
Utilizzo di un flusso TCP:
Per istruzioni dettagliate sulla configurazione, visita la sezione Inferenza con telecamera.