Ubuntu 18.04 LTS环境下 MNN 的编译与使用

环境 Ubuntu 18.04 LTS

1.安装 gcc
sudo apt install build-essential
gcc --version

  1. 安装protobuf(3.0以上) (Protocol Buffers - Google’s data interchange format)

#安装依赖工具
sudo apt-get install autoconf automake libtool curl make g++ unzip

#编译安装protobuf
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh

./configure
make
make check
sudo make install
sudo ldconfig
  1. 编译 Linux 工具
    cd /path/to/MNN/

#编译flatbuffer(pc平台编译器)等三方工具以及其他内容
./schema/genrate.sh
./tools/script/get_model.sh (可选, 模型仅demo工程需要)
mkdir build && cd build

编译 MNN 的各种benchmark, converter, quantools, demo, ealuation, test, demo等内容

cmake … -DMNN_BUILD_CONVERTER=true -DMNN_BUILD_BENCHMARK=true -DMNN_BUILD_QUANTOOLS=true -DMNN_EVALUATION=true -DMNN_BUILD_TEST=true -DMNN_BUILD_TRAIN=true -DMNN_BUILD_TOOLS=true -DMNN_BUILD_DEMO=true
make -j4

  1. 编译Android 库

属于交叉编译, 原理是cmake 的 CMAKE_TOOLCHAIN_FILE指定交叉编译文件 $ANDROID_NDK/build/cmake/android.toolchain.cmake (Android Studio 使用 cmake 也是这个原理)

所以事先需要在 ~/.bashrc 或者 ~/.bash_profile 中设置Android NDK 环境变量, 比如 export ANDROID_NDK=/opt/Android/Sdk/ndk/21.1.6352462

cd project/android

#编译armv7动态库:
mkdir build_32 && cd build_32 && …/build_32.sh

#编译armv8动态库:
mkdir build_64 && cd build_64 && …/build_64.sh

  1. 编译 iOS 库
    在 macOS下, 用xcode打开 project/ios/MNN.xcodeproj, 点击编译即可

  2. 查看内容

查看 /MNN/build 目录内容

root@hemmingway-YangTianM4000e-06:/home/hemmingway/workspace_mnn/MNN/build# ls

backendTest.out cmake_install.cmake MNNConvert pictureRotate.out testModel.out
benchmarkExprModels.out dataTransformer.out MNNDump2Json quantized.out testModelWithDescrisbe.out
benchmark.out express MNNV2Basic.out rawDataTransform.out timeProfile.out
checkInvalidValue.out expressDemo.out mobilenetTest.out run_test.out tools
classficationTopkEval.out getPerformance.out multiPose.out runTrainDemo.out train.out
CMakeCache.txt libMNN.so OnnxClip segment.out transformer.out
CMakeFiles Makefile pictureRecognition.out TestConvertResult

查看 MNN 的模型转换工具 MNNConvert 的使用

root@hemmingway-YangTianM4000e-06:/home/hemmingway/workspace_mnn/MNN/build# ./MNNConvert -h

Usage:
MNNConvert [OPTION…]

-h, --help Convert Other Model Format To MNN Model

-v, --version show current version
-f, --framework arg model type, ex: [TF,CAFFE,ONNX,TFLITE,MNN]
–modelFile arg tensorflow Pb or caffeModel, ex: *.pb,*caffemodel
–prototxt arg only used for caffe, ex: *.prototxt
–MNNModel arg MNN model, ex: *.mnn
–fp16 save Conv’s weight/bias in half_float data type
–benchmarkModel Do NOT save big size data, such as Conv’s weight,BN’s
gamma,beta,mean and variance etc. Only used to test
the cost of the model
–bizCode arg MNN Model Flag, ex: MNN
–debug Enable debugging mode.
–forTraining whether or not to save training ops BN and Dropout,
default: false

root@hemmingway-YangTianM4000e-06:/home/hemmingway/workspace_mnn/MNN/build#

查看 /MNN/project/android 目录内容

root@hemmingway-YangTianM4000e-06:/home/hemmingway/workspace_mnn/MNN/project/android# ls
build_32_ndk14.sh build_32_vulkan.sh build.gradle gradlew rTest.sh src
build_32.sh build_64 build_vulkan.sh Hmacro.py run.sh testBasic.sh
build_32_shared.sh build_64.sh CMakeExports.txt nativepub.gradle settings.gradle testCommon.sh
build_32_stl_shared.sh build_gnu_32.sh gradle pullResult.sh speedTest.sh updateTest.sh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章