Guida rapida: Raspberry Pi con Ultralytics YOLO11
Questa guida completa fornisce una procedura dettagliata per la distribuzione di Ultralytics YOLO11 su dispositivi Raspberry Pi. Inoltre, presenta benchmark delle prestazioni per dimostrare le capacità di YOLO11 su questi dispositivi piccoli e potenti.
Guarda: Aggiornamenti e miglioramenti di 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). Si prevede che l'utilizzo di questa guida per dispositivi Raspberry Pi più vecchi, come Raspberry Pi 3, funzioni purché sia installato lo stesso Raspberry Pi OS Bookworm.
Cos'è Raspberry Pi?
Raspberry Pi è un computer a scheda singola, piccolo ed economico. È diventato popolare per una vasta gamma di progetti e applicazioni, dall'automazione domestica amatoriale 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 variabili, ma condividono tutti la stessa filosofia di progettazione di base: essere economici, compatti e versatili.
Confronto tra le serie Raspberry Pi
Raspberry Pi 3 | Raspberry Pi 4 | Raspberry Pi 5 | |
---|---|---|---|
CPU | Broadcom BCM2837, Cortex-A53 SoC a 64 bit | Broadcom BCM2711, Cortex-A72 SoC a 64 bit | Broadcom BCM2712, Cortex-A76 SoC a 64 bit |
Frequenza massima della CPU | 1.4GHz | 1.8GHz | 2.4GHz |
GPU | Videocore IV | Videocore VI | VideoCore VII |
Frequenza massima della GPU | 400Mhz | 500Mhz | 800Mhz |
Memoria | 1GB LPDDR2 SDRAM | 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM | 4GB, 8GB LPDDR4X-4267 SDRAM |
PCIe | N/A | N/A | Interfaccia 1xPCIe 2.0 |
Assorbimento massimo di potenza | 2.5A@5V | 3A@5V | 5A@5V (PD abilitato) |
Cos'è Raspberry Pi OS?
Raspberry Pi OS (precedentemente noto come Raspbian) è un sistema operativo di tipo Unix basato sulla distribuzione Debian GNU/Linux per la famiglia Raspberry Pi di computer a scheda singola compatti distribuiti dalla Raspberry Pi Foundation. Raspberry Pi OS è altamente ottimizzato per Raspberry Pi con CPU ARM e utilizza un ambiente desktop LXDE modificato con il window manager 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 di Raspberry Pi OS su Raspberry Pi
La prima cosa da fare dopo aver messo le mani su un Raspberry Pi è flashare una scheda micro-SD con Raspberry Pi OS, inserirla nel dispositivo ed eseguire l'avvio nel sistema operativo. Segui la documentazione introduttiva dettagliata di Raspberry Pi per preparare il dispositivo al primo utilizzo.
Configura Ultralytics
Esistono due modi per configurare il pacchetto Ultralytics su Raspberry Pi per realizzare il tuo prossimo progetto di Computer Vision. Puoi utilizzare uno qualsiasi di essi.
Inizia con Docker
Il modo più rapido per iniziare con Ultralytics YOLO11 su Raspberry Pi è eseguire con l'immagine docker precompilata per Raspberry Pi.
Esegui il comando seguente per estrarre il container Docker ed eseguirlo su Raspberry Pi. Questo si basa sull'immagine docker arm64v8/debian che contiene Debian 12 (Bookworm) in un ambiente Python3.
t=ultralytics/ultralytics:latest-arm64
sudo docker pull $t && sudo docker run -it --ipc=host $t
Dopo aver fatto ciò, passa alla sezione Usa NCNN su Raspberry Pi.
Inizia senza Docker
Installa il pacchetto Ultralytics
Qui installeremo il pacchetto Ultralytics su Raspberry Pi con dipendenze opzionali in modo da poter esportare i modelli PyTorch in altri formati diversi.
-
Aggiorna l'elenco dei pacchetti, installa pip ed esegui l'aggiornamento all'ultima versione
sudo apt update sudo apt install python3-pip -y pip install -U pip
-
Installa
ultralytics
pacchetto pip con dipendenze opzionalipip install ultralytics[export]
-
Riavvia il dispositivo
sudo reboot
Utilizzare NCNN su Raspberry Pi
Tra tutti i formati di esportazione di modelli supportati da Ultralytics, NCNN offre le migliori prestazioni di inferenza quando si lavora con dispositivi Raspberry Pi perché NCNN è altamente ottimizzato per piattaforme mobili/embedded (come l'architettura ARM).
Convertire il modello in NCNN ed eseguire l'inferenza
Il modello YOLO11n in formato PyTorch viene convertito in NCNN per eseguire l'inferenza con il modello esportato.
Esempio
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model to NCNN format
model.export(format="ncnn") # creates 'yolo11n_ncnn_model'
# Load the exported NCNN model
ncnn_model = YOLO("yolo11n_ncnn_model")
# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to NCNN format
yolo export model=yolo11n.pt format=ncnn # creates 'yolo11n_ncnn_model'
# Run inference with the exported model
yolo predict model='yolo11n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'
Suggerimento
Per maggiori dettagli sulle opzioni di esportazione supportate, visita la pagina della documentazione di Ultralytics sulle opzioni di distribuzione.
Benchmark di Raspberry Pi 5 YOLO11
I benchmark di YOLO11 sono stati eseguiti dal team Ultralytics su dieci diversi formati di modello misurando la velocità e l'accuratezza: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite, PaddlePaddle, MNN, NCNN. I benchmark sono stati eseguiti su un Raspberry Pi 5 a precisione FP32 con dimensione dell'immagine di input predefinita di 640.
Tabella comparativa
Abbiamo incluso solo i benchmark per i modelli YOLO11n e YOLO11s perché le dimensioni degli altri modelli sono troppo grandi per essere eseguiti sui Raspberry Pi e non offrono prestazioni decenti.

Tabella comparativa dettagliata
La tabella seguente rappresenta i risultati del benchmark per due diversi modelli (YOLO11n, YOLO11s) in dieci diversi formati (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite, PaddlePaddle, MNN, NCNN), in esecuzione su un 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 | ✅ | 5.4 | 0.5101 | 387.63 |
TorchScript | ✅ | 10.5 | 0.5077 | 457.84 |
ONNX | ✅ | 10.2 | 0.5077 | 191.09 |
OpenVINO | ✅ | 10.4 | 0.5058 | 84.76 |
TF SavedModel | ✅ | 25.9 | 0.5077 | 306.94 |
TF GraphDef | ✅ | 10.3 | 0.5077 | 309.82 |
TF Lite | ✅ | 10.3 | 0.5077 | 425.77 |
PaddlePaddle | ✅ | 20.5 | 0.5077 | 463.93 |
MNN | ✅ | 10.1 | 0.5059 | 114.97 |
NCNN | ✅ | 10.2 | 0.5031 | 94.03 |
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 18.4 | 0.5791 | 962.69 |
TorchScript | ✅ | 36.5 | 0.5782 | 1181.94 |
ONNX | ✅ | 36.3 | 0.5782 | 449.85 |
OpenVINO | ✅ | 36.4 | 0.5810 | 181.53 |
TF SavedModel | ✅ | 91.0 | 0.5782 | 660.62 |
TF GraphDef | ✅ | 36.4 | 0.5782 | 669.23 |
TF Lite | ✅ | 36.3 | 0.5782 | 1093.41 |
PaddlePaddle | ✅ | 72.6 | 0.5782 | 1140.61 |
MNN | ✅ | 36.2 | 0.5805 | 274.63 |
NCNN | ✅ | 36.2 | 0.5784 | 224.20 |
Valutato con Ultralytics 8.3.152
Nota
Il tempo di inferenza non include il pre/post-processing.
Riproduci i nostri risultati
Per riprodurre i benchmark Ultralytics di cui sopra su tutti i formati di esportazione, esegui questo codice:
Esempio
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Benchmark YOLO11n speed and accuracy on the COCO128 dataset for all all export formats
results = model.benchmark(data="coco128.yaml", imgsz=640)
# Benchmark YOLO11n speed and accuracy on the COCO128 dataset for all all export formats
yolo benchmark model=yolo11n.pt data=coco128.yaml imgsz=640
Si noti che i risultati dei benchmark possono variare in base alla configurazione hardware e software esatta di un sistema, nonché al carico di lavoro corrente del sistema al momento dell'esecuzione dei benchmark. Per ottenere risultati più affidabili, utilizzare un dataset con un numero elevato di immagini, ad esempio data='coco.yaml'
(5000 immagini val).
Utilizzare la fotocamera Raspberry Pi
Quando si utilizza Raspberry Pi per progetti di Computer Vision, può essere essenziale acquisire feed video in tempo reale per eseguire l'inferenza. Il connettore MIPI CSI integrato su Raspberry Pi consente di collegare i moduli ufficiali della fotocamera Raspberry PI. In questa guida, abbiamo utilizzato un Raspberry Pi Camera Module 3 per acquisire i feed video ed eseguire l'inferenza utilizzando i modelli YOLO11.
Suggerimento
Scopri di più sui diversi moduli fotocamera offerti da Raspberry Pi e anche su come iniziare con i moduli fotocamera Raspberry Pi.
Nota
Raspberry Pi 5 utilizza connettori CSI più piccoli rispetto a Raspberry Pi 4 (15 pin contro 22 pin), quindi sarà necessario un cavo adattatore da 15 a 22 pin per connettersi a una Raspberry Pi Camera.
Testare la fotocamera
Esegui il comando seguente dopo aver collegato la fotocamera al Raspberry Pi. Dovresti vedere un feed video in diretta dalla fotocamera per circa 5 secondi.
rpicam-hello
Suggerimento
Scopri di più su rpicam-hello
utilizzo nella documentazione ufficiale di Raspberry Pi
Inferenza con la fotocamera
Esistono 2 metodi per utilizzare la Raspberry Pi Camera per l'inferenza dei modelli YOLO11.
Utilizzo
Possiamo usare picamera2
che è preinstallato con Raspberry Pi OS per accedere alla telecamera ed eseguire l'inferenza dei modelli YOLO11.
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 YOLO11 model
model = YOLO("yolo11n.pt")
while True:
# Capture frame-by-frame
frame = picam2.capture_array()
# Run YOLO11 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 uno stream TCP con rpicam-vid
dalla telecamera connessa, in modo da poter utilizzare questo URL di stream come input quando eseguiamo l'inferenza in seguito. Esegui il comando seguente per avviare lo stream TCP.
rpicam-vid -n -t 0 --inline --listen -o tcp://127.0.0.1:8888
Scopri di più su rpicam-vid
utilizzo nella documentazione ufficiale di Raspberry Pi
Esempio
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Run inference
results = model("tcp://127.0.0.1:8888")
yolo predict model=yolo11n.pt source="tcp://127.0.0.1:8888"
Suggerimento
Consulta il nostro documento sulle Sorgenti di inferenza se desideri modificare il tipo di input immagine/video.
Best practice per l'utilizzo di Raspberry Pi
Ci sono alcune best practice da seguire per abilitare le massime prestazioni su Raspberry Pi che eseguono YOLO11.
-
Utilizzare un SSD
Quando si utilizza Raspberry Pi per un uso continuativo 24 ore su 24, 7 giorni su 7, si consiglia di utilizzare un SSD per il sistema perché una scheda SD non sarebbe in grado di sopportare scritture continue e potrebbe rompersi. Con il connettore PCIe integrato sul Raspberry Pi 5, ora è possibile collegare SSD utilizzando un adattatore come NVMe Base per Raspberry Pi 5.
-
Flash senza GUI
Quando si esegue il flashing di Raspberry Pi OS, è possibile scegliere di non installare l'ambiente Desktop (Raspberry Pi OS Lite) e questo può risparmiare un po' di RAM sul dispositivo, lasciando più spazio per l'elaborazione della computer vision.
-
Overclock di Raspberry Pi
Se desideri un piccolo aumento delle prestazioni durante l'esecuzione di modelli Ultralytics YOLO11 su Raspberry Pi 5, puoi overcloccare la CPU dalla sua base di 2.4GHz a 2.9GHz e la GPU da 800MHz a 1GHz. Se il sistema diventa instabile o si blocca, riduci i valori di overclock di incrementi di 100MHz. Assicurati che sia presente un raffreddamento adeguato, poiché l'overclock aumenta la generazione di calore e può portare al thermal throttling.
a. Aggiorna il software
sudo apt update && sudo apt dist-upgrade
b. Apri per modificare il file di configurazione
sudo nano /boot/firmware/config.txt
c. Aggiungi le seguenti righe in fondo
arm_freq=3000 gpu_freq=1000 force_turbo=1
d. Salva ed esci premendo CTRL + X, poi Y, e premi INVIO
e. Riavvia il Raspberry Pi
Prossimi passi
Congratulazioni per aver configurato con successo YOLO sul tuo Raspberry Pi! Per ulteriore apprendimento e supporto, visita Ultralytics YOLO11 Docs e Kashmir World Foundation.
Ringraziamenti e citazioni
Questa guida è stata inizialmente creata da Daan Eeltink per Kashmir World Foundation, un'organizzazione dedicata all'uso di YOLO per la conservazione delle specie in via di estinzione. Riconosciamo il loro lavoro pionieristico e l'attenzione educativa nel campo delle tecnologie di object detection.
Per maggiori informazioni sulle attività di Kashmir World Foundation, puoi visitare il loro sito web.
FAQ
Come posso configurare Ultralytics YOLO11 su un Raspberry Pi senza utilizzare Docker?
Per configurare Ultralytics YOLO11 su un Raspberry Pi senza Docker, segui questi passaggi:
- Aggiorna la lista dei pacchetti e installa
pip
:sudo apt update sudo apt install python3-pip -y pip install -U pip
- Installa il pacchetto Ultralytics con le dipendenze opzionali:
pip install ultralytics[export]
- Riavvia il dispositivo per applicare le modifiche:
sudo reboot
Per istruzioni dettagliate, fare riferimento alla sezione Avvio senza Docker.
Perché dovrei usare il formato NCNN di Ultralytics YOLO11 su Raspberry Pi per attività di IA?
Il formato NCNN di Ultralytics YOLO11 è altamente ottimizzato per piattaforme mobili ed embedded, rendendolo ideale per l'esecuzione di task di AI su dispositivi Raspberry Pi. NCNN massimizza le prestazioni di 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 della documentazione di Ultralytics sulle opzioni di deployment.
Come posso convertire un modello YOLO11 in formato NCNN per l'uso su Raspberry Pi?
È possibile convertire un modello PyTorch YOLO11 in formato NCNN utilizzando comandi Python o CLI:
Esempio
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model to NCNN format
model.export(format="ncnn") # creates 'yolo11n_ncnn_model'
# Load the exported NCNN model
ncnn_model = YOLO("yolo11n_ncnn_model")
# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to NCNN format
yolo export model=yolo11n.pt format=ncnn # creates 'yolo11n_ncnn_model'
# Run inference with the exported model
yolo predict model='yolo11n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'
Per maggiori dettagli, consulta la sezione Usa NCNN su Raspberry Pi.
Quali sono le differenze hardware tra Raspberry Pi 4 e Raspberry Pi 5 rilevanti per l'esecuzione di YOLO11?
Le differenze principali includono:
- CPU: Raspberry Pi 4 utilizza Broadcom BCM2711, Cortex-A72 SoC a 64 bit, mentre Raspberry Pi 5 utilizza Broadcom BCM2712, Cortex-A76 SoC a 64 bit.
- Frequenza massima della 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 8 GB di SDRAM LPDDR4-3200, mentre Raspberry Pi 5 è dotato di SDRAM LPDDR4X-4267, disponibile nelle varianti da 4 GB e 8 GB.
Questi miglioramenti contribuiscono a migliori benchmark di performance per i modelli YOLO11 su Raspberry Pi 5 rispetto a Raspberry Pi 4. Per maggiori dettagli, consultare la tabella Comparazione tra le serie Raspberry Pi.
Come posso configurare un modulo fotocamera Raspberry Pi per funzionare con Ultralytics YOLO11?
Esistono due metodi per configurare una Raspberry Pi Camera per l'inferenza YOLO11:
-
L'utilizzo di
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("yolo11n.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 uno Stream TCP:
rpicam-vid -n -t 0 --inline --listen -o tcp://127.0.0.1:8888
from ultralytics import YOLO model = YOLO("yolo11n.pt") results = model("tcp://127.0.0.1:8888")
Per istruzioni dettagliate sulla configurazione, visitare la sezione Inferenza con Camera.