其他分享
首页 > 其他分享> > 基于PaddleDetection的ppyolo模型转化配置到树莓派的方法(待修改)

基于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_extrafull_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,导致无法直接使用。

问题探究

更为详细的内容参照如下应用博客:

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