首页 > 其他分享 >onnx子图修改与动态静态转化

onnx子图修改与动态静态转化

时间:2023-10-18 14:16:26浏览次数:32  
标签:node name 静态 onnx 子图 list graph path

子图修改

import onnx
import onnx_graphsurgeon as gs
import onnxruntime as ort
import numpy as np

def cut_subgraph(origin_graph_path, input_node_name_list, output_node_name_list, sub_graph_path):
    graph = gs.import_onnx(onnx.load(origin_graph_path))
    tensors = graph.tensors()
    graph.inputs = []
    graph.outputs = []
    for input_node_name in input_node_name_list:
        graph.inputs.append(tensors[input_node_name])
    for output_node_name in output_node_name_list:
        graph.outputs.append(tensors[output_node_name])
    graph.cleanup()
    onnx.save(gs.export_onnx(graph), sub_graph_path)

 

动态转静态(静态转动态同理),这方法是改batch的

import onnx
import onnxruntime as ort
import numpy as np
import struct

def rebatch(infile_path, outfile_path, batch_size):
    model = onnx.load(infile_path)
    graph = model.graph
    for tensor in list(graph.input) + list(graph.value_info) + list(graph.output):
        tensor.type.tensor_type.shape.dim[0].dim_param = str(batch_size)
    for node in graph.node:
        if node.op_type != 'Reshape':
            continue
        for init in graph.initializer:
            if init.name != node.input[1]:
                continue
            if len(init.int64_data) > 0:
                init.int54_data[0] = -1
            elif len(init.raw_data) > 0:
                shape = bytearray(init.raw_data)
                struct.pack_into('q', shape, 0, -1)
                init.raw_data = bytes(shape)
    onnx.save(model, outfile_path)

 

调用

origin_graph_path = './del_maxmin/new_wdl.onnx'
input_node_name_list = ['Sum:0', 'Embedding_layer/embedding_lookup_3:0', 'Embedding_layer/embedding_lookup_1:0', 'Embedding_layer/embedding_lookup:0']
output_node_name_list = ['Softmax:0']
cut_subgraph(origin_graph_path, input_node_name_list, output_node_name_list, './simple_wdl.onnx')
rebatch('./simple_wdl.onnx', 'tt.onnx', 32)

 

裁剪前的模型图,红圈是我希望作为新的输入节点的位置

 他们的name可以和代码中的对应起来

ReduceSum的output

 gather的output

子图的输出节点

 

 裁剪完之后的模型

 

参考

https://github.com/NVIDIA/TensorRT/tree/master/tools/onnx-graphsurgeon#examples

https://github.com/onnx/onnx/issues/2182#issuecomment-881752539

标签:node,name,静态,onnx,子图,list,graph,path
From: https://www.cnblogs.com/wangtianning1223/p/17771918.html

相关文章

  • Win 11系统j将默认IP地址修改为静态IP,并成功连接上网
    转载的原博:将Windows11系统默认IP地址修改为静态IP,并成功连接上网-CSDN博客一、获取当前IP地址 1.win+R快捷键->输入cmd打开dos窗口2.输入ipconfig/all向下滚动找到当前本机所使用网络,获取本机当前动态IP地址二、修改网络配置1.控制面板->网络和共享中心->更改适配器设......
  • 静态路由原理与配置
    静态路由定义找寻数据传输的最佳路径路由表的形成1、直连网段:给端口配置IP地址后,路由器会自动将该端口的网段加入路由表(长在路由器自己身上的叫直连)2、手动配置手动添加路由信息单向 3、动态学习(动态路由)根据报文自动学习网段 查看路由表命令:displayIProuting......
  • Java语言用static修饰符进行静态导入的作用和语法
    大力:“Java语言引入了静态导入语法(importstatic),有什么作用?”卫琴:“能够在需要经常访问同一个类的方法或成员变量的场合,简化程序代码。”static修饰符静态导入可以简化程序代码下面是一个未使用静态导入的例子:classTestStatic{publicstaticvoidmain(String[]args){S......
  • MAC WMware 设置静态IP
    为什么设置静态IP就不用说了,搭建kubernetes服务器各虚拟机设置静态IP。相信很多同学直接设置ens33网卡后,不能访问外网问题就在子网掩码和dns 以上两个的value通过终端获取1、cat/Library/Preferences/VMware\Fusion/vmnet8/nat.conf #NATgatewayaddressip=19......
  • 父图子图平衡
      ......
  • 虚拟机配置静态ip
    一目的给虚拟机配置静态ip 二操作1.查看网关iprouteshow如下图,当前网关是192.168.65.2  2.配置静态ip2.1打开文件cat/etc/sysconfig/network-scripts/ifcfg-ens33vi/etc/sysconfig/network-scripts/ifcfg-ens332.2修改文件,注意使用静态ip,要确保该i......
  • django 静态文件
     静态: STATIC_URL='static/'STATIC_ROOT=os.path.join(BASE_DIR,'/static/')STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)STATIC_ROOT=os.path.join(BASE_DIR,'static/')===错误pythonmanage.pycolle......
  • MFC静态反编译GetMessageMap相关查找方法
    MFC中GetMessageMap包含对多数消息处理的结构,界面菜单,按钮都在这,找到GetMessageMap很关键structAFX_MSGMAP_ENTRY{UINTnMessage;//windowsmessageUINTnCode;//controlcodeorWM_NOTIFYcodeUINTnID;//controlID(or0forwindowsmessage......
  • 静态路由
    网络部署思路拓扑的设计—IP地址的规划实施1、底层—所有需要配置IP地址的节点配置一个合法的IP地址2、路由—全网可达3、策略和优化4、测试5、排错6、维护和升级路由器的转发原理路由表是路由器中维护的路由条目的集合,路由器根据路由表做路径选择。路由......
  • 锐捷交换机静态路由配置
    一、组网要求    使用静态路由配置网络连通性 二、组网拓扑   三、配置步骤注意:配置之前建议使用Ruijie#showinterfacestatus查看接口名称,常用接口名称有FastEthernet(百兆)、GigabitEthernet(千兆)和TenGigabitEthernet(万兆),以下配置以千兆接口为例 1)配置接口......