【MNN学习一】基于Linux的MNN编译安装,模型转换以及benchmark测试

目录

一. MNN编译安装 (MNN编译)

二. 编译模型转换工具MNNConvert (MNNConvert)

三. 下载模型并使用MNNConvert (模型下载&转换)

四. 测试benchmark
一. MNN编译安装 (MNN编译)

1. 编译选项

  cmake_minimum_required(VERSION 2.8)project(MNN)# complier optionsset(CMAKE_C_STANDARD 99)set(CMAKE_CXX_STANDARD 11)enable_language(ASM)# set(CMAKE_C_COMPILER gcc)# set(CMAKE_CXX_COMPILER g++)option(MNN_USE_CPP11 "Enable MNN use c++11" ON)if (NOT MSVC)if(MNN_USE_CPP11)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")else()set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")endif()endif()# build optionsoption(MNN_BUILD_HARD "Build -mfloat-abi=hard or not" OFF)option(MNN_BUILD_SHARED_LIBS "MNN build shared or static lib" ON)option(MNN_FORBID_MULTI_THREAD "Disable Multi Thread" OFF)option(MNN_OPENMP "Enable Multiple Thread Linux|Android" ON)option(MNN_USE_THREAD_POOL "Use Multiple Thread by Self ThreadPool" OFF)option(MNN_SUPPORT_TRAIN "Enable Train Ops" ON)option(MNN_BUILD_DEMO "Build demo/exec or not" ON)option(MNN_BUILD_QUANTOOLS "Build Quantized Tools or not" ON)option(MNN_USE_INT8_FAST "Build int8 or not" ON)if (MNN_USE_THREAD_POOL)set(MNN_OPENMP OFF)add_definitions(-DMNN_USE_THREAD_POOL)endif()if(MNN_FORBID_MULTI_THREAD)add_definitions(-DMNN_FORBIT_MULTI_THREADS)endif()if(MNN_USE_INT8_FAST)add_definitions(-DMNN_USE_INT8_FAST)endif()# debug optionsoption(MNN_DEBUG "Enable MNN DEBUG" OFF)if(CMAKE_BUILD_TYPE MATCHES "Debug")set(MNN_DEBUG ON)endif()option(MNN_DEBUG_MEMORY "MNN Debug Memory Access" OFF)option(MNN_DEBUG_TENSOR_SIZE "Enable Tensor Size" OFF )option(MNN_GPU_TRACE "Enable MNN Gpu Debug" OFF)if(MNN_DEBUG_MEMORY)add_definitions(-DMNN_DEBUG_MEMORY)endif()if(MNN_DEBUG_TENSOR_SIZE)add_definitions(-DMNN_DEBUG_TENSOR_SIZE)endif()if(MNN_GPU_TRACE)add_definitions(-DMNN_GPU_FORCE_FINISH)endif()# backend optionsoption(MNN_METAL "Enable Metal" OFF)option(MNN_OPENCL "Enable OpenCL" ON)option(MNN_OPENGL "Enable OpenGL" OFF)option(MNN_VULKAN "Enable Vulkan" OFF)option(MNN_ARM82 "Enable ARM82" ON)# codegen register opsif (MNN_METAL)add_definitions(-DMNN_CODEGEN_REGISTER)endif()# target optionsoption(MNN_BUILD_BENCHMARK "Build benchmark or not" ON)option(MNN_BUILD_TEST "Build tests or not" ON)option(MNN_BUILD_FOR_ANDROID_COMMAND "Build from command" OFF)option(MNN_BUILD_FOR_IOS "Build for ios" OFF)set (MNN_HIDDEN FALSE)if (NOT MNN_BUILD_TEST)if (NOT MNN_DEBUG)set (MNN_HIDDEN TRUE)endif()endif()include(cmake/macros.cmake)message(STATUS ">>>>>>>>>>>>>")message(STATUS "MNN BUILD INFO:")message(STATUS "\tSystem: ${CMAKE_SYSTEM_NAME}")message(STATUS "\tProcessor: ${CMAKE_SYSTEM_PROCESSOR}")message(STATUS "\tDEBUG: ${MNN_DEBUG}")message(STATUS "\tMetal: ${MNN_METAL}")message(STATUS "\tOpenCL: ${MNN_OPENCL}")message(STATUS "\tOpenGL: ${MNN_OPENGL}")message(STATUS "\tVulkan: ${MNN_VULKAN}")message(STATUS "\tOpenMP: ${MNN_OPENMP}")message(STATUS "\tHideen: ${MNN_HIDDEN}")

2. 本地编译

1.intall cmake,protobuf(>=3.0),gcc(>=4.9)

2.cd path/to/MNN

3.chmod +x ./schema/generate.sh

4.sudo ./schema/generate.sh

5.sudo ./tools/scripts/get_model.sh(select option, for demo)

5.mkdir build && cd build && cmake .. && make -j8

ok can get MNN libs

在这一步中先忽略第四小步,在MNNConvert安装以后再./tools/script/get_model.sh
二. 编译模型转换工具MNNConvert (MNNConvert)

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

