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

湖南网站制作公司推荐购物网站建设策划书

湖南网站制作公司推荐,购物网站建设策划书,免费学习资源网站,wordpress 4.5多用户本篇记录一次从Pytorch图像处理模型转换成ONNX模型之后,在推理过程中出现了明显色偏问题的解决过程。 问题描述:原始pytorch模型推理正常,通过torch.onnx.export()函数转换成onnx之后,推理时出现了比较明显的颜色偏差。 原始模型…

本篇记录一次从Pytorch图像处理模型转换成ONNX模型之后,在推理过程中出现了明显色偏问题的解决过程。

问题描述:原始pytorch模型推理正常,通过torch.onnx.export()函数转换成onnx之后,推理时出现了比较明显的颜色偏差。

原始模型转换程序如下:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')pth_path = 'model/my_model.pth'
onnx_path = 'model/my_model.onnx'# 模型定义
model = MyModelStruct()
# 加载模型到设备
model.to(device)# 加载checkpoint
checkpoint = torch.load(pth_path, map_location=device)
# 将checkpoint加载到模型
model.load_state_dict(checkpoint) # 将模型设置为推理模式
model.eval()# 定义模型输入输出
input_names = ['input', 'a', 'b']
output_names = ['output']# 定义输入数据格式,随机数初始化
input = torch.rand(1,3, 512, 512)
a = torch.rand(1)
b = torch.rand(1)# 将数据加载到设备
input = input.to(device)
a = a.to(device)
b = b.to(devici)# 开始转换
torch.onnx.export(model, (input, a, b), onnx_path, input_names=input_names, output_names=output_names, verbose=True)print('Done.')

问题解决过程:

1. 由于不是自己的模型,因此,这个pytorch模型拿到手后,先自己写了推理程序,在自己的PC上跑了一下。我自己的PC机只有CPU,在CPU上运行的结果跟onnx上一致,也存在色偏。但将同样的程序放到GPU服务器上运行,结果确实正常的。因此得出结论,应该是模型中间的某些算子,在CPU和GPU上的处理存在误差。

2. 将pytorch模型使用上面的转换程序转换成onnx之后,通过onnxruntime进行推理(这部分本篇先略过,后面再专门开一篇写onnxruntime推理),同样偏色,复现了最初的问题。

3. 通过研究torch.onnx.export()函数,发现跟算子处理关系最大的参数是opset_version,我的版本中,默认使用的opset_version为14,尝试换到16,转换出来的模型推理结果竟然正常了!

相应转换代码替换为:

torch.onnx.export(model, (input, a, b), onnx_path, input_names=input_names, output_names=output_names, verbose=True, opset_version=16)

torch.onnx.export()接收的部分关键参数解释如下:

_export(model,args,f,export_params,verbose,training,input_names,output_names,operator_export_type=operator_export_type,opset_version=opset_version,do_constant_folding=do_constant_folding,dynamic_axes=dynamic_axes,keep_initializers_as_inputs=keep_initializers_as_inputs,custom_opsets=custom_opsets,export_modules_as_functions=export_modules_as_functions,)

其中,

  • model:需要被转换成onnx的模型。
  • args:模型输入参数,一般我们在这里指定模型输入数据的尺寸,如果模型有多个参数,该参数也可以是一个元组,如本例中模型输入三个参数。
  • f:要导出的onnx模型的路径,包括onnx文件名。
  • export_params:(bool, default True),为True时所有的模型参数都会被导出;为False时,则会导出一个未被训练的模型。
  • training:(enum, default TrainingMode.EVAL),有三种模式,分别为:TrainingMode.EVAL,TrainingMOde.PRESERVE,TrainingMode.TRAINING,一般使用EVAL模式即可。
  • input_names:模型图中输入节点的名称,字符串。
  • output_names:模型图中输出节点的名称,字符串。
  • operator_export_type:算子导出类型,包括:OperatorExportTypes.ONNX,OperatorExportTypes.ONNX_FALLTHROUGH,OperatorExportTypes.ONNX_ATEN,OperatorExportTypes.ONNX_ATEN_FALLBACK,我们常用的模型算子一般都有onnx支持,因此默认选第一种。
  • opset_version:这是我们本篇中问题解决的核心参数,默认opset版本为14,可用范围是7~16,通过手动设置,将其设为最高版本,问题初步解决。
  • dynamic_axes:允许在导出的onnx模型中创建变化的维度,是一个字典形式,默认为空。

4. 到第三步其实还没完,因为,虽然模型输出没有偏色了,但是拿到实际场景中去运行,发现它的运行速度变慢了很多。于是又尝试了使用opset_version 11:

torch.onnx.export(model, (input, a, b), onnx_path, input_names=input_names, output_names=output_names, verbose=True, opset_version=11)

这次,也没有偏色,而且推理速度回归正常。

目前暂时使用opset_version 11,至于为什么版本16会使运行速度变慢,还需要更深入地去了解不同版本地差异。留待后续吧。

http://www.15wanjia.com/news/176697.html

相关文章:

  • icp备案网址外贸网站建设seo
  • 去网站做dnf代练要押金吗优秀网站的链接
  • 做网站平台难在哪里无锡网站建站公司
  • 网站建设培训赚钱吗秦皇岛网站开发公司电话
  • 如何把怎己做的网页放到网站上app开发公司赚钱吗
  • 专业做网站设计的公司做公司网站的流程
  • 顺义深圳网站建设公司刷链接浏览量网站
  • 网站平台建设合同公司做企业网站
  • 什么是网络建站网站运营团队建设
  • 永久打开本网站的天津市住房和城乡建设网站
  • 在网站建设中要注意的问题电子商务网站开发课程设计论文
  • wordpress过滤器泰安关键词优化
  • 国外做自动化网站网站建设一个多少钱
  • 仿163源码交易平台宽屏整站源码 网站模板交易平台源码国外有趣的网站
  • 厦门集团网站设计公司建模培训学校
  • 图片点击切换网站模板镇江久一信息技术有限公司
  • 网站建设需要的职位东莞容桂网站制作
  • 江苏网站建设基本流程网站开发找哪家好
  • 哪家培训机构好安徽seo顾问服务
  • 做网站一个月可以赚多少英文定机票网站建设
  • 企业网站的建设内容山东企业网站建设
  • 为什么php做不了大网站采集站seo提高收录
  • 山东移动网站建设网站建设流程心得
  • 网站运营报告中文游戏制作软件
  • 企业网站管理系统标签手册wordpress m3u8
  • 移动网站程序wordpress建站系统视频教程
  • 做直播的网站wordpress 案例
  • 已备案网站域名网站底部菜单
  • 重庆网站设计建设网站引导页面设计
  • asp网站数据库扫描中卫网站推广优化公司