树莓派4b学习笔记六:以源码编译的方式安装Paddlelite

       最近在做驾驶证信息提取识别,中间用到了百度开源的PaddleOCR,在使用的时候需要配置一些环境,其中就包括百度自研的PaddlePaddle深度学习框架。在windows试了试效果之后,发现识别率很高,尤其是在识别中文字符的时候要比其他开源项目的识别率高很多,所以简单测试之后我准备正式使用它,并将其应用在树莓派上。

       但是树莓派性能比电脑低很多,为了推理时速度更快,我准备使用百度的轻量化端侧推理引擎Paddlelite。关于Paddlelite的介绍这里我就不多说了,网上有很多的文章介绍这个轻量化推理引擎,下面我把关于如何使用Paddlelite的官方文档的链接贴上来:Welcome to Paddle-Lite’s documentation!

       不像在windows上,我们可以直接使用pip安装Paddlelite,在树莓派4b上我们只能通过源码编译的方式安装Paddlelite。下面我就简单的介绍一下我编译安装的整个过程,这里我采用的是本地编译的方式,也可以采用交叉编译的方式,这在上面的文档中都有说明。但是需要注意的是交叉编译目前不能设置--with_python=ON,也即安装完成之后只能使用C++调用,不能使用python。所以,如果你想要使用python版本的推理引擎,毕竟python使用起来更简单,那么你就只能使用本地编译的方式。

一、编译前环境准备

1、编译环境要求

  • gcc、g++、git、make、wget、python、pip、python-dev、patchelf
  • cmake(建议使用3.10或以上版本)
# 1. Install basic software
apt update
apt-get install -y --no-install-recomends \
  gcc g++ make wget python unzip patchelf python-dev

# 2. Install arm gcc toolchains
apt-get install -y --no-install-recommends \
  g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf

# 3. 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

注意点一:有一点千万要注意,官方文档上直接给的命令里面就是pythonpython-dev,但我发现安装之后,安装的东西其实对应的是python2.7,这就导致后面编译的时候,会编译出一个python2.7版本的.whl文件。如果你想要使用python3进行开发,而且树莓派4b目前自带的是python3.7,那么你就要在后面都加上3.7,也即最后命令里是python3.7python3.7-dev。我刚开始就是因为没有注意到这一点,踩了坑,以至于让我以为它只支持python2.7

注意点二:这里和官方文档相比,我加了一段安装arm-linux-gnueabihf的命令,主要是因为我在开始编译的时候,总是提醒缺少工具链。但是我想不明白的是,这是交叉编译的工具链,我在本地编译为啥还要使用,反正我是没有想到原因,只好先将其安装上,而且确实不再报错。

二、开始编译
# 1. 下载Paddle-Lite源码 并切换到release分支
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite && git checkout release/v2.6

#2、加速第三方库下载
rm -rf third-party

# 3. 编译Paddle-Lite 
./lite/tools/build_linux.sh ./lite/tools/build_linux.sh --arch=armv7hf --with_python=ON

注意点三:这里第一段第二个命令执行报错的时候,一定要确认一下你是不是直接使用git命令下载的源码,如果不是,可能会报错,至少我是这种情况。当时也是耽误了我好长时间,误打误撞发现了解决办法。

编译的时候,还有一些其他的参数可以选择,如下所示,根据自己的需要进行设置。

--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
--with_cv: (OFF|ON)             是否编译CV相关预处理库, 默认为 OFF
--with_log: (OFF|ON)            是否输出日志信息, 默认为 ON
三、编译结果

位于 Paddle-Lite/build.lite.linux.armv7hf.gcc/inference_lite_lib.armlinux.armv7hf :

inference_lite_lib.armlinux.armv7hf/
|-- cxx                                     C++ 预测库和头文件
|   |-- include                             C++ 头文件
|   |   |-- paddle_api.h
|   |   |-- paddle_image_preprocess.h
|   |   |-- paddle_lite_factory_helper.h
|   |   |-- paddle_place.h
|   |   |-- paddle_use_kernels.h
|   |   |-- paddle_use_ops.h
|   |   `-- paddle_use_passes.h
|   `-- lib                                 C++预测库
|       |-- libpaddle_api_light_bundled.a   C++静态库
|       `-- libpaddle_light_api_shared.so   C++动态库
|
|-- demo                          
|   `-- python                              python预测库demo
|
|-- python                                  Python预测库(需要打开with_python选项)
|   |-- install
|   |   `-- dist
|   |       `-- paddlelite-*.whl            python whl包 
|   |-- lib
|       `-- lite.so                     

我们需要找到paddlelite-*.whl这个文件,路径如上所示,然后使用pip3 install paddlelite-*.whl直接安装即可。安装好之后,我们可以进入python3的环境,直接输入如下代码检验安装是否成功。

import paddlelite
或
import paddlelite.lite
四、小结

因为在整个过程中,我花了很长的时间,也出现了不少的错误,所以我可能会忘掉一些操作,导致以上所述不够全面。如果你编译安装的过程和我有不一样的地方,或者我以上的步骤有多余或者遗漏,都欢迎交流。

环境配置一直都是一件让人比较头疼的事,不同的人,不同的机器难免会有一些不一样的地方,只希望我的这篇文章可以多少帮助到你!!!

posted @ 2020-08-03 16:48  耐心的小黑  阅读(177)  评论(0编辑  收藏  举报