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

[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官方的简化库的基本细节了。后面再续其他有趣的东东。

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

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

相关文章

关于降版本Tomcat10降到Tomcat9或者Tomcat8,提示找不到jakarta.servlet.http.HttpServletRequest包的解决方法

Tomcat10相较于Tomcat9和8,在Servlet方面,对于javax.servlet包名改为了jakarta.servlet。 当你目前的项目是使用Tomcat10进行部署的,然后页面提示没有找到javax.servlet.http.HttpServletRequest包时,只有两种方法: …

美力AI变革:生成式AI在美妆和时尚领域的巨大改变

美妆AI技术解决方案提供商—玩美移动于今日发布最新全球趋势报告:《生成式AI在美妆和时尚领域的巨大改变》,就生成式AI在美妆和时尚行业的崛起,为品牌商提供了富有洞见的深入分析。该报告分析了来自玩美移动屡获殊荣的玩美系列APP应用套件的大…

ELAU MC-4/11/22/400伺服驱动器

在一帧中每一行的选择时间是均等的。假设一帧的扫描行数为N,扫描时间为1,那一行所占有的选择时间为一帧时间的1/N。在液晶显示的驱动方法中把这个值,即一帧行扫描数的倒数称为液晶显示驱动的占空比(duty),用d表示。在同等电压下&a…

Error: start of central directory not found; zipfile corrupt.

【报错】使用 unzip 指令在 AutoDL 上解压 .zip 文件时遇到 Error: start of central directory not found; zipfile corrupt. 报错: 重新上传后还是解压失败排除了 .zip 文件上传中断的问题。 【原因】Windows 和 Linux 下的压缩文件的二进制格式有所不同&#x…

Python的内置函数 def __init__和__str__用法

__init__() 当使用类名()创建对象时,会自动执行以下操作 __init__()是对象的的内置方法,是专门用来定义一个类 具有哪些属性的方法 class Person:def __init__(self):print("这是一个初始化方法")result Person() …

直接写一区! ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别程序,特征可视化,实验多!图多!

适用平台:Matlab2023版本及以上 本原创程序提出的ZOA-PCNN-AT-SVM故障识别模型还没有人写!在此基础上进一步对参考模型进行多重改进,程序注释清晰,干货满满,下面对文章和程序做简要介绍! ①识别模型部分参…

模拟开关灯

1.  实验任务 如图所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。…

JUC之Phaser的使用

Phaser是并发包juc.concurrent包下的一个关于线程同步和线程通信的一个工具类,类似于CountDownLanch 和 CyclicBarrier,不同的是 Phaser可以用来根据步骤,等待线程按步骤同时触发执行。 package com.example.test;import com.example.abstra…

ubuntu20.04网络问题以及解决方案

1.网络图标消失,wired消失,ens33消失 参考:https://blog.51cto.com/u_204222/2465609 https://blog.csdn.net/qq_42265170/article/details/123640669 原始是在虚拟机中切换网络连接方式(桥接和NAT), 解决…

2024年1月6日~2024年1月12日周报

目录 一、前言 二、SeisInvNet-2020 三、RTM研究 四、遇到的问题及解决 4.1 KeyError: data 4.2 将mat文件转换为npy文件 五、小结 5.1 存在的问题及疑惑 5.2 下周安排 一、前言 本周的主要安排是阅读论文查看一些好的点子。 但是想法总是美好的,之前答应的…

图灵机:计算机科学的奠基之作

图灵机的概念由英国数学家阿兰图灵在1936年提出,这个时期正是计算机科学的黎明时分。那个时候,人们还在使用机械计算器进行计算,而且这些计算器的功能都非常有限。 图灵提出这个概念的初衷,是为了解决所谓的“判定问题”&#xf…

机器人持续学习基准LIBERO系列4——robosuite最基本demo

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新 1.robosuite的相关资料 是基于MuJoCo的机器人学习方针环境,提供一套基准环境…

蓝桥杯省赛无忧 竞赛常用库函数 课件5 排序

01 sort简介 02 sort的用法 sort(起始地址&#xff0c;结束地址的下一位,比较函数);默认用小于号#include<bits/stdc.h> using namespace std; int main(){int a[1000];int n;//读取数组大小cin>>n;//读取元素for(int i1;i<n;i)cin>>a[i];//对数组进行排…

vue3+vite+ts+pinia新建项目(略详细版)

1、新建项目 npm create vite@latest 2、安装依赖 yarn add vue-router yarn add -D @types/node vite-plugin-pages sass sass-loader 3、配置别名 //vite.config.ts import { defineConfig } from vite import path from node:path export default defineConfig({ plu…

如何有效提高矢量网络分析仪的动态范围

动态范围是网络分析仪&#xff08;VNA&#xff09;接收机的最大输入功率与最小可测量功率&#xff08;本底噪声&#xff09;之间的差值&#xff0c;如图所示&#xff0c;要使测量有效&#xff0c;输入信号必须在这些边界内。 如果需要测量信号幅度非常大的变化&#xff0c;例如…

openai自定义API操作 API (openai.custom):OpenAI API 实现电商平台的智能库存管理

在电商行业中&#xff0c;库存管理是至关重要的环节之一。一个高效的库存管理系统可以确保商品的正常供应&#xff0c;避免缺货或积压现象&#xff0c;从而提高销售效率和客户满意度。然而&#xff0c;传统的库存管理方式往往存在一些问题&#xff0c;如数据不准确、响应不及时…

版本控制系统教程

1.Git的基本介绍 1.1 Git的概念 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目.Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.Git与常用的版本控制工具CVS&#xff0c;Subversion等不同&#xff…

大模型关于Lora论文集合

《Chain of LoRA:Efficient Fine-tuning of Language Models via Residual Learning》 Chain of LoRA (COLA)&#xff0c;这是一种受 Frank-Wolfe 算法启发的迭代优化框架&#xff0c;旨在弥合 LoRA 和全参数微调之间的差距&#xff0c;而不会产生额外的计算成本或内存开销。CO…

【c++】类和对象1

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完 成 …

JavaScript高级程序设计读书记录(十二):函数

函数是ECMAScript中最有意思的部分之一&#xff0c;这主要是因为函数实际上是对象。每个函数都是Function 类型的实例&#xff0c;而 Function 也有属性和方法&#xff0c;跟其他引用类型一样。因为函数是对象&#xff0c;所以函数名就是 指向函数对象的指针&#xff0c;而且不…