onnx模型部署修改(ncnn模型部署)

onnx模型部署修改(ncnn模型部署)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>欢迎学习ncnn系列相关文章&#xff0c;从训练、模型转换、精度分析&#xff0c;评估到部署Android端&#xff0c;推荐好资源&#xff1a;</p> 

讯享网

一、YoloV5训练自己数据集并测试
二、ncnn编译和安装
三、onnx模型转ncnn模型并推理可执行程序(resnet18例子)
四、yolov5-6.0Pyotorch模型转onxx模型再转ncnn模型部署
五、训练自己YOLOv5模型转ncnn模型并部署到Android手机端


在这里插入图片描述
讯享网

ncnn为用户提供了一系列的模型转换工具,能够轻松地将caffe、onnx等格式的模型转换为ncnn可以识别的格式。在源代码编译完成后,这些工具会被存放在ncnn/build/tools目录下。在本次的示例中,使用了onnx2ncnn工具,将在pytorch中导出的resnet18的onnx模型转换为ncnn模型,并进行了推理。

本教程配套源码包获取方法为文章末扫码到公众号「视觉研坊」中回复关键字:模型部署onnx转ncnn。获取下载链接。

源码包下载解压后的样子如下:

在这里插入图片描述

resnet18使用的是Pytorch模型,所以需要先搭好torch环境,下面是我自己的环境版本号,仅供参考,其它版本也行。

在这里插入图片描述

在onnx模型转ncnn模型前,需要先将Pytorch模型转为onnx模型,不可以Pytorch模型直接转onnx模型,因为这两种模型的格式和结构差异很大。

具体转换脚本在源码在目录onnx_to_ncnn/python/export_res18.py

讯享网

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果电脑上第一次转换,先确保 onnx2ncnn 这个文件有可执行权限,使用 chmod 命令来添加可执行权限:

 

在终端使用下面命令转换:

讯享网

上面命令中,使用 onnx2ncnn 工具,将 resnet18_test.onnx 转换为 resnet18_test.param 和 resnet18_test.bin。在这里resnet18_test.param 存储了模型的参数信息,它记录了计算图的结构。而 resnet18_test.bin 则存放了模型的所有具体参数。就可以使用 ncnn 框架来加载和运行这个模型了。

下面是具体的转换过程及结果:

在这里插入图片描述

4.3.1 .bin文件

bin文件中存放数据,如卷积数据,算子加载的权重等都放在二进制bin文件中。

4.3.2 .param文件

在这里插入图片描述

下面是.param文件中具体参数解析, 是一个magic数,表示ncnn格式的;58是layer数,及算子的数量;66是blob数,blob中间数据存储的数量,中间数和计算结果都是放在blob里的。

在这里插入图片描述

在这里插入图片描述

4.3.3 可视化网络结构

netron官网:entron

在netron中打开.param文件查看计算图结构,方形框中的内容就是layer(算子),各个方形框之间的连接线就是blob。如下:

在这里插入图片描述

通过上面的一系列操作就得到了ncnn可以识别的两个文件:.param和.bin。

5.1.2 参数修改

推理脚本为resnet18.cpp,使用是需要修改的地方见下:

在这里插入图片描述
在这里插入图片描述

5.1.3 代码

 

下面说到的源码路径,指的是安装源码ncnn时的路径,关于安装源码ncnn见我上一篇博文:ncnn编译和安装

在这里插入图片描述
在这里插入图片描述

先在根目录中生成一个build文件夹,然后执行命令构建如下:

讯享网

在这里插入图片描述

5.3.1 cmake …解析

cmake … 是一个在当前目录下执行 CMake 的命令,它会查找上一级目录(由 … 表示)中的 CMakeLists.txt 文件,并生成构建文件。这些构建文件可以被 make、ninja 或其他构建工具使用,来编译和链接你的项目。

5.3.2 构建结果

通过上面命令执行后会在build文件夹中生成相关文件,如下:

在这里插入图片描述

在上面构建文件基础上执行编译命令:

 

bin目录下的resnet18就是编译生成的可执行程序。

在这里插入图片描述

通过cd命令到根目录下,执行推理命令:

讯享网

下面是可执行程序运行后的输出结果,包含了设备信息,每层的推理时间,以及最终的推理结果。

在这里插入图片描述

以上就是onnx模型转ncnn模型并推理可执行程序的详细过程,其它模型类型转换并推理。

总结不易,多多支持,谢谢!

感谢您阅读到最后!关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

小讯
上一篇 2025-05-31 09:55
下一篇 2025-04-29 22:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/160774.html