sudo apt-get install autoconf automake libtool curl make g++ unzip
     
    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

2. 编译MNNConvert

以下两种方法可用:

(1) 执行以下命令:

cd MNN/tools/converter
    ./generate_schema.sh
    mkdir build
    cd build && cmake .. && make -j4

(2) 在本地(rk3399)编译时,先修改build_tool.sh中的 make -j16

#!/bin/bash
    if [ -d "build" ]; then
      rm -rf build
    fi
    ./generate_schema.sh
     
    mkdir build
    cd build
     
    cmake ..
    make clean
    make -j4        # # #

3. 测试MNNConvert (模型转换的使用)

cd MNN/tools/converter/build
    ./MNNConvert -h

4. 测试MNNDump2Json (MNNDump2Json)

将MNN模型bin文件 dump 成可读的类json格式文件,以方便对比原始模型参数

cd MNN/tools/converter/build
    ./MNNDump2Json.out ../../../benchmark/models/mobilenet_v1.caffe.mnn mobilenet_v1.caffe.json

三. 下载模型并使用MNNConvert (模型下载&转换)

1. 下载并使用第二步得到的MNNConvert来转换模型

cd MNN
    ./tools/script/get_model.sh

下载的模型在/MNN/resource/model/ (应该没记错^_^)

2. 使用MNNConvert

(1) Caffe2MNN

cd MNN/resource/build
    ./MNNConvert -f CAFFE --modelFile mobilenet_v1.caffe.caffemodel --prototxt mobilenet_v1.caffe.prototxt --MNNModel mobilenet_v1.caffe.mnn --bizCode MNN

(2) TFLite2MNN

cd MNN/resource/build
    ./MNNConvert -f TFLITE --modelFile mobilenet_v2_1.0_224_quant.tflite --MNNModel mobilenet_v2_1.0_224_quant.tflite.mnn --bizCode MNN

将mobilenet_v1.caffe.mnn,mobilenet_v2_1.0_224_quant.tflite.mnn复制到/MNN/benchmark/models/目录下用于下面的测试。
四. 测试benchmark

cd MNN/build
    ./benchmark.out ../benchmark/models/ 10 0
     
     
    # ------------------ output --------------------- #
    MNN benchmark
    Forward type: **CPU** thread=4** precision=2
    --------> Benchmarking... loop = 10
    [ - ] MobileNetV2_224.mnn         max =   92.516ms  min =   88.733ms  avg =   90.227ms
    [ - ] mobilenet_v2_1.0_224_quant.tflite.mnn    max =   87.738ms  min =   84.411ms  avg =   85.817ms
    [ - ] mobilenet_v1_quant.caffe.mnn    max =   75.278ms  min =   74.261ms  avg =   74.763ms
    [ - ] inception-v3.mnn            max =  996.025ms  min =  807.543ms  avg =  863.333ms
    [ - ] resnet-v2-50.mnn            max =  531.352ms  min =  445.743ms  avg =  473.887ms
    [ - ] mobilenet-v1-1.0.mnn        max =  103.705ms  min =   93.981ms  avg =   96.573ms
    [ - ] SqueezeNetV1.0.mnn          max =  193.273ms  min =  115.615ms  avg =  127.908ms
    [ - ] mobilenet_v1.caffe.mnn      max =  107.799ms  min =   94.063ms  avg =   98.914ms

cd MNN/build
    ./benchmark.out ../benchmark/models/ 10 0
     
     
    # ------------------ output --------------------- #
    MNN benchmark
    Forward type: **OpenCL** thread=4** precision=2
    --------> Benchmarking... loop = 10
    Can't Find type=3 backend, use 0 instead
    [ - ] MobileNetV2_224.mnn         max =   92.939ms  min =   88.632ms  avg =   89.630ms
    Can't Find type=3 backend, use 0 instead
    [ - ] mobilenet_v2_1.0_224_quant.tflite.mnn    max =   89.197ms  min =   84.408ms  avg =   86.093ms
    Can't Find type=3 backend, use 0 instead
    [ - ] inception-v3.mnn            max =  870.511ms  min =  817.133ms  avg =  839.259ms
    Can't Find type=3 backend, use 0 instead
    [ - ] resnet-v2-50.mnn            max =  501.031ms  min =  448.233ms  avg =  462.990ms
    Can't Find type=3 backend, use 0 instead
    [ - ] mobilenet-v1-1.0.mnn        max =  107.135ms  min =   94.491ms  avg =   98.316ms
    Can't Find type=3 backend, use 0 instead
    [ - ] SqueezeNetV1.0.mnn          max =  124.856ms  min =  113.669ms  avg =  118.974ms
    Can't Find type=3 backend, use 0 instead
    [ - ] mobilenet_v1.caffe.mnn      max =  107.162ms  min =   94.707ms  avg =   98.140ms

编译MNN时,选择option(MNN_OPENCL "Enable OpenCL" ON),为啥出现不能用OpenCL!!!

