logo

树莓派4B部署YOLOv5模型实战:从训练到NCS2加速全流程详解

作者:快去debug2025.08.20 21:19浏览量:0

简介:本文详细讲解如何在树莓派4B上从零部署自定义训练的YOLOv5模型,结合Intel神经计算棒(NCS2)实现边缘端加速推理。涵盖环境配置、模型训练与转换、OpenVINO工具链部署、性能优化等关键步骤,并提供实测数据和问题排查方案。

树莓派4B部署YOLOv5模型实战:从训练到NCS2加速全流程详解

一、环境准备与硬件配置

1.1 树莓派基础环境搭建

  • 操作系统选择:推荐使用Raspberry Pi OS Lite(64位版本),减少图形界面资源占用
  • 必要依赖安装
    1. sudo apt update && sudo apt install -y \
    2. python3-pip cmake libopenblas-dev libatlas-base-dev \
    3. libhdf5-dev libhdf5-serial-dev libjasper-dev \
    4. libqtgui4 libqt4-test
  • Python环境配置:建议使用venv创建隔离环境

1.2 NCS2驱动安装

  1. 添加OpenVINO仓库:
    1. echo "deb https://download.01.org/opencv/2021/openvinotoolkit/2021.4/raspbian/ buster main" | sudo tee /etc/apt/sources.list.d/openvino.list
  2. 安装核心组件:
    1. sudo apt update && sudo apt install -y \
    2. intel-openvino-runtime-raspbian-2021.4
  3. USB规则配置(需重启生效)

二、YOLOv5模型训练与优化

2.1 训练环境搭建

  • 推荐在x86主机完成训练(可选Colab Pro)
  • 安装YOLOv5最新版:
    1. git clone https://github.com/ultralytics/yolov5
    2. cd yolov5
    3. pip install -r requirements.txt

2.2 关键训练参数

  1. # data/custom.yaml
  2. train: ../train/images
  3. val: ../valid/images
  4. # 类别定义
  5. names: ['person', 'car', 'dog']
  6. # models/yolov5s.yaml
  7. # 修改nc值为实际类别数
  8. nc: 3

2.3 模型剪枝策略

  • 使用—weights参数进行微调
  • 调整—img-size为320x320以降低计算量
  • 添加—hyp参数使用优化超参

三、模型转换与部署

3.1 PT → ONNX转换

  1. # export.py
  2. import torch
  3. model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')
  4. model.model[-1].export = True # 设置Detect层兼容性
  5. # 动态维度设置
  6. input_names = ['images']
  7. output_names = ['output0']
  8. dynamic_axes = {
  9. 'images': {0: 'batch', 2: 'height', 3: 'width'},
  10. 'output0': {0: 'batch', 1: 'anchors'}
  11. }
  12. torch.onnx.export(
  13. model,
  14. torch.randn(1, 3, 320, 320),
  15. 'yolov5s_custom.onnx',
  16. verbose=True,
  17. opset_version=12,
  18. input_names=input_names,
  19. output_names=output_names,
  20. dynamic_axes=dynamic_axes
  21. )

3.2 ONNX → IR转换(OpenVINO格式)

  1. source /opt/intel/openvino_2021/bin/setupvars.sh
  2. python3 /opt/intel/openvino_2021/deployment_tools/model_optimizer/mo.py \
  3. --input_model yolov5s_custom.onnx \
  4. --output_dir openvino_model \
  5. --input_shape [1,3,320,320] \
  6. --data_type FP16

四、树莓派推理实现

4.1 推理代码核心逻辑

  1. from openvino.runtime import Core
  2. import cv2
  3. # 初始化OpenVINO运行时
  4. ie = Core()
  5. model = ie.read_model('openvino_model/yolov5s_custom.xml')
  6. compiled_model = ie.compile_model(model, 'MYRIAD')
  7. # 预处理函数
  8. def preprocess(img):
  9. img = cv2.resize(img, (320, 320))
  10. img = img.transpose(2, 0, 1) # HWC → CHW
  11. return np.expand_dims(img, 0)
  12. # 后处理(需根据自定义类别调整)
  13. def postprocess(outputs):
  14. # 实现非极大抑制(NMS)等逻辑
  15. pass

4.2 性能优化技巧

  1. 输入分辨率调整:320x320比640x640快3倍但精度下降约5%
  2. 异步推理:使用AsyncInferQueue实现流水线处理
  3. 温度控制:建议加装散热片,避免CPU降频

五、实测数据与问题排查

5.1 性能对比(YOLOv5s模型)

设备 分辨率 FPS 功耗
树莓派4B单核 320x320 2.1 3.2W
树莓派4B+NCS2 320x320 15.6 5.8W

5.2 常见问题解决方案

  • NCS2未识别:检查lsusb输出,确认设备ID为03e7:2485
  • 内存不足:添加swap空间或使用sudo rpi-config调整GPU内存
  • 模型精度下降:检查FP16转换时的数值溢出问题

六、进阶扩展方向

  1. 多NCS2级联实现更高吞吐量
  2. 结合RTSP实现视频流分析
  3. 使用TensorRT进一步优化(需交叉编译)

注意事项

  1. NCS2仅支持FP16精度,训练时需注意数值范围
  2. 树莓派USB3.0接口才能发挥NCS2全部性能
  3. 建议使用5V3A电源避免供电不足

相关文章推荐

发表评论