PaddlePaddle / X2Paddle

Deep learning model converter for PaddlePaddle. (『飞桨』深度学习模型转换工具)
http://www.paddlepaddle.org/
Apache License 2.0
731 stars 164 forks source link

mode should be one of constant, reflect, replicate, circular, but got edge #685

Open xdg2016 opened 3 years ago

xdg2016 commented 3 years ago

模型来源: pytorch 模型说明: GAN生成模型 模型文件: 链接:链接:https://pan.baidu.com/s/1Lc6PupwZ1fXtu8w06LHpxg 提取码:xiln pytorch转onnx可以,但是onnx转到paddle出错,转换过程出错提示如下:

paddle.__version__ = 2.0.2
Now translating model from onnx to paddle.
model ir_version: 6, op version: 9
shape inferencing ...
shape inferenced.
Now, onnx2paddle support convert onnx model opset_verison [9],opset_verison of your onnx model is 9, automatically treated as op_set: 9.
Total nodes: 114
Nodes converting ...
Converting node 195 ...     
Nodes converted.
Exporting inference model from python code ('E:\workspace\AI\GAN\X2Paddle\pd_model\x2paddle_code.py')... 

pd_model\x2paddle_code.py:226: DeprecationWarning: invalid escape sequence \w
  params = paddle.load('E:\workspace\AI\GAN\X2Paddle\pd_model\model.pdparams')
Backend TkAgg is interactive backend. Turning interactive mode on.
W1018 14:55:53.810535 43124 device_context.cc:362] Please NOTE: device: 0, GPU Compute Capability: 8.6, Driver API Version: 11.4, Runtime API Version: 11.0
W1018 14:55:53.823501 43124 device_context.cc:372] device: 0, cuDNN Version: 8.0.
E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\layers\utils.py:77: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
  return (isinstance(seq, collections.Sequence) and
Fail to generate inference model! Problem happend while export inference model from python code 'E:\workspace\AI\GAN\X2Paddle\pd_model\x2paddle_code.py';

===================Error Information===============
Traceback (most recent call last):
  File "E:\software\Annaconda3\envs\py37\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "E:\software\Annaconda3\envs\py37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\Users\hp\.vscode\extensions\ms-python.python-2021.10.1336267007\pythonFiles\lib\python\debugpy\__main__.py", line 45, in <module>
    cli.main()
  File "c:\Users\hp\.vscode\extensions\ms-python.python-2021.10.1336267007\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 444, in main
    run()
  File "c:\Users\hp\.vscode\extensions\ms-python.python-2021.10.1336267007\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 285, in run_file
    runpy.run_path(target_as_str, run_name=compat.force_str("__main__"))
  File "E:\software\Annaconda3\envs\py37\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "E:\software\Annaconda3\envs\py37\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "E:\software\Annaconda3\envs\py37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "e:\software\Annaconda3\lib\site-packages\x2paddle\convert.py", line 347, in <module>
    main()
  File "e:\software\Annaconda3\lib\site-packages\x2paddle\convert.py", line 335, in main
    lite_model_type=args.lite_model_type)
  File "e:\software\Annaconda3\lib\site-packages\x2paddle\convert.py", line 214, in onnx2paddle
    mapper.paddle_graph.gen_model(save_dir)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\x2paddle-1.3.4-py3.7.egg\x2paddle\core\program.py", line 280, in gen_model
    raise e
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\x2paddle-1.3.4-py3.7.egg\x2paddle\core\program.py", line 274, in gen_model
    self.dygraph2static(save_dir, input_shapes, input_types)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\x2paddle-1.3.4-py3.7.egg\x2paddle\core\program.py", line 554, in dygraph2static
    osp.join(save_dir, "inference_model/model"))
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\wrapped_decorator.py", line 25, in __impl__
    return wrapped_func(*args, **kwargs)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\base.py", line 39, in __impl__
    return func(*args, **kwargs)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\jit.py", line 681, in save
    inner_input_spec)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 488, in concrete_program_specify_input_spec
    *desired_input_spec)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 402, in get_concrete_program
    concrete_program, partial_program_layer = self._program_cache[cache_key]
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 711, in __getitem__
    self._caches[item] = self._build_once(item)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 702, in _build_once
    class_instance=cache_key.class_instance)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\wrapped_decorator.py", line 25, in __impl__
    return wrapped_func(*args, **kwargs)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\base.py", line 39, in __impl__
    return func(*args, **kwargs)
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 658, in from_func_spec
    error_data.raise_new_exception()
  File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\error.py", line 189, in raise_new_exception
    six.exec_("raise new_exception from None")
  File "<string>", line 1, in <module>
AssertionError: In transformed code:

    File "pd_model\x2paddle_code.py", line 106, in forward (* user code *)
        x2paddle_201 = self.pad0(x2paddle_input_1)
    File "E:\software\Annaconda3\envs\py37\lib\site-packages\x2paddle-1.3.4-py3.7.egg\x2paddle\op_mapper\onnx2paddle\onnx_custom_layer\pad_all_dim4_one_input.py", line 29, in __call__ (* user code *)    
        x = paddle.nn.functional.pad(x=x, pad=self.pad1, **self.layer_attrs)
    File "E:\software\Annaconda3\envs\py37\lib\site-packages\paddle\nn\functional\common.py", line 1268, in pad
        "mode should be one of constant, reflect, replicate, circular, but got {}.".format(mode)
    AssertionError: mode should be one of constant, reflect, replicate, circular, but got edge.

问题应该是在pad的地方出错,pytorch原始的实现是: image 生成的onnx为fire-GS.onnx,运行命令: x2paddle --framework=onnx --model=fire-GS.onnx --save_dir=pd_model 生成了一个x2paddle_code.py image 这里生成的网络结构,pad变成了edge,而不是原来的ReplicationPad2d image 我想请教下,这个是onnx不支持Replication模式的pad还是paddle不支持(paddle我看了下,是有这个模式的),所以不清楚问题出在哪里,麻烦帮我解答下,谢谢

yeliang2258 commented 3 years ago

请拉取这个PR进行测试,谢谢 https://github.com/PaddlePaddle/X2Paddle/pull/687