当前位置: 首页 > news >正文

【Paddle2ONNX】为 Paddle2ONNX 升级自适应ONNX IR Version功能

1 简介

最近在浏览 Paddle2ONNX 的 Issues 时,我发现有用户需要让 Paddle2ONNX 支持导出的 ONNX 模型根据opset版本自适应 ONNX IR 版本,于是我动手添加了这个功能。

  • 能否指定 IR representation的版本 · Issue #1248 · PaddlePaddle/Paddle2ONNX

2 什么是ONNX IR

ONNX (Open Neural Network Exchange) IR (Intermediate Representation) Version 的作用是定义和描述 ONNX 模型文件的结构和格式。该参数主要在以下方面发挥作用:

  • 兼容性管理
  • 模型文件解析
  • 演进管理

显然,对于 Runtime 来说,指定 ONNX IR 是提升程序鲁棒性的方式之一,因此一般会对 ONNX IR 有所要求。

3 代码实现

由于 ONNX Opset 和 ONNX IR 是强绑定的,具体关系如下表:

ONNX versionIR versionOpset version ai.onnxOpset version ai.onnx.mlOpset version ai.onnx.training
1.0311-
1.1351-
1.1.2361-
1.2371-
1.3381-
1.4.1491-
1.5.05101-
1.6.06112-
1.7.071221
1.8.071321
1.8.171321
1.9.071421
1.10.081521
1.10.181521
1.10.281521
1.11.081631
1.12.081731
1.13.081831
1.13.181831
1.14.091931
1.14.191931
1.15.092041
1.16.0102151

如果你需要更详细的介绍,请前往 ONNX Versioning

在Paddle2ONNX中,控制 opset 版本的是 OnnxHelper 类,因此我们考虑先能够从该类中获取到当前 opset 对应的 IR ,我们可以添加如下函数实现这个功能:

ONNX_NAMESPACE::Version OnnxHelper::GetIRVersion() const {int ir_version = 0;switch (opset_version) {case 7:case 8:ir_version = 3;break;case 9:ir_version = 4;break;case 10:ir_version = 5;break;case 11:ir_version = 6;break;case 12:case 13:case 14:ir_version = 7;break;case 15:case 16:case 17:case 18:ir_version = 8;break;case 19:case 20:ir_version = 9;break;case 21:ir_version = 10;break;default:Assert(false, "Opset version must be 7-20");}return static_cast<ONNX_NAMESPACE::Version>(ir_version);
}

当然,也可以通过 std::map 实现这个功能

然后我们需要获取到当前 IR 版本,并给 onnx 模型指定他,可以在 exporter.cc 中添加如下代码:

auto ir_version = _helper.GetIRVersion();
auto model = std::make_shared<ONNX_NAMESPACE::ModelProto>();
model->set_ir_version(ir_version);

4 参考资料

  • [ONNX][Version] Update IR Version by Zheng-Bicheng · Pull Request #1261 · PaddlePaddle/Paddle2ONNX
  • onnx/docs/Versioning.md at main · onnx/onnx

相关文章:

【Paddle2ONNX】为 Paddle2ONNX 升级自适应ONNX IR Version功能

1 简介 最近在浏览 Paddle2ONNX 的 Issues 时&#xff0c;我发现有用户需要让 Paddle2ONNX 支持导出的 ONNX 模型根据opset版本自适应 ONNX IR 版本&#xff0c;于是我动手添加了这个功能。 能否指定 IR representation的版本 Issue #1248 PaddlePaddle/Paddle2ONNX 2 什么…...

JS 中的DOM 操作

目录 概念Node接口NodeList接口,HTMLCollection接口ParentNode接口,ChildNode接口Document节点Element节点属性的操作Text节点和DocumentFragment节点CSS操作Mutation Observer API概念 D...

短剧出海怎么做?

短剧出海&#xff0c;即是指将制作的短剧内容推广到国际市场&#xff0c;吸引海外观众。以下是一些策略和步骤&#xff0c;可以帮助你实现这一目标&#xff1a; 研究目标市场&#xff1a;了解你想要进入的海外市场的文化、偏好和消费习惯。这包括语言、流行文化、媒体消费习惯等…...

【C++修行之道】类和对象(四)运算符重载

目录 一、 运算符重载 函数重载和运算符重载有什么关系&#xff1f; 二、.*运算符的作用 三、运算符重载的正常使用 四、重载成成员函数 五、赋值运算符重载 1.赋值运算符重载格式 传值返回和引用返回 有没有办法不生成拷贝&#xff1f; 2. 赋值运算符只能重载成类的…...

伯克希尔也被ST?

地球&#xff08;最&#xff09;贵股票突然闪崩&#xff0c;美股故障再次上演。昨晚齐刷刷一片的美股出现行情异常&#xff0c;伯克希尔、蒙特利尔银行、巴里克黄金等股票股价跌幅超过98%。其中&#xff0c;巴菲特旗下伯克希尔哈撒韦A类股股价更是暴跌99.97%&#xff0c;股价从…...

低代码和零代码软件时代质量管理(QM)和质量管理系统(QMS)

【前言】 质量控制过程的目的是为了确保产品的制造标准得到保持和改进。质量控制过程使公司能够满足客户的期望&#xff0c;同时确保产品质量的一致水平。采用这些标准创造了一种公司文化&#xff0c;鼓励所有员工努力实现高质量的生产标准。低代码和零代码软件可以成为质量控…...

