Pytorch模型转onnx模型实例
如下所示:
importio importtorch importtorch.onnx frommodels.C3AEModelimportPlainC3AENetCBAM device=torch.device("cuda:0"iftorch.cuda.is_available()else"cpu") deftest(): model=PlainC3AENetCBAM() pthfile=r'/home/joy/Projects/models/emotion/PlainC3AENet.pth' loaded_model=torch.load(pthfile,map_location='cpu') #try: #loaded_model.eval() #exceptAttributeErroraserror: #print(error) model.load_state_dict(loaded_model['state_dict']) #model=model.to(device) #datatypenchw dummy_input1=torch.randn(1,3,64,64) #dummy_input2=torch.randn(1,3,64,64) #dummy_input3=torch.randn(1,3,64,64) input_names=["actual_input_1"] output_names=["output1"] #torch.onnx.export(model,(dummy_input1,dummy_input2,dummy_input3),"C3AE.onnx",verbose=True,input_names=input_names,output_names=output_names) torch.onnx.export(model,dummy_input1,"C3AE_emotion.onnx",verbose=True,input_names=input_names,output_names=output_names) if__name__=="__main__": test()
直接将PlainC3AENetCBAM替换成需要转换的模型,然后修改pthfile,输入和onnx模型名字然后执行即可。
注意:上面代码中注释的dummy_input2,dummy_input3,torch.onnx.export对应的是多个输入的例子。
在转换过程中遇到的问题汇总
RuntimeError:FailedtoexportanONNXattribute,sinceit'snotconstant,pleasetrytomakethings(e.g.,kernelsize)staticifpossible
在转换过程中遇到RuntimeError:FailedtoexportanONNXattribute,sinceit'snotconstant,pleasetrytomakethings(e.g.,kernelsize)staticifpossible的错误。
根据报的错误日志信息打开/home/joy/.tensorflow/venv/lib/python3.6/site-packages/torch/onnx/symbolic_helper.py,在相应位置添加print之后,可以定位到具体哪个op出问题。
例如:
在相应位置添加
print(v.node())
输出信息如下:
%124:Long()=onnx::Gather[axis=0](%122,%121),scope:PlainC3AENetCBAM/Bottleneck[cbam]/CBAM[cbam]/ChannelGate[ChannelGate]#/home/joy/Projects/models/emotion/WhatsTheemotion/models/cbam.py:46:0
原因是pytorch中的tensor.size(1)方式onnx识别不了,需要修改成常量。
以上这篇Pytorch模型转onnx模型实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。