mnn 编译转换工具 win10 2021
2021.0824更新,mnn1.2.0 编译ok
python版转换工具:
python -m MNN.tools.mnnconvert
这个不是最新版,1.1.4,目前最新版是1.2.0
nmake形式,没成功,博客地址:
https://blog.csdn.net/ouyangfushu/article/details/100518987
这个使用cmake编译的,问题是不能编译Release版本
1.在github上下载protobuf,
https://github.com/protocolbuffers/protobuf
protobuf有两个依赖项:
https://github.com/google/googletest
https://github.com/google/benchmark.git
下载后拷贝到路径:
path = third_party/benchmark
path = third_party/googletest
得到protobuf-master文件夹,在此文件夹下新建一个vsproject文件夹(文件夹名你随便取,只是因为此文件夹下已经有了一个build的东东,所以才起的这个名字),然后按照上篇博客里的描述的那样使用cmake-gui.exe对protobuf生成vs的工程。source code选择protobuf目录下的cmake文件夹,
其余的操作都如同上一篇的那样。设置如下:
然后在Visual Studio 中对刚才生成的工程进行编译,记得选release哦。最后得到如下文件目录:
直到这一步,基本上不会出现任何问题,一路绿灯
将上一步得到的“include”和“Release”文件夹路径写入你的环境变量,一定要做!!!编译MNN的转换工具需要!最后我的环境路径如下:
去MNN官网下载mnn的包吧,解压后得到MNN-master文件夹
默认你已经安装好了python3和vs2017开始编译
在MNN-master文件夹下定位到“schema”下,新建一个python文件,文件名:generate.py 内容为:
#-*-coding:utf-8-*-
#coding by: yuangu(lifulinghan@aol.com)import os
import sys
import shutil
import platformdef p():frozen = "not"if getattr(sys, 'frozen',False):frozen = "ever so"return os.path.dirname(sys.executable)return os.path.split(os.path.realpath(__file__))[0]currentWorkPath = p()
os.chdir(currentWorkPath)if '-lazy' in sys.argv and os.path.isdir("current"):print("*** done ***")exit(0)# check is flatbuffer installed or not
FLATC = '../3rd_party/flatbuffers/tmp/flatc' + ('.exe' if "Windows" == platform.system() else '')
FLATC = os.path.realpath(FLATC)if not os.path.isfile(FLATC):print("*** building flatc ***")tmpDir = os.path.realpath('../3rd_party/flatbuffers/tmp')if os.path.isdir(tmpDir):shutil.rmtree(tmpDir)os.mkdir(tmpDir)os.chdir(tmpDir)os.system('cmake -DCMAKE_BUILD_TYPE=Release ..')if "Windows" == platform.system():os.system('cmake --build . --target flatc --config Release')if os.path.isfile( os.path.join(tmpDir, 'Release/flatc.exe') ):shutil.move(os.path.join(tmpDir, 'Release/flatc.exe'), FLATC)else:os.system('cmake --build . --target flatc')# dir recoveros.chdir(currentWorkPath)# determine directory to use
DIR='default'
if os.path.isdir('private'):DIR = 'private'
DIR = os.path.realpath(DIR)# clean up
print('*** cleaning up ***')
if os.path.isdir('current'):shutil.rmtree('current')
os.mkdir('current')# flatc all fbs
os.chdir('current')
listFile = os.listdir(DIR)
for fileName in listFile:tmpFileName = os.path.join(DIR, fileName)cmd = "%s -c -b --gen-object-api --reflect-names %s" %(FLATC, tmpFileName)os.system(cmd)os.chdir(currentWorkPath)
print( "*** done ***")
保存后,打开cmd,运行 python generate.py,会自动帮你生成后续编译需要的工程,一般这里也不会有什么错误。这一步想了解具体过程的请参加:https://uzshare.com/view/810473 我是直接拷贝过来用的
进入主题
在命令行下定位到mnn的主目录
输入:
mkdir build && cd build
vs2019命令行
cmake -G "Visual Studio 17 Win64" -DCMAKE_BUILD_TYPE=Release -DMNN_BUILD_CONVERTER=true -DMNN_BUILD_SHARED_LIBS=false ..
vs2017的命令行:
cmake -G "Visual Studio 15 Win64" -DCMAKE_BUILD_TYPE=Release -DMNN_BUILD_CONVERTER=true -DMNN_BUILD_SHARED_LIBS=false ..
解释:
-G “Visual Studio 15 Win64” 使用64位编译器
-DCMAKE_BUILD_TYPE=Release 编译成release版本,这个Release不起作用,依赖项子项都是debug,多线程MTD的。
-DMNN_BUILD_CONVERTER=true 编译converter工具
-DMNN_BUILD_SHARED_LIBS 官网上给出的,没细究
命令最后有两个点别忘了!!
等待完成。
完成后就输入:
cmake --build .
上面过程报错了,原因是默认模式是debug,如果编译debug,protobuf也需要编译debug版的,
解决方法:
Release模式:
方法1:把每个项目改为release,多线程改为MT,因为protobuf编译的MT,
方法2:把protobuf改为Md,重新编译protobuf应该也可以。
Debug模式:
方法1:如果是Debug模式,把每个项目改为debug,多线程改为MTd,因为protobuf编译的MTd,
方法2:把protobuf改为Md(MDd),重新编译protobuf应该也可以,和Mnn的保持一致。
在工程上右键-》属性-》c/c++-》代码生成-》运行库中,
改成(release为MT,debug为MTD),
后来就编译成功了。
nmake方式:
cd E:\mnn_android\mnn\MNN-1.2.0\tools\converter\build
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ..
nmake
这里官网给出的是使用ninja命令编译,这个没用过也没时间去深究了,就直接cmake吧。
如果一切正常的话在build目录下会生成一个Release文件夹,里面就是编译出来的各种工具了。但是在执行cmake --build的时候很可能会报各种奇怪的错误,一般情况下除了那个MNNConvert相关的工程外都能正常编译,主要是因为这个转换的工程依赖于第一步的那个protobuf,列举几个经常碰见的问题:
找不到头文件,检查一下是否把第一步编译出来的Release和include文件夹路径写入了环境路径并且已经生效
报:libprotobuf.lib(any.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项,仔细看一下错误的原因,这里很可能是使用libprotobuf的debug版本来编译MNNConvert的Release版本,反之亦然。反正就是版本不对。我就是碰到了这个问题,可是我明明已经指定了DCMAKE_BUILD_TYPE=Release选项,不得已,在vs2017中打开的工程,选择release编译通过。
报了很多什么参数不匹配,XX函数未定义这一类的错误,建议还是把build文件夹全部删除,重头来过吧。
最终编译出的文件列表
原文链接:https://blog.csdn.net/qq_36810544/article/details/105856975
编译protobuf
参考链接:https://github.com/protocolbuffers/protobuf/blob/master/cmake/README.md
x64
- 执行以下代码
cd /path/to/protobuf/vsprojects
cmake -G "Visual Studio 15 2017 Win64" -Dprotobuf_MSVC_STATIC_RUNTIME=ON -Dprotobuf_BUILD_TESTS=OFF ../cmake
- 使用VS打开工程并生成解决方案,把Debug产物复制到/path/to/protobuf/vsprojects/x64/Debug下, 把Release产物复制到/path/to/protobuf/vsprojects/x64/Release下。
- 将/path/to/protobuf添加至Protobuf_SRC_ROOT_FOLDER环境变量
x86
- 执行以下代码
cd /path/to/protobuf/vsprojects
cmake -G "Visual Studio 15 2017" -Dprotobuf_MSVC_STATIC_RUNTIME=ON -Dprotobuf_BUILD_TESTS=OFF ../cmake
- 使用VS打开工程并生成解决方案,把Debug产物复制到/path/to/protobuf/vsprojects/Debug下, 把Release产物复制到/path/to/protobuf/vsprojects/Release下。
- 将/path/to/protobuf添加至Protobuf_SRC_ROOT_FOLDER环境变量
编译模型转换工具
cd MNN目录
mkdir build
cd build
cmake -G "Ninja" -DMNN_BUILD_SHARED_LIBS=OFF -DMNN_BUILD_CONVERTER=ON -DCMAKE_BUILD_TYPE=Release ..
ninja
编译产物
MNNConvert : 模型转换工具
MNNDump2Json : 将MNN模型文件打印为类json文件的工具
常见问题
- 如果报错说link error: can not writing MNNConvert.exe, cd到/path/to/MNN/tools/converter/build, 再运行下ninja就好了
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release ..
Could NOT find Protobuf (missing: Protobuf_LIBRARIES) (found version
"3.12.2")
不知道为啥?有build_win的,那一版,就可以
直接建vsprojects,再projects下编译的不行,原因是文件夹名字写错了
mnn 编译转换工具 win10 2021相关推荐
- 第三方接口转换工具类
转换示例: {"retCode#int": "code", "parkInfo#data": [{"dataType#int&qu ...
- 微信小程序开发工具win10下编译非常慢解决方法
微信小程序开发工具win10下编译非常慢的解决方法 点击微信小程序开发工具右侧详情,在本地设置中将[启用多核心编译]选项去掉,开发工具重启即可
- ubuntu MNN编译安装
[MNN学习一]基于Linux的MNN编译安装,模型转换以及benchmark测试 目录 一. MNN编译安装 (MNN编译) 二. 编译模型转换工具MNNConvert (MNNConvert) 三 ...
- JavaScript实现在线进制转换工具网站 -toolfk程序员在线工具网
本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...
- java 实体属性个数_?Java中比较实用实体转换工具介绍
Java中比较实用实体转换工具介绍 文中源码地址 大家一般编码过程中,经常会遇到DO对象转化为DTO对象,对象和对象之间转换一般需要用到转换工具,毕竟使用getter/setter太过麻烦 DO:D ...
- 视频格式转换工具使用
还记得世界杯期间的那个"神奇教练"米卢吗?在给球员讲解战术.观摩对手比赛的时候,他总是喜欢随身携带一个小巧的摄像机.的确,有些摄像机重量很轻,几乎与普通照相机相仿,拍摄.携带和输出 ...
- APK反编译得工具总结(转载)
Android反编译技术总结 转自UncleChen's Blog,作者:UncleChen 一.Apk反编译工具及其使用方法 1.原理 学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后 ...
- JS实现Unix时间戳(Unix timestamp)转换工具-toolfk程序员工具网
本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...
- keil html转换工具,网页转换工具FCARM和makefsfile的使用简介
网页转换工具FCARM和makefsfile的使用简介 [复制链接] 首先在这里要提一下Keil的网页转换工具FCARM.exe的使用,花费了我好几个小时.TI也有一个类似的程序,是Makefsfil ...
最新文章
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
- 如何做自己的服务监控?spring boot 2.x服务监控揭秘
- python算法与数据结构-顺序表(39)
- Windows句柄-2
- ASP.NET Core Web API中使用Swagger
- java继承总结_JAVA笔记:Java中的继承总结
- 官网jquery压缩版引用地址
- 《调色师手册:电影和视频调色专业技法(第2版)》——监视器校准
- 谁才是商超的救世主?
- apex语言与java比较_Apex 基础知识合辑
- 【全面】人工智能技术栈与学习路线:机器学习 深度学习 视觉 NLP 推荐系统
- 亲身体验 北京-环球嘉年华!
- 物联网无线通讯wifi模块AP和STA模式分别是什么意思?
- c++入门,cout,cin
- 将要被人工智能取代的十大职业
- android 提示蓝牙无法配对,Android蓝牙不显示配对对话框
- 最全英语单词下载地址
- C++【vector容器模拟实现函数解析】
- bufferedreader.readline()解析
- 免费EDA软件KICAD介绍
热门文章
- 数据结构 -- 队列
- Linux C编程--打开和关闭流
- Centos7.2部署DHCP服务
- oracle sum 数据类型,五、Oracle内置函数
- 实验一 linux命令使用,实验一XXXXX常用linux命令的使用(一)
- phpinfo查看可以解析的后缀_配置nginx,Apache支持pathinfo模式-什么是phpinfo模式
- thinkphp5是不是php,我对ThinkPHP5和Laravel5的一些看法
- 基本概念_程序员基本功——链表的基本概念
- c++ override final关键字
- sybase asa转mysql_为Sybase ASA创建外部存储过程(Java示例)