写在开头的话:本教程中,本地环境为Linux,X86,开发板环境为Arm,RK3399
一、Paddle Lite简介
Paddle Lite 是一种轻量级、灵活性强、易于扩展的高性能的深度学习预测框架,它可以支持诸如 ARM、OpenCL 、NPU 等等多种终端,同时拥有强大的图优化及预测加速能力。
二、环境安装
2.1 本地环境安装(基于python3.6):
pip3 install paddlelite==2.12 -i http://pypi.douban.com/simple/
pip3 install x2paddle -i http://pypi.douban.com/simple/2.2 开发板Paddle Lite编译(基于python3.7):
2.2.1 已经编译好的whl包(arm,支持python、耗时分析功能)下载链接:
https://download.csdn.net/download/m0_46303486/87364716
https://download.csdn.net/download/m0_46303486/87364716
2.2.2 自己编译(本地编译):
(1)基本环境安装(如已安装,请跳过)
sudo apt update
sudo apt-get install -y --no-install-recommends \
gcc g++ make wget python unzip patchelf python-dev(2) cmake安装,推荐使用3.10及以上版本(如已安装,请跳过)
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
(3)下载Paddle Lite源码并编译
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite
sudo rm -rf third-party
# --with_python=ON和--with_profile=ON为编译参数,编译过程中的可选参数见(4)常用编译参数,
本教程基于python,故使用python编译包
sudo ./lite/tools/build_linux.sh --with_python=ON --with_profile=ON
(4)常用编译参数
参数 | 说明 | 可选范围 | 默认值 |
|---|---|---|---|
arch | 目标硬件的架构版本 | armv8 / armv7hf / armv7 | armv8 |
toolchain | C++ 语言的编译器工具链 | gcc | gcc |
with_python | 是否包含 python 编译包,目标应用程序是 python 语言时需配置为 ON | OFF / ON | OFF |
with_cv | 是否将 cv 函数加入编译包中 | OFF / ON | OFF |
with_log | 是否在执行过程打印日志 | OFF / ON | ON |
with_exception | 是否开启 C++ 异常 | OFF / ON | OFF |
with_profile | 是否打开执行耗时分析 | OFF / ON | OFF |
with_precision_profile | 是否打开逐层精度结果分析 | OFF / ON | OFF |
with_opencl | 是否编译支持 OpenCL 的预测库 | OFF / ON | OFF |
(5)编译产物
编译成功后,会在/Paddle-Lite/build.lite.linux.armv8.gcc/
inference_lite_lib.armlinux.armv8/python/install/dist 目录下生成对应的.whl包,安装即可。
并且会生成相应的python版本的demo。
三、模型转换(在本地环境中进行)
如果想用 Paddle Lite 运行第三方来源(TensorFlow、Caffe、ONNX、PyTorch)模型,一般需要经过两次转化。即使用 X2paddle 工具将第三方模型转化为 PaddlePaddle 格式,再使用 opt工具 将 PaddlePaddle 模型转化为Padde Lite 可支持格式。
为了简化这一过程,X2Paddle 集成了 opt 工具,提供一键转换 API,以 ONNX 为例(大部分模型都可以转换成ONNX):
TensorFlow、Caffe、PyTorch直接转Padde Lite相关部分的API可参考:https://github.com/PaddlePaddle/X2Paddle/blob/develop/docs/inference_model_convertor/convert2lite_api.md
https://github.com/PaddlePaddle/X2Paddle/blob/develop/docs/inference_model_convertor/convert2lite_api.md
from x2paddle.convert import onnx2paddle
model_path = "/pose/light_pose_sim.onnx"
save_dir = "./paddleLite_models/light_pose_sim_paddle"
onnx2paddle(model_path, save_dir,
convert_to_lite=True,
lite_valid_places="arm",
lite_model_type="naive_buffer")
# model_path(str) 为 ONNX 模型路径
# save_dir(str) 为转换后模型保存路径
# convert_to_lite(bool) 表示是否使用 opt 工具,默认为 False
# lite_valid_places(str) 指定转换类型,默认为 arm
# lite_valid_places参数目前可支持 arm、 opencl、 x86、 metal、 xpu、 bm、 mlu、
# intel_fpga、 huawei_ascend_npu、imagination_nna、
# rockchip_npu、 mediatek_apu、 huawei_kirin_npu、 amlogic_npu,可以同时指定多个硬件平台
# (以逗号分隔,优先级高的在前),opt 将会自动选择最佳方式。
# lite_model_type(str) 指定模型转化类型,目前支持两种类型:protobuf 和 naive_buffer,默认为 naive_buffer转换后,会在指定目录下生成.nb文件,该文件就是在部署PaddleLite时需要用到的模型
四、模型部署,推理及应用
经过以上步骤,你已经成功完成了所有准备步骤,接下来就是将相关代码和模型移植到开发板上即可。
4.1 使用 Paddle Lite 执行推理的主要步骤

# (1) 设置配置信息
config = MobileConfig()
config.set_model_from_file("Your dictionary/opt.nb")
# (2) 创建预测器
predictor = create_paddle_predictor(config)
# (3) 设置输入数据
input_tensor = predictor.get_input(0)
input_tensor.from_numpy(data.reshape(1, 3, 256, 256).astype(np.float32))
# (4) 执行预测
predictor.run()
# (5) 得到输出数据
ort_outs = predictor.get_output(2).numpy()4.2 以官方教程为例,完整的模型部署,推理步骤:
1.模型下载(在本地环境下进行)
wget http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz
tar zxf mobilenet_v1.tar.gz
2.模型转换(在本地环境下进行)
import paddlelite.lite as lite
a=lite.Opt()
a.set_model_dir("D:\\YOU_MODEL_PATH\\mobilenet_v1")
a.set_optimize_out("mobilenet_v1_arm_opt")
a.set_valid_places("arm") # 设置为 arm
a.run()
模型转换后,会在相应目录生成mobilenet_v1_arm_opt.nb文件,将该文件上传到开发板中,继续执行下一步操作。
相应推理代码在/Paddle-Lite/lite/demo/python中(只使用mobilenetv1_light_api.py,mobilenetv1_full_api.py的输入使用的是原模型),建议将.nb文件也放在该目录下,4.1中的推理步骤,你可以在mobilenetv1_light_api.py文件中看到:
# 代码推理
sudo python3.7 mobilenetv1_light_api.py --image_path=./tabby_cat.jpg --label_path=./labels.txt --model_dir=./mobilenet_v1_arm_opt.nb --print_results=TRUE执行成功后,你会看到如下一连串信息:
至此,恭喜你,已经成功完成了Paddle Lite模型的转换,部署和推理。