Skip to content

PaddleX 端侧部署 demo 使用指南

本指南主要介绍 PaddleX 端侧部署 demo 在 Android shell 上的运行方法。 本指南适用于下列 6 种模块的 8 个模型:

模块 具体模型 CPU GPU
目标检测 PicoDet-S
PicoDet-L
版面区域检测 PicoDet_layout_1x
语义分割 PP-LiteSeg-T
图像分类 PP-LCNet_x1_0
MobileNetV3_small_x1_0
文本检测 PP-OCRv4_mobile_det
文本识别 PP-OCRv4_mobile_rec

备注 - GPU 指的是 使用 OpenCL 将计算映射到 GPU 上执行 ,以充分利用 GPU 硬件算力,提高推理性能。

安装流程与使用方式

环境准备

  1. 在本地环境安装好 CMake 编译工具,并在 Android NDK 官网下载当前系统符合要求的版本的 NDK 软件包。例如,在 Mac 上开发,需要在 Android NDK 官网下载 Mac 平台的 NDK 软件包。

    环境要求 - CMake >= 3.10(最低版本未经验证,推荐 3.20 及以上) - Android NDK >= r17c(最低版本未经验证,推荐 r20b 及以上)

    本指南所使用的测试环境: - cmake == 3.20.0 - android-ndk == r20b

  2. 准备一部 Android 手机,并开启 USB 调试模式。开启方法: 手机设置 -> 查找开发者选项 -> 打开开发者选项和 USB 调试模式

  3. 电脑上安装 ADB 工具,用于调试。ADB 安装方式如下:

    3.1. Mac 电脑安装 ADB

     brew cask install android-platform-tools
    

    3.2. Linux 安装 ADB

     # debian系linux发行版的安装方式
     sudo apt update
     sudo apt install -y wget adb
    
     # redhat系linux发行版的安装方式
     sudo yum install adb
    

    3.3. Windows 安装 ADB

    win 上安装需要去谷歌的安卓平台下载 ADB 软件包进行安装:链接

    打开终端,手机连接电脑,在终端中输入

     adb devices
    

    如果有 device 输出,则表示安装成功。

     List of devices attached
     744be294    device
    

物料准备

  1. 克隆 Paddle-Lite-Demo 仓库的 feature/paddle-x 分支到 PaddleX-Lite-Deploy 目录。

    git clone -b feature/paddle-x https://github.com/PaddlePaddle/Paddle-Lite-Demo.git PaddleX-Lite-Deploy
    
  2. 填写 问卷 下载压缩包,将压缩包放到指定解压目录,切换到指定解压目录后执行解压命令。

    下面是 object_detection 解压操作示例,其他任务可参考后面的表格。

    # 1. 切换到指定解压目录
    cd PaddleX-Lite-Deploy/object_detection/android/shell/cxx/picodet_detection
    
    # 2. 执行解压命令
    unzip object_detection.zip
    

    任务名 解压目录 解压命令
    object_detection PaddleX-Lite-Deploy/object_detection/android/shell/cxx/picodet_detection unzip object_detection.zip
    semantic_segmentation PaddleX-Lite-Deploy/semantic_segmentation/android/shell/cxx/semantic_segmentation unzip semantic_segmentation.zip
    image_classification PaddleX-Lite-Deploy/image_classification/android/shell/cxx/image_classification unzip image_classification.zip
    ocr PaddleX-Lite-Deploy/ocr/android/shell/ppocr_demo unzip ocr.zip

