对于在树莓派4b上部署深度学习模型,有几个坑点要写在前面:
如果你看完以上介绍还准备使用树莓派部署深度学习模型,那请继续向下看,博主经过两周时间把能踩的坑都踩过了!!!
格式化工具: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 requirements.txt
不出意外的话在执行最后一步的时候会出现若干报错:
由于树莓派的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模型在树莓派上进行模型推理。
为了加速运行,一般会使用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在树莓派上做加速的效果也很差。这些效果差的原因不在于优化方法,只是因为树莓派这个性能本身就不适合部署目标检测框架。