Vai al contenuto

Guida rapida: Raspberry Pi con Ultralytics YOLO11

Questa guida completa fornisce una guida dettagliata per l'implementazione di Ultralytics YOLO11 sui dispositivi Raspberry Pi. Inoltre, mostra i benchmark delle prestazioni per dimostrare le capacità di YOLO11 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 condizione che sia installato lo stesso Raspberry Pi OS Bookworm.

Che cos'è Raspberry Pi?

Raspberry Pi è un computer a scheda singola di piccole dimensioni e dal prezzo accessibile. È diventato popolare per un'ampia gamma di progetti e applicazioni, dall'automazione domestica per 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à.

Serie Raspberry Pi a confronto

Raspberry Pi 3 Raspberry Pi 4 Raspberry Pi 5
CPU Broadcom BCM2837, SoC Cortex-A53 a 64 bit Broadcom BCM2711, SoC Cortex-A72 a 64 bit Broadcom BCM2712, SoC Cortex-A76 a 64 bit
CPU Frequenza massima 1.4GHz 1,8GHz 2,4 GHz
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 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 del sistema operativo Raspberry Pi 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 e avviare il sistema operativo. Seguite la dettagliata Documentazione introduttiva di Raspberry Pi per preparare il dispositivo al primo utilizzo.

Impostazione Ultralytics

Esistono due modi per configurare il pacchetto Ultralytics su Raspberry Pi per realizzare il vostro prossimo progetto di Computer Vision. È possibile utilizzare uno dei due.

Iniziare con Docker

Il modo più veloce per iniziare a utilizzare Ultralytics YOLO11 su Raspberry Pi è quello di eseguire un'immagine docker precostituita per Raspberry Pi.

Eseguire 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.

t=ultralytics/ultralytics:latest-arm64 && sudo docker pull $t && sudo docker run -it --ipc=host $t

Dopo aver fatto questo, passare alla sezione Utilizzare NCNN su Raspberry Pi.

Avvio senza Docker

Installare il pacchetto Ultralytics

Qui installeremo il pacchetto Ultralytics su Raspberry Pi con le dipendenze opzionali in modo da poter esportare i modelli in altri formati. PyTorch modelli in altri formati diversi.

  1. Aggiornare l'elenco dei pacchetti, installare pip e passare all'ultimo aggiornamento

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installare ultralytics pacchetto pip con dipendenze opzionali

    pip install ultralytics[export]
    
  3. Riavviare il dispositivo

    sudo reboot
    

Utilizzare 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 dispositivi Raspberry Pi, perché NCNN è altamente ottimizzato per piattaforme mobili/ embedded (come l'architettura ARM). Si consiglia pertanto di utilizzare NCNN con Raspberry Pi.

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, visitate la pagina di documentazioneUltralytics sulle opzioni di distribuzione.

Raspberry Pi 5 YOLO11 Parametri di riferimento

YOLO11 I benchmark sono stati eseguiti dal team di Ultralytics su nove diversi formati di modello, misurando velocità e precisione: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel , TF GraphDef , TF Lite, PaddlePaddle, NCNN. I benchmark sono stati eseguiti su un Raspberry Pi 5 con precisione FP32 e dimensioni predefinite dell'immagine in ingresso pari a 640.

Tabella di confronto

Abbiamo incluso i benchmark solo per i modelli YOLO11n e YOLO11s, perché le dimensioni degli altri modelli sono troppo grandi per essere eseguite su Raspberry Pis e non offrono prestazioni decenti.

YOLO11 benchmark su RPi 5
Benchmark con Ultralytics 8.3.39

Tabella di confronto dettagliata

La tabella seguente rappresenta i risultati del benchmark per due diversi modelli (YOLO11n, YOLO11s) attraverso nove diversi formati (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel , TF GraphDef , TF Lite, PaddlePaddle, NCNN), eseguiti su un Raspberry Pi 5, fornendo lo stato, la dimensione, 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.6100 405.238
TorchScript 10.5 0.6082 526.628
ONNX 10.2 0.6082 168.082
OpenVINO 10.4 0.6082 81.192
TF SavedModel 25.8 0.6082 377.968
TF GraphDef 10.3 0.6082 487.244
TF Lite 10.3 0.6082 317.398
PaddlePaddle 20.4 0.6082 561.892
MNN 10.1 0.6106 112.554
NCNN 10.2 0.6106 88.026
Formato Stato Dimensione su disco (MB) mAP50-95(B) Tempo di inferenza (ms/im)
PyTorch 18.4 0.7526 1011.60
TorchScript 36.5 0.7416 1268.502
ONNX 36.3 0.7416 324.17
OpenVINO 36.4 0.7416 179.324
TF SavedModel 91.1 0.7416 714.382
TF GraphDef 36.4 0.7416 1019.83
TF Lite 36.4 0.7416 849.86
PaddlePaddle 72.5 0.7416 1276.34
MNN 36.2 0.7409 273.032
NCNN 36.2 0.7419 194.858

Benchmark con Ultralytics 8.3.39

Riprodurre i risultati

Per riprodurre i benchmark di Ultralytics su tutti i formati di esportazione, eseguite questo codice:

Esempio

from ultralytics import YOLO

# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")

# Benchmark YOLO11n speed and accuracy on the COCO8 dataset for all all export formats
results = model.benchmarks(data="coco8.yaml", imgsz=640)
# Benchmark YOLO11n speed and accuracy on the COCO8 dataset for all all export formats
yolo benchmark model=yolo11n.pt data=coco8.yaml imgsz=640

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, utilizzare un set di dati con un numero elevato di immagini, ad es. data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 immagini val).

