获取onnx模型输入输出结构信息的3种方式:ONNX、onnxruntime、netron

news2024/10/4 2:23:15

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【车辆检测追踪与流量计数系统】
49.【行人检测追踪与双向流量计数系统】50.【基于YOLOv8深度学习的反光衣检测与预警系统】
51.【危险区域人员闯入检测与报警系统】52.【高压输电线绝缘子缺陷智能检测系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

引言

在使用onnx模型进行模型部署时,我们需要查看onnx模型的输入与输出结构,然后才能进行数据的预处理与后处理过程,从而帮助我们进行模型的部署。本文介绍3种查看onnx模型输入与输出结构的方式,以yolov8n.onnx为例。

方式1:使用netron

打开网页:https://netron.app,然后打开需要查看的onnx模型,此处打开yolov8n.onnx模型。
在这里插入图片描述
在这里插入图片描述
通过这种方式,我们不仅可以看到模型的输入与输出结构,而且可以清楚的查看模型的详细网络结构。通过右下角我们可以看到,模型的输入为【1,3,640,640】,输出为【1,84,8400】
在这里插入图片描述
解释说明:
【1,3,640,640】表示,batch为1,输入图片为3640640;
【1,84,8400】表示,batch为1,输出向量为84【代表x, y, w, h,cls类别数80】,检测框数目为8400个。

方式2:使用onnx

我们使用onnx库加载模型,并查看模型的输入输出结构。代码如下:

import onnx
# 加载ONNX模型
model = onnx.load('yolov8n.onnx')
# 获取并打印OpSet导入信息,从中可以找到OpSet版本
for imp in model.opset_import:
   print(f"Domain: {imp.domain}, Version: {imp.version}")
# 验证模型是否有效
onnx.checker.check_model(model)
# 获取并打印模型的输入信息
print("Input(s) of the model:")
for input in model.graph.input:
    print(f"Name: {input.name}, Type: {input.type}")
# 获取并打印模型的输出信息
print("\nOutput(s) of the model:")
for output in model.graph.output:
    print(f"Name: {output.name}, Type: {output.type}")

输出结果如下:

Domain: , Version: 17
Input(s) of the model:
Name: images, Type: tensor_type {
  elem_type: 1
  shape {
    dim {
      dim_value: 1
    }
    dim {
      dim_value: 3
    }
    dim {
      dim_value: 640
    }
    dim {
      dim_value: 640
    }
  }
}


Output(s) of the model:
Name: output0, Type: tensor_type {
  elem_type: 1
  shape {
    dim {
      dim_value: 1
    }
    dim {
      dim_value: 84
    }
    dim {
      dim_value: 8400
    }
  }
}

可以看到输入为【1,3,640,640】,输出为【1,84,8400】。

方式3:使用onnxruntime

我们使用onnxruntime库加载模型,并查看模型的输入输出结构。代码如下:

import onnxruntime as ort
providers = ["CPUExecutionProvider"]
session_options = ort.SessionOptions()
session_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
# 使用ONNX模型创建推理会话,并指定执行提供者
session = ort.InferenceSession('yolov8n.onnx',
                              session_options=session_options,
                              providers=providers)

# 获取模型的输入信息
inputs_info = session.get_inputs()
print("Input(s) of the model:")
for input in inputs_info:
    print(f"Name: {input.name}, Shape: {input.shape}, Type: {input.type}")

# 获取模型的输出信息
outputs_info = session.get_outputs()
print("\nOutput(s) of the model:")
for output in outputs_info:
    print(f"Name: {output.name}, Shape: {output.shape}, Type: {output.type}")

打印信息如下:

Input(s) of the model:
Name: images, Shape: [1, 3, 640, 640], Type: tensor(float)

Output(s) of the model:
Name: output0, Shape: [1, 84, 8400], Type: tensor(float)

关注文末名片G-Z-H:【阿旭算法与机器学习】,发送【开源】可获取更多学习资源

在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1883634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人控制系列教程之任务空间运动控制器搭建(2)

Simulink中的实例 推文《机器人控制系列教程之任务空间运动控制器搭建(1)》中,我们详细的讲解了Simulink中的taskSpaceMotionModel模块,实现的方式可以按照如下的步骤。 可以控制器模型替换为taskSpaceMotionModel模块后,该模块的输入分别为…

昇思MindSpore学习总结七——模型训练

1、模型训练 模型训练一般分为四个步骤: 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 现在我们有了数据集和模型后,可以进行模型的训练与评估。 2、构建数据集 首先从数据集 Dataset加载代码&#xff0…

SSM泰华超市商品管理系统-计算机毕业设计源码11946

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据新增流程 3.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

PV操作经典例题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、前言🚀🚀🚀二、正文☀️☀️☀️三、总结🍓🍓🍓 一、前言🚀🚀&am…

C#/WPF 自制截图工具

在日常使用电脑办公时,我们经常遇到需要截图然后保存图片,我们往往需要借助安装截图工具才能实现,现在我们通过C#自制截图工具,也能够轻松进行截图。 我们可以通过C#调用WindousAPI来实现截图,实例代码如下&#xff1a…

