[Onnx简化库深度剖析] OnnxSimplifier和OnnxOptimizer解读-(4)

[Onnx简化库深度剖析] OnnxSimplifier和OnnxOptimizer解读-(1) 这次主要是介绍了OnnxSimplifier简化原理,重点介绍了FoldConstant功能和FixedPointFn迭代优化函数,这是该简化包的核心部分了。但是对于其他的OptimizeFixed,也就是OnnxOptimizer函数库的内部简化细节却没有具体的说明。后续将会具体介绍OnnxOptimizer的模型优化细节。 阅读详情

[Onnx简化库深度剖析] OnnxSimplifier和OnnxOptimizer解读-(4)

简介

现在主要用于通过实操进行onnx简化库的每种pass的特性和效果。因为Pass实在太多,因此这里挑了一些效果显著的Pass进行呈现。

左边的是原始模型,右边的是特定Pass优化后的模型

OnnxOptimizer各Pass的实操和特性说明

adjust_add

  • 前:常量输入是A,动态输入是B
  • 后:常量输入是B, 动态输入是A
  • 特性:把动态输入变成Add算子的第一个input
    在这里插入图片描述在这里插入图片描述

eliminate_common_subexpression

  • 前:含有两个公共的表达式Y(Mul(X,Sigmoid(X)))
  • 后:合并只有一个
  • 特性:合并公共的结构

在这里插入图片描述在这里插入图片描述

eliminate_if_with_const_cond

  • 前:含有If算子,存在子图
  • 后:没有If算子,子图被暴露
  • 特性:cond确定的If算子被去除

请添加图片描述请添加图片描述

eliminate_nop_cast

  • 前:有一个Cast算子,to=float32,input_dtype=float32
  • 后:没有Cast算子
  • 特性:to=input_dtype的Cast被消除

请添加图片描述在这里插入图片描述

eliminate_nop_flatten

  • 前:存在Flatten算子
  • 后:没有Flatten算子
  • 特性:对shape不起作用的Flatten算子被消除

在这里插入图片描述在这里插入图片描述

eliminate_nop_monotone_argmax

  • 前:存在Y=ArgMax(Exp(X))这样的结构
  • 后:只有Y=ArgMax(X)
  • 特性:类似于Exp,只要是输出/输入是正相关的激活函数接入ArgMax算子后,该激活函数可以被消除而不影响结果

在这里插入图片描述在这里插入图片描述

eliminate_nop_with_unit

  • 前:存在很多乘1.0、加0.0等无效操作
  • 后:去除了很多无效的操作
  • 特性:消除掉同0并的And、同1乘的Mul、同0或的Or、同0加的Add、减0的Sub、除1的Div、方1的Pow、 无效的Concat

在这里插入图片描述在这里插入图片描述

eliminate_shape_gather

  • 前:Y=Gather(Shape(X))
  • 后:Y=2
  • 特性:X的Shape已知,那么Y就是已知的。

在这里插入图片描述在这里插入图片描述

fuse_add_bias_into_conv

  • 前:B=Add(Conv2d(X,Y), A)
  • 后:B=Conv2d(X,Y,A)
  • 特性:把Add常量融合进Conv2d中

在这里插入图片描述在这里插入图片描述

fuse_bn_into_conv

  • 前:Y=BN(Conv2d(X))
  • 后:Y=Conv2d(X)
  • 特性:把BN融合进Conv2d中,主要因为重构了Conv2d的weight和bias

在这里插入图片描述在这里插入图片描述

fuse_consecutive_concats

  • 前:存在很多axes一致的连续concat操作
  • 后:只有一个concat
  • 特性:合并很多axes一致的连续concat操作为一个

在这里插入图片描述在这里插入图片描述

fuse_consecutive_log_softmax

  • 前:Z=log(softmax(X))
  • 后:X=logsoftmax(X)
  • 特性:合并算子成为一个算子

在这里插入图片描述在这里插入图片描述

fuse_qkv

  • 前:普通的产生qkv的结构,拥有三个矩阵乘
  • 后:合并为一个矩阵乘,后续用split分开
  • 特性:对qkv结构特定优化

在这里插入图片描述在这里插入图片描述

fuse_transpose_into_gemm

  • 前:存在transpose执行矩阵转置操作
  • 后:转置操作被gemm的transA/B属性替代
  • 特性:消除transpose算子

在这里插入图片描述在这里插入图片描述

总结

