- MNN是阿里开源的一款用于边缘端设备部署、推理深度学习模型的框架,与腾讯开源的ncnn类似哈。
- MNN在github上有开源,同时官方也有提供开发接口文档;而且写的比较详细。跟ncnn一样,MNN也是在手机端用的还比较多,而且支持Tensorflow、Caffe、ONNX等主流模型文件格式,支持CNN、RNN、GAN等常用网络
安装依赖
首先安装依赖,跟ncnn类似,依赖也比较少,而且跟ncnn的依赖差不多,所以如果编译过ncnn,基本上也不需要在安装什么库。主要安装以下依赖库:
sudo apt-get install cmake
sudo apt-get install libprotobuf-dev
sudo apt-get install protobuf-compiler
sudo apt-get install libvulkan-dev
基本上,就需要安装这几个工具和库,这几个也是深度学习编程常见的库。
下载源码编译安装
git clone https://github.com/alibaba/MNN.git
cd MNN
./schema/generate.sh
mkdir build
cd build
默认编译:
cmake .. & make -j4
若需要打开某些功能还可以带参数编译:
cmake -DMNN_SUPPORT_TFLITE_QUAN=true \
-DMNN_BUILD_CONVERTER=true \
-DMNN_BUILD_QUANTOOLS=true \
-DMNN_BUILD_DEMO=true \
-DMNN_OPENMP=true ..
修改MNN下的CMakeLists.txt文件。具体参数以及定义如下:
参数 | 默认值 | 作用 |
MNN_VULKAN | OFF | 编译GPU优化库:MNN-VULKAN |
MNN_ARM82 | OFF | 编译 MNN-ARM82 (新架构的CPU 优化 Backend) |
MNN_OPENCL | OFF | 编译 GPU 优化库: MNN-OpenCL |
MNN_OPENGL | OFF | 编译 GPU 优化库:MNN-OpenGL |
MNN_USE_SYSTEM_LIB | OFF | 编译 OpenCL/Vulkan 时,依赖系统的OpenCL/Vulkan 库或者。OFF 表示在运行时寻找系统驱动 |
MNN_BUILD_HARD | OFF | ARM平台下控制-mfloat-abi参数为hard或softfp |
MNN_BUILD_SHARED_LIBS | ON | 控制MNN相关库是否编译为动态库而非静态库 |
MNN_FORBID_MULTI_THREAD | OFF | 禁用多线程 |
MNN_BUILD_DEMO | OFF | 编译Demo |
MNN_BUILD_TRAIN | OFF | 编译训练相关 |
MNN_BUILD_QUANTOOLS | OFF | 编译量化工具 |
MNN_BUILD_CONVERTER | OFF | 编译模型转换器 |
MNN_EVALUATION | OFF | 编译评估工具 |
MNN_DEBUG_MEMORY | OFF | 调试内存 |
MNN_DEBUG_TENSOR_SIZE | OFF | 调试Tensor大小 |
MNN_SUPPORT_TFLITE_QUAN | OFF | 支持TFLite的量化Op |
MNN_PORTABLE_BUILD | OFF | 静态链接第三方依赖来创建不依赖特定路径的可执行文件 |
MNN_SEP_BUILD | OFF | 分开编译MNN的各个后端以及表达式.只在MNN_BUILD_SHARED_LIBS=ON时有效 |
MNN_AAPL_FMWK | OFF | 在Apple平台下将MNN作为Framework而非静态/动态库编译并打包metallib |
编译后可将结果打包,默认打包路径是:
头文件: /usr/local/include/MNN
库文件: /usr/local/lib/libMNN.so
工具: /MNN/build