ONNX获取中间Node的inference shape的方法

  • 需求描述
  • 原理
  • 代码

需求描述

很多时候发现通过tensorflow或者pytorch转过来的模型是没有中间的node的shape的,比如下面这样:

但是碰到一些很奇怪的算子的时候,我们又想知道他对上一层feature map的形状影响是怎样的,于是下面的模型看起来会更友好一些

这里之所以看上去和原来的node的分布都不一样,是因为我在这里将pad和biasadd加到conv中了已经。

原理

ONNX本身提供了进行inference的api:

shape_inference.infer_shapes()

但是呢,这里进行inference并不是根据graph中的tensor,而是根据graph的input中各个tensor的tensor_value_info。所以我们需要做的就是根据各个tensor的信息创建出对应的tensor_value_info之后将其append进graph.inputs即可。

最开始我进行infer_shapes之后发现没用就是因为graph.inputs中的tensor_value_info只有input node的。

代码

import onnx
from onnx.tools import update_model_dims
import numpy as np
import onnx.helper as helper
from onnx import shape_inference, TensorProto
import sysONNX_DTYPE = {0: TensorProto.FLOAT,1: TensorProto.FLOAT,2: TensorProto.UINT8,3: TensorProto.INT8,4: TensorProto.UINT16,5: TensorProto.INT16,6: TensorProto.INT32,7: TensorProto.INT64,8: TensorProto.STRING,9: TensorProto.BOOL
}# load model
onnx_model = onnx.load("tf_resnet_v2_50_onnx.onnx")
graph = onnx_model.graph# rewrite the input tensor of graph
input_tensor = graph.input[0]
input_shape = input_tensor.type.tensor_type.shape.dim
input_tensor_new = onnx.helper.make_tensor_value_info(name = input_tensor.name, elem_type = 1, shape = [1, input_shape[1].dim_value, input_shape[2].dim_value, input_shape[3].dim_value])
graph.input.remove(input_tensor)
graph.input.insert(0, input_tensor_new)# append all tensor infos to graph input
weight_infos = []
tensors = graph.initializer
for i, tensor in enumerate(tensors):value_info = helper.make_tensor_value_info(tensor.name, ONNX_DTYPE[tensor.data_type], tensor.dims)weight_infos.append(value_info)graph.input.insert(i+1, value_info) # because 0 is for placeholder, so start index is 1# run node shape inference
node = graph.node
value_info = graph.value_info
print("Before shape inference: \n")
print(value_info)
print("------------------------------------------------------------")
print("After shape inference: \n")
inferred_onnx_model = shape_inference.infer_shapes(onnx_model)
onnx.checker.check_model(onnx_model)
inferred_graph = inferred_onnx_model.graph
inferred_value_info = inferred_graph.value_info
print(inferred_value_info)
onnx.save(inferred_onnx_model,"./new.onnx")

onnx优化系列 - 获取中间Node的inference shape的方法相关推荐

  1. 06_前端优化系列之一_DNS预获取dns-prefetch提升页面载入速度

    title: 前端优化系列之一:DNS预获取 dns-prefetch 提升页面载入速度 urlname: 06_前端优化系列之一_DNS预获取dns-prefetch提升页面载入速度 date: 2 ...

  2. 前端优化系列之DNS预获取 dns-prefetch 提升页面载入速度

    前端优化系列之一:DNS预获取 dns-prefetch 提升页面载入速度 DNS Prefetch,即DNS预获取,是前端优化的一部分.一般来说,在前端优化中与 DNS 有关的有两点: 一个是减少D ...

  3. 【Webpack 性能优化系列(6) - code splitting 】通过代码分割来获取更小的 bundle,优化资源加载

    webpack系列文章: [Webpack 性能优化系列(9) - 多进程打包]极大的提升项目打包构建速度!!! [Webpack 性能优化系列(8) - PWA]使用渐进式网络应用程序为我们的项目添 ...

  4. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  5. Expert 诊断优化系列------------------透过等待看系统

    上一篇我们简单的介绍了,语句优化的三板斧,大部分语句三板斧过后,就算不成为法拉利也能是个宝马了.为了方便阅读给出系列文章的导读链接: SQL SERVER全面优化-------Expert for S ...

  6. 推荐:Java性能优化系列集锦

    Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...

  7. SSE图像算法优化系列二十二:优化龚元浩博士的曲率滤波算法,达到约1000 MPixels/Sec的单次迭代速度...

      2015年龚博士的曲率滤波算法刚出来的时候,在图像处理界也曾引起不小的轰动,特别是其所说的算法的简洁性,以及算法的效果.执行效率等方面较其他算法均有一定的优势,我在该算法刚出来时也曾经有关注,不过 ...

  8. Android 系统性能优化(81)---Android后台优化系列-background optimization-初识低耗电模式

    Android后台优化系列-background optimization-初识低耗电模式 〇. 序 当我们手机屏幕电量的时候,我们或在游戏,或在看视频,或在上网,屏幕是一个很耗电的组件,在电量消耗方 ...

  9. 网络产品用户体验优化系列[一]概要

    网络产品用户体验优化系列[一]概要 很高兴能在这里和大家专门沟通用户体验方面的话题,特别是能够收集大家对网络产品用户体验的反馈,以及网络产品团队在用户体验方面的优化和更新.这个系列我们只谈用户体验. ...

最新文章

  1. 2021计算机专业课考研大纲,2021考研计算机大纲原文:操作系统
  2. 5G年终盘点:2018,意难平
  3. java高效代码_Java工程师该如何编写高效代码?
  4. python黑色的_python – 将RGB转换为黑色或白色
  5. 强制删除tfs未迁入项的两个方法。
  6. USACO-Section2.1 Hamming Codes(深度优先搜索)
  7. OPPO K9 Pro将于9月26日登场:搭载天玑1200旗舰游戏芯
  8. 异常:System.BadImageFormatException,未能加载正确的程序集XXX
  9. vscode中打开pdf文件_Visual Studio Code Preview深度体验、使用技巧.pdf
  10. QCC3040----SOC模块
  11. 浅谈大数据如何应用?
  12. 【准备篇】1.Simulink-F28335自动代码生成开发环境搭建
  13. python推荐系统实战_Python项目实战!分析9000部电影,打造一个简单的电影推荐系统...
  14. 花之语第五期:紫罗兰
  15. 受难周第五日-团契日
  16. App_Offline.htm 问题解决
  17. 在论文中加入(制作)目录方法
  18. 解决one-stage目标检测正负样本不均衡的另类方法--Gradient Harmonized
  19. Geoffrey Hinton 最新访谈:不出五年,我们就会破解大脑的运作机制,但不是通过反向传播...
  20. 我的计算机找不到资源管理器了,我的电脑工具的工具选项,不见了?怎么办?

热门文章

  1. Matlab中set-gca函数的使用
  2. SASE , sdp等
  3. Java毕业设计-外卖点餐管理系统
  4. vim快捷键(一)查找与替换
  5. 【树形结构】巴基斯坦城市列表 (城市原始数据来自md文件)
  6. Spring框架基础入门
  7. 影响计算机网络性能的原因,计算机网络传输效率分析论文
  8. 全国计算机一类学校专科,中国专科学校排行榜前十名(含金量最高的10所专科学校)...
  9. PHP新闻内容分页类
  10. 抢先上手索尼新品Xperia Touch众筹启动