部署步骤

  1. 将工作目录切换到 PaddleX_Lite_Deploy/libs,运行 download.sh 脚本,下载所需要的 Paddle Lite 预测库。此步骤只需执行一次,即可支持每个 demo 使用。

  2. 将工作目录切换到 PaddleX_Lite_Deploy/{Task_Name}/assets,运行 download.sh 脚本,下载 paddle_lite_opt 工具 优化后的模型、测试图片和标签文件等。

  3. 将工作目录切换到 PaddleX_Lite_Deploy/{Task_Name}/android/shell/cxx/{Demo_Name},运行 build.sh 脚本,完成可执行文件的编译和运行。

  4. 将工作目录切换到 PaddleX-Lite-Deploy/{Task_Name}/android/shell/cxx/{Demo_Name},运行 run.sh 脚本,完成在端侧的预测。

    注意: - Pipeline_NameDemo_Name 为占位符,具体值可参考本节最后的表格。 - download.shrun.sh 支持传入模型名来指定模型,若不指定则使用默认模型。目前适配的模型可参考本节最后表格的 Model_Name 列。 - 若想使用自己训练的模型,参考 模型转换方法 得到 .nb 模型,放到PaddleX_Lite_Deploy/{Pipeline_Name}/assets/{Model_Name}目录下, Model_Name为模型名,例如 PaddleX_Lite_Deploy/object_detection/assets/PicoDet-L。 - 在运行 build.sh 脚本前,需要更改 NDK_ROOT 指定的路径为实际安装的 NDK 路径。 - 在运行 build.sh 脚本时需保持 ADB 连接。 - 在 Windows 系统上可以使用 Git Bash 执行部署步骤。 - 若在 Windows 系统上编译,需要将 CMakeLists.txt 中的 CMAKE_SYSTEM_NAME 设置为 windows。 - 若在 Mac 系统上编译,需要将 CMakeLists.txt 中的 CMAKE_SYSTEM_NAME 设置为 darwin

以下为 object_detection 的示例,其他 demo 需按参考本节最后的表格改变第二步和第三步所切换的目录。

 # 1. 下载需要的 Paddle Lite 预测库
 cd PaddleX_Lite_Deploy/libs
 sh download.sh

 # 2. 下载 paddle_lite_opt 工具优化后的模型、测试图片、标签文件
 cd ../object_detection/assets
 sh download.sh
 # 支持传入模型名来指定下载的模型 支持的模型列表可参考本节最后表格的 Model_Name 列
 # sh download.sh PicoDet-L

 # 3. 完成可执行文件的编译
 cd ../android/app/shell/cxx/picodet_detection
 sh build.sh

 # 4. 预测
 sh run.sh
 # 支持传入模型名来指定预测的模型 支持的模型列表可参考本节最后表格的 Model_Name 列
 # sh run.sh PicoDet-L

运行结果如下所示,并生成一张名叫 dog_picodet_detection_result.jpg 的结果图:

======= benchmark summary =======
input_shape(s) (NCHW): {1, 3, 320, 320}
model_dir:./models/PicoDet-S/model.nb
warmup:1
repeats:10
power_mode:1
thread_num:0
*** time info(ms) ***
1st_duration:320.086
max_duration:277.331
min_duration:272.67
avg_duration:274.91

====== output summary ======
detection, image size: 768, 576, detect object: bicycle, score: 0.905929, location: x=125, y=120, width=441, height=304
detection, image size: 768, 576, detect object: truck, score: 0.653789, location: x=465, y=72, width=230, height=98
detection, image size: 768, 576, detect object: dog, score: 0.731584, location: x=128, y=222, width=182, height=319

预测结果

本节描述的部署步骤适用于下表中列举的 demo:

模型产线 Pipeline_Name 模块 Demo_Name 具体模型 Model_Name
通用目标检测 object_detection 目标检测 picodet_detection PicoDet-S PicoDet-S(default)
PicoDet-S_gpu
PicoDet-L PicoDet-L
PicoDet-L_gpu
PicoDet_layout_1x PicoDet_layout_1x
PicoDet_layout_1x_gpu
通用语义分割 semantic_segmentation 语义分割 semantic_segmentation PP-LiteSeg-T PP-LiteSeg-T(default)
PP-LiteSeg-T_gpu
通用图像分类 image_classification 图像分类 image_classification PP-LCNet_x1_0 PP-LCNet_x1_0(default)
PP-LCNet_x1_0_gpu
MobileNetV3_small_x1_0 MobileNetV3_small_x1_0
MobileNetV3_small_x1_0_gpu
通用OCR ocr 文本检测 ppocr_demo PP-OCRv4_mobile_det PP-OCRv4_mobile_det
文本识别 PP-OCRv4_mobile_rec PP-OCRv4_mobile_rec

备注 - 目前没有版面区域检测模块的端侧部署 demo,因此复用 picodet_detectiondemo 来部署PicoDet_layout_1x模型。

参考资料

本指南仅介绍端侧部署 demo 的基本安装、使用流程,若想要了解更细致的信息,如代码介绍、代码讲解、更新模型、更新输入和输出预处理、更新预测库等,可参考下列文档:

反馈专区

端侧部署能力持续优化中,欢迎提 issue 反馈问题与需求,我们会及时跟进。