Skip to content

快速入门指南: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)。

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

完成后,跳转到在Raspberry Pi上使用NCNN部分

不使用Docker启动

安装Ultralytics包

这里我们将在Raspberry Pi上安装Ultralytics包及其可选依赖项,以便我们可以将PyTorch模型导出为其他不同格式。

  1. 更新软件包列表,安装pip并升级到最新版本

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. 安装带有可选依赖项的ultralytics pip包

    pip install ultralytics[export]
    
  3. 重启设备

    sudo reboot
    

在Raspberry Pi上使用NCNN

在Ultralytics支持的所有模型导出格式中,NCNN在与Raspberry Pi设备配合使用时提供了最佳的推理性能,因为NCNN针对移动/嵌入式平台(如ARM架构)进行了高度优化。因此,我们推荐在Raspberry Pi上使用NCNN。

将模型转换为NCNN并运行推理

将YOLOv8n模型从PyTorch格式转换为NCNN格式,以使用导出的模型进行推理。

Example

from ultralytics import YOLO

# 加载一个YOLOv8n PyTorch模型
model = YOLO("yolov8n.pt")

# 将模型导出为NCNN格式
model.export(format="ncnn")  # 创建'yolov8n_ncnn_model'

# 加载导出的NCNN模型
ncnn_model = YOLO("yolov8n_ncnn_model")

# 运行推理
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# 将YOLOv8n PyTorch模型导出为NCNN格式
yolo export model=yolov8n.pt format=ncnn  # 创建'yolov8n_ncnn_model'

# 使用导出的模型进行推理
yolo predict model='yolov8n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'

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上运行,并且性能不佳。

对比图表

性能

NVIDIA Jetson Ecosystem

NVIDIA Jetson Ecosystem

详细对比表格

下表展示了在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

from ultralytics import YOLO

# 加载一个YOLOv8n PyTorch模型
model = YOLO("yolov8n.pt")

# 在COCO8数据集上对所有导出格式进行YOLOv8n的速度和准确性基准测试
results = model.benchmarks(data="coco8.yaml", imgsz=640)
# 在COCO8数据集上对所有导出格式进行YOLOv8n的速度和准确性基准测试
yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640

请注意,基准测试结果可能会因系统的具体硬件和软件配置以及运行基准测试时的系统负载而有所不同。为了获得最可靠的结果,请使用包含大量图像的数据集,例如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秒钟。

rpicam-hello

使用相机进行推理

有两种方法可以使用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流。

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

了解更多关于rpicam-vid在官方Raspberry Pi文档中的使用

Example

from ultralytics import YOLO

# 加载一个YOLOv8n PyTorch模型
model = YOLO("yolov8n.pt")

# 运行推理
results = model("tcp://127.0.0.1:8888")
yolo predict model=yolov8n.pt source="tcp://127.0.0.1:8888"

Tip

如果您想更改图像/视频输入类型,请查看我们的文档推理源

使用Raspberry Pi的最佳实践

为了在运行YOLOv8的Raspberry Pi上实现最大性能,有几个最佳实践需要遵循。

  1. 使用SSD

    当使用Raspberry Pi进行24x7连续使用时,建议使用SSD作为系统盘,因为SD卡无法承受持续写入,可能会损坏。借助Raspberry Pi 5上的板载PCIe连接器,现在您可以使用适配器(如NVMe Base for Raspberry Pi 5)连接SSD。

  2. 无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:

  1. Update the package list and install pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Install the Ultralytics package with optional dependencies:
    pip install ultralytics[export]
    
  3. Reboot the device to apply changes:
    sudo reboot
    

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

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:

  1. 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()
    
  2. Using a TCP Stream:

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

For detailed setup instructions, visit the Inference with Camera section.


📅 Created 11 months ago ✏️ Updated 9 days ago

Comments