Utilizzare la fotocamera di 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 in Raspberry Pi consente 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 YOLO11 .

Nota

Raspberry Pi 5 utilizza connettori CSI più piccoli rispetto a Raspberry Pi 4 (15 pin contro 22 pin), pertanto è necessario un cavo adattatore da 15 pin a 22 pin per collegarsi a una fotocamera Raspberry Pi.

Prova della telecamera

Eseguire il seguente comando dopo aver collegato la telecamera a Raspberry Pi. Si dovrebbe vedere un video in diretta dalla telecamera per circa 5 secondi.

rpicam-hello

Inferenza con telecamera

Esistono due metodi per utilizzare la fotocamera di Raspberry Pi per dedurre i modelli di YOLO11 .

Utilizzo

Possiamo utilizzare picamera2che viene preinstallato con Raspberry Pi OS per accedere alla fotocamera e ai modelli di inferenza 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 un flusso TCP con rpicam-vid dalla telecamera connessa, in modo da poter utilizzare l'URL di questo flusso come input durante le successive operazioni di inferenza. Eseguire il seguente comando per avviare il flusso TCP.

rpicam-vid -n -t 0 --inline --listen -o tcp://127.0.0.1:8888

Per saperne di più 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

Se si desidera modificare il tipo di ingresso immagine/video, consultare il documento Sorgenti di inferenza.

Migliori pratiche per l'utilizzo di Raspberry Pi

Ci sono un paio di buone pratiche da seguire per ottenere le massime prestazioni su Raspberry Pis con YOLO11.

  1. Utilizzare un'unità SSD

    Quando si utilizza Raspberry Pi per un uso continuo 24 ore su 24, 7 giorni su 7, è consigliabile utilizzare un'unità SSD per il sistema, poiché 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 la base NVMe per Raspberry Pi 5.

  2. Flash senza interfaccia grafica

    Quando si esegue il flashing di Raspberry Pi OS, si può scegliere di non installare l'ambiente Desktop (Raspberry Pi OS Lite) e ciò consente di 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 vostro Raspberry Pi! Per ulteriori informazioni e supporto, visitate Ultralytics YOLO11 Docs e Kashmir World Foundation.

Ringraziamenti e citazioni

Questa guida è stata inizialmente creata da Daan Eeltink per la Kashmir World Foundation, un'organizzazione dedicata 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 ulteriori informazioni sulle attività della Kashmir World Foundation, è possibile visitare il loro sito web.

FAQ

Come si configura Ultralytics YOLO11 su un Raspberry Pi senza usare Docker?

Per configurare Ultralytics YOLO11 su un Raspberry Pi senza Docker, seguire questi passaggi:

  1. Aggiornare l'elenco dei pacchetti e installare pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installare il pacchetto Ultralytics con le dipendenze opzionali:
    pip install ultralytics[export]
    
  3. Riavviare il dispositivo per applicare le modifiche:
    sudo reboot
    

Per istruzioni dettagliate, consultare la sezione Avvio senza Docker.

Perché dovrei usare il formato Ultralytics YOLO11 's NCNN su Raspberry Pi per le attività di intelligenza artificiale?

Ultralytics YOLO11Il 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 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, visitate la pagina della documentazione diUltralytics sulle opzioni di distribuzione.

Come posso convertire un modello YOLO11 in formato NCNN per utilizzarlo su Raspberry Pi?

È possibile convertire un modello PyTorch YOLO11 nel formato NCNN utilizzando i 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, consultare la sezione Utilizzo di NCNN su Raspberry Pi.

Quali sono le differenze hardware tra Raspberry Pi 4 e Raspberry Pi 5 per l'esecuzione di YOLO11?

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 8 GB di SDRAM LPDDR4-3200, mentre Raspberry Pi 5 dispone di SDRAM LPDDR4X-4267, disponibile nelle varianti da 4 GB e 8 GB.

Questi miglioramenti contribuiscono a migliorare le prestazioni dei benchmark per i modelli YOLO11 su Raspberry Pi 5 rispetto a Raspberry Pi 4. Per maggiori dettagli, consultare la tabella comparativa della serie Raspberry Pi.

Come posso configurare un modulo fotocamera Raspberry Pi in modo che funzioni con Ultralytics YOLO11 ?

Esistono due metodi per configurare una telecamera Raspberry Pi per l'inferenza di YOLO11 :

  1. Utilizzo 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()
    
  2. Utilizzo di un flusso 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, visitate la sezione Inferenza con telecamera.

📅C reato 1 anno fa ✏️ Aggiornato 6 giorni fa

Commenti