Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
|
|
5 years ago | |
|---|---|---|
| .. | ||
| README.md | 5 years ago | |
| mobilenetv2.sh | 5 years ago | |
| mobilenetv2_input.bin | 5 years ago | |
Linux Android IOT C/C++ 全流程 模型编译 模型代码生成 模型部署 推理应用 初级 中级 高级
本教程以MobileNetv2在安卓手机编译部署为例,使用用户快速了解codegen在安卓平台生成代码、工程构建以及部署的一系列流程。关于converter、codegen的获取以及详细参数介绍可参考mindspore的编译构建介绍。
安卓平台的编译部署需要提前配置ANDROID_NDK到环境变量。
进入mindspore/mindspore/lite/micro/examples/mobilenetv2目录执行脚本mobilenetv2.sh自动生成模型推理代码并编译工程目录
bash mobilenetv2.sh
codegen编译MobileNetv2模型,生成对应的模型推理代码。具体命令如下:
./codegen --codePath=. --modelPath=mobilenetv2.ms --target=ARM64
关于codegen的更多使用命令说明,可参见codegen工具的详细介绍
├── mobilenetv2
└── operator_library
在编译此工程之前需要预先获取安卓平台对应的Release包。
安卓平台对应的Release包的目录如下:
mindspore-lite-{version}-inference-android-{arch}
├── inference
│ ├── include # 推理框架头文件
│ ├── lib # 推理框架库
│ │ ├── libmindspore-lite.a # MindSpore Lite推理框架的静态库
│ │ └── libmindspore-lite.so # MindSpore Lite推理框架的动态库
│ ├── minddata # 图像处理库
│ │ ├── include
│ │ └── lib
│ │ └── libminddata-lite.so # 图像处理动态库文件
│ └── third_party # NPU库
│ └── hiai_ddk
└── tools
├── benchmark # 基准测试工具
│ └── benchmark
└── codegen # 代码生成工具
├── include # 算子头文件
└── lib # 算子静态库
生成代码工程目录如下:
├── mobilenetv2 # 生成代码的根目录
├── benchmark # 生成代码的benchmark目录
└── src # 模型推理代码目录
组织生成的模型推理代码以及安卓平台算子静态库编译模型推理静态库
进入代码工程目录,新建并进入build目录
mkdir mobilenetv2/build && cd mobilenetv2/build
开始编译
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \
-DANDROID_ABI="arm64-v8a" \
-DANDROID_TOOLCHAIN_NAME="aarch64-linux-android-clang" \
-DANDROID_NATIVE_API_LEVEL="19" \
-DPLATFORM_ARM64=ON \
-DPKG_PATH={path to}/mindspore-lite-{version}-inference-android-{arch} ..
make
{path to}和{version}需要用户根据实际情况填写。若用户需要编译安卓arm32环境,则使用:
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \
-DANDROID_ABI="armeabi-v7a" \
-DANDROID_TOOLCHAIN_NAME="clang" \
-DANDROID_NATIVE_API_LEVEL="19" \
-DPLATFORM_ARM32=ON \
-DPKG_PATH={path to}/mindspore-lite-{version}-inference-android-{arch} ..
make
此时在mobilenetv2/build/src/目录下生成了libnet.a,推理执行库,在mobilenetv2/build目录下生成了benchmark可执行文件。而对应的模型参数文件net.bin在生成的代码src目录下。
adb将生成的可执行二进制文件benchmark、mobilenetv2_input.bin以及模型参数文件net.bin拷贝到目标安卓服务器,执行以下命令即可:
./benchmark mobilenetv2_input.bin net.bin 100
=========run benchmark========
input 0: mobilenetv2_input.bin
name: Softmax-65, ,DataType: 43, Size: 4004, Shape:1 1001, Data:
0.000010,0.000010,0.000014,0.000091,0.000080,0.000717,0.000112,0.000738,0.000008,0.000003
=========run success========
阿对对队
C++ Python Text C Unity3D Asset other