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, Cortex-A72 64Bit SoC Broadcom BCM2712, Cortex-A76 64Bit SoC
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 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

Here we will install Ultralytics package on the Raspberry Pi with optional dependencies so that we can export the PyTorch models to other different formats.

  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

Out of all the model export formats supported by Ultralytics, NCNN delivers the best inference performance when working with Raspberry Pi devices because NCNN is highly optimized for mobile/ embedded platforms (such as ARM architecture). Therefor our recommendation is to use NCNN with 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 benchmarks were run by the Ultralytics team on nine different model formats measuring speed and accuracy: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite, PaddlePaddle, NCNN. Benchmarks were run on both Raspberry Pi 5 and Raspberry Pi 4 at FP32 precision with default input image size of 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

Ecosistema NVIDIA Jetson

Ecosistema NVIDIA Jetson

Tabella comparativa dettagliata

The below table represents the benchmark results for two different models (YOLOv8n, YOLOv8s) across nine different formats (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite, PaddlePaddle, NCNN), running on both Raspberry Pi 4 and Raspberry Pi 5, giving us the status, size, mAP50-95(B) metric, and inference time for each combination.

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.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (7), IvorZhu331 (1), lakshanthad (2)

Commenti