树莓派5B部署YOLOV5:从零到实时检测的避坑指南
1. 为什么选择树莓派5B跑YOLOv5树莓派5B作为最新一代的单板计算机性能比前代提升了2-3倍特别是GPU性能的大幅升级让它成为了轻量级AI应用的理想平台。我实测下来用树莓派5B跑YOLOv5s模型最小的预训练模型可以达到8-10FPS的实时检测效果这对于智能门禁、仓库物品盘点这类场景完全够用。不过要注意的是ARM架构的处理器和x86平台有很大区别。很多新手容易忽略这一点直接照搬PC端的安装方法结果踩了不少坑。我自己第一次尝试时就遇到了PyTorch版本不兼容、依赖冲突等问题浪费了大半天时间。下面我就把这些经验教训整理成详细的避坑指南。2. 系统准备与环境配置2.1 选择合适的操作系统镜像官方推荐的Raspberry Pi OS64位是最稳妥的选择。我试过Ubuntu Server 22.04 for ARM虽然也能用但摄像头驱动配置比较麻烦。这里有个细节要注意务必选择Legacy版本的系统不带Bookworm字样因为新版默认的Python环境管理策略PEP 668会导致后续安装异常。安装完系统后第一件事是扩容文件系统sudo raspi-config选择Advanced Options → Expand Filesystem这样可以充分利用SD卡的全部空间。2.2 基础环境配置先更新软件源并安装必备工具sudo apt update sudo apt upgrade -y sudo apt install -y python3-pip python3-venv libopenblas-dev libatlas-base-dev libjpeg-dev特别提醒树莓派默认的swap空间只有100MB处理大模型时会频繁卡死。建议修改为2GBsudo nano /etc/dphys-swapfile将CONF_SWAPSIZE100改为CONF_SWAPSIZE2048然后重启服务sudo /etc/init.d/dphys-swapfile restart3. PyTorch的ARM版安装技巧3.1 虚拟环境搭建强烈建议使用虚拟环境既能避免污染系统Python环境也方便后期管理python3 -m venv ~/yolo_env source ~/yolo_env/bin/activate3.2 安装PyTorch和Torchvision官方提供的wheel文件是最省事的选择。经过多次测试我推荐这个组合wget https://github.com/Qengineering/PyTorch-Raspberry-Pi-64-OS/raw/main/torch-2.1.0a0%2Bgitc263bd4-cp311-cp311-linux_aarch64.whl pip install torch-2.1.0a0gitc263bd4-cp311-cp311-linux_aarch64.whl wget https://github.com/Qengineering/PyTorch-Raspberry-Pi-64-OS/raw/main/torchvision-0.16.0a0%2B94071ef-cp311-cp311-linux_aarch64.whl pip install torchvision-0.16.0a094071ef-cp311-cp311-linux_aarch64.whl如果下载速度慢可以尝试国内的镜像源pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple安装完成后验证import torch print(torch.__version__) # 应该显示2.1.0 print(torch.backends.mps.is_available()) # 检查GPU加速是否可用4. YOLOv5的部署与优化4.1 获取源码与依赖安装建议使用Ultralytics官方仓库的最新版本git clone https://github.com/ultralytics/yolov5.git cd yolov5修改requirements.txt文件注释掉torch和torchvision行已经手动安装添加--no-deps参数避免重复安装pip install -r requirements.txt --no-deps4.2 模型选择与量化树莓派5B建议使用YOLOv5s或YOLOv5n模型。如果想进一步提升性能可以使用官方提供的INT8量化模型from yolov5 import export export.export(weightsyolov5s.pt, imgsz(320, 320), include(onnx), halfTrue)实测发现量化后的模型在保持90%以上准确率的同时推理速度提升约40%。5. 摄像头实时检测实战5.1 摄像头配置首先启用摄像头接口sudo raspi-config选择Interface Options → Legacy Camera → Enable。测试摄像头是否正常工作libcamera-hello -t 05.2 运行检测脚本基础命令python detect.py --source 0 --weights yolov5s.pt --imgsz 320优化参数组合我的最佳实践python detect.py --source 0 --weights yolov5s.pt --imgsz 320 --conf-thres 0.5 --iou-thres 0.45 --half关键参数说明--half: 使用FP16精度速度提升约20%--imgsz 320: 降低分辨率换取更高FPS--conf-thres: 调高可以减少误检6. 常见问题解决方案问题1: 出现Illegal instruction (core dumped)错误原因CPU指令集不兼容解决在运行前添加export OPENBLAS_CORETYPEARMV8问题2: 摄像头画面卡顿原因USB带宽不足解决改用CSI接口摄像头或者降低分辨率python detect.py --source 0 --imgsz 160问题3: 内存不足被杀进程解决添加交换空间见2.2节或者使用轻量级模型python detect.py --weights yolov5n.pt7. 性能优化进阶技巧超频设置需配合散热片sudo nano /boot/config.txt添加over_voltage2 arm_freq2000 gpu_freq750使用TensorRT加速 虽然过程复杂但能获得2-3倍的性能提升。需要先安装TensorRT for ARMsudo apt install -y tensorrt多线程处理 修改detect.py将预处理和后处理移到单独线程from threading import Thread class PreProcessThread(Thread): def __init__(self, img): Thread.__init__(self) self.img img def run(self): # 预处理代码经过这些优化我的树莓派5B最终能在320x320分辨率下稳定运行12-15FPS完全满足实时检测的需求。