Vai al contenuto

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.

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

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.

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

    pip install ultralytics[export]
    
  3. Riavvia il dispositivo

    sudo reboot
    

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")
# Export a YOLOv8n PyTorch model to NCNN format
yolo export model=yolov8n.pt format=ncnn  # creates 'yolov8n_ncnn_model'

# Run inference with the exported model
yolo predict model='yolov8n_ncnn_model' source='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

NVIDIA Ecosistema Jetson

NVIDIA Ecosistema Jetson

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

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
results = model.benchmarks(data="coco8.yaml", imgsz=640)
# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
yolo benchmark model=yolov8n.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, usa un set di dati con un gran numero di immagini, ad es. data='coco8.yaml' (4 val images), ordata='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 .

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.

rpicam-hello

Inferenza con la telecamera

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

Utilizzo

Possiamo utilizzare picamera2che 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.

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

Per saperne di più rpicam-vid utilizzo della documentazione ufficiale di Raspberry Pi

Esempio

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Run inference
results = model("tcp://127.0.0.1:8888")
yolo predict model=yolov8n.pt source="tcp://127.0.0.1:8888"

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.

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

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

  1. Aggiorna l'elenco 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, 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")
# Export a YOLOv8n PyTorch model to NCNN format
yolo export model=yolov8n.pt format=ncnn  # creates 'yolov8n_ncnn_model'

# Run inference with the exported model
yolo predict model='yolov8n_ncnn_model' source='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 :

  1. 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()
    
  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("yolov8n.pt")
    results = model("tcp://127.0.0.1:8888")
    

Per istruzioni dettagliate sulla configurazione, visita la sezione Inferenza con telecamera.



Creato 2023-11-12, Aggiornato 2024-07-05
Autori: glenn-jocher (9), IvorZhu331 (1), lakshanthad (2)

Commenti