Overslaan naar inhoud

Snelstartgids: Raspberry Pi met Ultralytics YOLOv8

Deze uitgebreide handleiding biedt een gedetailleerde handleiding voor het implementeren van Ultralytics YOLOv8 op Raspberry Pi-apparaten. Daarnaast worden prestatiebenchmarks getoond om de mogelijkheden van YOLOv8 op deze kleine en krachtige apparaten te demonstreren.



Kijken: Raspberry Pi 5 updates en verbeteringen.

Opmerking

Deze handleiding is getest met de Raspberry Pi 4 en Raspberry Pi 5 met het nieuwste Raspberry Pi OS Bookworm (Debian 12). Verwacht wordt dat het gebruik van deze handleiding voor oudere Raspberry Pi-apparaten zoals de Raspberry Pi 3 zal werken zolang hetzelfde Raspberry Pi OS Bookworm is geïnstalleerd.

Wat is Raspberry Pi?

Raspberry Pi is een kleine, betaalbare single-board computer. Het is populair geworden voor een breed scala aan projecten en toepassingen, van hobbymatige domotica tot industrieel gebruik. De Raspberry Pi-boards kunnen verschillende besturingssystemen draaien en hebben GPIO (General Purpose Input/Output) pinnen waarmee ze eenvoudig kunnen worden geïntegreerd met sensoren, actuatoren en andere hardwarecomponenten. Er zijn verschillende modellen met verschillende specificaties, maar ze hebben allemaal dezelfde basisontwerpfilosofie: goedkoop, compact en veelzijdig.

Vergelijking van de Raspberry Pi-serie

Raspberry Pi 3 Raspberry Pi 4 Raspberry Pi 5
CPU Broadcom BCM2837, Cortex-A53 64Bit SoC Broadcom BCM2711, Cortex-A72 64-bits SoC Broadcom BCM2712, Cortex-A76 64-bits SoC
CPU Maximale frequentie 1,4GHz 1,8 GHz 2,4GHz
GPU Videokern IV Videokern VI VideoCore VII
GPU Maximale frequentie 400Mhz 500Mhz 800Mhz
Geheugen 1GB LPDDR2 SDRAM 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM 4GB, 8GB LPDDR4X-4267 SDRAM
PCIe N.V.T. N.V.T. 1xPCIe 2.0 interface
Maximaal opgenomen vermogen 2,5A@5V 3A@5V 5A@5V (PD ingeschakeld)

Wat is Raspberry Pi OS?

Raspberry Pi OS (voorheen bekend als Raspbian) is een Unix-achtig besturingssysteem gebaseerd op de Debian GNU/Linux distributie voor de Raspberry Pi familie van compacte single-board computers, gedistribueerd door de Raspberry Pi Foundation. Raspberry Pi OS is sterk geoptimaliseerd voor de Raspberry Pi met ARM CPU's en gebruikt een aangepaste LXDE desktopomgeving met de Openbox stacking window manager. Raspberry Pi OS wordt actief ontwikkeld, met de nadruk op het verbeteren van de stabiliteit en prestaties van zoveel mogelijk Debian pakketten op de Raspberry Pi.

Flash Raspberry Pi OS naar Raspberry Pi

Het eerste wat je moet doen nadat je een Raspberry Pi in handen hebt gekregen is een micro-SD kaart flashen met Raspberry Pi OS, in het apparaat steken en opstarten in het OS. Volg de gedetailleerde Aan de slag documentatie van Raspberry Pi om je apparaat klaar te maken voor het eerste gebruik.

Opzetten Ultralytics

Er zijn twee manieren om Ultralytics pakket op Raspberry Pi in te stellen om je volgende Computer Vision project te bouwen. Je kunt een van beide gebruiken.

Beginnen met Docker

De snelste manier om aan de slag te gaan met Ultralytics YOLOv8 op Raspberry Pi is door te draaien met een vooraf gebouwd docker image voor Raspberry Pi.

Voer het onderstaande commando uit om de Docker-container op te halen en op de Raspberry Pi te draaien. Dit is gebaseerd op arm64v8/debian docker image dat Debian 12 (Bookworm) bevat in een Python3-omgeving.

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

Ga daarna naar het gedeelte NCNN gebruiken op de Raspberry Pi.

Starten zonder Docker

Installeer Ultralytics pakket

Hier zullen we installeren Ultralytics pakket op de Raspberry Pi met optionele afhankelijkheden, zodat we de PyTorch modellen naar andere verschillende formaten.

  1. Pakketlijst bijwerken, pip installeren en upgraden naar de nieuwste

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installeer ultralytics pip-pakket met optionele afhankelijkheden

    pip install ultralytics[export]
    
  3. Herstart het apparaat

    sudo reboot
    

