跳至内容

快速入门指南:Raspberry Pi 与Ultralytics YOLOv8

本综合指南提供了在Raspberry Pi设备上部署Ultralytics YOLOv8 的详细攻略。此外,它还展示了性能基准,以证明YOLOv8 在这些小巧而功能强大的设备上的能力。



观看: Raspberry Pi 5 的更新和改进。

备注

本指南已在运行最新 Raspberry PiOS Bookworm(Debian 12)的 Raspberry Pi 4 和 Raspberry Pi 5 上进行了测试。对于较旧的 Raspberry Pi 设备,如 Raspberry Pi 3,只要安装了相同的 Raspberry Pi OS Bookworm,使用本指南也可正常工作。

什么是 Raspberry Pi?

Raspberry Pi 是一种小型、经济实惠的单板计算机。从业余爱好者的家庭自动化到工业用途,它在各种项目和应用中广受欢迎。Raspberry Pi 板能够运行各种操作系统,并提供 GPIO(通用输入/输出)引脚,可轻松与传感器、执行器和其他硬件组件集成。它们有不同的型号,规格也各不相同,但都具有相同的基本设计理念,即低成本、紧凑型和多功能。

树莓派系列比较

树莓派 3 树莓派 4 树莓派 5
CPU Broadcom BCM2837、Cortex-A53 64 位 SoC Broadcom BCM2711、Cortex-A72 64 位 SoC Broadcom BCM2712、Cortex-A76 64 位 SoC
CPU 最大频率 1.4GHz 1.8GHz 2.4GHz
GPU Videocore IV Videocore VI 视频核心 VII
GPU 最大频率 400Mhz 500Mhz 800MHz
内存 1GB LPDDR2 SDRAM 1GB、2GB、4GB、8GB LPDDR4-3200 SDRAM 4GB, 8GB LPDDR4X-4267 SDRAM
PCIe 不适用 不适用 1xPCIe 2.0 接口
最大功率 2.5A@5V 3A@5V 5A@5V(启用 PD)

什么是 Raspberry Pi OS?

Raspberry Pi OS(原名 Raspbian)是一个类 Unix 操作系统,基于 Debian GNU/Linux 发行版,适用于 Raspberry Pi 基金会发行的 Raspberry Pi 系列紧凑型单板计算机。Raspberry Pi OS 针对配备 ARM CPU 的 Raspberry Pi 进行了高度优化,并使用经过修改的 LXDE 桌面环境和 Openbox 堆叠窗口管理器。Raspberry Pi OS 正在积极开发中,重点是提高尽可能多的 Debian 软件包在 Raspberry Pi 上的稳定性和性能。

将 Raspberry Pi 操作系统闪存到 Raspberry Pi 上

拿到 Raspberry Pi 后,要做的第一件事就是用 Raspberry Pi OS 闪存 micro-SD 卡,插入设备并启动操作系统。按照RaspberryPi 提供的详细入门文档,为首次使用设备做好准备。

设置Ultralytics

在 Raspberry Pi 上安装Ultralytics 软件包以构建下一个计算机视觉项目有两种方法。你可以使用其中任何一种。

从 Docker 开始

在 Raspberry Pi 上开始使用Ultralytics YOLOv8 的最快方法是使用为 Raspberry Pi 预制的 docker 镜像。

执行下面的命令,调出 Docker 容器并在 Raspberry Pi 上运行。这是基于arm64v8/debiandocker 镜像,其中包含 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 软件包

在这里我们将安装 Ultralytics 带有可选依赖项的 Raspberry Pi 上的软件包,以便我们可以导出 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.NET 支持的所有模型导出格式中,.NET 是最受欢迎的、 NCNN由于NCNN 针对移动/嵌入式平台(如 ARM 架构)进行了高度优化,因此在使用 Raspberry Pi 设备时可提供最佳推理性能。因此,我们建议在使用 Raspberry Pi 时使用NCNN 。

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

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

