Zum Inhalt springen

Schnellstart-Anleitung: Raspberry Pi mit Ultralytics YOLOv8

Dieser umfassende Leitfaden bietet eine detaillierte Anleitung für den Einsatz von Ultralytics YOLOv8 auf Raspberry Pi-Geräten. Außerdem werden Leistungsbenchmarks vorgestellt, um die Fähigkeiten von YOLOv8 auf diesen kleinen und leistungsstarken Geräten zu demonstrieren.



Pass auf: Raspberry Pi 5 Updates und Verbesserungen.

Hinweis

Diese Anleitung wurde mit dem Raspberry Pi 4 und Raspberry Pi 5 getestet, auf denen das neueste Raspberry Pi OS Bookworm (Debian 12) läuft. Wenn du diese Anleitung für ältere Raspberry Pi-Geräte wie den Raspberry Pi 3 verwendest, wird sie voraussichtlich funktionieren, solange das gleiche Raspberry Pi OS Bookworm installiert ist.

Was ist der Raspberry Pi?

Der Raspberry Pi ist ein kleiner, erschwinglicher Einplatinencomputer. Er ist für eine Vielzahl von Projekten und Anwendungen beliebt, von der Heimautomatisierung bis hin zu industriellen Anwendungen. Auf den Raspberry Pi-Boards können verschiedene Betriebssysteme ausgeführt werden und sie verfügen über GPIO-Pins (General Purpose Input/Output), die eine einfache Integration von Sensoren, Aktoren und anderen Hardwarekomponenten ermöglichen. Es gibt verschiedene Modelle mit unterschiedlichen Spezifikationen, aber alle haben die gleiche Designphilosophie: Sie sind kostengünstig, kompakt und vielseitig.

Raspberry Pi Serie Vergleich

Raspberry Pi 3 Raspberry Pi 4 Raspberry Pi 5
CPU Broadcom BCM2837, Cortex-A53 64Bit SoC Broadcom BCM2711, Cortex-A72 64Bit SoC Broadcom BCM2712, Cortex-A76 64Bit SoC
CPU Maximale Frequenz 1,4GHz 1.8GHz 2,4GHz
GPU Videocore IV Videocore VI VideoCore VII
GPU Maximale Frequenz 400Mhz 500Mhz 800Mhz
Speicher 1GB LPDDR2 SDRAM 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM 4GB, 8GB LPDDR4X-4267 SDRAM
PCIe N/A N/A 1xPCIe 2.0 Schnittstelle
Maximale Leistungsaufnahme 2,5A@5V 3A@5V 5A@5V (PD aktiviert)

Was ist Raspberry Pi OS?

Raspberry Pi OS (früher bekannt als Raspbian) ist ein Unix-ähnliches Betriebssystem, das auf der Debian GNU/Linux-Distribution für die Raspberry Pi-Familie kompakter Einplatinencomputer basiert und von der Raspberry Pi Foundation vertrieben wird. Raspberry Pi OS ist speziell für den Raspberry Pi mit ARM-CPUs optimiert und verwendet eine modifizierte LXDE-Desktopumgebung mit dem Openbox Stacking Window Manager. Raspberry Pi OS wird aktiv weiterentwickelt, wobei der Schwerpunkt auf der Verbesserung der Stabilität und Leistung möglichst vieler Debian-Pakete auf dem Raspberry Pi liegt.

Flash Raspberry Pi OS auf Raspberry Pi

Nachdem du einen Raspberry Pi in die Hände bekommen hast, musst du als Erstes eine micro-SD-Karte mit Raspberry Pi OS flashen, in das Gerät einlegen und das Betriebssystem starten. Folge der ausführlichen Getting Started Dokumentation von Raspberry Pi, um dein Gerät für den ersten Gebrauch vorzubereiten.

Einrichten Ultralytics

There are two ways of setting up Ultralytics package on Raspberry Pi to build your next Computer Vision project. You can use either of them.

Mit Docker beginnen

Der schnellste Weg, um mit Ultralytics YOLOv8 auf dem Raspberry Pi loszulegen, ist die Verwendung eines vorgefertigten Docker-Images für den Raspberry Pi.

Führe den unten stehenden Befehl aus, um den Docker-Container zu ziehen und auf dem Raspberry Pi auszuführen. Er basiert auf dem Docker-Image arm64v8/debian, das Debian 12 (Bookworm) in einer Python3-Umgebung enthält.

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

Wenn das erledigt ist, kannst du mit dem Abschnitt NCNN auf dem Raspberry Pi fortfahren.

Start ohne Docker

Ultralytics Paket installieren

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. Paketliste aktualisieren, pip installieren und auf den neuesten Stand bringen

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installiere ultralytics Pip-Paket mit optionalen Abhängigkeiten

    pip install ultralytics[export]
    
  3. Das Gerät neu starten

    sudo reboot
    

