快速入门指南:Raspberry Pi与Ultralytics YOLOv8
本综合指南提供了在Raspberry Pi设备上部署Ultralytics YOLOv8的详细步骤。此外,它还展示了性能基准测试,以展示YOLOv8在这些小型而强大的设备上的能力。
观看: Raspberry Pi 5的更新和改进。
Note
本指南已在运行最新Raspberry Pi OS Bookworm (Debian 12)的Raspberry Pi 4和Raspberry Pi 5上进行了测试。预计在安装了相同Raspberry Pi OS Bookworm的旧款Raspberry Pi设备(如Raspberry Pi 3)上使用本指南也能正常工作。
什么是Raspberry Pi?
Raspberry Pi是一款小型、经济实惠的单板计算机。它因广泛的项目和应用而广受欢迎,从爱好者的家庭自动化到工业用途。Raspberry Pi板能够运行多种操作系统,并提供GPIO(通用输入/输出)引脚,便于与传感器、执行器和其他硬件组件集成。它们有不同的型号,规格各异,但都共享相同的基本设计理念:低成本、紧凑和多功能。
Raspberry Pi系列对比
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 最大频率 | 1.4GHz | 1.8GHz | 2.4GHz |
GPU | Videocore IV | Videocore VI | VideoCore VII |
GPU 最大频率 | 400Mhz | 500Mhz | 800Mhz |
内存 | 1GB LPDDR2 SDRAM | 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM | 4GB, 8GB LPDDR4X-4267 SDRAM |
PCIe | N/A | N/A | 1xPCIe 2.0 接口 |
最大功耗 | 2.5A@5V | 3A@5V | 5A@5V (PD 启用) |
什么是Raspberry Pi OS?
Raspberry Pi OS(以前称为Raspbian)是基于Debian GNU/Linux发行版的类Unix操作系统,专为Raspberry Pi系列紧凑型单板计算机而设计,由Raspberry Pi基金会分发。Raspberry Pi OS针对Raspberry Pi的ARM CPU进行了高度优化,并使用经过修改的LXDE桌面环境与Openbox堆叠窗口管理器。Raspberry Pi OS正在积极开发中,重点是提高尽可能多的Debian软件包在Raspberry Pi上的稳定性和性能。
将Raspberry Pi OS刷入Raspberry Pi
在获得Raspberry Pi后,首先要做的是将Raspberry Pi OS刷入micro-SD卡,插入设备并启动进入操作系统。请按照Raspberry Pi的详细入门文档准备您的设备以首次使用。
设置Ultralytics
在Raspberry Pi上设置Ultralytics包以构建您的下一个计算机视觉项目有两种方法。您可以选择其中一种。
使用Docker启动
在Raspberry Pi上开始使用Ultralytics YOLOv8的最快方法是使用为Raspberry Pi预构建的Docker镜像运行。 执行以下命令以拉取Docker容器并在Raspberry Pi上运行。这是基于arm64v8/debian Docker镜像,该镜像包含在Python3环境中的Debian 12(Bookworm)。
完成后,跳转到在Raspberry Pi上使用NCNN部分。
不使用Docker启动
安装Ultralytics包
这里我们将在Raspberry Pi上安装Ultralytics包及其可选依赖项,以便我们可以将PyTorch模型导出为其他不同格式。
-
更新软件包列表,安装pip并升级到最新版本
-
安装带有可选依赖项的
ultralytics
pip包 -
重启设备
在Raspberry Pi上使用NCNN
在Ultralytics支持的所有模型导出格式中,NCNN在与Raspberry Pi设备配合使用时提供了最佳的推理性能,因为NCNN针对移动/嵌入式平台(如ARM架构)进行了高度优化。因此,我们推荐在Raspberry Pi上使用NCNN。
将模型转换为NCNN并运行推理
将YOLOv8n模型从PyTorch格式转换为NCNN格式,以使用导出的模型进行推理。
Example
Tip
有关支持的导出选项的更多详细信息,请访问Ultralytics关于部署选项的文档页面。
Raspberry Pi 5 vs Raspberry Pi 4 YOLOv8基准测试
Ultralytics团队在九种不同的模型格式上运行了YOLOv8基准测试,测量了速度和准确性:PyTorch、TorchScript、ONNX、OpenVINO、TF SavedModel、TF GraphDef、TF Lite、PaddlePaddle、NCNN。基准测试在Raspberry Pi 5和Raspberry Pi 4上以FP32精度运行,默认输入图像大小为640。
Note
我们仅包括了YOLOv8n和YOLOv8s模型的基准测试,因为其他模型尺寸太大,无法在Raspberry Pi上运行,并且性能不佳。
对比图表
性能
详细对比表格
下表展示了在Raspberry Pi 4和Raspberry Pi 5上运行的两种不同模型(YOLOv8n、YOLOv8s)在九种不同格式(PyTorch、TorchScript、ONNX、OpenVINO、TF SavedModel、TF GraphDef、TF Lite、PaddlePaddle、NCNN)的基准测试结果,给出了每种组合的状态、磁盘大小、mAP50-95(B)指标和推理时间。
性能
格式 | 状态 | 磁盘大小 (MB) | mAP50-95(B) | 推理时间 (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 | Size on disk (MB) | mAP50-95(B) | Inference time (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 | Size on disk (MB) | mAP50-95(B) | Inference time (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 | Size on disk (MB) | mAP50-95(B) | Inference time (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 |
复现我们的结果
要在所有导出格式上复现上述Ultralytics基准测试,请运行以下代码:
Example
请注意,基准测试结果可能会因系统的具体硬件和软件配置以及运行基准测试时的系统负载而有所不同。为了获得最可靠的结果,请使用包含大量图像的数据集,例如data='coco8.yaml'
(4张验证图像)或data='coco.yaml'
(5000张验证图像)。
使用树莓派摄像头
在使用树莓派进行计算机视觉项目时,获取实时视频流以执行推理至关重要。树莓派板载的MIPI CSI连接器允许您连接官方的树莓派摄像头模块。在本指南中,我们使用了树莓派摄像头模块3来获取视频流,并使用YOLOv8模型进行推理。
Tip
了解更多关于Raspberry Pi提供的不同相机模块以及如何开始使用Raspberry Pi相机模块的信息。
Note
Raspberry Pi 5使用的CSI连接器比Raspberry Pi 4(15针 vs 22针)更小,因此您需要一个15针到22针的适配器线缆来连接Raspberry Pi相机。
测试相机
在将相机连接到Raspberry Pi后,执行以下命令。您应该会看到来自相机的实时视频流,持续约5秒钟。
Tip
使用相机进行推理
有两种方法可以使用Raspberry Pi相机来推理YOLOv8模型。
Usage
我们可以使用预装在Raspberry Pi OS中的picamera2
来访问相机并推理YOLOv8模型。
Example
import cv2
from picamera2 import Picamera2
from ultralytics import YOLO
# 初始化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()
# 加载YOLOv8模型
model = YOLO("yolov8n.pt")
while True:
# 逐帧捕获
frame = picam2.capture_array()
# 在帧上运行YOLOv8推理
results = model(frame)
# 在帧上可视化结果
annotated_frame = results[0].plot()
# 显示结果帧
cv2.imshow("Camera", annotated_frame)
# 如果按下'q'键则退出循环
if cv2.waitKey(1) == ord("q"):
break
# 释放资源并关闭窗口
cv2.destroyAllWindows()
我们需要使用rpicam-vid
从连接的相机启动一个TCP流,以便稍后推理时可以使用此流URL作为输入。执行以下命令以启动TCP流。
Tip
如果您想更改图像/视频输入类型,请查看我们的文档推理源
使用Raspberry Pi的最佳实践
为了在运行YOLOv8的Raspberry Pi上实现最大性能,有几个最佳实践需要遵循。
-
使用SSD
当使用Raspberry Pi进行24x7连续使用时,建议使用SSD作为系统盘,因为SD卡无法承受持续写入,可能会损坏。借助Raspberry Pi 5上的板载PCIe连接器,现在您可以使用适配器(如NVMe Base for Raspberry Pi 5)连接SSD。
-
无GUI刷机
在刷写Raspberry Pi OS时,您可以选择不安装桌面环境(Raspberry Pi OS Lite),这样可以节省一些设备上的RAM,为计算机视觉处理留出更多空间。
下一步
恭喜您成功在Raspberry Pi上设置YOLO!如需进一步学习和支持,请访问Ultralytics YOLOv8文档和Kashmir World Foundation。
致谢和引用
This guide was initially created by Daan Eeltink for Kashmir World Foundation, an organization dedicated to the use of YOLO for the conservation of endangered species. We acknowledge their pioneering work and educational focus in the realm of object detection technologies.
For more information about Kashmir World Foundation's activities, you can visit their website.
FAQ
How do I set up Ultralytics YOLOv8 on a Raspberry Pi without using Docker?
To set up Ultralytics YOLOv8 on a Raspberry Pi without Docker, follow these steps:
- Update the package list and install
pip
: - Install the Ultralytics package with optional dependencies:
- Reboot the device to apply changes:
For detailed instructions, refer to the Start without Docker section.
Why should I use Ultralytics YOLOv8's NCNN format on Raspberry Pi for AI tasks?
Ultralytics YOLOv8's NCNN format is highly optimized for mobile and embedded platforms, making it ideal for running AI tasks on Raspberry Pi devices. NCNN maximizes inference performance by leveraging ARM architecture, providing faster and more efficient processing compared to other formats. For more details on supported export options, visit the Ultralytics documentation page on deployment options.
How can I convert a YOLOv8 model to NCNN format for use on Raspberry Pi?
You can convert a PyTorch YOLOv8 model to NCNN format using either Python or CLI commands:
Example
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")
For more details, see the Use NCNN on Raspberry Pi section.
What are the hardware differences between Raspberry Pi 4 and Raspberry Pi 5 relevant to running YOLOv8?
Key differences include:
- CPU: Raspberry Pi 4 uses Broadcom BCM2711, Cortex-A72 64-bit SoC, while Raspberry Pi 5 uses Broadcom BCM2712, Cortex-A76 64-bit SoC.
- Max CPU Frequency: Raspberry Pi 4 has a max frequency of 1.8GHz, whereas Raspberry Pi 5 reaches 2.4GHz.
- Memory: Raspberry Pi 4 offers up to 8GB of LPDDR4-3200 SDRAM, while Raspberry Pi 5 features LPDDR4X-4267 SDRAM, available in 4GB and 8GB variants.
These enhancements contribute to better performance benchmarks for YOLOv8 models on Raspberry Pi 5 compared to Raspberry Pi 4. Refer to the Raspberry Pi Series Comparison table for more details.
How can I set up a Raspberry Pi Camera Module to work with Ultralytics YOLOv8?
There are two methods to set up a Raspberry Pi Camera for YOLOv8 inference:
-
Using
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()
-
Using a TCP Stream:
For detailed setup instructions, visit the Inference with Camera section.