关于如何在树莓派4B上部署深度学习模型

前言

对于在树莓派4b上部署深度学习模型,有几个坑点要写在前面:

  • 连接树莓派的摄像头一定不要在连接电源的过程中进行插拔,会导致摄像头烧掉。
  • 不要指望树莓派的性能,无论你使用什么方法,或是直接运行(.pt的模型)或是onnx模型进行推理优化,都无法达到很好的效果,我使用的是树莓派4B 4G的板子,这里如果没有推理优化一张图片的识别速度是3.x秒,利用onnx推理优化后的模型是0.7x秒,或许看着感觉很不错,但是应用到视频上毫不夸张的说比ppt还要卡。
  • 树莓派不支持GPU加速,也无法下载cuda,所以也不用考虑TensorRT。
  • 树莓派下载很多python的包需要在自己电脑上离线下载wheel,不然会很慢(无论你换什么镜像源都一样

如果你看完以上介绍还准备使用树莓派部署深度学习模型,那请继续向下看,博主经过两周时间把能踩的坑都踩过了!!!

使用工具

格式化工具:SDFormatter

烧录工具:任意

文件传输工具:FileZilla

远程连接工具:Putty, VNC

树莓派镜像版本:2021-10-18-raspbian-buster-full

具体流程

当烧录完成后,首先利用Putty远程连接服务器,成功进入服务器之后我们先激活VNC,终端输入sudo raspi-config进入树莓派配置界面,选择Interfacing Options,选择VNC并激活。然后重新输入sudo raspi-config进入后选择Boot Options然后选择Desktop/CLI,进入后继续选择Desktop Autologin Desktop GUI继续选择Advanced Options,然后选择Resolution,并根据你自己买的板子的配置选择具体的mode(这里我选择的是mode16)。然后选择Finnish,树莓派会自动重启,如果没有重启那么就在终端输入sudo reboot。到此为止,我们已经实现了树莓派系统的基本配置。

下面我们利用VNC连接树莓派并对深度学习模型所需的环境进行配置,进入之后会发现有两个python版本,一个是python2一个python3,并且默认是python2,这里要把默认的改成python3,通过python3 --version查看python3的版本,如果没有那需要自己安装,输入sudo apt-get install python3安装python3。在python3安装成功后,在终端输入以下命令修改默认python为python3

sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3.x /usr/bin/python

这里的python3.x要换成你自己的python3的版本,如果是3.8这里就输入sudo ln -s /usr/bin/python3.8 /usr/bin/python

现在基本的python环境已经配置完成。

现在需要安装yolov5具体需要的python包,首先下载yolov5的GitHub项目,代码如下:

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirments.txt

不出意外的话在执行最后一步的时候会出现若干报错:

  • 下载超时
  • 找不到torch和torchvision对应的版本

由于树莓派的python包的下载地址位于https://www.piwheels.org/simple/,下载很慢,你可以先进行换源,换成清华的镜像源。但是很遗憾即使你换了也有很多包装起来非常的慢。所以这里我给出的方法是,先换源,然后把不好装的包在本机上下载wheel,再通过FileZilla传到树莓派上安装,这里我把几个不好装的包列出来,大家自行去网站下载

scipy
PyYAML
matplotlib
Pillow
opencv-python
torch
torchvision

除了以上几个包之外,其他的在镜像源中都可以找到,所以安装完上面的几个包后注释掉requirments.txt关于torch和torchvision的部分,然后重新执行pip install -r requirments.txt即可。安装完所有的包之后,首先检测一下是否可以直接调用.pt模型进行预测,终端输入python detect.py --source image.jpg,这里image.jpg是我上传到yolov5路径下的一张图片。这里最后会输出对这张图片检测所需要的时间,默认weights使用的是yolov5s的权重,我这里的时间大概是3.3秒左右。速度非常慢,换成摄像头视频检测就别提有多卡了。下面我再介绍一下如何利用onnx模型在树莓派上进行模型推理。

Onnx模型推理

为了加速运行,一般会使用onnxruntime对模型进行推理,首先要将.pt模型转换为onnx模型,对于yolov5,对应的onnx模型在官网可以自行下载,一般我们会使用TensorRT利用c++进行推理,但是TensorRT必须要使用cuda,因此这里就完全不用考虑了。这里使用Python对模型进行推理,树莓派直接安装onnxruntime库会提示找不到对应版本,因此我们还是去前面提到的官网下下载到本地在传输到自己树莓派上。

这里如果使用的yolov5s的模型可以直接使用下面这个GitHub中的推理代码,类似的代码网上有很多,大家可以自己选择

https://github.com/Amelia0911/onnxruntime-for-yolov5

利用onnx模型进行推理加速后,每张图片的检测速度可以达到0.7s左右,也就是1.4帧。看起来从原来的3.3s到0.7s提升很多,但是其实并没有任何意义,因为用摄像头做实时视频检测只有1.4帧的话,卡的跟ppt没什么区别。还有网上说用oepnvino在树莓派上做加速的效果也很差。这些效果差的原因不在于优化方法,只是因为树莓派这个性能本身就不适合部署目标检测框架。

11-15 11:40