基于PaddleDetection的ppyolo模型转化配置到树莓派的方法(待修改)
作者:互联网
前言:
本方案采用ppyolo模型,实际检测效率极低,并无法直接使用,但可作为paddle平台其他模型部署的简易教程,实际使用更推荐EasyDL的SDK离线部署。
前置环境:
树莓派上ubuntu18.04 server (arrch64,arm64,armv8,配置环境更方便)
步骤一:模型转化
此处假设已有一个训练好的ppyolo模型,
python -u tools/export_model.py -c /home/aistudio/work/ppyolo.yml --output_dir=./inference_model_final -o weight=/home/aistudio/output/ppyolo/best_model.pdparams
-o weight 最好指定下所需模型位置,避免找不到,一般导出的都是best_model,有需要可更换。
执行完后,可以在PaddleDetection文件夹内看到inference_model_final 文件夹,进入最深处,看到如下三个文件。
%cd /home/aistudio/
#复制opt文件到相应目录下
!cp opt /home/aistudio/PaddleDetection/inference_model_final/ppyolo
#进入预测模型文件夹
%cd /home/aistudio/PaddleDetection/inference_model_final/ppyolo
#下载opt文件,opt最好下载最新版本,可以支持更多的op,以免报错
# 很多旧的教材都是使用2.3.0版本的,基本不支持比较新的模型
#!wget https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.9.0/opt
#给opt加上可执行权限
!chmod +x opt
#使用opt进行模型转化,将__model__和__params__转化为model.nb
!./opt --model_file=__model__ --param_file=__params__ --optimize_out_type=naive_buffer --optimize_out=./model
!ls
# Error: This model is not supported, because 4 ops are not supported on 'arm'. These unsupported ops are: 'clip, deformable_conv, matrix_nms, pow'.
# 上述报错只因opt2.3版本过老,更换为2.9即可
获取到model.nb
,下载到树莓派上。
步骤二:在树莓派上编译Paddle Lite
官方安装流程如下:
# 1. Install basic software
sudo apt update
sudo apt-get install -y --no-install-recomends \
gcc g++ make wget python unzip
# 2. install cmake 3.10 or above
wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz
tar -zxvf cmake-3.10.3.tar.gz
cd cmake-3.10.3
./configure
make
sudo make install
正常上述是不需要配置的,确认cmake > 3.10即可。上述apt-get install -y这块内容还是都运行下比较好。
下一步,下载paddle lite 和paddle lite demo包,为后续编译。
下载地址:
https://github.com/PaddlePaddle/Paddle-Lite/releases/tag/v2.9.1
https://github.com/PaddlePaddle/Paddle-Lite-Demo
paddle-lite编译注意要项:
先运行文件夹内lite/tools/build.sh或者build_linux.sh。
./lite/tools/build.sh \
--build_extra=ON \
--arm_os=armlinux \
--arm_abi=armv8 \
--arm_lang=gcc \
full_publish
由于ppyolo模型使用算子较多较新,因此必须使用build_extra
和 full_publish
,否则会缺少组件。
此处耗时较长,容易失败,可试试多次尝试。如果想要使用python版本,可再添加一个--build_python=ON
的选项,如果编译成功,会生成对应python版本的whl文件,再使用pip可直接安装。但树莓派上很难成功编译python选项。
同理,build_linux.sh 使用类似的编译选项,名称会有所改变,按照源码中的指示修改。
步骤三:修改demo
使用官方的demo进行编译运行会出现错误,报错原因是demo中的input与ppyolo模型的input 在数量上并不对应,因此需要手动修改demo中的.cc源文件。
首先获取模型的input:
通过使用netron 可视化模型,查看到模型的输入与输出,需要对应模型的input进行使用。本模型输入为两个,一个image为【0】,一个img_size【1】,由于demo缺少了img_size ,所以运行失败。
修改完后存在推理的时间过长的问题,每个目标都要5000ms,导致无法直接使用。
问题探究
- 为了布置在性能有限的树莓派上,特意采用模型导出部署的方式,但可能仍因为模型所需性能超出树莓派能力,导致速度极慢。(博客中有人导出yolov3模型能够流畅使用,此处存疑)
- demo中源码可能存在待优化的地方。
更为详细的内容参照如下应用博客:
Reference
https://blog.csdn.net/weixin_40973138/article/details/114780090
https://blog.csdn.net/qq_45779334/article/details/106715597
标签:opt,__,树莓,--,ppyolo,模型,PaddleDetection,model 来源: https://blog.csdn.net/Merokes/article/details/119939586