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.
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.
-
Paketliste aktualisieren, pip installieren und auf den neuesten Stand bringen
-
Installiere
ultralytics
Pip-Paket mit optionalen Abhängigkeiten -
Das Gerät neu starten
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")
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
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
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), or
data='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.
Tipp
Erfahre mehr über die verschiedenen Kameramodule, die der Raspberry Pi anbietet, und darüber , wie du mit den Raspberry Pi Kameramodulen loslegen kannst.
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.
Tipp
Erfahre mehr über rpicam-hello
Verwendung in der offiziellen Raspberry Pi Dokumentation
Inferenz mit Kamera
Es gibt 2 Methoden, um mit der Raspberry Pi Kamera auf YOLOv8 Modelle zu schließen.
Verwendung
Wir können picamera2
der 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.
Erfahre mehr über rpicam-vid
Verwendung in der offiziellen Raspberry Pi Dokumentation
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.
-
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.
-
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:
- Aktualisiere die Paketliste und installiere
pip
: - Installiere das Paket Ultralytics mit optionalen Abhängigkeiten:
- Starte das Gerät neu, um die Änderungen zu übernehmen:
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")
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:
-
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()
-
Einen TCP-Stream verwenden:
Detaillierte Anweisungen zur Einrichtung findest du im Abschnitt Inferenz mit Kamera.