参考链接:https://github.com/alibaba/MNN
版权声明:本文为CSDN博主「@Vivia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37643960/article/details/97028743

ubuntu MNN编译安装相关推荐

  1. 【MNN学习六】基于Android的MNN编译安装

    目录 一. MNN编译安装 (Android编译) 二. 测试benchmark (Benchmark工具) 一. MNN编译安装 (Android编译) 1. 编译选项 cmake_minimum_ ...

  2. Ubuntu上编译安装迅雷XwareDesktop

    Ubuntu上编译安装说明 本页介绍如何在Ubuntu 14.04及以上的系统上手动编译安装Xware Desktop. 由于迅雷官方没有发布64位版的xware,Xware Desktop的作者无法 ...

  3. 在CentOS/Debian/Ubuntu上编译安装最新版 GCC 8 , cmake 3 和ninja

    CentOS不像Debian/Ubuntu,不能直接从官方库中安装最新版的gcc/g++,只能源码编译安装. gcc下载地址:Index of /gnu/gcc 我选择了最新版本 gcc-8.3.0, ...

  4. 在Ubuntu下编译安装atom编辑器

    2019独角兽企业重金招聘Python工程师标准>>> 今天一大早就在开源中国首页看到了atom编辑器可以下载使用的消息,打开一看只提供Mac版的安装包.于是去Github上看了看, ...

  5. python3.7.2安装-ubuntu下编译安装Python3.7.2

    Ubuntu下安装Python3.7.2 1.去官网下载Python3.7.2 首先到要安装的文件夹下创建安装目录 mkdir /usr/local/bin/python3.7 切到要下载的文件夹下: ...

  6. 在Windows7和Ubuntu上编译安装MICO

    MICO是CORBA标准的一个实现.开源并且被广泛使用. 首先的首先,看用户手册,在页面"http://www.mico.org/docu.html"找到一本教材"MIC ...

  7. Linux飞鸽传书源码,图解Ubuntu下编译安装飞鸽传书IPMsg步骤

    因为IPMsg官方网站发布的Unix/Linux版本都是源代码包,需要在Ubuntu中编译,因此,需要在本机安装开发环境. 我下载的g2ipmsg-0.9.5.tar,下载地址见http://www. ...

  8. ubuntu下编译安装PHP扩展

    在ubuntu下已经安装了PHP环境的情况下,需要新增PHP扩展 首先找到PHP对应版本的扩展包,部分扩展包可以前往PHP官网下载对应版本的PHP源码,在ext文件夹下有一些扩展包 其他额外的扩展需要 ...

  9. 在Ubuntu上编译安装OpenCV3

    目录 背景 安装依赖包 安装ffmpeg 编译安装opencv3 理想情况 错误处理 复制头文件 修改头文件 修改OpenCV文件 修改文件方法 更好的解决方法--换OpenCV版本 3.4.1版本的 ...

最新文章

  1. 自学python爬虫要多久-入门Python爬虫要学习多久?
  2. 计算机栈是什么,什么是数据栈?——线性表
  3. python学习笔记(15)循环设计
  4. SQLServer UPDATE INNER JOIN、DELETE INNER JOIN
  5. ASP.NET AJAX客户端编程之旅(一)——Hello!ASP.NET AJAX
  6. 基于ssm汽车4s店维修保养试驾服务管理系统 java毕设项目介绍
  7. Power bi 3.22 切片器
  8. Win11桌面右键菜单栏怎么回到Win10的样子(直接命令执行便可完成,简单快捷)
  9. 疯狂springboot终极讲义笔记(二)
  10. c语言文件被认为是木马,为啥我用c语言写成的exe文件会被360当做木马?
  11. 快捷安装Mac系统下安装/卸载brew
  12. 牛客SQL 大厂面试真题 某宝店铺分析 5套代码及解析
  13. 网页视频倍数播放代码
  14. 计算机网络 | 网络互联技术与设备
  15. spring --jia包依赖坐标收集
  16. 整理2020java面试题
  17. java实验报告之applet(小程序)
  18. Python - 面向对象编程 - 多继承
  19. KNN实现手写数字识别(Python-OpenCV)
  20. java 计算时差_如何在Java中计算时差?

热门文章

  1. Android 利用方向传感器实现 指南针
  2. Android中的Menu和对话框形式的Activity
  3. Linux安装Hbase并验证
  4. Linux C编程--string h函数解析
  5. 哈工大c语言编程题中国大学mooc第四周,中国大学MOOC哈工大C语言程序设计精髓第六周编程题答案.doc...
  6. mongodb数据库显示obj_MongoDB基础(三)—基本操作及管理 | leon的博客
  7. 权限认证php,2016年Linux认证基础知识:php做权限管理
  8. computed vue 不 触发_vuejs render何时执行?以及使用vue.$refs遇到的坑。
  9. 京瓷 打印 打印机 账户_UV打印机市场竞争的关键是什么?
  10. vscode 调试html页面,vscode调试HTML