Vai al contenuto

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.

  1. 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
    
  2. Installa ultralytics pacchetto pip con dipendenze opzionali

    pip install ultralytics[export]
    
  3. 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.

Benchmark di YOLO11 su RPi 5
Valutato con Ultralytics 8.3.152

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.

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

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.

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

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

  3. 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:

  1. Aggiorna la lista dei pacchetti e installa pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installa il pacchetto Ultralytics con le dipendenze opzionali:
    pip install ultralytics[export]
    
  3. 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:

  1. 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()
    
  2. 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.



📅 Creato 1 anno fa ✏️ Aggiornato 2 mesi fa

Commenti