NCNN auf dem Raspberry Pi verwenden

Von allen Modell-Exportformaten, die von Ultralytics unterstützt werden, NCNN bietet die beste Inferenzleistung bei der Arbeit mit Raspberry Pi-Geräten, da NCNN speziell für mobile/eingebettete Plattformen (wie die ARM-Architektur) optimiert ist. Daher empfehlen wir, NCNN für den Raspberry Pi zu verwenden.

Modell in NCNN umwandeln und Inferenz durchführen

Das Modell YOLOv8n im Format PyTorch wird in NCNN konvertiert, um die Inferenz mit dem exportierten Modell durchzuführen.

Beispiel

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'

Tipp

Weitere Details zu den unterstützten Exportoptionen findest du auf der Ultralytics Dokumentationsseite zu den Bereitstellungsoptionen.

Raspberry Pi 5 vs. Raspberry Pi 4 YOLOv8 Benchmarks

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.

Hinweis

Wir haben nur Benchmarks für die Modelle YOLOv8n und YOLOv8s aufgenommen, da andere Modelle zu groß sind, um auf den Raspberry Pis zu laufen und keine vernünftige Leistung bieten.

Vergleichstabelle

Leistung

NVIDIA Jetson Ökosystem

NVIDIA Jetson Ökosystem

Detaillierte Vergleichstabelle

Die folgende Tabelle zeigt die Benchmark-Ergebnisse für zwei verschiedene Modelle (YOLOv8n, YOLOv8s) in neun verschiedenen Formaten (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Leicht PaddlePaddle, NCNN), die sowohl auf Raspberry Pi 4 als auch auf Raspberry Pi 5 läuft und uns den Status, die Größe, die mAP50-95(B)-Metrik und die Inferenzzeit für jede Kombination liefert.

Leistung

Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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
Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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
Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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
Format Status Größe auf der Festplatte (MB) mAP50-95(B) Inferenzzeit (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

Reproduziere unsere Ergebnisse

Um die oben genannten Ultralytics Benchmarks für alle Exportformate zu reproduzieren, führe diesen Code aus:

Beispiel

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

Beachte, dass die Benchmarking-Ergebnisse je nach der genauen Hardware- und Softwarekonfiguration eines Systems sowie der aktuellen Arbeitsbelastung des Systems zum Zeitpunkt der Durchführung der Benchmarks variieren können. Die zuverlässigsten Ergebnisse erhältst du, wenn du einen Datensatz mit einer großen Anzahl von Bildern verwendest, d. h. data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 val-Bilder).

Raspberry Pi Kamera verwenden

Wenn du den Raspberry Pi für Computer-Vision-Projekte verwendest, kann es wichtig sein, Echtzeit-Videobilder zu erfassen, um Inferenzen durchzuführen. Der integrierte MIPI CSI-Anschluss des Raspberry Pi ermöglicht es dir, offizielle Raspberry PI-Kameramodule anzuschließen. In diesem Leitfaden haben wir ein Raspberry Pi Kameramodul 3 verwendet, um die Videobilder zu erfassen und Inferenzen mit YOLOv8 Modellen durchzuführen.

Hinweis

Der Raspberry Pi 5 verwendet kleinere CSI-Anschlüsse als der Raspberry Pi 4 (15-polig vs. 22-polig), daher brauchst du ein Adapterkabel von 15-polig auf 22-polig, um eine Raspberry Pi Kamera anzuschließen.

Teste die Kamera

Führe den folgenden Befehl aus, nachdem du die Kamera mit dem Raspberry Pi verbunden hast. Du solltest für etwa 5 Sekunden ein Live-Video von der Kamera sehen.

rpicam-hello

Inferenz mit Kamera

Es gibt 2 Methoden, um mit der Raspberry Pi Kamera auf YOLOv8 Modelle zu schließen.

Verwendung

Wir können picamera2der mit Raspberry Pi OS vorinstalliert ist, um auf die Kamera und die Inferenz YOLOv8 Modelle zuzugreifen.

Beispiel

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

Wir müssen einen TCP-Stream initiieren mit rpicam-vid von der angeschlossenen Kamera, damit wir diese Stream-URL später beim Inferencing als Eingabe verwenden können. Führe den folgenden Befehl aus, um den TCP-Stream zu starten.

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

Erfahre mehr über rpicam-vid Verwendung in der offiziellen Raspberry Pi Dokumentation

Beispiel

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"

Tipp

Sieh dir unser Dokument über Inferenzquellen an, wenn du den Bild-/Videoeingangstyp ändern möchtest.

Best Practices bei der Verwendung des Raspberry Pi

