mapbox / robosat

Semantic segmentation on aerial and satellite imagery. Extracts features such as: buildings, parking lots, roads, water, clouds
MIT License
2.01k stars 382 forks source link

rs export: Failed to export an ONNX attribute #190

Open markmester opened 4 years ago

markmester commented 4 years ago

Hi All!

I've been experimenting with this framework the past few weeks with great success -- thanks to all who have worked on this tool.

I've run into an issue with the rs export command that looks like it may be an underlying library issue? I've tried it on the releasedbavaria-dop80-checkpoint.pth as well as a few of my own and they all produce the following error:

docker run --name exporter --rm -it -v /home/mmester/robosat-tanzania-19/data:/data -v /home/mmester/robosat-tanzania-19/config:/config mapbox/robosat:latest-cpu export /data/checkpoints/onnx.pb --dataset /config/dataset-building-mapbox.toml --image_size 512 --checkpoint /data/checkpoints/checkpoint-00050-of-00050.pth
/usr/src/app/robosat/unet.py:120: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!
  assert size[-1] % 32 == 0 and size[-2] % 32 == 0, "image resolution has to be divisible by 32 for resnet"
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/src/app/robosat/tools/__main__.py", line 58, in <module>
    args.func(args)
  File "/usr/src/app/robosat/tools/export.py", line 40, in main
    torch.onnx.export(net, batch, args.model)
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/__init__.py", line 25, in export
    return utils.export(*args, **kwargs)
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/utils.py", line 131, in export
    strip_doc_string=strip_doc_string)
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/utils.py", line 363, in _export
    _retain_param_name, do_constant_folding)
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/utils.py", line 278, in _model_to_graph
    _disable_torch_constant_prop=_disable_torch_constant_prop)
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/utils.py", line 188, in _optimize_graph
    graph = torch._C._jit_pass_onnx(graph, operator_export_type)
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/__init__.py", line 50, in _run_symbolic_function
    return utils._run_symbolic_function(*args, **kwargs)
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/utils.py", line 589, in _run_symbolic_function
    return fn(g, *inputs, **attrs)
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/symbolic.py", line 130, in wrapper
    args = [_parse_arg(arg, arg_desc) for arg, arg_desc in zip(args, arg_descriptors)]
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/symbolic.py", line 130, in <listcomp>
    args = [_parse_arg(arg, arg_desc) for arg, arg_desc in zip(args, arg_descriptors)]
  File "/opt/venv/lib/python3.6/site-packages/torch/onnx/symbolic.py", line 90, in _parse_arg
    raise RuntimeError("Failed to export an ONNX attribute, "
RuntimeError: Failed to export an ONNX attribute, since it's not constant, please try to make things (e.g., kernel size) static if possible

My dataset.config:

# Configuration related to a specific dataset.
# For syntax see: https://github.com/toml-lang/toml#table-of-contents

# Dataset specific common attributes.
[common]
  # Image side size in pixels.
  image_size = 256

  # The slippy map dataset's base directory.
  dataset = "/data/mapbox"

  # Human representation for classes.
  classes = ['background', 'building']

  # Color map for visualization and representing classes in masks.
  # Note: available colors can be found in `robosat/colors.py`
  colors  = ['denim', 'orange']

# Dataset specific class weights computes on the training data.
# Needed by 'mIoU' and 'CrossEntropy' losses to deal with unbalanced classes.
# Note: use `./rs weights -h` to compute these for new datasets.
[weights]
  values = [1.570984, 7.152249]

Any debugging suggestions or potential fixes would be greatly appreciated!

markmester commented 4 years ago

An update to anyone having this issue --

I've confirmed if you apply the changes is the following commit, the rs export command will work as expected.

pytorch/pytorch@11845cf

The file is located /opt/venv/lib/python3.6/site-packages/torch/onnx/symbolic.py in the Dockerfile.cpu container.

daniel-j-h commented 4 years ago

Thanks for flagging. By now we are a bit behind with pytorch & torchvision.

Upgrading them is tracked in https://github.com/mapbox/robosat/issues/182.

aleksandrmelnyk commented 4 years ago

hi guys,

any quick solutions to it. Or need to w8 for the update?

thanks.

daniel-j-h commented 4 years ago

Happy to review and accept pull requests for https://github.com/mapbox/robosat/issues/182 - I don't have the time or resources anymore to run robosat out on my own.