From 892bf831c35a927aebe2c37d31fa2dcee436f342 Mon Sep 17 00:00:00 2001 From: zhupengyang Date: Tue, 26 May 2020 14:05:38 +0800 Subject: [PATCH] [doc] armlinux demo guide (#3706) (#3708) --- docs/demo_guides/ios_app_demo.md | 2 +- docs/demo_guides/linux_arm_demo.md | 91 ++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 docs/demo_guides/linux_arm_demo.md diff --git a/docs/demo_guides/ios_app_demo.md b/docs/demo_guides/ios_app_demo.md index 2d9bbcbf83..36170fd5b5 100644 --- a/docs/demo_guides/ios_app_demo.md +++ b/docs/demo_guides/ios_app_demo.md @@ -90,7 +90,7 @@ ios-detection_demo/detection_demo/ViewController.mm ## 代码讲解 (如何使用Paddle-Lite C++ API 执行预测) -IOS 示例基于C++ API 开发,调用Paddle-Lite C++ API包括以下五步。更详细的API 描述参考: [Paddle-Lite C++ API](https://paddle-lite.readthedocs.io/zh/latest/api_reference/java_api_doc.html)。 +IOS 示例基于C++ API 开发,调用Paddle-Lite C++ API包括以下五步。更详细的API 描述参考: [Paddle-Lite C++ API](https://paddle-lite.readthedocs.io/zh/latest/api_reference/cxx_api_doc.html)。 ```c++ #include diff --git a/docs/demo_guides/linux_arm_demo.md b/docs/demo_guides/linux_arm_demo.md new file mode 100644 index 0000000000..8ad2eea2a0 --- /dev/null +++ b/docs/demo_guides/linux_arm_demo.md @@ -0,0 +1,91 @@ +# Linux(ARM) Demo + +## 多种应用场景 + +我们提供Paddle-Lite示例工程[Paddle-Lite-Demo](https://github.com/PaddlePaddle/Paddle-Lite-Demo),其中包含[Android](https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/master/PaddleLite-android-demo)、[iOS](https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/master/PaddleLite-ios-demo)和[Armlinux](https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/master/PaddleLite-armlinux-demo)平台的示例工程。Linux(ARM) demo涵盖[图像分类](https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/master/PaddleLite-android-demo/image_classification_demo)、[目标检测](https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/master/PaddleLite-android-demo/object_detection_demo)2个应用场景。 + +### 1. 图像分类 + +Paddle-Lite提供的图像分类demo ,在移动端上提供了实时的物体识别能力,可以应用到生产线自动分拣或质检、识别医疗图像、辅助医生肉眼诊断等场景。在移动端预测的效果图如下: + +

     

+ +### 2. 物体检测 + +Paddle-Lite提供的物体检测demo ,在移动端上提供了检测多个物体的位置、名称、位置及数量的能力。可以应用到视频监控(是否有违规物体或行为)、工业质检(微小瑕疵的数量和位置)、医疗诊断(细胞计数、中药识别)等场景。在移动端预测的效果图如下: + +

     

+ +## Linux(ARM) demo部署方法 + +下面我们以**目标检测(object_detection_demo)**为例讲解如何部署工程。 + +**目的**:将基于Paddle-Lite的预测库部署到Linux(ARM)设备,实现物体检测的目标。 + +**需要的环境**:Linux(ARM)设备、下载到本地的[Paddle-Lite-Demo](https://github.com/PaddlePaddle/Paddle-Lite-Demo)工程 + +**部署步骤**: + +1、 目标检测的Linux(ARM)示例位于 `Paddle-Lite-Demo\PaddleLite-armlinux-demo\object_detection_demo` + +2、终端中执行 `download_models_and_libs.sh` 脚本自动下载模型和Paddle-Lite预测库 + +```shell +cd PaddleLite-armlinux-demo # 1. 终端中进入 Paddle-Lite-Demo\PaddleLite-armlinux-demo +sh download_models_and_libs.sh # 2. 执行脚本下载依赖项 (需要联网) +``` + +下载完成后会出现提示: `Download successful!` + +3、终端中执行 `download_models_and_libs.sh` 脚本自动下载模型和Paddle-Lite预测库 +```shell +cd object_detection_demo # 1. 终端中进入 +sh run.sh # 2. 执行脚本编译并执行物体检测demo,输出预测数据和运行时间 +``` +demo结果如下: +image + +## 使用C++接口预测 +Linux(ARM) demo 示例基于C++ API 开发,调用Paddle-Lite C++ API包括以下五步。更详细的API 描述参考: [Paddle-Lite C++ API](https://paddle-lite.readthedocs.io/zh/latest/api_reference/cxx_api_doc.html)。 + +```c++ +#include +// 引入C++ API +#include "paddle_lite/paddle_api.h" +#include "paddle_lite/paddle_use_ops.h" +#include "paddle_lite/paddle_use_kernels.h" + +// 1. 设置MobileConfig +MobileConfig config; +config.set_model_from_file(); // 设置NaiveBuffer格式模型路径 +config.set_power_mode(LITE_POWER_NO_BIND); // 设置CPU运行模式 +config.set_threads(4); // 设置工作线程数 + +// 2. 创建PaddlePredictor +std::shared_ptr predictor = CreatePaddlePredictor(config); + +// 3. 设置输入数据 +std::unique_ptr input_tensor(std::move(predictor->GetInput(0))); +input_tensor->Resize({1, 3, 224, 224}); +auto* data = input_tensor->mutable_data(); +for (int i = 0; i < ShapeProduction(input_tensor->shape()); ++i) { + data[i] = 1; +} + +// 4. 执行预测 +predictor->run(); + +// 5. 获取输出数据 +std::unique_ptr output_tensor(std::move(predictor->GetOutput(0))); +std::cout << "Output shape " << output_tensor->shape()[1] << std::endl; +for (int i = 0; i < ShapeProduction(output_tensor->shape()); i += 100) { + std::cout << "Output[" << i << "]: " << output_tensor->data()[i] + << std::endl; +} +``` + +## 使用Python接口预测 + +1. Python预测库编译参考[编译Linux](../user_guides/Compile/Linux),建议在开发版上编译。 +2. [Paddle-Lite Python API](https://paddle-lite.readthedocs.io/zh/latest/api_reference/python_api_doc.html)。 +3. 代码参考,[Python预测](python_demo) -- GitLab