将onnx转化为ncnn部署在Android端
先将onnx模型进行优化去除冗余
前置:onnx(pytorch自带了,不用单独安装)、onnx-simplifier (需要安装)
安装onnx-simplifier的指令:
pip install -i https://pypi.douban.com/simple -U onnx-simplifier --user
去冗余指令:minifas.onnx为原onnx
python -m onnxsim minifas.onnx minifas-sim.onnx
去除后会得到
方式1
大佬的一键转换工具:
先尝试
方式2
转化工具无法转化时,通过自己搭建环境进行转化
软件准备
vs2019,用的是16.11版本。通常小版本的差异不影响编译。
cmake,用的是3.19.1,通常来说>=3.15就没问题的。
opencv 用的是3.4.10
1、vs2019安装
安装,打开Visual Studio installer
勾选其中的C++桌面开发即可,其他不用勾选
编辑
2、安装Cmake
安装Cmake 3.19.2
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。
在cmake官网上下载最新版的camke:
编辑
接下来需要添加环境变量,在此电脑=>高级系统设置=>环境变量的系统变量部分的Path添加cmake的bin目录
配置完成后win+R打开cmd窗口,输入cmake,测试是否安装成功。
编辑
3、安装Opencv
安装Opencv 3.4.10
win环境下安装Opencv,参考opencv的安装,在opencv官网下载opencv3.4.10,注意选择win版本。
编辑
注意OpenCV同样需要配置环境变量,,但和cmake又有一些差别。如果不配置opencv的话,之后编译的过程中会有报错。在此电脑=>高级系统设置=>环境变量的用户变量部分的Path添加D:\package\opencv\build\x64\vc15\bin目录(注意换成自己的解压目录),如下:
编辑
4、编译protobuf 3.4.0
在开始菜单选择vs2019 x64 native的cmd窗口
编辑
Protobuf是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。
下载了 protobuf 3.4.0 的源码:https://github.com/google/protobuf/archive/v3.4.0.zip
创建 目录,把protobuf-3.4.0.zip放过去了,等下ncnn源码也放在这个目录下
从该地址下载protobuf3.4.0的压缩包,解压后放在之前新建的文件中,然后在开始菜单找到Visual Studio 2019=>x64 Native Tools Command Prompt for VS 2019右击,点击更多,以管理员身份运行,输入以下命令编译protobuf3.4.0:
cd protobuf-3.4.0
mkdir build-vs2019
cd build-vs2019
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install ^
-Dprotobuf_BUILD_TESTS=OFF ^
-Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
nmake
nmake install
编辑
输入nmake,等待编译结束后nmake install。
编辑
安装完成后的build-vs2019文件夹,之后编译ncnn的时候需要用到。
编辑
5、编译ncnn框架
同样在vs2019中操作,新建目录,cd到新目录下,执行下面命令行,注意中间的路径需要替换为自己的文件路径
git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
mkdir build-vs2019
cd build-vs2019
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install ^
-DProtobuf_INCLUDE_DIR=E:/dbg/cnn-deploy/protobuf-3.4.0/build-vs2019/install/include ^
-DProtobuf_LIBRARIES=E:/dbg/cnn-deploy/protobuf-3.4.0/build-vs2019/install/lib/libprotobuf.lib ^
-DProtobuf_PROTOC_EXECUTABLE=E:/dbg/cnn-deploy/protobuf-3.4.0/build-vs2019/install/bin/protoc.exe ^
-DOpenCV_DIR=E:/lib/opencv/4.5.0 ..
nmake
nmake install
6、ONNX转换NCNN
ncnn编译完后,在build-vs2019/tools/onnx里会生成个可执行文件onnx2ncnn
命令行后面的onnx替换为自己的模型路径,最后生成的param、bin为ncnn
onnx2ncnn mobilenetv2.onnx mobilenetv2.param mobilenetv2.bin
参考资料
VS2019的安装和使用
ncnn | Windows(VS2019)编译
(一)ncnn | Windows(VS2019)编译_ncnn vs2019-CSDN博客
ONNX转换NCNN