文章目录
- Paddle Lite环境准备
- 硬件准备
- 基本软件环境准备
- 摄像头准备
- 编译库准备
- 下载Paddle-Lite
- 编译
- 查看编译的可选项
- 安装编译生成的python paddle-lite包
- 运行基于python API的demo程序
- 准备模型文件
- 运行模型
- 部署自己的模型
- 两种模型格式
- 编译opt工具
- 使用opt转换模型
Paddle Lite环境准备
硬件准备
- 树莓派4B
- usb摄像头
- 装好Buster的镜像源的SD卡(Paddle Lite目前不支持arm Ubuntu)
基本软件环境准备
摄像头准备
参考文章:树莓派摄像头的安装、配置与验证
编译库准备
完成gcc、g++、opencv、cmake的安装:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y gcc g++ make wget python unzip patchelf python-dev
#下载cmake
wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz
在这一步如果下载很慢,这里我也提供了cmake-3.10.3.tar.gz的包,需要的可以自行下载。
#解压
tar -zxvf cmake-3.10.3.tar.gz
#进入文件夹
cd cmake-3.10.3
#环境配置
./configure
#make
make
sudo make install
到这里就完成了所有的环境准备。
下载Paddle-Lite
git clone很慢的同学参考博客:git clone速度加快方法
# 1. 下载Paddle-Lite源码 并切换到release分支
git clone https://github/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite && git checkout release/v2.6
# 删除此目录,编译脚本会自动从国内CDN下载第三方库文件
rm -rf third-party
编译
树莓派4B官方的操作系统是32位,armv7hf
架构。
cd Paddle-Lite
./lite/tools/build_linux.sh --arch=armv7hf --with_python=ON --python_version=3.7 --with_cv=ON --with_exception=ON
查看编译的可选项
./lite/tools/build_linux.sh help
- 具体选项
--arch: (armv8|armv7|armv7hf) arm版本,默认为armv8
--toolchain: (gcc|clang) 编译器类型,默认为gcc
--with_extra: (OFF|ON) 是否编译OCR/NLP模型相关kernel&OP,默认为OFF,只编译CV模型相关kernel&OP
--with_python: (OFF|ON) 是否编译python预测库, 默认为 OFF
--python_version: (2.7|3.6|3.7等等) 编译whl的Python版本,默认为 None
--with_cv: (OFF|ON) 是否编译CV相关预处理库, 默认为 OFF
--with_log: (OFF|ON) 是否输出日志信息, 默认为 ON
--with_exception: (OFF|ON) 是否在错误发生时抛出异常,默认为 OFF
编译完成
安装编译生成的python paddle-lite包
进入dist目录下
cd /Paddle-Lite/build.lite.linux.armv7hf.gcc/inference_lite_lib.armlinux.armv7hf/python/install/dist
pip3 install paddlelite-2708c2fe-cp37-cp37m-linux_armv7l.whl
运行基于python API的demo程序
准备模型文件
- 下载模型
wget http://paddle-inference-dist.bj.bcebos/mobilenet_v1.tar.gz
tar zxf mobilenet_v1.tar.gz
- 采用opt工具转换模型
paddle_lite_opt --model_dir=./mobilenet_v1 \
--optimize_out=mobilenet_v1_opt \
--optimize_out_type=naive_buffer \
--valid_targets=arm
转化成功
运行模型
需要注意的是,在这里有两个demo文件,他们的区别在于
full_api.py
中需要的模型文件为__model__
和__param__
文件,API详解:CxxPredictorlight_api.py
中需要的模型文件为opt转换后的model.nb
文件,API详解:LightPredictor
# light api的输入为优化后模型文件mobilenet_v1_opt.nb
python3 mobilenetv1_light_api.py --model_dir=mobilenet_v1_opt.nb
部署自己的模型
Paddle用于推理的模型是通过save_inference_model
这个API保存下来的,保存的格式有两种,在这里将在AI studio上运行生成的模型参数文件下载并挂载在树莓派上:
两种模型格式
-
non-combined形式:参数保存到独立的文件,如设置
model_filename
为None
,params_filename
为None
-
combined形式:参数保存到同一个文件,如设置
model_filename
为model
,params_filename
为params
编译opt工具
在树莓派端编译:
cd Paddle-Lite
./lite/tools/build.sh build_optimize_tool
使用opt转换模型
paddle_lite_opt --model_dir=./mobilenet_v1 \
--valid_targets=arm \
--optimize_out_type=naive_buffer \
--optimize_out=mobilenet_v1_opt
具体的API详情参考:
- Python API — Paddle-Lite 文档
编译过程参考:
- 源码编译 (ARMLinux)
- 模型优化工具 opt
更多推荐
Paddle-Lite——在树莓派4B端(Raspi OS)基于python API部署Paddle模型
发布评论