示例

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'

提示

有关支持的导出选项的详细信息,请访问Ultralytics 部署选项文档页面

Raspberry Pi 5 与 Raspberry Pi 4YOLOv8 基准测试

YOLOv8 基准测试由 Ultralytics 团队采用九种不同的模型格式来测量速度和准确性: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF 建兴 PaddlePaddle, NCNN.基准测试在 Raspberry Pi 5 和 Raspberry Pi 4 上以 FP32 精度运行,默认输入图像大小为 640。

备注

我们只包含YOLOv8n 和YOLOv8s 机型的基准测试,因为其他机型尺寸太大,无法在 Raspberry Pis 上运行,也无法提供像样的性能。

对比图表

性能

NVIDIA 捷信生态系统

NVIDIA 捷信生态系统

详细对照表

下表显示了两个不同模型(YOLOv8n, YOLOv8s) 跨越九种不同的格式 (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF 建兴 PaddlePaddle, NCNN),在 Raspberry Pi 4 和 Raspberry Pi 5 上运行,为我们提供了每个组合的状态、大小、mAP50-95(B) 指标和推理时间。

性能

格式 现状 磁盘大小(MB) mAP50-95(B) 推理时间(毫秒/分钟)
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 轻型 12.3 0.6092 380.67
PaddlePaddle 24.4 0.6092 703.51
NCNN 12.2 0.6034 94.28
格式 现状 磁盘大小(MB) mAP50-95(B) 推理时间(毫秒/分钟)
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 轻型 42.8 0.7136 1013.27
PaddlePaddle 85.5 0.7136 1560.23
NCNN 42.7 0.7204 211.26
格式 现状 磁盘大小(MB) mAP50-95(B) 推理时间(毫秒/分钟)
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 轻型 12.3 0.6092 950.29
PaddlePaddle 24.4 0.6092 1507.75
NCNN 12.2 0.6092 414.73
格式 现状 磁盘大小(MB) mAP50-95(B) 推理时间(毫秒/分钟)
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 轻型 42.8 0.7136 2945.03
PaddlePaddle 85.5 0.7136 3962.62
NCNN 42.7 0.7136 1042.39

复制我们的结果

要在所有导出格式上重现上述Ultralytics 基准,请运行此代码:

示例

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

请注意,基准测试结果可能会因系统的具体硬件和软件配置以及运行基准测试时系统的当前工作量而有所不同。为获得最可靠的结果,请使用包含大量图像的数据集,即 data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 val images)。

使用 Raspberry Pi 摄像头

在使用 Raspberry Pi 进行计算机视觉项目时,抓取实时视频馈送以执行推理是非常重要的。Raspberry Pi 上的板载 MIPI CSI 连接器允许您连接官方的 Raspberry Pi 摄像头模块。在本指南中,我们使用Raspberry Pi 摄像头模块 3抓取视频源,并使用YOLOv8 模型执行推理。

备注

Raspberry Pi 5 使用比 Raspberry Pi 4 更小的 CSI 接头(15 针与 22 针),因此您需要15 针到 22 针的转接线来连接 Raspberry Pi 摄像头。

测试相机

将摄像头连接到 Raspberry Pi 后执行以下命令。你应该能看到摄像机的实时视频画面,大约持续 5 秒钟。

rpicam-hello

用照相机推理

使用 Raspberry Pi 相机推理YOLOv8 模型有两种方法。

使用方法

我们可以使用 picamera2它预装了 Raspberry Pi OS,可以访问摄像头和推理YOLOv8 模型。

示例

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

我们需要用 rpicam-vid 这样我们就可以在以后推理时将此流 URL 用作输入。执行以下命令启动 TCP 流。

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

了解更多 rpicam-vid 使用 Raspberry Pi 官方文档

示例

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"

提示

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

使用 Raspberry Pi 的最佳实践

