1. 树莓派5与YOLOv8的完美组合
树莓派5作为最新的单板计算机,性能比前代提升显著,搭载四核Cortex-A76处理器和VideoCore VII GPU,完全能够胜任轻量级计算机视觉任务。而YOLOv8作为Ultralytics推出的最新目标检测模型,在精度和速度上都有显著提升,特别适合在边缘设备上部署。
我在实际项目中测试发现,树莓派5运行YOLOv8n模型(640x640分辨率)时,使用OpenVINO加速后帧率能达到8-10FPS,完全满足实时检测需求。相比树莓派4,性能提升约40%,特别是在处理高分辨率视频流时更加流畅。
注意:建议选择64位系统,实测32位系统在模型推理时会有明显性能损失
2. 系统准备与环境配置
2.1 操作系统选择与烧录
推荐使用Raspberry Pi OS 64位版本,这是经过官方优化的系统,对树莓派5的硬件支持最好。以下是具体步骤:
下载最新版Raspberry Pi OS Lite(无桌面版更节省资源):
wget https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-12-11/2023-12-11-raspios-bookworm-arm64-lite.img.xz使用Raspberry Pi Imager工具烧录镜像到SD卡,烧录时记得:
- 启用SSH(无头模式必备)
- 配置WiFi连接
- 设置时区为Asia/Shanghai
首次启动后建议执行系统更新:
sudo apt update && sudo apt full-upgrade -y
2.2 Python环境配置
建议使用Python 3.9+版本,与YOLOv8的兼容性最好:
sudo apt install python3-pip python3-venv -y python3 -m venv ~/yolo_env source ~/yolo_env/bin/activate3. 关键依赖安装
3.1 OpenCV的优化安装
对于树莓派5,推荐使用预编译的OpenCV轮子,安装速度更快:
pip install opencv-python==4.5.5.64 \ opencv-contrib-python==4.5.5.64 \ --prefer-binary验证安装:
import cv2 print(cv2.__version__) # 应输出4.5.53.2 PyTorch的特殊配置
树莓派5需要安装ARM兼容的PyTorch版本:
pip install torch==2.1.0 torchvision==0.16.0 \ --index-url https://download.pytorch.org/whl/cpu测试PyTorch是否能正常使用CUDA(虽然树莓派没有NVIDIA GPU):
import torch print(torch.__version__) # 应输出2.1.0 print(torch.backends.quantized.supported_engines) # 检查支持的加速引擎4. YOLOv8模型部署实战
4.1 安装Ultralytics库
pip install ultralytics==8.0.196 onnxruntime4.2 模型下载与转换
YOLOv8支持多种模型尺寸,对于树莓派5推荐使用nano或small版本:
from ultralytics import YOLO # 下载预训练模型 model = YOLO('yolov8n.pt') # 转换为ONNX格式(提升推理速度) model.export(format='onnx', imgsz=640, half=True) # 生成yolov8n.onnx4.3 实时检测代码实现
创建一个完整的检测脚本detect.py:
import cv2 from ultralytics import YOLO def main(): # 加载模型 model = YOLO('yolov8n.onnx') # 使用转换后的ONNX模型 # 打开摄像头(CSI摄像头用0,USB摄像头可能需要调整) cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 640) while True: ret, frame = cap.read() if not ret: break # 执行推理 results = model(frame, imgsz=640, conf=0.5) # 绘制结果 annotated_frame = results[0].plot() # 显示帧率 fps = 1 / (results[0].speed['inference'] / 1000) cv2.putText(annotated_frame, f"FPS: {fps:.1f}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.imshow("YOLOv8 Detection", annotated_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() if __name__ == "__main__": main()5. 性能优化技巧
5.1 使用OpenVINO加速
树莓派5虽然不支持GPU加速,但可以通过OpenVINO优化CPU推理:
pip install openvino==2023.0.0然后转换模型:
from ultralytics import YOLO model = YOLO('yolov8n.pt') model.export(format='openvino', imgsz=640)5.2 线程绑定优化
通过绑定进程到特定CPU核心减少上下文切换:
import os import psutil def cpu_affinity(): p = psutil.Process() p.cpu_affinity([2, 3]) # 通常绑定到后两个核心 # 在main()开始处调用 cpu_affinity()5.3 分辨率与帧率平衡
在/boot/config.txt中添加这些参数优化摄像头性能:
# 提升CSI摄像头性能 gpu_mem=128 start_x=16. 常见问题解决
问题1:摄像头无法打开或图像扭曲
- 检查接线是否牢固
- 尝试降低分辨率:
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
问题2:模型加载缓慢
- 使用
.onnx格式替代.pt - 确保SD卡是高速卡(建议A2级别)
问题3:内存不足
- 添加交换空间:
sudo dphys-swapfile swapoff sudo nano /etc/dphys-swapfile # 修改CONF_SWAPSIZE=1024 sudo dphys-swapfile setup sudo dphys-swapfile swapon
7. 进阶应用:结合硬件加速
对于需要更高性能的场景,可以考虑:
USB加速棒:如Intel NCS2
model.export(format='openvino', device='MYRIAD')HAT加速卡:如Coral TPU
pip install pycoral model.export(format='edgetpu')PCIe加速:树莓派5新增的PCIe接口可以连接更强大的加速卡
我在智能门铃项目中实测,使用Coral USB加速器后,YOLOv8n的推理速度从原来的8FPS提升到28FPS,完全满足实时多人检测需求。关键是要注意模型转换时的量化参数设置,避免精度损失过大。