当前位置: 首页 > news >正文

重庆长寿网站设计公司哪家专业门店设计装修效果图

重庆长寿网站设计公司哪家专业,门店设计装修效果图,在线设计装修的网站,郑州快速网站优化公司哪家好这篇文章#xff0c;用于记录将TransReID的pytorch模型转换为onnx的学习过程#xff0c;期间参考和学习了许多大佬编写的博客#xff0c;在参考文章这一章节中都已列出#xff0c;非常感谢。 1. 在pytorch下使用ONNX主要步骤 1.1. 环境准备 安装onnxruntime包 安装教程可… 这篇文章用于记录将TransReID的pytorch模型转换为onnx的学习过程期间参考和学习了许多大佬编写的博客在参考文章这一章节中都已列出非常感谢。 1. 在pytorch下使用ONNX主要步骤 1.1. 环境准备 安装onnxruntime包 安装教程可参考 onnx模型预测环境安装笔记 onnxruntime配置 CPU版本 直接pip安装 pip install onnxruntimeGPU版本 先查看自己CUDA版本然后在下面的链接去找对应的onnxruntime的版本 CUDA版本的查询可参考这个 onnxruntime版本查询 查询到对应版本直接pip安装即可例如 pip install onnxruntime-gpu1.13.1安装onnxsim包 pip install onnx-simplifier1.2. 搭建 PyTorch 模型(TransReID) def get_net(model_path,opt_False):if opt_:cfg.merge_from_file(/home/TransReID-main/configs/OCC_Duke/vit_transreid_stride.yml)#cfg.freeze()train_loader, train_loader_normal, val_loader, num_query, num_classes, camera_num, view_num make_dataloader(cfg)net make_model(cfg, num_classnum_classes, camera_numcamera_num, view_num view_num)else:cfg.merge_from_file(/home/TransReID-main/configs/OCC_Duke/vit_transreid_stride.yml)train_loader, train_loader_normal, val_loader, num_query, num_classes, camera_num, view_num make_dataloader(cfg)net make_model(cfg, num_classnum_classes, camera_numcamera_num, view_num view_num)#state_dict torch.load(model_path, map_locationtorch.device(cpu))[state_dict]state_dict torch.load(model_path, map_locationtorch.device(cpu))model_state_dictnet.state_dict()for key in list(state_dict.keys()):if key[7:] in model_state_dict.keys():model_state_dict[key[7:]]state_dict[key]net.load_state_dict(model_state_dict)return net1.3. pytorch模型转换为 ONNX 模型 这个提供了静态转换(静态转换支持静态输入)和动态转换(动态转换支持动态输入)两个函数可根据需要选择。 def convert_onnx_dynamic(model,save_path,simpFalse):x torch.randn(4, 3, 256,128)input_name inputoutput_name classtorch.onnx.export(model,x,save_path,input_names [input_name],output_names [output_name],dynamic_axes {input_name: {0: B},output_name: {0: B}})if simp:onnx_model onnx.load(save_path) model_simp, check simplify(onnx_model,input_shapes{input:(4,3,256,128)},dynamic_input_shapeTrue)assert check, Simplified ONNX model could not be validatedonnx.save(model_simp, save_path)print(simplify onnx done)def convert_onnx(model,save_path,batch1,simpFalse):input_names [input]output_names[class]x torch.randn(batch, 3, 256, 128)for para in model.parameters():para.requires_grad False# model_script torch.jit.script(model)# model_trace torch.jit.trace(model, x)torch.onnx.export(model, x, save_path,input_names input_names,output_namesoutput_names, opset_version12)if simp:onnx_model onnx.load(save_path) model_simp, check simplify(onnx_model)assert check, Simplified ONNX model could not be validatedonnx.save(model_simp, save_path)print(simplify onnx done)pytorch 转 onnx 仅仅需要一个函数 torch.onnx.export来看看该函数的参数和用法。 torch.onnx.export(model, args, path, export_params, verbose, input_names, output_names, do_constant_folding, dynamic_axes, opset_version)参数用法model需要导出的pytorch模型args模型的任意一组输入模拟实际输入数据的大小比如三通道的512*512大小的图片就可以设置为torch.randn(1, 3 , 512, 512path输出的onnx模型的位置例如yolov5.onnxexport_params输出模型是否可训练。defaultTrue表示导出trained model 否则untrained。verbose是否打印模型转换信息defaultNoneopset_versiononnx算子集的版本input_names模型的输入节点名称(自己定义的)如果不写默认输出数字类型 的名称output_name模型的输出节点名称(自己定义的), 如果不写默认输出数字类型的名称do_constant_folding是否使用常量折叠默认即可。defaultTrue。dynamic_axes设置动态输入输出用法“输入输出名[支持动态的维度”如支持动态的维度设置为[0, 2, 3]则表示第0维第2维第3维支持动态输入输出。模型的输入输出有时是可变的如rnn或者输出图像的batch可变可通过该参数设置。如输入层的shape为(b, 3, h, w), 其中batch、height、width是可变的但是chancel是固定三通道。格式如下1仅list(int)dynamic_axes{‘input’:[0, 2, 3], ‘output’:{0:‘batch’, 1:‘c’}} 2)仅dictint, string dynamic_axes{‘input’:{‘input’:{0:‘batch’, 2:‘height’, 3:‘width’}, ‘output’:{0:‘batch’, 1:‘c’}} 3)mixed dynamic_axes{‘input’:{0:‘batch’, 2:‘height’, 3:‘width’}, ‘output’:[0,1]} 注意onnx不支持结构中带有if语句的模型如 当我们在网络中嵌入一些if选择性的语句时不好意思模型不会考虑这些 它只会记录下运行时走过的节点不会根据if的实际情况来选择走哪条路 所以势必会丢弃一部分节点而丢弃哪些则是根据我们转模型时的输入来定的一旦指定了后面运行onnx模型都会如此。另一个问题就是我们在代码中有一些循环或者迭代的操作时要注意尤其是我们的迭代次数是根据输入不同 会有变化时也会因为这些操作导致后面的推理出现意外错误正像前面说的模型转换不喜欢不确定的东西它会把这些变量dump成常量所以会导致推理 错误。 对于实际部署的需求很多时候pytorch是不满足的所以需要转成其他模型格式来加快推理。常用的就是onnxonnx天然支持很多框架模型的转换如Pytorch,tf,darknet,caffe等。而pytorch也给我们提供了对应的接口就是torch.onnx.export。下面具体到每一步。 原文来自Windows下使用ONNXpytorch记录 首先环境和依赖onnx包cuda和cudnn我用的版本号分别是1.7.0, 10.1, 7.5.4。 我们需要提供一个pytorch的模型然后调用torch.onnx.export同时还需要提供另外一些参数。我们一个个来分析一是我们要给一个dummy input 就是随便指定一个和我们实际输入时尺寸相同的一个随机数是Tensor类型的然后我们要指定转换的device即是在gpu还是cpu。 然后我们要给一个input_names和output_names这是绑定输入和输出当然输入和输出可能不止一个那就根据实际的输入和输出个数来给出name列表 如果我们指定的输入和输出名和实际的网络结构不一致的话onnx会自动给我们设置一个名字。一般是数字字符串。 输入和输出的绑定之后我我们们可以看到还有一个参数叫做dynamic_axes这是做什么的呢哦这是指定动态输入的为了满足我们实际推理过程中可能每张图片的分辨率不一样所以允许我们给每个维度设置动态输入这样是不是灵活多了然后设置完这些参数和输入我们就可以开始转换模型了如果不报错就是成功了会在当前目录下生成一个.onnx文件。 原文来自 一文掌握Pytorch-onnx-tensorrt模型转换 1.4 onnx-simplifier简化onnx模型 model_simp, check simplify(onnx_model,input_shapes{input:(4,3,256,128)},dynamic_input_shapeTrue)Pytorch转换为ONNX的完整代码pytorch_to_onnx.py import json import os import onnx import torch import argparse import torch.nn as nn from onnxsim import simplify from collections import OrderedDict import torch.nn.functional as F# TransReID的模型构建需要的包 from model.make_model import * from config import cfg from datasets import make_dataloader os.environ[CUDA_VISIBLE_DEVICES] 1def convert_onnx_dynamic(model,save_path,simpFalse):x torch.randn(4, 3, 256,128)input_name inputoutput_name classtorch.onnx.export(model,x,save_path,input_names [input_name],output_names [output_name],dynamic_axes {input_name: {0: B},output_name: {0: B}})if simp:onnx_model onnx.load(save_path) model_simp, check simplify(onnx_model,input_shapes{input:(4,3,256,128)},dynamic_input_shapeTrue)assert check, Simplified ONNX model could not be validatedonnx.save(model_simp, save_path)print(simplify onnx done)def convert_onnx(model,save_path,batch1,simpFalse):input_names [input]output_names[class]x torch.randn(batch, 3, 256, 128)for para in model.parameters():para.requires_grad False# model_script torch.jit.script(model)# model_trace torch.jit.trace(model, x)torch.onnx.export(model, x, save_path,input_names input_names,output_namesoutput_names, opset_version12)if simp:onnx_model onnx.load(save_path) model_simp, check simplify(onnx_model)assert check, Simplified ONNX model could not be validatedonnx.save(model_simp, save_path)print(simplify onnx done)def get_net(model_path,opt_False):if opt_:cfg.merge_from_file(/home/TransReID-main/configs/OCC_Duke/vit_transreid_stride.yml)#cfg.freeze()train_loader, train_loader_normal, val_loader, num_query, num_classes, camera_num, view_num make_dataloader(cfg)net make_model(cfg, num_classnum_classes, camera_numcamera_num, view_num view_num)else:cfg.merge_from_file(/home/TransReID-main/configs/OCC_Duke/vit_transreid_stride.yml)train_loader, train_loader_normal, val_loader, num_query, num_classes, camera_num, view_num make_dataloader(cfg)net make_model(cfg, num_classnum_classes, camera_numcamera_num, view_num view_num)#state_dict torch.load(model_path, map_locationtorch.device(cpu))[state_dict]state_dict torch.load(model_path, map_locationtorch.device(cpu))model_state_dictnet.state_dict()for key in list(state_dict.keys()):if key[7:] in model_state_dict.keys():model_state_dict[key[7:]]state_dict[key]net.load_state_dict(model_state_dict)return netif __name____main__:parser argparse.ArgumentParser(descriptiontorch to onnx describe.)parser.add_argument(--model_path,type str,default/home/TransReID-main/weights/vit_transreid_occ_duke.pth,helptorch weight path, default is MobileViT_Pytorch/weights-file/model_best.pth.tar.)parser.add_argument(--save_path,typestr,default/home/TransReID-main/weights/vit_transreid_occ_duke_v2.onnx,helpsave direction of onnx models,default is ./target/MobileViT.onnx.)parser.add_argument(--batch,typeint,default1,helpbatchsize of onnx models, default is 1.)parser.add_argument(--opt,defaultFalse, actionstore_true,helpmodel optmization , default is False.)parser.add_argument(--dynamic,defaultFalse, actionstore_true,helpexport dynamic onnx model , default is False.)args parser.parse_args() # print(args)#net get_net(args.model_path,opt_args.opt)net get_net(args.model_path)if args.dynamic:convert_onnx_dynamic(net,args.save_path,simpTrue)else:with torch.no_grad():convert_onnx(net,args.save_path,simpTrue,batchargs.batch)1.5 查看onnx模型 当将pytorch模型保存为 ONNX 之后可以使用一款名为 Netron 的软件打开 .onnx 文件查看模型结构。 2. 参考文章 [1] Windows下使用ONNXpytorch记录 [2] pytorch-onnx-tensorrt全链路简单教程(支持动态输入) [3] PyTorch语义分割模型转ONNX以及对比转换后的效果PyTorch2ONNX、Torch2ONNX、pth2onnx、pt2onnx、修改名称、转换、测试、加载ONNX、运行ONNX [4] ONNX系列一ONNX的使用,从转化到推理
http://www.w-s-a.com/news/30367/

