快速入门指南:带有 Ultralytics YOLO11 的 Raspberry Pi
本综合指南详细介绍了如何在 Raspberry Pi 设备上部署 Ultralytics YOLO11。此外,它还展示了性能基准,以演示 YOLO11 在这些小型且功能强大的设备上的能力。
观看: Raspberry Pi 5 的更新和改进。
注意
本指南已在运行最新 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 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 | 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)是一个类 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 OS 刷入 Raspberry Pi
获得 Raspberry Pi 后,首先要做的是将 Raspberry Pi OS 刷入 micro-SD 卡,插入设备并启动到操作系统。请按照 Raspberry Pi 提供的详细入门文档操作,为首次使用做好设备准备。
设置 Ultralytics
在 Raspberry Pi 上设置 Ultralytics 包以构建您的下一个计算机视觉项目有两种方法。您可以选择其中任何一种。
从 Docker 开始
在 Raspberry Pi 上开始使用 Ultralytics YOLO11 的最快方法是运行 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 模型导出为其他不同的格式。
-
更新软件包列表,安装 pip 并升级到最新版本
sudo apt update sudo apt install python3-pip -y pip install -U pip
-
安装
ultralytics
带有可选依赖项的 pip 软件包pip install ultralytics[export]
-
重新启动设备
sudo reboot
在 Raspberry Pi 上使用 NCNN
在 Ultralytics 支持的所有模型导出格式中,NCNN 在使用 Raspberry Pi 设备时可提供最佳的推理性能,因为 NCNN 针对移动/嵌入式平台(如 ARM 架构)进行了高度优化。
将模型转换为 NCNN 并运行推理
PyTorch 格式的 YOLO11n 模型被转换为 NCNN,以使用导出的模型运行推理。
示例
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model to NCNN format
model.export(format="ncnn") # creates 'yolo11n_ncnn_model'
# Load the exported NCNN model
ncnn_model = YOLO("yolo11n_ncnn_model")
# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to NCNN format
yolo export model=yolo11n.pt format=ncnn # creates 'yolo11n_ncnn_model'
# Run inference with the exported model
yolo predict model='yolo11n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'
提示
有关支持的导出选项的更多详细信息,请访问 Ultralytics 文档页面上的部署选项。
Raspberry Pi 5 YOLO11 基准
Ultralytics 团队在十种不同的模型格式上运行了 YOLO11 基准测试,测量了速度和 准确性:PyTorch、TorchScript、ONNX、OpenVINO、TF SavedModel、TF GraphDef、TF Lite、PaddlePaddle、MNN、NCNN。基准测试在 Raspberry Pi 5 上以 FP32 精度运行,默认输入图像大小为 640。
对比图
我们只包含了 YOLO11n 和 YOLO11s 模型的基准测试,因为其他模型尺寸太大,无法在 Raspberry Pi 上运行,并且无法提供不错的性能。

