From 672479de6d5b16ddba30c9aff0f7f87f74d53c2b Mon Sep 17 00:00:00 2001 From: DefTruth Date: Thu, 20 Oct 2022 14:58:31 +0800 Subject: [PATCH 1/5] [Backend] Add override flag to lite backend --- fastdeploy/backends/lite/lite_backend.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fastdeploy/backends/lite/lite_backend.h b/fastdeploy/backends/lite/lite_backend.h index fed33e28540..cf88390a433 100644 --- a/fastdeploy/backends/lite/lite_backend.h +++ b/fastdeploy/backends/lite/lite_backend.h @@ -56,14 +56,14 @@ class LiteBackend : public BaseBackend { const std::string& params_file, const LiteBackendOption& option = LiteBackendOption()); - bool Infer(std::vector& inputs, std::vector* outputs); + bool Infer(std::vector& inputs, std::vector* outputs) override; // NOLINT - int NumInputs() const { return inputs_desc_.size(); } + int NumInputs() const override { return inputs_desc_.size(); } - int NumOutputs() const { return outputs_desc_.size(); } + int NumOutputs() const override { return outputs_desc_.size(); } - TensorInfo GetInputInfo(int index); - TensorInfo GetOutputInfo(int index); + TensorInfo GetInputInfo(int index) override; + TensorInfo GetOutputInfo(int index) override; std::vector GetInputInfos() override; std::vector GetOutputInfos() override; From cda3e95aaf2a26e5af57f9af25823382aff95bfb Mon Sep 17 00:00:00 2001 From: DefTruth Date: Fri, 21 Oct 2022 13:02:35 +0800 Subject: [PATCH 2/5] [Docs] Add Android C++ SDK build docs --- CMakeLists.txt | 2 +- docs/cn/build_and_install/android.md | 103 +++++++++++++++++- .../download_prebuilt_libraries.md | 8 +- 3 files changed, 107 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c57251d4262..2429a604667 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,7 @@ option(WITH_TESTING "Whether to compile with unittest." OFF) option(WITH_OPENCV_STATIC "Use OpenCV static lib for Android." OFF) option(WITH_LITE_STATIC "Use Paddle Lite static lib for Android." OFF) option(WITH_LITE_FULL_API "Use Paddle Lite full API lib for Android." ON) -option(WITH_LITE_FP16 "Use Paddle Lite lib with fp16 enabled for Android." OFF) +option(WITH_LITE_FP16 "Use Paddle Lite lib with fp16 enabled for Android." ON) # Please don't open this flag now, some bugs exists. # Only support Linux Now diff --git a/docs/cn/build_and_install/android.md b/docs/cn/build_and_install/android.md index c091b75d550..2421d3c66a4 100644 --- a/docs/cn/build_and_install/android.md +++ b/docs/cn/build_and_install/android.md @@ -1,3 +1,104 @@ # Android部署库编译 -进行中... +FastDeploy当前在Android仅支持Paddle-Lite后端推理,支持armeabi-v7a和arm64-v8a两种cpu架构,在armv8.2架构的arm设备支持fp16精度推理。相关编译选项说明如下: + +|编译选项|默认值|说明|备注| +|:---|:---|:---|:---| +|ENABLE_LITE_BACKEND|OFF|编译Android库时需要设置为ON| - | +|WITH_OPENCV_STATIC|OFF|是否使用OpenCV静态库| - | +|WITH_LITE_STATIC|OFF|是否使用Lite静态库| 暂不支持使用Lite静态库 | +|WITH_LITE_FULL_API|ON|是否使用Lite Full API库| 目前必须为ON | +|WITH_LITE_FP16|ON|是否使用带FP16支持的Lite库| 目前仅支持 arm64-v8a 架构| + +更多编译选项请参考[FastDeploy编译选项说明](./README.md) + +## Android C++ SDK 编译安装 + +编译需要满足: + +- Android SDK API >= 21 +- Android NDK >= 20 (当前仅支持clang编译工具链) +- cmake >= 3.10.0 + +编译前请先检查您的Android SDK 和 NDK 是否已经配置,如: +```bash +➜ echo $ANDROID_SDK +/Users/xxx/Library/Android/sdk +➜ echo $ANDROID_NDK +/Users/xxx/Library/Android/sdk/ndk/25.1.8937393 +``` +推荐使用 NDK>=20 进行交叉编译,编译命令如下: +```bash +# Download the latest source code +git clone https://github.com/PaddlePaddle/FastDeploy.git +cd FastDeploy + +# Setting up Android toolchanin +ANDROID_ABI=arm64-v8a # 'arm64-v8a', 'armeabi-v7a' +ANDROID_PLATFORM="android-21" # API >= 21 +ANDROID_STL=c++_shared # 'c++_shared', 'c++_static' +ANDROID_TOOLCHAIN=clang # 'clang' only +TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake + +# Create build directory +BUILD_ROOT=build/Android +BUILD_DIR=${BUILD_ROOT}/${ANDROID_ABI}-api-21 +FASDEPLOY_INSTALL_DIR="${ROOT_PATH}/${BUILD_DIR}/install" +mkdir build && mkdir ${BUILD_ROOT} && mkdir ${BUILD_DIR} +cd ${BUILD_DIR} + +# Check fp16 support (only support arm64-v8a now) +WITH_LITE_FP16=ON +if [ "$ANDROID_ABI" = "armeabi-v7a" ]; then + WITH_LITE_FP16=OFF +fi + +# Cmake configuration with Android toolchain +cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DANDROID_ABI=${ANDROID_ABI} \ + -DANDROID_NDK=${ANDROID_NDK} \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_STL=${ANDROID_STL} \ + -DANDROID_TOOLCHAIN=${ANDROID_TOOLCHAIN} \ + -DENABLE_LITE_BACKEND=ON \ + -DENABLE_VISION=ON \ + -DWITH_LITE_FP16=${WITH_LITE_FP16} \ + -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ + -Wno-dev ../../.. + +# Build FastDeploy Android C++ SDK +make -j8 +make install +``` +编译完成后,Android C++ SDK 保存在 `build/Android/arm64-v8a-api-21/install` 目录下,目录结构如下: +```bash +➜ tree . -d -L 3 +. +├── examples +├── include +│   └── fastdeploy # FastDeploy 头文件 +├── lib +│   └── arm64-v8a # FastDeploy Android 动态库 +└── third_libs # 第三方依赖库 + └── install + ├── opencv + └── paddlelite +``` +在examples/vision目录下可查看Android C++ SDK 使用案例: +```bash +. +├── classification +│   ├── paddleclas +│   │   ├── android # 图像分类Android使用案例 +│   │   ├── cpp +... +├── detection +│   ├── paddledetection +│   │   ├── android # 目标检测Android使用案例 +│   │   ├── cpp +... +``` +如何使用FastDeploy Android C++ SDK 请参考使用案例文档: +- [图像分类Android使用文档](../../../examples/vision/classification/paddleclas/android/README.md) +- [目标检测Android使用文档](../../../examples/vision/detection/paddledetection/android/README.md) diff --git a/docs/cn/build_and_install/download_prebuilt_libraries.md b/docs/cn/build_and_install/download_prebuilt_libraries.md index a320b692440..9182aa69fc7 100644 --- a/docs/cn/build_and_install/download_prebuilt_libraries.md +++ b/docs/cn/build_and_install/download_prebuilt_libraries.md @@ -17,7 +17,7 @@ FastDeploy提供各平台预编译库,供开发者直接下载安装使用。 Release版本(当前最新0.3.0)安装 ```bash -pip install fastdeploy-gpu-python -f https://www.paddlepaddle.org.cn/whl/fastdeploy.html +pip install fastdeploy-gpu-python -f https://www.paddlepaddle.org.cn/whl/fastdeploy.html ``` 其中推荐使用Conda配置开发环境 @@ -51,7 +51,7 @@ pip install fastdeploy-python -f https://www.paddlepaddle.org.cn/whl/fastdeploy. ## C++ SDK安装 -Release版本(当前最新0.3.0) +Release版本(当前最新0.3.0,Android为0.4.0 pre-release) | 平台 | 文件 | 说明 | | :--- | :--- | :---- | @@ -59,5 +59,5 @@ Release版本(当前最新0.3.0) | Windows x64 | [fastdeploy-win-x64-0.3.0.zip](https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-win-x64-0.3.0.zip) | Visual Studio 16 2019编译产出 | | Mac OSX x64 | [fastdeploy-osx-x86_64-0.3.0.tgz](https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-osx-x86_64-0.3.0.tgz) | clang++ 10.0.0编译产出| | Mac OSX arm64 | [fastdeploy-osx-arm64-0.3.0.tgz](https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-osx-arm64-0.3.0.tgz) | clang++ 13.0.0编译产出 | -| Linux aarch64 | [fastdeploy-linux-aarch64-0.3.0.tgz](https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-linux-aarch64-0.3.0.tgz) | g++ 6.3.0编译产出 | - +| Linux aarch64 | [fastdeploy-linux-aarch64-0.3.0.tgz](https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-linux-aarch64-0.3.0.tgz) | g++ 6.3.0编译产出 | +| Android armv7&v8 | [fastdeploy-android-0.4.0-shared.tgz](https://bj.bcebos.com/fastdeploy/release/android/fastdeploy-android-0.4.0-shared.tgz) | NDK 25及clang++编译产出, 支持arm64-v8a及armeabi-v7a | From b97e2e24f5df3a01b8848664786c9e0bc49616d5 Mon Sep 17 00:00:00 2001 From: DefTruth Date: Fri, 21 Oct 2022 13:58:16 +0800 Subject: [PATCH 3/5] [Doc] fix android_build_docs typos --- docs/cn/build_and_install/android.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/cn/build_and_install/android.md b/docs/cn/build_and_install/android.md index 2421d3c66a4..0280df949ec 100644 --- a/docs/cn/build_and_install/android.md +++ b/docs/cn/build_and_install/android.md @@ -43,7 +43,7 @@ TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake # Create build directory BUILD_ROOT=build/Android BUILD_DIR=${BUILD_ROOT}/${ANDROID_ABI}-api-21 -FASDEPLOY_INSTALL_DIR="${ROOT_PATH}/${BUILD_DIR}/install" +FASDEPLOY_INSTALL_DIR="${BUILD_DIR}/install" mkdir build && mkdir ${BUILD_ROOT} && mkdir ${BUILD_DIR} cd ${BUILD_DIR} @@ -53,7 +53,7 @@ if [ "$ANDROID_ABI" = "armeabi-v7a" ]; then WITH_LITE_FP16=OFF fi -# Cmake configuration with Android toolchain +# CMake configuration with Android toolchain cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \ -DCMAKE_BUILD_TYPE=MinSizeRel \ -DANDROID_ABI=${ANDROID_ABI} \ From 265f8ac64e5acfce07314512d7a2d74d7e313739 Mon Sep 17 00:00:00 2001 From: DefTruth <31974251+DefTruth@users.noreply.github.com> Date: Fri, 21 Oct 2022 15:03:19 +0800 Subject: [PATCH 4/5] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2429a604667..c57251d4262 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,7 @@ option(WITH_TESTING "Whether to compile with unittest." OFF) option(WITH_OPENCV_STATIC "Use OpenCV static lib for Android." OFF) option(WITH_LITE_STATIC "Use Paddle Lite static lib for Android." OFF) option(WITH_LITE_FULL_API "Use Paddle Lite full API lib for Android." ON) -option(WITH_LITE_FP16 "Use Paddle Lite lib with fp16 enabled for Android." ON) +option(WITH_LITE_FP16 "Use Paddle Lite lib with fp16 enabled for Android." OFF) # Please don't open this flag now, some bugs exists. # Only support Linux Now From 3aca8c75a92e04f5a8d1cade1630a8ab33c1bfe8 Mon Sep 17 00:00:00 2001 From: DefTruth <31974251+DefTruth@users.noreply.github.com> Date: Fri, 21 Oct 2022 15:03:57 +0800 Subject: [PATCH 5/5] Update android.md --- docs/cn/build_and_install/android.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cn/build_and_install/android.md b/docs/cn/build_and_install/android.md index 0280df949ec..cdbdd588c82 100644 --- a/docs/cn/build_and_install/android.md +++ b/docs/cn/build_and_install/android.md @@ -8,7 +8,7 @@ FastDeploy当前在Android仅支持Paddle-Lite后端推理,支持armeabi-v7a |WITH_OPENCV_STATIC|OFF|是否使用OpenCV静态库| - | |WITH_LITE_STATIC|OFF|是否使用Lite静态库| 暂不支持使用Lite静态库 | |WITH_LITE_FULL_API|ON|是否使用Lite Full API库| 目前必须为ON | -|WITH_LITE_FP16|ON|是否使用带FP16支持的Lite库| 目前仅支持 arm64-v8a 架构| +|WITH_LITE_FP16|OFF|是否使用带FP16支持的Lite库| 目前仅支持 arm64-v8a 架构| 更多编译选项请参考[FastDeploy编译选项说明](./README.md)