转Onnx实现(Unet的模型转Onnx)

主要是使用torch.onnx.export()这个方法来实现。
Unet的实现参考:
链接憨批的语义分割重制版6——Pytorch 搭建自己的Unet语义分割平台_Bubbliiiing的学习小课堂-CSDN博客.
这位博主写的很详细,b站还有实现视频,手把手教学!!!

Onnx转换实现代码

import onnx
import torch.onnx
from unet import Unet
unet=Unet()
print(unet)
model = torch.load('D:/PycharmProjects/test/unet-pytorch-main/model_data/Epoch19-Total_Loss0.5564-Val_Loss0.5045.pth',map_location='cpu')
unet.net.load_state_dict(model)
unet.net.eval()
print(unet.net)
print(torch.__version__)
#batch_size:1,model_image_size:3*512*512
dummy_input = torch.randn(1,3, 512, 512)  # 你模型的输入   NCHW
#关键参数 verbose=True 会使导出过程中打印出该网络的可读表示
torch.onnx.export(unet.net, dummy_input,'unetmodel.onnx',verbose=True,opset_version=11)
onnx_model = onnx.load('./unetmodel.onnx')  # load onnx model
onnx.checker.check_model(onnx_model)  # check onnx model
print(onnx.helper.printable_graph(onnx_model.graph))  # print a human readable model

注:运行出错
这是我在刚开始运行的时候出现的问题。

 完整错误信息

D:\Anaconda3\envs\superglue\lib\site-packages\torch\nn\functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at  ..\c10/core/TensorImpl.h:1156.)
  return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)
D:\Anaconda3\envs\superglue\lib\site-packages\torch\onnx\symbolic_helper.py:375: UserWarning: You are trying to export the model with onnx:Upsample for ONNX opset version 9. This operator might cause results to not match the expected results by PyTorch.
ONNX's Upsample/Resize operator did not match Pytorch's Interpolation until opset 11. Attributes to determine how to transform the input were added in onnx:Resize in opset 11 to support Pytorch's behavior (like coordinate_transformation_mode and nearest_mode).
We recommend using opset 11 and above for models using this operator. 
  "" + str(_export_onnx_opset_version) + ". "
D:\Anaconda3\envs\superglue\lib\site-packages\torch\onnx\symbolic_helper.py:243: UserWarning: ONNX export failed on upsample_bilinear2d because align_corners == True not supported
  warnings.warn("ONNX export failed on " + op + " because " + msg + " not supported")

原因:
转换ONNX使用的版本较低,PyTorch.ONNX不支持。另外,参考源码, torch.onnx.export 默认使用 opset_version=9

解决办法:
在export中设定opset_versiond的值为11。

torch.onnx.export(unet.net, dummy_input,'unetmodel.onnx',verbose=True,opset_version=11)

paddle2.0模型转onnx_juluwangriyue的博客-CSDN博客_paddle转onnx自己开始用paddle时就是2.0版本了,所以不关心之前的版本。1、查看本地有没有安装onnx进入paddle 环境conda list或者pip list如果没有安装onnx则先安装onnx,onnx版本匹配是一个令人头疼的问题。暂且不考虑版本问题直接使用下面的命令安装。pip install onnx2、安装paddle2onnxpip install paddle2onnx3、导出onnx模型导出onnx模型的大致步骤如下:import osimport timehttps://blog.csdn.net/juluwangriyue/article/details/117076474?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5.pc_relevant_antiscan&spm=1001.2101.3001.4242.4&utm_relevant_index=8

unet++ pytorch模型转换为onnx模型并实际测试_黄小黄的窝-CSDN博客_unet转onnx书接上回,上次在安装好openvino环境之后,以及自己在了解完其相关的处理流程之后,现在将自己的模型转换为onnx格式以便后续转换为openvino的中间件。直接上代码:import osimport cv2import onnxruntimeimport torchfrom albumentations import Composefrom albumentations.augmentations import transformsfrom torch.utils.data importhttps://blog.csdn.net/weixin_43218120/article/details/119675914?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=2

Paddle2.0:ONNX模型的导出和部署_jm_12138的博客-CSDN博客_paddle2onnx引入除了动态图转静态图的方式导出推理模型之外Paddle2.0中也正式内置了ONNX模型的导出功能本文将通过一个实例演示一下如何将Paddle模型导出为ONNX模型并在ONNXRunTime上完成模型的推理预测ONNXOpen Neural Network Exchange (ONNX) ,是一个机器学习模型的开放标准,方便不同框架之间进行模型交换你可以在很多支持ONNX模型导出的框架上构建模型,然后导出ONNX模型进行预测部署Paddle2ONNX目前Paddle导出ONNXhttps://blog.csdn.net/jm_12138/article/details/112396913?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.pc_relevant_antiscan&spm=1001.2101.3001.4242.1&utm_relevant_index=3

Pytroch转Onnx实现(Unet的模型转Onnx)_Done___的博客-CSDN博客_unet转onnx主要是使用torch.onnx.export()这个方法来实现。Unet的实现参考:链接: https://blog.csdn.net/weixin_44791964/article/details/108866828.这位博主写的很详细,b站还有实现视频,手把手教学!!!Onnx转换实现代码import onnximport torch.onnxfrom unet import Unetunet=Unet()print(unet)model = torch.load('D:/Pychahttps://blog.csdn.net/Done___/article/details/118998164?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7.pc_relevant_default&utm_relevant_index=11

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值