ONNX转NCNN记录

这篇具有很好参考价值的文章主要介绍了ONNX转NCNN记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        【pytorch 转 onnx】pytorch-onnx

        【onnx 转 ncnn】onnx-ncnn

        【ncnn 加载模型】ncnn-load

 一、python安装依赖项

pip install onnxruntime onnx opencv-python

二、创建模型并训练,加载模型参数并输出onnx

#### pytorch 转 onnx
import torch
import torch.onnx
from model.efficientnet_model import EfficientNet_FV
model = EfficientNet_FV(num_classes=4800).cuda()

path_checkpoint = "..path\\best.ckpt"
checkpoint = torch.load(path_checkpoint)
model.load_state_dict(checkpoint)  # 加载训练好的模型

model.eval()
##### 生成 onnx 文件
x = torch.randn(1, 3, 128, 128).cuda()
with torch.no_grad():
    torch.onnx.export(
        model, x,
        "EfficientNet_b0.onnx",
        opset_version=11, 
        export_params=True,
        input_names=["input"],
        output_names=["output1"], 
    )

        其中,torch.onnx.export 是 PyTorch 自带的把模型转换成 ONNX 格式的函数。前三个参数分别是要转换的模型、模型的任意一组输入、导出的 ONNX 文件的文件名。转换模型时,需要原模型和输出文件名是很容易理解的,但为什么需要为模型提供一组输入呢?这就涉及到 ONNX 转换的原理了。从 PyTorch 的模型到 ONNX 的模型,本质上是一种语言上的翻译。直觉上的想法是像编译器一样彻底解析原模型的代码,记录所有控制流。但前面也讲到,我们通常只用 ONNX 记录不考虑控制流的静态图。因此,PyTorch 提供了一种叫做追踪(trace)的模型转换方法:给定一组输入,再实际执行一遍模型,即把这组输入对应的计算图记录下来,保存为 ONNX 格式。export 函数用的就是追踪导出方法,需要给任意一组输入,让模型跑起来。我的测试图片是三通道,3*128*128大小的,这里也构造一个同样形状的随机张量。

        如果上述代码运行成功,目录下会新增一个"EfficientNet_b0.onnx"的 ONNX 模型文件。我们可以用下面的脚本来验证一下模型文件是否正确。

import onnx 
 
onnx_model = onnx.load("EfficientNet_b0.onnx") 
try: 
    onnx.checker.check_model(onnx_model) 
except Exception: 
    print("Model incorrect") 
else: 
    print("Model correct")

        可以使用 Netron (开源的模型可视化工具)来可视化 ONNX 模型。

三、onnx2ncnn

        关于onnx2ncnn:这个是重点,得到了onnx模型,就告别了pytorch的框架了,现在需要将onnx格式的模型转成ncnn能够加载的.bin和.param。用前面编译好的ncnn带的工具,如果ncnn编译成功的话:ncnn/build/tools/onnx/下面有一个编译好的onnx2ncnn。只需要输入以下命令,(model是onnx名字),如果什么都没输出,那就成功了。一般不建议将除网络以外的部分打包到onnx中。

ONNX转NCNN记录

ONNX转NCNN记录

        虽然成功生成了.param和.bin,但是用ncnn 来load模型的时候一般都会失败!因为目前ncnn对于某一些操作还不支持,所以这里还有引入一个工具:ONNX Simplifier。

GitHub - daquexian/onnx-simplifier: Simplify your onnx model

pip install onnxsim
onnxsim input_onnx_model output_onnx_model

ONNX转NCNN记录

四、ncnn加载模型

参考:https://blog.csdn.net/Enchanted_ZhouH/article/details/106063552文章来源地址https://www.toymoban.com/news/detail-415055.html

