ncnn是一个为手机端极致优化的高性能神经网络前向计算框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。

但是onnx直接转ncnn会存在很多问题,所以一般考虑都是先将onnx转化为onnxsim然后再进行simpler到ncnn的转换。

那么如何将onnx转化为onnxsim呢,网上有两种方法,第一种是直接利用安装的onnxsimple包来进行转换

python -m onnxsim cr_acc_9954.onnx cr_acc_9954-sim.onnx

但是前提是你能准确安装上onnxsimple,关于安装的时候出现的问题,在我之前的博客有提及到,可以翻看之前的博客。

还有一种就是通过代码来转换,代码如下所示:

def convert(model_name):
    input_shapes = {None: [1, 3, 32, 320]}
    model_opt, check_ok = onnxsim.simplify(model_name, input_shapes=input_shapes)
    onnx.save(model_opt, model_name[:-5]+"-sim.onnx")
    print("the model was simplified successfully")

if __name__ == '__main__':
    model_name="models/checkpoint_27_acc_0.9981.onnx"
    convert(model_name)

我本人比较喜欢第二种。

转完后会在路径下生成一个xxx-sim.onnx模型,这个就是接下来用来转ncnn的模型。

接下来就是讲怎么进行转换

/*onnx-simpler模型转ncnn模型*/

首先要完成环境配置

准备项:VS、 cmake、 protobuf

安装vs,cmake,protobuf

cmake下载地址

将解压后cmake-3.16.5-win64-x64文件夹点开进入bin将该路径添加至环境变量,

如路径为:D:\software\cmake-3.16.5-win64-x64\bin

1、protobuf安装

下载后解压,然后打开vs2019的x64命令窗口

如何将onnx转ncnn供移动端推理使用-LMLPHP

跳转到刚解压的protobuf的根目录,然后创建build-vs2019的文件并进行cmake操作

注:protobuf-root-dir为protobuf的下载位置。逐行敲入如下命令

> cd <protobuf-root-dir>

> 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

成功后会在 .\protobuf\build-vs2019 下生成若干文件

2、ncnn安装

ncnn的下载,github上直接下载项目,并解压

使用vs2019的x64命令,与protobuf的安装类似,我们按下述代码操作,

> cd <ncnn-root-dir>

> mkdir -p build-vs2019

> cd build-vs2019

> cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=<protobuf-root-dir>/build-vs2019/install/include -DProtobuf_LIBRARIES=<protobuf-root-dir>/build-vs2019/install/lib/libprotobuf.lib -DProtobuf_PROTOC_EXECUTABLE=<protobuf-root-dir>/build-vs2019/install/bin/protoc.exe -DNCNN_VULKAN=OFF ..

> nmake

> nmake install

注: ncnn-root-dir 为你的ncnn下载位置,而第四条命令cmake 里面所有(3个)的 protobuf-root-dir 都换成自己的protobuf路径 ,注意是绝对路径。

成功后会在 .\ncnn\build-vs2019 下生成若干文件

其中tools文件夹是我们最常用到的,里面的工具基本都集成好了

install中也包含有常用的lib、bin、include等库

3、一切准备就绪后,开始ncnn转换

用到vs2019的x64命令行,cd到 .\ncnn\build-vs2019\tools\onnx

会有onnx2ncnn.exe 应用程序,我们将上一步骤生成的xxx-simpler.onnx复制到目录下,然后输入

.\onnx2ncnn cr_71_acc_0.9910-sim.onnx  cr_71_acc_0.9910.param cr_71_acc_0.9910.bin

 回车,就会在路径下生成.param和bin文件。

转换完了并不是就此结束了,如何能够被c++去很好的调用,还得需要对.param文件进行手动修改。当然这个修改也是视你的模型结构而定的,可能有的不需要修改,有的需要修改,关于如何修改能够正常使用,将在下一节更新给大家。

12-15 06:27