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命令窗口
跳转到刚解压的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文件进行手动修改。当然这个修改也是视你的模型结构而定的,可能有的不需要修改,有的需要修改,关于如何修改能够正常使用,将在下一节更新给大家。