详细对比表
下表显示了两种不同模型(YOLO11n、YOLO11s)在 Raspberry Pi 5 上运行的十种不同格式(PyTorch、TorchScript、ONNX、OpenVINO、TF SavedModel、TF GraphDef、TF Lite、PaddlePaddle、MNN、NCNN)中的基准测试结果,从而为我们提供了每种组合的状态、大小、mAP50-95(B) 指标和推理时间。
性能
格式 | 状态 | 磁盘占用空间 (MB) | mAP50-95(B) | 推理时间 (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 5.4 | 0.5101 | 387.63 |
TorchScript | ✅ | 10.5 | 0.5077 | 457.84 |
ONNX | ✅ | 10.2 | 0.5077 | 191.09 |
OpenVINO | ✅ | 10.4 | 0.5058 | 84.76 |
TF SavedModel | ✅ | 25.9 | 0.5077 | 306.94 |
TF GraphDef | ✅ | 10.3 | 0.5077 | 309.82 |
TF Lite | ✅ | 10.3 | 0.5077 | 425.77 |
PaddlePaddle | ✅ | 20.5 | 0.5077 | 463.93 |
MNN | ✅ | 10.1 | 0.5059 | 114.97 |
NCNN | ✅ | 10.2 | 0.5031 | 94.03 |
格式 | 状态 | 磁盘占用空间 (MB) | mAP50-95(B) | 推理时间 (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 18.4 | 0.5791 | 962.69 |
TorchScript | ✅ | 36.5 | 0.5782 | 1181.94 |
ONNX | ✅ | 36.3 | 0.5782 | 449.85 |
OpenVINO | ✅ | 36.4 | 0.5810 | 181.53 |
TF SavedModel | ✅ | 91.0 | 0.5782 | 660.62 |
TF GraphDef | ✅ | 36.4 | 0.5782 | 669.23 |
TF Lite | ✅ | 36.3 | 0.5782 | 1093.41 |
PaddlePaddle | ✅ | 72.6 | 0.5782 | 1140.61 |
MNN | ✅ | 36.2 | 0.5805 | 274.63 |
NCNN | ✅ | 36.2 | 0.5784 | 224.20 |
使用 Ultralytics 8.3.152 进行基准测试
注意
推理时间不包括预处理/后处理。
复现我们的结果
要复现上述 Ultralytics 在所有导出格式上的基准测试,请运行以下代码:
示例
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Benchmark YOLO11n speed and accuracy on the COCO128 dataset for all all export formats
results = model.benchmark(data="coco128.yaml", imgsz=640)
# Benchmark YOLO11n speed and accuracy on the COCO128 dataset for all all export formats
yolo benchmark model=yolo11n.pt data=coco128.yaml imgsz=640
请注意,基准测试结果可能因系统的具体硬件和软件配置以及运行基准测试时系统的当前工作负载而异。为了获得最可靠的结果,请使用包含大量图像的数据集,例如: data='coco.yaml'
(5000 张验证图像)。
使用 Raspberry Pi 摄像头
当使用 Raspberry Pi 进行计算机视觉项目时,获取实时视频流以执行推理至关重要。Raspberry Pi 上的板载 MIPI CSI 连接器允许您连接官方 Raspberry PI 摄像头模块。在本指南中,我们使用了Raspberry Pi Camera Module 3 来获取视频流并使用 YOLO11 模型执行推理。
提示
了解更多关于 Raspberry Pi 提供的不同摄像头模块,以及 如何开始使用 Raspberry Pi 摄像头模块。
注意
Raspberry Pi 5 使用比 Raspberry Pi 4 更小的 CSI 连接器(15 针 vs 22 针),因此您需要一根 15 针转 22 针的适配器电缆才能连接到 Raspberry Pi Camera。
测试摄像头
将摄像头连接到 Raspberry Pi 后,执行以下命令。您应该会看到来自摄像头的实时视频流,持续约 5 秒。
rpicam-hello
提示
使用摄像头进行推理
使用 Raspberry Pi 摄像头推理 YOLO11 模型有两种方法。
用法
我们可以使用 picamera2
它预装在 Raspberry Pi OS 中,用于访问摄像头并推理 YOLO11 模型。
示例
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 YOLO11 model
model = YOLO("yolo11n.pt")
while True:
# Capture frame-by-frame
frame = picam2.capture_array()
# Run YOLO11 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
从连接的摄像头启动一个 TCP 流,这样我们就可以在稍后进行推理时使用这个流 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 YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Run inference
results = model("tcp://127.0.0.1:8888")
yolo predict model=yolo11n.pt source="tcp://127.0.0.1:8888"
提示
如果您想更改图像/视频输入类型,请查看我们的推理源文档
使用 Raspberry Pi 时的最佳实践
为了在运行 YOLO11 的 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,从而为计算机视觉处理留下更多空间。
-
树莓派超频
如果您想在使用 Ultralytics YOLO11 模型在 Raspberry Pi 5 上运行时获得一点性能提升,您可以将 CPU 从其基本频率 2.4GHz 超频至 2.9GHz,并将 GPU 从 800MHz 超频至 1GHz。如果系统变得不稳定或崩溃,请以 100MHz 的增量降低超频值。确保安装适当的散热装置,因为超频会增加热量产生,并可能导致热节流。
a. 升级软件
sudo apt update && sudo apt dist-upgrade
b. 打开以编辑配置文件
sudo nano /boot/firmware/config.txt
c. 在底部添加以下行
arm_freq=3000 gpu_freq=1000 force_turbo=1
d. 按 CTRL + X 保存并退出,然后按 Y,然后按 ENTER
e. 重启 Raspberry Pi
下一步
恭喜您成功在 Raspberry Pi 上设置 YOLO!如需更多学习和支持,请访问 Ultralytics YOLO11 文档 和 Kashmir World Foundation。
致谢与引用
本指南最初由 Daan Eeltink 为 Kashmir World Foundation 创建,该组织致力于使用 YOLO 来保护濒危物种。我们感谢他们在目标检测技术领域的开创性工作和教育重点。
有关 Kashmir World Foundation 活动的更多信息,您可以访问他们的网站。
常见问题
如何在不使用 Docker 的情况下在 Raspberry Pi 上设置 Ultralytics YOLO11?
要在没有 Docker 的 Raspberry Pi 上设置 Ultralytics YOLO11,请按照以下步骤操作:
- 更新软件包列表并安装
pip
:sudo apt update sudo apt install python3-pip -y pip install -U pip
- 安装带有可选依赖项的 Ultralytics 软件包:
pip install ultralytics[export]
- 重新启动设备以应用更改:
sudo reboot
有关详细说明,请参阅在没有 Docker 的情况下启动部分。
为什么我应该在 Raspberry Pi 上使用 Ultralytics YOLO11 的 NCNN 格式进行 AI 任务?
Ultralytics YOLO11 的 NCNN 格式针对移动和嵌入式平台进行了高度优化,非常适合在 Raspberry Pi 设备上运行 AI 任务。NCNN 通过利用 ARM 架构最大限度地提高推理性能,与其他格式相比,提供更快、更高效的处理。有关支持的导出选项的更多详细信息,请访问 Ultralytics 文档页面上的部署选项。
如何将 YOLO11 模型转换为 NCNN 格式以在 Raspberry Pi 上使用?
您可以使用 python 或 CLI 命令将 PyTorch YOLO11 模型转换为 NCNN 格式:
示例
from ultralytics import YOLO
# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")
# Export the model to NCNN format
model.export(format="ncnn") # creates 'yolo11n_ncnn_model'
# Load the exported NCNN model
ncnn_model = YOLO("yolo11n_ncnn_model")
# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to NCNN format
yolo export model=yolo11n.pt format=ncnn # creates 'yolo11n_ncnn_model'
# Run inference with the exported model
yolo predict model='yolo11n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'
有关更多详细信息,请参见在 Raspberry Pi 上使用 NCNN部分。
Raspberry Pi 4 和 Raspberry Pi 5 在运行 YOLO11 方面的硬件差异是什么?
主要区别包括:
- 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 相比,这些增强功能有助于提高 Raspberry Pi 5 上 YOLO11 模型的性能基准。有关更多详细信息,请参阅Raspberry Pi 系列比较表。
如何设置 Raspberry Pi 摄像头模块以与 Ultralytics YOLO11 配合使用?
有两种方法可以为 YOLO11 推理设置 Raspberry Pi 相机:
-
使用
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("yolo11n.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()
-
使用 TCP 流:
rpicam-vid -n -t 0 --inline --listen -o tcp://127.0.0.1:8888
from ultralytics import YOLO model = YOLO("yolo11n.pt") results = model("tcp://127.0.0.1:8888")
有关详细的设置说明,请访问摄像头推理部分。