首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将Pytorch转换为ONNX

无法将Pytorch转换为ONNX
EN

Stack Overflow用户
提问于 2020-03-14 20:17:22
回答 5查看 5.7K关注 0票数 2

尝试使用ONNX转换this pytorch模型时出现此错误。我搜索过github,这个错误以前在1.1.0版本中出现过,但显然已经被纠正了。现在我使用的是torch 1.4.0。(python 3.6.9),我看到了这个错误。

代码语言:javascript
复制
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/init.py", line 148, in export
strip_doc_string, dynamic_axes, keep_initializers_as_inputs)
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/utils.py", line 66, in export
dynamic_axes=dynamic_axes, keep_initializers_as_inputs=keep_initializers_as_inputs)
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/utils.py", line 416, in _export
fixed_batch_size=fixed_batch_size)
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/utils.py", line 296, in _model_to_graph
fixed_batch_size=fixed_batch_size, params_dict=params_dict)
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/utils.py", line 135, in _optimize_graph
graph = torch._C._jit_pass_onnx(graph, operator_export_type)
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/init.py", line 179, in _run_symbolic_function
return utils._run_symbolic_function(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/utils.py", line 657, in _run_symbolic_function
return op_fn(g, *inputs, **attrs)
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/symbolic_helper.py", line 128, in wrapper
args = [_parse_arg(arg, arg_desc) for arg, arg_desc in zip(args, arg_descriptors)]
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/symbolic_helper.py", line 128, in
args = [_parse_arg(arg, arg_desc) for arg, arg_desc in zip(args, arg_descriptors)]
File "/usr/local/lib/python3.6/dist-packages/torch/onnx/symbolic_helper.py", line 81, in _parse_arg
"', since it's not constant, please try to make "
RuntimeError: Failed to export an ONNX attribute 'onnx::Gather', since it's not constant, please try to make things (e.g., kernel size) static if possible

如何修复它?我也尝试了最新的夜间构建,同样的错误也出现了。

我的代码:

代码语言:javascript
复制
from model import BiSeNet
import torch.onnx
import torch

net = BiSeNet(19)
net.cuda()
net.load_state_dict(torch.load('/content/drive/My Drive/Collab/fp/res/cp/79999_iter.pth'))
net.eval()

dummy = torch.rand(1,3,512,512).cuda()
torch.onnx.export(net, dummy, "Model.onnx", input_names=["image"], output_names=["output"])

在引发运行时错误之前,我向symbolic_helper.py添加了print (v.node ()),以查看是什么导致了该错误。

这是输出:%595 : Long() = onnx::Gather[axis=0](%592, %594) # /content/drive/My Drive/Collab/fp/model.py:111:0

在model.py的第111行是:avg = F.avg_pool2d(feat32, feat32.size()[2:])

source表明pytorch中的tensor.size方法无法被onnx识别,需要修改为常量。

EN

回答 5

Stack Overflow用户

发布于 2021-01-01 01:40:08

我曾经在使用以下命令导出时遇到过类似的错误

torch.onnx.export(model, x, ONNX_FILE_PATH)

我通过如下所示指定opset_version来修复它:

torch.onnx.export(model, x, ONNX_FILE_PATH, opset_version = 11)

票数 2
EN

Stack Overflow用户

发布于 2020-05-22 01:56:17

您可以:

代码语言:javascript
复制
print(feat32.size()[2:])

并替换为:

代码语言:javascript
复制
F.avg_pool2d(feat32, feat32.size()[2:]) 

通过以下方式:

代码语言:javascript
复制
F.avg_pool2d(feat32, your_print_contant_result)
票数 0
EN

Stack Overflow用户

发布于 2020-06-03 16:53:48

我也为同样的问题而苦苦挣扎。

在我的情况下,不支持F.adaptive_avg_pool2d。您必须尝试其他操作。

我希望这能帮到你。

谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60682622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档