PaddleX支持通过Paddle-Lite和基于OpenVINO的神经计算棒(NCS2)这两种方式在树莓派上完成预测部署。
对于尚未安装系统的树莓派首先需要进行系统安装、环境配置等步骤来初始化硬件环境,过程中需要的软硬件如下:
软件:Raspbian OS
格式化micro SD卡为FAT格式,Windows和Mac下建议使用SD Memory Card Formatter工具,Linux下请参考NOOBS For Raspberry Pi
下载NOOBS版本的Raspbian OS 下载地址并将解压后的文件复制到SD中,插入SD后给树莓派通电,然后将自动安装系统
启用VNC和SSH服务:打开LX终端输入,输入如下命令,选择Interfacing Option然后选择P2 SSH 和 P3 VNC分别打开SSH与VNC。打开后就可以通过SSH或者VNC的方式连接树莓派
sudo raspi-config
更换源:由于树莓派官方源速度很慢,建议在官网查询国内源 树莓派软件源。更换后执行
sudo apt-get update
sudo apt-get upgrade
基于Paddle-Lite的部署目前可以支持PaddleX的分类、分割与检测模型,其中检测模型仅支持YOLOV3
部署的流程包括:PaddleX模型转换与转换后的模型部署
说明:PaddleX安装请参考PaddleX,Paddle-Lite详细资料请参考Paddle-Lite
请确保系统已经安装好上述基本软件,并配置好相应环境,下面所有示例以工作目录 /root/projects/演示。
将PaddleX模型转换为Paddle-Lite模型,具体请参考Paddle-Lite模型转换
mkdir -p /root/projects
cd /root/projects
git clone https://github.com/PaddlePaddle/PaddleX.git
说明:其中C++预测代码在PaddleX/deploy/raspberry 目录,该目录不依赖任何PaddleX下其他目录,如果需要在python下预测部署请参考Python预测部署。
提供了下载的opt工具对应的Paddle-Lite在ArmLinux下面的预编译库:Paddle-Lite(ArmLinux)预编译库。
建议用户使用预编译库,若需要自行编译,在树莓派上LX终端输入
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite
sudo ./lite/tools/build.sh --arm_os=armlinux --arm_abi=armv7hf --arm_lang=gcc --build_extra=ON full_publish
预编库位置:./build.lite.armlinux.armv7hf.gcc/inference_lite_lib.armlinux.armv7hf/cxx
注意:预测库版本需要跟opt版本一致,更多Paddle-Lite编译内容请参考Paddle-Lite编译;更多预编译Paddle-Lite预测库请参考Paddle-Lite Release Note
提供了依赖软件的预编包或者一键编译,用户不需要单独下载或编译第三方依赖软件。若需要自行编译第三方依赖软件请参考:
编译cmake的命令在scripts/build.sh中,修改LITE_DIR为Paddle-Lite预测库目录,若自行编译第三方依赖软件请根据Step1中编译软件的实际情况修改主要参数,其主要内容说明如下:
# Paddle-Lite预编译库的路径
LITE_DIR=/path/to/Paddle-Lite/inference/lib
# gflags预编译库的路径
GFLAGS_DIR=$(pwd)/deps/gflags
# opencv预编译库的路径
OPENCV_DIR=$(pwd)/deps/opencv/
执行build脚本:
sh ./scripts/build.sh
编译成功后,分类任务的预测可执行程序为classifier,分割任务的预测可执行程序为segmenter,检测任务的预测可执行程序为detector,其主要命令参数说明如下:
| 参数 | 说明 |
|---|---|
| --model_dir | 模型转换生成的.xml文件路径,请保证模型转换生成的三个文件在同一路径下 |
| --image | 要预测的图片文件路径 |
| --image_list | 按行存储图片路径的.txt文件 |
| --thread_num | 预测的线程数,默认值为1 |
| --cfg_file | PaddleX model 的.yml配置文件 |
| --save_dir | 可视化结果图片保存地址,仅适用于检测和分割任务,默认值为" "既不保存可视化结果 |
样例一:
单张图片分类任务
测试图片 /path/to/test_img.jpeg
./build/classifier --model_dir=/path/to/nb_model
--image=/path/to/test_img.jpeg --cfg_file=/path/to/PadlleX_model.yml --thread_num=4
样例二:
多张图片分割任务
预测多个图片/path/to/image_list.txt,image_list.txt内容的格式如下:
/path/to/images/test_img1.jpeg
/path/to/images/test_img2.jpeg
...
/path/to/images/test_imgn.jpeg
./build/segmenter --model_dir=/path/to/models/nb_model --image_list=/root/projects/images_list.txt --cfg_file=/path/to/PadlleX_model.yml --save_dir ./output --thread_num=4
硬件:Raspberry Pi 3 Model B 系统:raspbian OS 软件:paddle-lite 2.6.1
单位ms,num表示paddle-lite下使用的线程数
| 模型 | lite(num=4) | 输入图片大小 |
|---|---|---|
| mobilenet-v2 | 136.19 | 224*224 |
| resnet-50 | 1131.42 | 224*224 |
| deeplabv3 | 2162.03 | 512*512 |
| hrnet | 6118.23 | 512*512 |
| yolov3-darknet53 | 4741.15 | 320*320 |
| yolov3-mobilenet | 1424.01 | 320*320 |
| densenet121 | 1144.92 | 224*224 |
| densenet161 | 2751.57 | 224*224 |
| densenet201 | 1847.06 | 224*224 |
| HRNet_W18 | 1753.06 | 224*224 |
| MobileNetV1 | 177.63 | 224*224 |
| MobileNetV3_large_ssld | 133.99 | 224*224 |
| MobileNetV3_small_ssld | 53.99 | 224*224 |
| ResNet101 | 2290.56 | 224*224 |
| ResNet101_vd | 2337.51 | 224*224 |
| ResNet101_vd_ssld | 3124.49 | 224*224 |
| ShuffleNetV2 | 115.97 | 224*224 |
| Xception41 | 1418.29 | 224*224 |
| Xception65 | 2094.7 | 224*224 |
从测试结果看建议用户在树莓派上使用MobileNetV1-V3,ShuffleNetV2这类型的小型网络
树莓派支持通过OpenVINO在NCS2上跑PaddleX模型预测,目前仅支持PaddleX的分类网络,基于NCS2的方式包含Paddle模型转OpenVINO IR以及部署IR在NCS2上进行预测两个步骤。