NCNN gebruiken op Raspberry Pi

Van alle modelexportformaten die worden ondersteund door Ultralytics, NCNN levert de beste inferentieprestaties bij het werken met Raspberry Pi-apparaten omdat: NCNN is sterk geoptimaliseerd voor mobiele/embedded platforms (zoals ARM-architectuur). Daarom raden wij u aan om gebruik te maken van NCNN met Raspberry Pi.

Model omzetten naar NCNN en conclusies trekken

Het YOLOv8n model in het formaat PyTorch wordt geconverteerd naar NCNN om inferentie uit te voeren met het geëxporteerde model.

Voorbeeld

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'

Tip

Ga voor meer informatie over ondersteunde exportopties naar de Ultralytics documentatiepagina over implementatieopties.

Raspberry Pi 5 vs Raspberry Pi 4 YOLOv8 Benchmarks

YOLOv8 benchmarks werden uitgevoerd door de Ultralytics Werk samen aan negen verschillende modelformaten die snelheid en nauwkeurigheid meten: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN. Benchmarks werden uitgevoerd op zowel Raspberry Pi 5 als Raspberry Pi 4 met FP32-precisie met een standaard invoerbeeldgrootte van 640.

Opmerking

We hebben alleen benchmarks opgenomen voor YOLOv8n en YOLOv8s modellen omdat andere modellen te groot zijn om op de Raspberry Pis te draaien en geen fatsoenlijke prestaties bieden.

Vergelijkingstabel

Prestaties

NVIDIA Jetson ecosysteem

NVIDIA Jetson ecosysteem

Gedetailleerde vergelijkingstabel

De onderstaande tabel geeft de benchmarkresultaten weer voor twee verschillende modellen (YOLOv8n, YOLOv8s) in negen verschillende formaten (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN), draaiend op zowel Raspberry Pi 4 als Raspberry Pi 5, waardoor we de status, grootte, mAP50-95(B)-metriek en inferentietijd voor elke combinatie krijgen.

Prestaties

Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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
Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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
Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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
Formaat Status Grootte op schijf (MB) mAP50-95(B) Inferentietijd (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

Onze resultaten reproduceren

Voer deze code uit om de bovenstaande Ultralytics benchmarks op alle exportformaten te reproduceren:

Voorbeeld

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

Merk op dat de benchmarkresultaten kunnen variëren op basis van de exacte hardware- en softwareconfiguratie van een systeem en de huidige werkbelasting van het systeem op het moment dat de benchmarks worden uitgevoerd. Gebruik voor de meest betrouwbare resultaten een dataset met een groot aantal afbeeldingen, d.w.z. data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 valafbeeldingen).

Raspberry Pi camera gebruiken

Wanneer je Raspberry Pi gebruikt voor Computer Vision projecten, kan het essentieel zijn om real-time videobeelden op te halen om inferentie uit te voeren. Met de ingebouwde MIPI CSI connector op de Raspberry Pi kun je officiële Raspberry PI cameramodules aansluiten. In deze handleiding hebben we een Raspberry Pi Camera Module 3 gebruikt om videobeelden op te halen en inferentie uit te voeren met behulp van YOLOv8 modellen.

Opmerking

Raspberry Pi 5 gebruikt kleinere CSI connectoren dan de Raspberry Pi 4 (15-pins vs. 22-pins), dus je hebt een 15-pins naar 22-pins adapterkabel nodig om verbinding te maken met een Raspberry Pi Camera.

De camera testen

Voer het volgende commando uit nadat je de camera hebt aangesloten op de Raspberry Pi. Je zou ongeveer 5 seconden lang een live videofeed van de camera moeten zien.

rpicam-hello

Inferentie met camera

Er zijn 2 methoden om de Raspberry Pi Camera te gebruiken om YOLOv8 modellen in te leiden.

Gebruik

We kunnen picamera2die vooraf geïnstalleerd is met Raspberry Pi OS om toegang te krijgen tot de camera en inferentie YOLOv8 modellen.

Voorbeeld

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()

We moeten een TCP stream starten met rpicam-vid van de aangesloten camera zodat we deze URL van de stream kunnen gebruiken als invoer wanneer we later gaan inferenties maken. Voer het volgende commando uit om de TCP stream te starten.

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

Meer informatie over rpicam-vid gebruik in de officiële Raspberry Pi-documentatie

Voorbeeld

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"

Tip

Raadpleeg ons document over Inferentiebronnen als je het type afbeelding/video-invoer wilt wijzigen.

Best Practices bij het gebruik van Raspberry Pi

