介绍 本文主要在树莓派 4 上安装百度的 Paddle Lite 框架。C++ 代码示例是在树莓派 4 的 Code::Blocks IDE 中编写的。只介绍基础知识, 所以最后,你可以构建你的应用程序。 Paddle Lite 库的更多信息,请参见:https://github.com/PaddlePaddle/Paddle-Lite 或中文教程 https://paddle-lite.readthedocs.io/zh/latest/。 安装的是C++版本,它不适合 Python。
依赖 Paddle Lite 框架几乎没有依赖项。 OpenCV 会很有用,但它也可以不用。 我们安装OpenCV是因为我们的大多数软件都或多或少使用 OpenCV。
版本检查 在 Raspberry Pi 4 上安装 Paddle Lite 之前,先检查操作系统。运行命令 uname -a 并使用下面的图像所示验证你的版本。
如果是 64 位操作系统,还请使用命令 gcc -v 检查您的 C++ 编译器。 必须是 aarch64-linux-gnu 版本。 如果 gcc 版本不同,请使用最新版本重新安装整个操作系统。 该指南位于此处:在 Raspberry Pi 4 上安装 64 位操作系统。必须拥有 64 位 C++ 编译器,因为我们将编译 Paddle Lite 库。 还要注意根据我们的说明安装后 zram swap大小超过 3 GB。
Raspberry Pi 32-bit OS 安装 由于 CPU(armv8)和编译器(arm-linux-gnueabihf)不兼容,Paddle-Lite 无法安装在 32 位操作系统的树莓派 4 上。 生成的库使用 armv8 中缺少的寄存器 (VFPV3)。 更换编译器那是相当痛苦。 你可以在 Raspberry Pi 3 上安装 Paddle-Lite,或者更好,使用新的 SD 卡并安装最新的 Raspberry Pi 64 位操作系统。 对于使用 Raspberry Pi 3 的用户,如果尚未安装,请先安装 OpenCV。 安装指南在这里,大约需要一个小时。 最新版 Paddle Lite (v2.6.3) 在 32 位操作系统 (Raspbian) 上的整个安装过程如下。 Raspberry Pi 3 only !
# check for updates
$ sudo apt-get update
$ sudo apt-get upgrade
# install dependencies
$ sudo apt-get install cmake wget
# download Paddle Lite
$ git clone https://github.com/PaddlePaddle/Paddle-Lite.git
$ cd Paddle-Lite
# build 32-bit Paddle Lite
$ ./lite/tools/build.sh \
--build_cv=ON \
--build_extra=ON \
--arm_os=armlinux \
--arm_abi=armv7hf \
--arm_lang=gcc \
tiny_publish
# copy the headers and library to /usr/local/
$ sudo mkdir -p /usr/local/include/paddle-lite
$ sudo cp -r build.lite.armlinux.armv7hf.gcc/inference_lite_lib.armlinux.armv8/cxx/include/*.* /usr/local/include/paddle-lite
$ sudo mkdir -p /usr/local/lib/paddle-lite
$ sudo cp -r build.lite.armlinux.armv7hf.gcc/inference_lite_lib.armlinux.armv8/cxx/lib/*.* /usr/local/lib/paddle-lite.
Raspberry Pi 64-bit OS.
安装
如果尚未安装 OpenCV,请先安装它。 安装指南在这里,大约需要一个小时。 最新版 Paddle Lite (v2.6.3) 在 64 位操作系统的树莓派上的整个安装过程如下。 # check for updates (64-bit OS is still under development!)
$ sudo apt-get update
$ sudo apt-get upgrade
# install dependencies
$ sudo apt-get install cmake wget
# download Paddle Lite
$ git clone https://github.com/PaddlePaddle/Paddle-Lite.git
$ cd Paddle-Lite
# build 64-bit Paddle Lite (±1 hour)
$ ./lite/tools/build.sh \
--build_cv=ON \
--build_extra=ON \
--arm_os=armlinux \
--arm_abi=armv8 \
--arm_lang=gcc \
tiny_publish
# copy the headers and library to /usr/local/
$ sudo mkdir -p /usr/local/include/paddle-lite
$ sudo cp -r build.lite.armlinux.armv8.gcc/inference_lite_lib.armlinux.armv8/cxx/include/*.* /usr/local/include/paddle-lite
$ sudo mkdir -p /usr/local/lib/paddle-lite
$ sudo cp -r build.lite.armlinux.armv8.gcc/inference_lite_lib.armlinux.armv8/cxx/lib/*.* /usr/local/lib/paddle-lite
如果一切顺利,你将获得以下输出。
另请注意带有例子的文件夹。
转换为 Paddle Lite 本节描述了常规的、所谓的liquid模型从 PaddlePaddle 框架到嵌入式系统(如 Raspberry Pi 4 或 Jetson Nano)中使用的 Paddle Lite 模型的转换。
与 TensorFlow Lite 一样,并非所有模型都可以移植到 Lite 框架。 不支持某些操作。 如果出现这种情况,转换工具会通知你。
在我们编译转换工具之前,需要做一些准备工作。 首先,我们需要至少 6 GB 的 RAM,就像从头开始构建 PaddlePaddle 一样。
按照此处此页面上的步骤增加 RAM。 完成后,请确保你有所需的 RAM 量。
接下来,应禁用 -m64 标志,因为 aarch64 系统无法识别此标志。
-m64 标志在 flags.cmake 的第 151 行声明。该文件位于 ~/Paddle-Lite/cmake 文件夹中。 使用文本 AND NOT(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)") 展开第 151 行,如下所示。 它有效地禁用了 aarch64 机器未知的 -m64 标志。
完成这些步骤后,你可以开始编译 Paddle Lite 转换工具。 假设你已经成功编译了如上所述的 Paddle Lite 框架。 转换工具的编译如下。 $ cd ~/Paddle-Lite
# build 64-bit Paddle Lite optimize tool
$ ./lite/tools/build.sh \
--build_cv=ON \
--arm_os=armlinux \
--arm_abi=armv8 \
--arm_lang=gcc \
build_optimize_tool
在文件夹 /home/pi/Paddle-Lite/build.opt/lite/api 中,你可以找到名为 opt 的优化工具。
拥有优化器后,您现在可以使用 PaddleHub 下载您感兴趣的深度学习模型。 此处介绍了该过程。 例如,我们将使用口罩检测器。
liquid模型,正如 PaddlePaddle 所说的深度学习模型,有两种变体。 要么是将参数(拓扑)和权重放在一个文件中的组合模型, 要么将参数和权重分别存储在一个单独的文件中。优化器处理这两种类型。 碰巧的是,口罩检测器有两个文件。 所以下一步通过一些 Python 指令将从网络中提取这些 __model__ 和 __param__。 我们同时使用了 PaddlePaddle 和 PaddleHub。 $ python3
>>> import paddlehub as hub
>>> import paddle
>>> paddle.enable_static()
>>> pyramidbox_lite_mobile_mask = hub.Module(name="pyramidbox_lite_mobile_mask")
>>> pyramidbox_lite_mobile_mask.save_inference_model(dirname="test_program")
最后一个步骤是通过build opt 应用程序将模型和参数转换为 Paddle Lite 版本
这是通过以下命令完成的。 $ ./opt \--model_file=/home/pi/test_program/mask_detector/__model__ \--param_file=/home/pi/test_program/mask_detector/__params__ \--valid_targets=arm \--optimize_out_type=naive_buffer \--optimize_out=opt_model_v2.7
请注意版本号 V2.7。 大多数模型既不向后也不向前兼容。
关于优化工具的更多信息可以在 wiki https://github.com/PaddlePaddle/Paddle-Lite/wiki/model_optimize_tool 中找到。
如果你必须重新安装 dphys-swapfile,那可以再次卸载它了。 这样你就可以延长 SD 卡的使用寿命。
|