JS跨页面或跨JS文件对变量赋值

JS跨页面或跨JS文件对变量赋值&#xff0c;这是很小的一个问题。 但问题虽小&#xff0c;却总觉得有点不够自然&#xff0c;不爽。 为什么呢&#xff1f;访问一个页面上的变量不是什么难事&#xff0c;比如用parent.变量名&#xff0c;或者windows名.变量名&#xff0c;都可以…...

xxe漏洞——无回显(ctfshow web374——378)

ctfshow——web374 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2021-01-07 12:59:52 # Last Modified by: h1xa # Last Modified time: 2021-01-07 13:36:47 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); libxml_disable_en…...

深入解读 Android Hook 技术-从原理到实践

在Android开发中&#xff0c;Hook技术是一种强大的手段&#xff0c;它允许开发者拦截和修改系统或应用的行为。通过Hook&#xff0c;我们可以在事件传递的过程中插入自定义的逻辑&#xff0c;从而实现对应用行为的监控和修改。 Android 系统有自己的事件分发机制&#xff0c;…...

架构每日一学 15:想要提升协作效率,必须先统一语义

谭sir与二仙桥大爷的经典对话&#xff1a; 谭sir&#xff1a;你该走哪&#xff1f;&#xff08;非机动车能走机动车道吗&#xff1f;&#xff09; 大爷&#xff1a;走二仙桥去成华大道&#xff08;因为我要去成华大道&#xff0c;当然要走二仙桥&#xff09; 谭sir&#xff1a;…...

基于树莓派4B设计的智能家居系统(华为云IOT)

基于树莓派的智能家居控制系统(华为云IOT) 文章目录 一、设计需求前言【1】 项目背景【2】需求总结【3】研究的内容【4】 国内外研究状况【5】本课题要解决的问题【6】开发工具的选择 二、硬件选型【1】 树莓派开发板【2】TFT卡-烧写系统使用【3】0.5米网线-远程登录【4】MQ2烟…...

路由懒加载

在 Vue.js 中&#xff0c;路由懒加载&#xff08;也称为代码分割&#xff09;是一种优化策略&#xff0c;它允许你将 Vue 组件分割成不同的代码块&#xff0c;并在需要时按需加载它们。这有助于减少初始加载时间&#xff0c;提高用户体验。 Vue Router 支持 Webpack 的动态 im…...

在Spring中实现资源的动态加载和卸载

在Spring框架中&#xff0c;实现资源的动态加载和卸载通常涉及以下几个方面&#xff1a; 1. 使用Bean注解动态注册Bean 通过在配置类中使用Bean注解&#xff0c;可以在运行时动态创建和注册Bean。 Configuration public class DynamicBeanConfig {Beanpublic MyBean myBean(…...

Windows下 CLion中,配置 OpenCV、LibTorch

首先按照win下C部署深度学习模型之clion配置pytorchopencv教程记录 步骤配置。 LibTorch 部分 在测试LibTorch时会出现类似 c10.dll not found 的问题&#xff08;Debug才有&#xff09;&#xff1a; 参考C部署Pytorch&#xff08;Libtorch&#xff09;出现问题、错误汇总和 …...

机器学习知识点总结

简介&#xff1a;随着人工智能&#xff08;AI&#xff09;蓬勃发展&#xff0c;也有越来越多的人涌入到这一行业。下面简单介绍一下机器学习的各大领域&#xff0c;机器学习包含深度学习以及强化学习&#xff0c;在本节的机器学习中主要阐述一下机器学习的线性回归逻辑回归&…...

OBproxy基础运维

简介 obproxy 属于OceanBase的代理&#xff0c;生产环境中 OceanBase 数据库的数据 会以 多副本的形式 存放在各个 OBServer 节点上&#xff0c;obproxy 接收用户发出的 SQL 请求&#xff0c;并将 SQL 请求转发至最佳目标 OBServer 节点&#xff0c;最后将执行结果返回给用户&…...

【Python】 探索Pytz库中的时区列表

基本原理 在Python中&#xff0c;处理时区是一个常见但复杂的问题。pytz是一个Python库&#xff0c;它提供了对时区的精确和丰富的支持。pytz库是datetime模块的补充&#xff0c;它允许更准确地处理时区信息。pytz库包括了IANA时区数据库&#xff0c;这个数据库包含了全球的时…...

C#操作MySQL从入门到精通(9)——Mysql中的数据类型以及对应的C#中的数据类型

1、本文介绍...

第六讲:AD、DA的工作原理及实现、运放电路

DA 数模转换器 (DAC) 数模转换器&#xff08;Digital-to-Analog Converter&#xff0c;简称DAC&#xff09;是一种将数字信号转换为模拟信号的电子装置。DAC在各种电子设备中广泛应用&#xff0c;如音频设备、通信系统、测量设备和控制系统中。以下是DAC的主要概念和应用。…...

计网ppt标黄知识点整理第(4)章节——谢希仁版本、期末复习自用

路由器&#xff1a;查找转发表&#xff0c;转发分组。 IP网的意义&#xff1a;当互联网上的主机进行通信时&#xff0c;就好像在一个网络上通信一样&#xff0c;看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议&#xff0c;那么就…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...