Er zijn een paar best practices die je moet volgen om maximale prestaties op Raspberry Pis met YOLOv8 mogelijk te maken.

  1. Gebruik een SSD

    Als je de Raspberry Pi 24x7 continu gebruikt, is het aan te raden om een SSD te gebruiken voor het systeem omdat een SD-kaart niet bestand is tegen continu schrijven en kapot zou kunnen gaan. Met de ingebouwde PCIe-aansluiting op de Raspberry Pi 5 kun je nu SSD's aansluiten met een adapter zoals de NVMe Base for Raspberry Pi 5.

  2. Flash zonder GUI

    Bij het flashen van Raspberry Pi OS kun je ervoor kiezen om de desktopomgeving (Raspberry Pi OS Lite) niet te installeren. Dit kan wat RAM-geheugen op het apparaat besparen, waardoor er meer ruimte overblijft voor computervisieverwerking.

Volgende stappen

Gefeliciteerd met het succesvol instellen van YOLO op je Raspberry Pi! Ga voor meer informatie en ondersteuning naar Ultralytics YOLOv8 Docs en Kashmir World Foundation.

Erkenningen en citaten

Deze gids is oorspronkelijk gemaakt door Daan Eeltink voor Kashmir World Foundation, een organisatie die zich inzet voor het gebruik van YOLO voor het behoud van bedreigde diersoorten. We erkennen hun pionierswerk en educatieve focus op het gebied van objectdetectietechnologieën.

Voor meer informatie over de activiteiten van Kashmir World Foundation kun je terecht op hun website.

FAQ

Hoe stel ik Ultralytics YOLOv8 in op een Raspberry Pi zonder Docker te gebruiken?

Om Ultralytics YOLOv8 in te stellen op een Raspberry Pi zonder Docker, volg je deze stappen:

  1. Werk de pakketlijst bij en installeer pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installeer het Ultralytics pakket met optionele afhankelijkheden:
    pip install ultralytics[export]
    
  3. Herstart het apparaat om de wijzigingen toe te passen:
    sudo reboot
    

Raadpleeg voor gedetailleerde instructies de sectie Starten zonder Docker.

Waarom zou ik Ultralytics YOLOv8 's NCNN formaat gebruiken op Raspberry Pi voor AI-taken?

Ultralytics YOLOv8Het NCNN formaat is sterk geoptimaliseerd voor mobiele en embedded platforms, waardoor het ideaal is voor het uitvoeren van AI-taken op Raspberry Pi-apparaten. NCNN maximaliseert de inferentieprestaties door gebruik te maken van de ARM-architectuur, wat snellere en efficiëntere verwerking oplevert in vergelijking met andere formaten. Ga voor meer informatie over ondersteunde exportopties naar de Ultralytics documentatiepagina over implementatieopties.

Hoe kan ik een YOLOv8 model converteren naar NCNN formaat voor gebruik op de Raspberry Pi?

Je kunt een PyTorch YOLOv8 model converteren naar NCNN met de commando's Python of CLI :

Voorbeeld

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'

Zie voor meer informatie de sectie NCNN gebruiken op Raspberry Pi.

Wat zijn de hardwareverschillen tussen Raspberry Pi 4 en Raspberry Pi 5 die relevant zijn voor het draaien van YOLOv8?

De belangrijkste verschillen zijn:

  • CPU: Raspberry Pi 4 gebruikt Broadcom BCM2711, Cortex-A72 64-bit SoC, terwijl Raspberry Pi 5 Broadcom BCM2712, Cortex-A76 64-bit SoC gebruikt.
  • Max. frequentie CPU : Raspberry Pi 4 heeft een maximale frequentie van 1,8 GHz, terwijl Raspberry Pi 5 2,4GHz haalt.
  • Geheugen: Raspberry Pi 4 biedt maximaal 8GB LPDDR4-3200 SDRAM, terwijl Raspberry Pi 5 LPDDR4X-4267 SDRAM heeft, verkrijgbaar in varianten van 4GB en 8GB.

Deze verbeteringen dragen bij aan betere prestatiebenchmarks voor YOLOv8 modellen op Raspberry Pi 5 vergeleken met Raspberry Pi 4. Raadpleeg de tabel met vergelijkingen van de Raspberry Pi-series voor meer details.

Hoe kan ik een Raspberry Pi Camera Module instellen om te werken met Ultralytics YOLOv8 ?

Er zijn twee methoden om een Raspberry Pi Camera in te stellen voor YOLOv8 inferentie:

  1. Gebruik 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. Een TCP-stream gebruiken:

    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")
    

Ga voor gedetailleerde instructies naar de sectie Inferentie met camera.



Aangemaakt 2023-11-12, Bijgewerkt 2024-07-05
Auteurs: glenn-jocher (9), IvorZhu331 (1), lakshanthad (2)

Reacties