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

onnx模型部署修改(ncnn模型部署)欢迎学习 ncnn 系列相关文章 从训练 模型转换 精度分析 评估到部署 Android 端 推荐好资源 一 YoloV5 训练自己数据集并测试 二 ncnn 编译和安装 三 onnx 模型转 ncnn 模型并推理可执行程序 resnet18 例子 四 yolov5 6 0Pyotorch 模型转 onxx 模型再转 ncnn 模型部署 五 训练自己 YOLOv5 模型转 ncnn 模型并部署到 Android 手机端



欢迎学习ncnn系列相关文章,从训练、模型转换、精度分析,评估到部署Android端,推荐好资源:

一、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文件中具体参数解析,7767517 是一个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-02-26 07:51
下一篇 2025-03-28 16:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/70775.html