Issue 1:
🐛 Bug

While trying to convert resnet18 based pytorch model from here. Below error comes up:

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

To Reproduce

Steps to reproduce the behavior:

Download this repo.

Also download the model weights 79999_iter.pth from the repo page and place it in res/cp.

In Google Collab run conversion script:

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"])

Expected behavior

Should not produce any errors during conversion

Environment

collect_env output:

Collecting environment information...

PyTorch version: 1.4.0

Is debug build: No

CUDA used to build PyTorch: 10.1

OS: Ubuntu 18.04.3 LTS

GCC version: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0

CMake version: version 3.12.0

Python version: 3.6

Is CUDA available: Yes

CUDA runtime version: 10.0.130

GPU models and configuration: GPU 0: Tesla T4

Nvidia driver version: 418.67

cuDNN version: /usr/lib/x86_64-linux-gnu/libcudnn.so.7.6.5

Versions of relevant libraries:

[pip3] numpy==1.17.5

[pip3] torch==1.4.0

[pip3] torchsummary==1.5.1

[pip3] torchtext==0.3.1

[pip3] torchvision==0.5.0

[conda] Could not collect

Additional context

I added print (v.node ()) to symbolic_helper.py just before the runtime error is raised to see what's causing the error.

This is the output: %595 : Long() = onnx::Gather[axis=0](%592, %594) # /content/drive/My Drive/Collab/fp/model.py:111:0

And that line in 111 in model.py is: avg = F.avg_pool2d(feat32, feat32.size()[2:])

Based on my further research I found this source stating that:

Both resNet50 and 32 are fine, but to resNet18, ONNX model cannot be exported.

The source suggests the following changes:

From this:

import torch.nn.functional as F

def forward(self, x):

feat = self.base(x)

feat = F.avg_pool2d(feat, feat.size()[2:])

To this:

class Model(nn.Module):

def init():

…

self.avg_pool2d = nn.AvgPool2d(kernel_size=k_s, ceil_mode=False)

…

def forward(self, x):

…

feat = self.avg_pool2d(feat, feat.size()[2:])

…

This change however yield other errors

cc @houseroad @spandantiwari @lara-hdr @BowenBao @neginraoof

Issue 2:
Trying to convert this pytorch model with ONNX gives me this error. I've searched github and this error came up before in version 1.1.0 but was apparently rectified. Now I'm on torch 1.4.0. (python 3.6.9) and I see this error.

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

How to fix it? I've also tried latest nightly build, same error comes up.

My code:

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"])

`

I also tried downgrading to torch 1.0.0 and the error is still there "RuntimeError: ONNX symbolic expected a constant value in the trace"

cc @houseroad @spandantiwari @lara-hdr @BowenBao @neginraoof