相关文章:

  • 黄浦专业做网站海南网站策划
  • 网站开发工程师有证书考试吗织梦cms是免费的吗
  • 电子商务网站建设需要学什么门户网站推广介绍方案
  • 网站里的专题页面wordpress查询数据库结构
  • WordPress子站站群网站建设代码生成器
  • 怎么攻击织梦网站甘肃省最新消息今天
  • 赣州哪里可以做网站看装修案例的网站
  • 旅游网站专业化建设的要点php 手机网站 模板
  • wordpress百度站长主动推送长春火车站官网
  • 比较好的响应式网站wordpress博客增加音乐页面
  • 广告公司出售家具 税率江门做网站seo的
  • 网站设计建议建设商务网站作用
  • 网站策划的最终体现是什么模板网站建设流程图
  • 网站设计与开发技术教程十度公司做网站怎么样
  • 企业网站推广方案在哪里智慧团建登录入口官网手机版
  • google网页版入口seo索引擎优化
  • 东乡做网站常州网络公司联系方式
  • 做网站激励语家居装饰网站设计论文
  • 镜像的网站怎么做排名无极网站建设质量
  • 奉贤集团公司网站建设小工具文本wordpress
  • 不用代码做网站网站建设和运行费用
  • 阜阳网站开发招聘网站建设合作协议申请
  • 电子配件 技术支持 东莞网站建设wordpress 生成html代码
  • 网站用免费空间好不好网站建设的视频
  • 网站开发项目职责门户资源分享网站模板
  • 建网站需要什么语言如何做二维码跳转到网站
  • 天津建设交培训中心网站做网站起名字
  • 黑河北京网站建设湛江市住房和城乡建设局网站
  • 网站建设拾金手指下拉十九企业查询官网
  • 邢台提供网站建设公司哪家好五合一建站