要在运行YOLOv8 的 Raspberry Pis 上实现最高性能,需要遵循几个最佳实践。

  1. 使用固态硬盘

    在全天候持续使用 Raspberry Pi 时,建议使用固态硬盘作为系统的固态硬盘,因为 SD 卡无法承受连续写入,可能会损坏。有了 Raspberry Pi 5 的板载 PCIe 接口,现在就可以使用适配器(如Raspberry Pi 5 的 NVMe Base)连接固态硬盘了。

  2. 无图形用户界面的 Flash

    闪存 Raspberry Pi OS 时,可以选择不安装桌面环境(Raspberry Pi OS Lite),这样可以节省设备的内存,为计算机视觉处理留出更多空间。

下一步工作

恭喜您在 Raspberry Pi 上成功设置YOLO !如需进一步学习和支持,请访问Ultralytics YOLOv8 Docs克什米尔世界基金会

致谢和引用

本指南最初由 Daan Eeltink 为克什米尔世界基金会(Kashmir World Foundation)制作,该组织致力于利用YOLO 保护濒危物种。我们对他们在物体检测技术领域的开拓性工作和教育重点表示感谢。

有关克什米尔世界基金会活动的更多信息,请访问其网站

常见问题

不使用 Docker,如何在 Raspberry Pi 上设置Ultralytics YOLOv8 ?

要在没有 Docker 的 Raspberry Pi 上设置Ultralytics YOLOv8 ,请按照以下步骤操作:

  1. 更新软件包列表并安装 pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. 安装Ultralytics 软件包及可选依赖项:
    pip install ultralytics[export]
    
  3. 重新启动设备以应用更改:
    sudo reboot
    

有关详细说明,请参阅 "不使用 Docker 启动"部分。

为什么要在 Raspberry Pi 上使用Ultralytics YOLOv8 的NCNN 格式来执行人工智能任务?

Ultralytics YOLOv8 NCNN 格式针对移动和嵌入式平台进行了高度优化,是在 Raspberry Pi 设备上运行人工智能任务的理想选择。 利用 ARM 架构最大限度地提高了推理性能,与其他格式相比,处理速度更快,效率更高。有关支持的导出选项的更多详情,请访问NCNN Ultralytics 文档页面的部署选项

如何将YOLOv8 模型转换为NCNN 格式,以便在 Raspberry Pi 上使用?

您可以使用Python 或CLI 命令将PyTorch YOLOv8 模型转换为NCNN 格式:

示例

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'

更多详情,请参阅在 Raspberry Pi 上使用NCNN 部分。

Raspberry Pi 4 和 Raspberry Pi 5 在运行YOLOv8 方面有哪些硬件差异?

主要区别包括:

  • CPU:Raspberry Pi 4 使用 Broadcom BCM2711、Cortex-A72 64 位 SoC,而 Raspberry Pi 5 使用 Broadcom BCM2712、Cortex-A76 64 位 SoC。
  • CPU 最高频率:Raspberry Pi 4 的最大频率为 1.8GHz,而 Raspberry Pi 5 则达到 2.4GHz。
  • 内存Raspberry Pi 4 提供高达 8GB 的 LPDDR4-3200 SDRAM,而 Raspberry Pi 5 采用 LPDDR4X-4267 SDRAM,有 4GB 和 8GB 两种规格。

与 Raspberry Pi 4 相比,这些增强功能有助于提高YOLOv8 型号在 Raspberry Pi 5 上的性能基准。更多详情,请参阅Raspberry Pi 系列对比表。

如何设置 Raspberry Pi 摄像头模块以便与Ultralytics YOLOv8 一起使用?

有两种方法可以设置 Raspberry Pi 摄像机,用于YOLOv8 推理:

  1. 使用 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. 使用 TCP 流

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

有关详细设置说明,请访问 "使用摄像头推理"部分。



创建于 2023-11-12,更新于 2024-07-05
作者:glenn-jocher(9),IvorZhu331(1),lakshanthad(2)

评论