【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 version | IR version | Opset version ai.onnx | Opset version ai.onnx.ml | Opset version ai.onnx.training |
|---|---|---|---|---|
| 1.0 | 3 | 1 | 1 | - |
| 1.1 | 3 | 5 | 1 | - |
| 1.1.2 | 3 | 6 | 1 | - |
| 1.2 | 3 | 7 | 1 | - |
| 1.3 | 3 | 8 | 1 | - |
| 1.4.1 | 4 | 9 | 1 | - |
| 1.5.0 | 5 | 10 | 1 | - |
| 1.6.0 | 6 | 11 | 2 | - |
| 1.7.0 | 7 | 12 | 2 | 1 |
| 1.8.0 | 7 | 13 | 2 | 1 |
| 1.8.1 | 7 | 13 | 2 | 1 |
| 1.9.0 | 7 | 14 | 2 | 1 |
| 1.10.0 | 8 | 15 | 2 | 1 |
| 1.10.1 | 8 | 15 | 2 | 1 |
| 1.10.2 | 8 | 15 | 2 | 1 |
| 1.11.0 | 8 | 16 | 3 | 1 |
| 1.12.0 | 8 | 17 | 3 | 1 |
| 1.13.0 | 8 | 18 | 3 | 1 |
| 1.13.1 | 8 | 18 | 3 | 1 |
| 1.14.0 | 9 | 19 | 3 | 1 |
| 1.14.1 | 9 | 19 | 3 | 1 |
| 1.15.0 | 9 | 20 | 4 | 1 |
| 1.16.0 | 10 | 21 | 5 | 1 |
如果你需要更详细的介绍,请前往 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 时,我发现有用户需要让 Paddle2ONNX 支持导出的 ONNX 模型根据opset版本自适应 ONNX IR 版本,于是我动手添加了这个功能。 能否指定 IR representation的版本 Issue #1248 PaddlePaddle/Paddle2ONNX 2 什么…...
JS 中的DOM 操作
目录 概念Node接口NodeList接口,HTMLCollection接口ParentNode接口,ChildNode接口Document节点Element节点属性的操作Text节点和DocumentFragment节点CSS操作Mutation Observer API概念 D...
短剧出海怎么做?
短剧出海,即是指将制作的短剧内容推广到国际市场,吸引海外观众。以下是一些策略和步骤,可以帮助你实现这一目标: 研究目标市场:了解你想要进入的海外市场的文化、偏好和消费习惯。这包括语言、流行文化、媒体消费习惯等…...
【C++修行之道】类和对象(四)运算符重载
目录 一、 运算符重载 函数重载和运算符重载有什么关系? 二、.*运算符的作用 三、运算符重载的正常使用 四、重载成成员函数 五、赋值运算符重载 1.赋值运算符重载格式 传值返回和引用返回 有没有办法不生成拷贝? 2. 赋值运算符只能重载成类的…...
伯克希尔也被ST?
地球(最)贵股票突然闪崩,美股故障再次上演。昨晚齐刷刷一片的美股出现行情异常,伯克希尔、蒙特利尔银行、巴里克黄金等股票股价跌幅超过98%。其中,巴菲特旗下伯克希尔哈撒韦A类股股价更是暴跌99.97%,股价从…...
低代码和零代码软件时代质量管理(QM)和质量管理系统(QMS)
【前言】 质量控制过程的目的是为了确保产品的制造标准得到保持和改进。质量控制过程使公司能够满足客户的期望,同时确保产品质量的一致水平。采用这些标准创造了一种公司文化,鼓励所有员工努力实现高质量的生产标准。低代码和零代码软件可以成为质量控…...
JS跨页面或跨JS文件对变量赋值
JS跨页面或跨JS文件对变量赋值,这是很小的一个问题。 但问题虽小,却总觉得有点不够自然,不爽。 为什么呢?访问一个页面上的变量不是什么难事,比如用parent.变量名,或者windows名.变量名,都可以…...
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开发中,Hook技术是一种强大的手段,它允许开发者拦截和修改系统或应用的行为。通过Hook,我们可以在事件传递的过程中插入自定义的逻辑,从而实现对应用行为的监控和修改。 Android 系统有自己的事件分发机制,…...
架构每日一学 15:想要提升协作效率,必须先统一语义
谭sir与二仙桥大爷的经典对话: 谭sir:你该走哪?(非机动车能走机动车道吗?) 大爷:走二仙桥去成华大道(因为我要去成华大道,当然要走二仙桥) 谭sir:…...
基于树莓派4B设计的智能家居系统(华为云IOT)
基于树莓派的智能家居控制系统(华为云IOT) 文章目录 一、设计需求前言【1】 项目背景【2】需求总结【3】研究的内容【4】 国内外研究状况【5】本课题要解决的问题【6】开发工具的选择 二、硬件选型【1】 树莓派开发板【2】TFT卡-烧写系统使用【3】0.5米网线-远程登录【4】MQ2烟…...
路由懒加载
在 Vue.js 中,路由懒加载(也称为代码分割)是一种优化策略,它允许你将 Vue 组件分割成不同的代码块,并在需要时按需加载它们。这有助于减少初始加载时间,提高用户体验。 Vue Router 支持 Webpack 的动态 im…...
在Spring中实现资源的动态加载和卸载
在Spring框架中,实现资源的动态加载和卸载通常涉及以下几个方面: 1. 使用Bean注解动态注册Bean 通过在配置类中使用Bean注解,可以在运行时动态创建和注册Bean。 Configuration public class DynamicBeanConfig {Beanpublic MyBean myBean(…...
Windows下 CLion中,配置 OpenCV、LibTorch
首先按照win下C部署深度学习模型之clion配置pytorchopencv教程记录 步骤配置。 LibTorch 部分 在测试LibTorch时会出现类似 c10.dll not found 的问题(Debug才有): 参考C部署Pytorch(Libtorch)出现问题、错误汇总和 …...
机器学习知识点总结
简介:随着人工智能(AI)蓬勃发展,也有越来越多的人涌入到这一行业。下面简单介绍一下机器学习的各大领域,机器学习包含深度学习以及强化学习,在本节的机器学习中主要阐述一下机器学习的线性回归逻辑回归&…...
OBproxy基础运维
简介 obproxy 属于OceanBase的代理,生产环境中 OceanBase 数据库的数据 会以 多副本的形式 存放在各个 OBServer 节点上,obproxy 接收用户发出的 SQL 请求,并将 SQL 请求转发至最佳目标 OBServer 节点,最后将执行结果返回给用户&…...
【Python】 探索Pytz库中的时区列表
基本原理 在Python中,处理时区是一个常见但复杂的问题。pytz是一个Python库,它提供了对时区的精确和丰富的支持。pytz库是datetime模块的补充,它允许更准确地处理时区信息。pytz库包括了IANA时区数据库,这个数据库包含了全球的时…...
第六讲:AD、DA的工作原理及实现、运放电路
DA 数模转换器 (DAC) 数模转换器(Digital-to-Analog Converter,简称DAC)是一种将数字信号转换为模拟信号的电子装置。DAC在各种电子设备中广泛应用,如音频设备、通信系统、测量设备和控制系统中。以下是DAC的主要概念和应用。…...
计网ppt标黄知识点整理第(4)章节——谢希仁版本、期末复习自用
路由器:查找转发表,转发分组。 IP网的意义:当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