结束了,已经搞定了onnx官方的简化库的基本细节了。后面再续其他有趣的东东。
转换onnx_ONNX简化节点和修改教程 在训练完深度学习的pytorch或者tensorflow模型后,有时候需要把模型转成 onnx,但是很多时候,很多节点比如cast节点,Identity 这些节点可能都不需要,我们需要进行简化,这样会方便我们把模型转成ncnn或者mnn等这些端侧部署的模型格式或者通过tensorRT进行部署。方法1:使用 onnx-simplifier 进行精简一个方法是使用 [onnx-simplif... 阅读详情

相关推荐

ONNX构建并运行模型

ONNX是开放式神经网络(Open Neural Network Exchange)的简称,主要由微软和合作伙伴社区创建和维护。很多深度学习训练框架(如Tensorflow, PyTorch, Scikit-learn, MXNet等)的模型都可以导出或转换为标准的ONNX格式,采用ONNX格式作为统一的界面,各种嵌入式平台就可以只需要解析ONNX格式的模型而不用支持多种多样的训练框架,本文主要介绍如何通过代码或JSON文件的形式来构造一个ONNX单算子模型或者整个graph,以及使用ONN...

亦梦云烟的博客 1万+

ONNX 简化器 (onnx-simplifier) 教程

ONNX 简化器(onnx-simplifier)是一个Python库,用于简化ONNX模型,减少冗余运算符,提高模型的可读性和效率。项目的主要目录结构如下: ``` . ├── README.md # 主页文档 ├── examples # 示例代码 │ ├── example1.py # 基础示例 │ └── ... ...

gitblog_00668的博客 1764

记录 | onnx-simplifier安装、使用

记录 | onnx-simplifier安装、使用

极智视界 4361

onnx-simplifier原理探究

onnx-simpilfier原理探究

FfarFat的博客 3638

onnx-simplifier:简化您的Onnx模型

ONNX简化器 ONNX很棒,但有时太复杂了。 背景 有一天,我想将以下简单的重塑操作导出到ONNX: import torch class JustReshape ( torch . nn . Module ): def __init__ ( self ): super ( JustReshape , self ). __init__ () def forward ( self , x ): return x . view (( x . shape [ 0 ], x . shape [ 1 ], x . shape [ 3 ], x . shape [ 2 ])) net = JustReshape () model_name = 'just_reshape.onnx' dummy_input = torch . randn ( 2 ,

optimizer:积极维护的ONNX Optimizer

ONNX优化器 介绍 ONNX提供了一个C ++库,可用于在ONNX模型上执行任意优化,以及越来越多的预打包优化过程列表。 主要动机是在许多ONNX后端实现之间共享工作。 并非所有可能的优化都可以直接在ONNX图上实现-有些需要附加的特定于后端的信息-但是很多可以,我们的目标是与ONNX一起提供所有此类传递,以便可以通过单个函数调用重复使用。 您可能有兴趣调用提供的通行证,或实施新的通行证(或两者都有)。 安装 您可以从PyPI安装onnxoptimizer: pip3 install onnxoptimizer 请注意,如果遇到问题,您可能需要先升级点子: pip3 install -U pip 如果要从源代码构建: git clone --recursive https://github.com/onnx/optimizer onnxoptimizer cd onnxoptim

[Onnx简化库深度剖析] OnnxSimplifier和OnnxOptimizer解读-(3)

补充说明Pass。基本上目前所有的Pass已经被罗列出来了,后续会用实际的效果去加深大家的印象。

Pengcode的博客 1829

onnx-simplifier-onnx简化代码

把要简化的onnx模型放入onnxsim文件夹里,直接运行sim文件。改一下要简化的模型名和简化后的模型名就可以了。

[Onnx简化库深度剖析] OnnxSimplifier和OnnxOptimizer解读-(2)

上述的Pass只是其中的一小部分,还有将近二十来个Pass没有说明清楚,因此这个留到后续的文章继续说明。

Pengcode的博客 1431

从零构建锂电池主动均衡系统:Simulink仿真中的Buck-Boost拓扑实战指南

本文详细介绍了如何在Simulink中从零构建基于Buck-Boost拓扑的锂电池主动均衡系统。通过仿真环境搭建、参数优化、控制策略设计和性能评估,为工程师提供了完整的实战指南,帮助快速验证和优化均衡算法,提升电池组一致性与寿命。

gitlab7runner的博客 896

本地如何安装midscene.js运行环境

手把手教你本地安装midscene.js运行环境

实践助梦想成长 2608

onnxoptimizer、onnxsim使用记录

onnxoptimizer、onnxsim被誉为onnx的优化利器,其中onnxsim可以优化常量,onnxoptimizer可以对节点进行压缩。为此以resnet18为例,测试onnxoptimizer、onnxsim对于模型的优化效果。onnxoptimizer、onnxsim的安装代码如下所示:pip install onnxoptimizerpip install onnxsimresnet18的结构如下所,可见为多个CBR部件构成 ResNet( (conv1): Conv2d(3, 64,

a486259的博客 9139

Android7以上抓取https数据包-无需root

手机内装一个虚拟机,然后在虚拟机内运行我需要抓包的应用,该虚拟机内是不需要证书验证的。完美解决android7.0以上https无法抓包的问题。

qq_45764684的博客 1454

【亲测免费】 探索 ONNX Optimizer:优化深度学习模型的新利器

是一个强大的开源工具,它专为改进基于 [Open Neural Network Exchange (ONNX)](https://onnx.ai/) 格式的深度学习模型性能而设计。通过理解和利用该项目,开发者可以提升模型的执行效率,从而在各种硬件平台上实现更快、更节省资源的推理。 ## 项目简介 ONNX 是一种开放标准,用于定义机器学习和深度学习模型,使得它们可以在不同的框架之间无缝迁移。而...

gitblog_00094的博客 1132

WebRTC音频传输实战:从采集到播放的完整链路解析(附RTP包处理细节)

本文深入解析了WebRTC音频传输的完整链路,从麦克风采集、音频处理与编码,到RTP打包、网络发送,再到接收端的NetEQ抗抖动处理与最终播放。文章以Linux PulseAudio为例,详细剖析了线程模型、缓冲区管理及RTP包处理等关键细节,旨在帮助开发者优化实时音频应用的延迟、卡顿与回声问题。

tea88的博客 851

Unreal5从入门到精通之EnhancedInput增强输入系统详解

从Unreal5开始,老版的输入系统,正式替换为EnhancedInput增强型输入系统,他们之间有什么区别呢?如果有使用过Unity的同学,大概也知道,Unity也在2020版本之后逐渐把输入系统也升级成了新版输入系统,为什么Unreal和Unity都热衷于升级输入系统呢?这之间又有什么联系呢?官方:增强输入EnhancedInput希望这篇文章能够对你有所帮助。

TxNet 944

ONNX Simplifier: 简化深度学习模型,加速推理与部署

是一个开源工具,用于优化和简化ONNX(开放神经网络交换)模型,它能够帮助开发者更有效地管理和部署深度学习模型。通过去除冗余操作和优化模型结构,ONNX Simplifier 可以让模型在推理阶段更加轻量、快速。 ## **项目简介** ONNX是一种标准的跨框架格式,允许开发人员在不同的深度学习库(如TensorFlow, PyTorch等)之间自由地转换和运行模型。然而,转换过程可能会引入...

gitblog_00041的博客 2679

1分钟吃透一篇文献,借助AI辅助各部分精读,效率提升10倍(附AI提示词)

你现在是一名【研究领域】的资深博士,非常擅长阅读与分析长篇论文,那么接下来我会给你上传一篇论文,请你按照我的要求辅助我阅读。

qq_64378896的博客 638

onnx simplifier过程

onnx simplifier过程

sduati的专栏 1054

相似贴子推荐:基于 LangChain4j + Milvus 的混合检索实战

本文提出了一种基于LangChain4j和Milvus的混合检索方案,用于解决论坛社区中的相似帖子推荐问题。该方案结合稠密向量语义检索和BM25关键词检索的优势,通过RRF算法实现结果融合。系统采用bge-small-zh模型生成语义向量,利用Milvus 2.5+原生支持的BM25功能和混合搜索API,在百万级数据规模下实现50ms内的检索延迟,召回率和精确率分别提升15%和22%。文章详细介绍了从数据预处理、向量化到混合检索的完整实现流程,并探讨了进阶优化方向,为推荐系统和RAG应用提供了高效解决方案。

分享AI、区块链技术及应用,未来已来 88

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

onnx | onnx-simplifier安装和使用

onnx | onnx-simplifier安装和使用

Ddddddd_158的博客 1780

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【亲测免费】 ONNX Optimizer 使用教程

ONNX Optimizer 是一个开源项目,旨在优化 ONNX(Open Neural Network Exchange)模型。ONNX 是一种用于表示深度学习模型的开放格式,而 ONNX Optimizer 则提供了一系列工具和算法来简化、加速和优化这些模型。通过使用 ONNX Optimizer,开发者可以提高模型的运行效率,减少资源消耗,并确保模型在不同平台和设备上的兼容性。 ## 项目...

gitblog_00042的博客 1656

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【亲测免费】 ONNX Simplifier 使用教程

ONNX Simplifier 是一个用于简化 ONNX(Open Neural Network Exchange)模型的工具。它通过推理整个计算图并替换冗余的运算符为它们的常量输出(即常量折叠)来简化模型。这使得模型更小、更易于理解和部署。 ## 项目快速启动 ### 安装 首先,确保你已经安装了 Python 和 pip。然后,通过以下命令安装 ONNX Simplifier: ```...

gitblog_00581的博客 2525

【亲测免费】 ONNX Simplifier 安装与配置完全指南

--- ## 项目基础介绍及主要编程语言 ONNX Simplifier 是一款由 Python 编写的开源工具,目标是简化 ONNX 模型。ONNX(Open Neural Network Exchange)作为一种标准的模型交换格式,使得不同深度学习框架之间的模型交流成为可能。而此项目则专注于减少模型中的冗余运算,提升模型的简洁性和效率。作者采用的主要编程语言为 Python,并且依赖于 ...

gitblog_07175的博客 3589

查看深度学习ONNX模型拓扑图

模型结构和参数查看

BelievIamthebest的博客 3739
上一篇: [Onnx简化库深度剖析] OnnxSimplifier和OnnxOptimizer解读-(3)
下一篇: 游戏编程模式-命令模式(Command)
慷仔
博客等级 码龄9年 88粉丝 46原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值