前言
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
綠橘梢頭幾點春。似留香蕊送行人。
明朝紫鳳朝天路,十二重城五碧雲。
歌漸咽,酒初醺。盡將紅淚溼湘裙。
贛江西畔從今日,明月清風憶使君。
– 宋-晏幾道《鷓鴣天·綠橘梢頭幾點春》