到了这里,关于ONNX转NCNN记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyTorch模型安卓部署流程(NCNN)

            上一篇介绍了PyTorch模型部署流程(Onnx Runtime)的相关部署流程,再来简单的回顾一下~         模型部署指让训练好的深度学习模型在特定环境中运行的过程。模型部署会面临的难题: 运行模型所需的环境难以配置。深度学习模型通常是由一些框架编写,比如

    2024年02月12日
    浏览(27)
  • 使用 C# 和 ONNX Runtime 加载和运行 ONNX 模型

    今天突然有人和我说想要实现windows环境下c#调用tensorflow模型,我想着ONNX不是可以搞嘛,然后我翻了一下以前做的,没翻到,就查询了下资料,鼓捣出来了 下面将介绍如何使用 C# 和 ONNX Runtime 库加载并运行 ONNX 模型。ONNX是啥我就不说了,留个链接。 废话不说,show me code! 首

    2024年02月13日
    浏览(27)
  • 【ONNX】使用 C++ 调用 ONNX 格式的 PyTorch 深度学习模型进行预测(Windows, C++, PyTorch, ONNX, Visual Studio, OpenCV)

    要使用 ONNX 模型进行预测,就需要使用 onnx runtime 首先到 ONNX 官网查询所需的版本 这里使用的 Windows,同时装了 CUDA 下面的链接可以进入到安装网址 https://www.nuget.org/packages/Microsoft.ML.OnnxRuntime.Gpu 安装命令为: 首先打开 Visual Studio 2019 新建一个用于测试的项目 右键点击项目,可

    2024年02月09日
    浏览(44)
  • pytorch模型(.pt)转onnx模型(.onnx)的方法详解(1)

    1. pytorch模型转换到onnx模型 2.运行onnx模型 3.比对onnx模型和pytorch模型的输出结果  我这里重点是第一点和第二点,第三部分  比较容易 首先你要安装 依赖库:onnx 和 onnxruntime, 也可以使用清华源镜像文件安装  速度会快些。 开始: 1. pytorch模型转换到onnx模型 pytorch 转 onnx

    2023年04月09日
    浏览(22)
  • PyTorch的ONNX结合MNIST手写数字数据集的应用(.pth和.onnx的转换与onnx运行时)

    在PyTorch以前的模型都是.pth格式,后面Meta跟微软一起做了一个.onnx的通用格式。这里对这两种格式文件,分别做一个介绍,依然使用MNIST数据集来做示例 那pth文件里面是什么结构呢?其实在以前的文章就有介绍过,属于字典类型,而且是 有序字典类型 ,这样就可以按照一定的

    2024年02月11日
    浏览(34)
  • 【深度学习】pytorch pth模型转为onnx模型后出现冗余节点“identity”,onnx模型的冗余节点“identity”

    onnx模型的冗余节点“identity”如下图。 首先,确保您已经安装了onnx-simplifier库: 然后,您可以按照以下方式使用onnx-simplifier库: 通过这个过程,onnx-simplifier库将会检测和移除不必要的\\\"identity\\\"节点,从而减少模型中的冗余。 请注意,使用onnx-simplifier库可能会改变模型的计算

    2024年02月09日
    浏览(34)
  • pytorch导出onnx时遇到不支持的算子怎么解决

    在使用pytorch模型训练完成之后,我们现在使用的比较多的一种方法是将pytorch模型转成onnx格式的模型中间文件,然后再根据使用的硬件来生成具体硬件使用的深度学习模型,比如TensorRT。 在从pytorch模型转为onnx时,我们可能会遇到部分算子无法转换的问题,本篇注意记录下解

    2024年02月02日
    浏览(25)
  • Pytorch图像分类模型转ONNX(同济子豪兄学习笔记)

    安装配置环境 代码运行云GPU平台:公众号 人工智能小技巧 回复 gpu 同济子豪兄 2022-8-22 2023-4-28 2023-5-8 安装 Pytorch 安装 ONNX 安装推理引擎 ONNX Runtime 安装其它第三方工具包 验证安装配置成功 Pytorch图像分类模型转ONNX-ImageNet1000类 把Pytorch预训练ImageNet图像分类模型,导出为ONNX格

    2024年02月09日
    浏览(39)
  • python pytorch模型转onnx模型(多输入+动态维度)

    (多输入+动态维度)整理的自定义神经网络pt转onnx过程的python代码,记录了pt文件转onnx全过程,简单的修改即可应用。 预处理代码 与torch模型的预处理代码一样 导出结果 此处为检查onnx模型节点,后面如果onnx算子不支持转engine时,方便定位节点,找到不支持的算子进行修改

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包