Es gibt einige Best Practices, die du befolgen solltest, um die maximale Leistung auf Raspberry Pis mit YOLOv8 zu erreichen.

  1. Verwende eine SSD

    Wenn du den Raspberry Pi rund um die Uhr benutzt, ist es empfehlenswert, eine SSD für das System zu verwenden, da eine SD-Karte den ständigen Schreibvorgängen nicht standhalten kann und kaputt gehen könnte. Mit dem integrierten PCIe-Anschluss des Raspberry Pi 5 kannst du jetzt SSDs mit einem Adapter wie der NVMe Base for Raspberry Pi 5 anschließen.

  2. Flash ohne GUI

    Wenn du Raspberry Pi OS flashen möchtest, kannst du auf die Installation der Desktop-Umgebung (Raspberry Pi OS Lite) verzichten, um etwas Arbeitsspeicher auf dem Gerät zu sparen und mehr Platz für die Bildverarbeitung zu schaffen.

Nächste Schritte

Herzlichen Glückwunsch zur erfolgreichen Einrichtung von YOLO auf deinem Raspberry Pi! Weitere Informationen und Unterstützung findest du unter Ultralytics YOLOv8 Docs und Kashmir World Foundation.

Danksagungen und Zitate

Dieser Leitfaden wurde ursprünglich von Daan Eeltink für die Kashmir World Foundation erstellt, eine Organisation, die sich für den Einsatz von YOLO zum Schutz bedrohter Arten einsetzt. Wir danken Daan Eeltink für seine Pionierarbeit und sein pädagogisches Engagement auf dem Gebiet der Objekterkennungstechnologien.

Weitere Informationen über die Aktivitäten der Kashmir World Foundation findest du auf deren Website.

FAQ

Wie kann ich Ultralytics YOLOv8 auf einem Raspberry Pi einrichten, ohne Docker zu benutzen?

Um Ultralytics YOLOv8 auf einem Raspberry Pi ohne Docker einzurichten, befolge diese Schritte:

  1. Aktualisiere die Paketliste und installiere pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installiere das Paket Ultralytics mit optionalen Abhängigkeiten:
    pip install ultralytics[export]
    
  3. Starte das Gerät neu, um die Änderungen zu übernehmen:
    sudo reboot
    

Ausführliche Anweisungen findest du im Abschnitt Starten ohne Docker.

Warum sollte ich Ultralytics YOLOv8 's NCNN Format auf dem Raspberry Pi für KI-Aufgaben verwenden?

Ultralytics YOLOv8Das Format NCNN ist speziell für mobile und eingebettete Plattformen optimiert und eignet sich daher ideal für die Ausführung von KI-Aufgaben auf Raspberry Pi-Geräten. NCNN maximiert die Inferenzleistung durch die Nutzung der ARM-Architektur und bietet im Vergleich zu anderen Formaten eine schnellere und effizientere Verarbeitung. Weitere Details zu den unterstützten Exportoptionen findest du auf der Ultralytics Dokumentationsseite zu den Einsatzoptionen.

Wie kann ich ein Modell von YOLOv8 in das Format NCNN konvertieren, um es auf dem Raspberry Pi zu verwenden?

Du kannst ein PyTorch YOLOv8 Modell mit den Befehlen Python oder CLI in das NCNN Format umwandeln:

Beispiel

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'

Weitere Informationen findest du im Abschnitt NCNN auf dem Raspberry Pi verwenden.

Was sind die Hardware-Unterschiede zwischen dem Raspberry Pi 4 und dem Raspberry Pi 5, die für die Ausführung von YOLOv8 relevant sind?

Zu den wichtigsten Unterschieden gehören:

  • CPU: Raspberry Pi 4 verwendet Broadcom BCM2711, Cortex-A72 64-bit SoC, während Raspberry Pi 5 Broadcom BCM2712, Cortex-A76 64-bit SoC verwendet.
  • Maximale CPU Frequenz: Der Raspberry Pi 4 hat eine maximale Frequenz von 1,8GHz, während der Raspberry Pi 5 2,4GHz erreicht.
  • Speicher: Der Raspberry Pi 4 bietet bis zu 8 GB LPDDR4-3200 SDRAM, während der Raspberry Pi 5 mit LPDDR4X-4267 SDRAM ausgestattet ist, der in Varianten von 4 GB und 8 GB erhältlich ist.

Diese Verbesserungen tragen zu besseren Leistungsbenchmarks für YOLOv8 Modelle auf dem Raspberry Pi 5 im Vergleich zum Raspberry Pi 4 bei. Weitere Informationen findest du in der Tabelle " Vergleich der Raspberry Pi-Serien ".

Wie kann ich ein Raspberry Pi Kameramodul so einrichten, dass es mit Ultralytics YOLOv8 funktioniert?

Es gibt zwei Methoden, um eine Raspberry Pi Kamera für YOLOv8 einzurichten:

  1. Mit 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. Einen TCP-Stream verwenden:

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

Detaillierte Anweisungen zur Einrichtung findest du im Abschnitt Inferenz mit Kamera.


📅 Created 11 months ago ✏️ Updated 8 days ago

Kommentare