WIN11,如何同时连接有线网络与WLAN无线网络

之前写了两篇文章,一篇是双网卡多网卡时win11如何设置网卡优先级_多网卡设置网卡优先级-CSDN博客 另一篇是win11 以太网和WLAN冲突 连接网线时导致WiFi掉线 解决_win11 以太网和wifi不能同时生效-CSDN博客 这篇是对上面两篇的补充:主要解决电脑重启后&…

Web2Code :网页理解和代码生成能力的评估框架

多模态大型语言模型(MLLMs)在过去几年中取得了爆炸性的增长。利用大型语言模型(LLMs)中丰富的常识知识,MLLMs在处理和推理各种模态(如图像、视频和音频)方面表现出色,涵盖了识别、推…

Jetbrains AI Assistant用了好几个月了,果然是好用的

ai assistant激活成功后,如图 ai assistant渠道:https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上,Google 为 Android Studio 推出了 Studio Bot 功能,使用了谷歌编码基础模型 Codey,Codey 是…

小阿轩yx-案例:MySQL主从复制与读写分离

小阿轩yx-案例:MySQL主从复制与读写分离 案例分析 概述 实际生产环境中 如果对数据库读和写都在同一个数据库服务器中操作,无论在安全性、高可用性还是高并发等各个方面都完全不能满足实际需求一般都是通过主从复制(Master-Slave&#xf…

【源码+文档+调试讲解】基于vue的线上点餐系统

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了线上点餐系统的开发全过程。通过分析线上点餐系统管理的不足,创建了一个计算机管理线上点餐系统的方案。文章介绍了线上点餐系统的系统分析部分&…

【PYTORCH,TENSORFLOW环境配置,安装,自用代码】

conda -V(查看版本,这步不要也罢) conda create -n test python3.7(创建环境) conda activate test(激活) conda env list(查看自己的环境) nvidia-smi(查…

Ubuntu DNS服务配置 深度解析

测试方法 resolvectl status dig alidns.com 修改实践 直接用接口配置,没用 /etc/resolv.conf,有效 /etc/netplan/01-network-manager-all.yaml,无效 /etc/systemd/resolved.conf,见link,为全局配置 [Resolve] DNS1.1.1.1 Fa…

二维数组-----螺旋性矩阵输出

题目有点难,ok其实是很难。。。 观察样例输出,不难发现,螺旋数组中元素的递增轨迹为:右右右、下下下、左左左、上上上 简明为:右、下、左、上。可以设开始递增的元素1的位置为(x,y)&#xff0c…

单片机语音识别控制蓝牙通信

基于单片机语音识别控制&蓝牙控制 1、Arduino单片机语音控制1.1 直连1.2 蓝牙无线连接1.3 部分核心程序1.4 实物演示 2、51单片机语音控制2.1 直连2.2 蓝牙无线连接2.3 部分核心程序2.4 实物演示 3、STM32单片机语音控制3.1 直连3.2 蓝牙无线连接3.3 部分核心程序3.4 实物演…

AI大模型日报#0701:Meta发布LLM Compiler、扒一扒Sora两带头人博士论文

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)生成了今日要点以及每条资讯的摘要。欢迎阅读!《AI大模型日报》今日要点&#xf…

黑马点评下订单-小程序下单没问题但是Postman发送请求失败了,返回401

经过多方探索,这个✓8错误就是由于黑马点评使用了拦截器,我们直接发送请求是会被拦截器拦截下来的,我给出的解决方案是通过配置Postman解决,方法很简单! 解决方案 右边的value写上Redis里面登录所用token值就可以了…

无线物联网练习题

文章目录 选择填空简答大题 选择 不属于物联网感知技术的是(A) A:ZigBee B:红外传感器 C:FRID D:传感器 ZigBee是一种无线通信技术,虽然它常用于物联网中作为设备之间的通信手段,但它本身并不是一种感知技术 关于物联网于与互联网的区别的描述&#xff…

技术派全局异常处理

前言 全局的异常处理是Java后端不可或缺的一部分,可以提高代码的健壮性和可维护性。 在我们的开发中,总是难免会碰到一些未经处理的异常,假如没有做全局异常处理,那么我们返回给用户的信息应该是不友好的,很抽象的&am…

【机器学习】基于Transformer的迁移学习:理论与实践

引言 在机器学习领域,迁移学习已成为提升模型训练效率和性能的重要策略,特别是在标注数据稀缺的场景下。Transformer模型自2017年由Google提出以来,在自然语言处理(NLP)领域取得了突破性进展,并逐渐扩展到…

科普文:一文搞懂jvm原理(三)执行引擎

概叙 科普文:一文搞懂jvm(一)jvm概叙-CSDN博客 科普文:一文搞懂jvm原理(二)类加载器-CSDN博客 前面我们介绍了jvm,jvm主要包括两个子系统和两个组件: Class loader(类装载器) 子系统,Execution engine(执行引擎) 子系…