前言
MNN是阿里开源的一款用于边缘端设备部署、推理深度学习模型的框架,与腾讯开源的ncnn类似哈。MNN在[github](https://github.com/alibaba/MNN "github")上有开源,同时官方也有提供[开发接口文档](https://www.yuque.com/mnn "开发接口文档");而且写的比较详细。跟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命令来下载,或者直接去github下载压缩包,然后解压。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 | ON | 分开编译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
绿橘梢头几点春。似留香蕊送行人。
明朝紫凤朝天路,十二重城五碧云。
歌渐咽,酒初醺。尽将红泪湿湘裙。
赣江西畔从今日,明月清风忆使君。
– 宋-晏几道《鹧鸪天·绿橘梢头几点春》