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

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