Search code examples
pythontensorflow2.0onnx

converting onnx model to tensorflow fails


I am trying to convert detr model to tensor flow using onnx. I converted the model using torch.onnx.export with opset_version=12.(which produces a detr.onnx file)

Then I tried to convert the onnx file to tensorflow model using this example. I added onnx.check_model line to make sure model is loaded correctly.

import math
from PIL import Image
import requests
import matplotlib.pyplot as plt
import torch
from torch import nn
from torchvision.models import resnet50
import onnx
from onnx_tf.backend import prepare
import torchvision.transforms as T

torch.set_grad_enabled(False)
model = torch.hub.load('facebookresearch/detr', 'detr_resnet50', pretrained=True)

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
im = Image.open(requests.get(url, stream=True).raw)
transform = T.Compose([
    T.Resize(800),
    T.ToTensor(),
    T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
img = transform(im).unsqueeze(0)

torch.onnx.export(model, img, 'detr.onnx', opset_version = 12)
    
onnx_model = onnx.load('./detr.onnx')
    
result = onnx.checker.check_model(onnx_model)
    
tf_rep = prepare(onnx_model)
tf_rep.export_graph('./model.pb')

This code raises an exception when it reaches tf_rep.export_graph('./model.pb') line.
onnx version = 1.13.0 , torch version = 1.13.0+cu117 , onnx_tf = 1.10.0

message of exception :

KeyError                                  Traceback (most recent call last)
Cell In[19], line 26
     23 result = onnx.checker.check_model(onnx_model)
     25 tf_rep = prepare(onnx_model)
---> 26 tf_rep.export_graph('./model.pb')

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\onnx_tf\backend_rep.py:143, in TensorflowRep.export_graph(self, path)
    129 """Export backend representation to a Tensorflow proto file.
    130 
    131 This function obtains the graph proto corresponding to the ONNX
   (...)
    137 :returns: none.
    138 """
    139 self.tf_module.is_export = True
    140 tf.saved_model.save(
    141     self.tf_module,
    142     path,
--> 143     signatures=self.tf_module.__call__.get_concrete_function(
    144         **self.signatures))
    145 self.tf_module.is_export = False

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\eager\def_function.py:1239, in Function.get_concrete_function(self, *args, **kwargs)
   1237 def get_concrete_function(self, *args, **kwargs):
   1238   # Implements GenericFunction.get_concrete_function.
-> 1239   concrete = self._get_concrete_function_garbage_collected(*args, **kwargs)
   1240   concrete._garbage_collector.release()  # pylint: disable=protected-access
   1241   return concrete

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\eager\def_function.py:1219, in Function._get_concrete_function_garbage_collected(self, *args, **kwargs)
   1217   if self._stateful_fn is None:
   1218     initializers = []
-> 1219     self._initialize(args, kwargs, add_initializers_to=initializers)
   1220     self._initialize_uninitialized_variables(initializers)
   1222 if self._created_variables:
   1223   # In this case we have created variables on the first call, so we run the
   1224   # defunned version which is guaranteed to never create variables.

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\eager\def_function.py:785, in Function._initialize(self, args, kwds, add_initializers_to)
    782 self._lifted_initializer_graph = lifted_initializer_graph
    783 self._graph_deleter = FunctionDeleter(self._lifted_initializer_graph)
    784 self._concrete_stateful_fn = (
--> 785     self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
    786         *args, **kwds))
    788 def invalid_creator_scope(*unused_args, **unused_kwds):
    789   """Disables variable creation."""

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\eager\function.py:2523, in Function._get_concrete_function_internal_garbage_collected(self, *args, **kwargs)
   2521   args, kwargs = None, None
   2522 with self._lock:
-> 2523   graph_function, _ = self._maybe_define_function(args, kwargs)
   2524 return graph_function

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\eager\function.py:2760, in Function._maybe_define_function(self, args, kwargs)
   2758   # Only get placeholders for arguments, not captures
   2759   args, kwargs = placeholder_dict["args"]
-> 2760 graph_function = self._create_graph_function(args, kwargs)
   2762 graph_capture_container = graph_function.graph._capture_func_lib  # pylint: disable=protected-access
   2763 # Maintain the list of all captures

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\eager\function.py:2670, in Function._create_graph_function(self, args, kwargs)
   2665 missing_arg_names = [
   2666     "%s_%d" % (arg, i) for i, arg in enumerate(missing_arg_names)
   2667 ]
   2668 arg_names = base_arg_names + missing_arg_names
   2669 graph_function = ConcreteFunction(
-> 2670     func_graph_module.func_graph_from_py_func(
   2671         self._name,
   2672         self._python_function,
   2673         args,
   2674         kwargs,
   2675         self.input_signature,
   2676         autograph=self._autograph,
   2677         autograph_options=self._autograph_options,
   2678         arg_names=arg_names,
   2679         capture_by_value=self._capture_by_value),
   2680     self._function_attributes,
   2681     spec=self.function_spec,
   2682     # Tell the ConcreteFunction to clean up its graph once it goes out of
   2683     # scope. This is not the default behavior since it gets used in some
   2684     # places (like Keras) where the FuncGraph lives longer than the
   2685     # ConcreteFunction.
   2686     shared_func_graph=False)
   2687 return graph_function

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\framework\func_graph.py:1247, in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, acd_record_initial_resource_uses)
   1244 else:
   1245   _, original_func = tf_decorator.unwrap(python_func)
-> 1247 func_outputs = python_func(*func_args, **func_kwargs)
   1249 # invariant: `func_outputs` contains only Tensors, CompositeTensors,
   1250 # TensorArrays and `None`s.
   1251 func_outputs = nest.map_structure(
   1252     convert, func_outputs, expand_composites=True)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\eager\def_function.py:677, in Function._defun_with_scope.<locals>.wrapped_fn(*args, **kwds)
    673 with default_graph._variable_creator_scope(scope, priority=50):  # pylint: disable=protected-access
    674   # __wrapped__ allows AutoGraph to swap in a converted function. We give
    675   # the function a weak reference to itself to avoid a reference cycle.
    676   with OptionalXlaContext(compile_with_xla):
--> 677     out = weak_wrapped_fn().__wrapped__(*args, **kwds)
    678   return out

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\eager\function.py:3317, in class_method_to_instance_method.<locals>.bound_method_wrapper(*args, **kwargs)
   3312   return wrapped_fn(weak_instance(), *args, **kwargs)
   3314 # If __wrapped__ was replaced, then it is always an unbound function.
   3315 # However, the replacer is still responsible for attaching self properly.
   3316 # TODO(mdan): Is it possible to do it here instead?
-> 3317 return wrapped_fn(*args, **kwargs)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\framework\func_graph.py:1233, in func_graph_from_py_func.<locals>.autograph_handler(*args, **kwargs)
   1231 except Exception as e:  # pylint:disable=broad-except
   1232   if hasattr(e, "ag_error_metadata"):
-> 1233     raise e.ag_error_metadata.to_exception(e)
   1234   else:
   1235     raise

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\framework\func_graph.py:1222, in func_graph_from_py_func.<locals>.autograph_handler(*args, **kwargs)
   1220 # TODO(mdan): Push this block higher in tf.function's call stack.
   1221 try:
-> 1222   return autograph.converted_call(
   1223       original_func,
   1224       args,
   1225       kwargs,
   1226       options=autograph.ConversionOptions(
   1227           recursive=True,
   1228           optional_features=autograph_options,
   1229           user_requested=True,
   1230       ))
   1231 except Exception as e:  # pylint:disable=broad-except
   1232   if hasattr(e, "ag_error_metadata"):

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\impl\api.py:439, in converted_call(f, args, kwargs, caller_fn_scope, options)
    437 try:
    438   if kwargs is not None:
--> 439     result = converted_f(*effective_args, **kwargs)
    440   else:
    441     result = converted_f(*effective_args)

File ~\AppData\Local\Temp\__autograph_generated_fileq0h7j9t_.py:30, in outer_factory.<locals>.inner_factory.<locals>.tf____call__(self, **kwargs)
     28 node = ag__.Undefined('node')
     29 onnx_node = ag__.Undefined('onnx_node')
---> 30 ag__.for_stmt(ag__.ld(self).graph_def.node, None, loop_body, get_state, set_state, (), {'iterate_names': 'node'})
     31 outputs = ag__.converted_call(ag__.ld(dict), (), None, fscope)
     33 def get_state_4():

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:463, in for_stmt(iter_, extra_test, body, get_state, set_state, symbol_names, opts)
    459   _tf_distributed_iterable_for_stmt(
    460       iter_, extra_test, body, get_state, set_state, symbol_names, opts)
    462 else:
--> 463   _py_for_stmt(iter_, extra_test, body, None, None)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:512, in _py_for_stmt(***failed resolving arguments***)
    510 else:
    511   for target in iter_:
--> 512     body(target)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:478, in _py_for_stmt.<locals>.protected_body(protected_iter)
    477 def protected_body(protected_iter):
--> 478   original_body(protected_iter)
    479   after_iteration()
    480   before_iteration()

File ~\AppData\Local\Temp\__autograph_generated_fileq0h7j9t_.py:23, in outer_factory.<locals>.inner_factory.<locals>.tf____call__.<locals>.loop_body(itr)
     21 node = itr
     22 onnx_node = ag__.converted_call(ag__.ld(OnnxNode), (ag__.ld(node),), None, fscope)
---> 23 output_ops = ag__.converted_call(ag__.ld(self).backend._onnx_node_to_tensorflow_op, (ag__.ld(onnx_node), ag__.ld(tensor_dict), ag__.ld(self).handlers), dict(opset=ag__.ld(self).opset, strict=ag__.ld(self).strict), fscope)
     24 curr_node_output_map = ag__.converted_call(ag__.ld(dict), (ag__.converted_call(ag__.ld(zip), (ag__.ld(onnx_node).outputs, ag__.ld(output_ops)), None, fscope),), None, fscope)
     25 ag__.converted_call(ag__.ld(tensor_dict).update, (ag__.ld(curr_node_output_map),), None, fscope)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\impl\api.py:439, in converted_call(f, args, kwargs, caller_fn_scope, options)
    437 try:
    438   if kwargs is not None:
--> 439     result = converted_f(*effective_args, **kwargs)
    440   else:
    441     result = converted_f(*effective_args)

File ~\AppData\Local\Temp\__autograph_generated_filetsq4l59p.py:62, in outer_factory.<locals>.inner_factory.<locals>.tf___onnx_node_to_tensorflow_op(cls, node, tensor_dict, handlers, opset, strict)
     60     pass
     61 handler = ag__.Undefined('handler')
---> 62 ag__.if_stmt(ag__.ld(handlers), if_body_1, else_body_1, get_state_1, set_state_1, ('do_return', 'retval_'), 2)
     64 def get_state_2():
     65     return ()

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:1363, in if_stmt(cond, body, orelse, get_state, set_state, symbol_names, nouts)
   1361   _tf_if_stmt(cond, body, orelse, get_state, set_state, symbol_names, nouts)
   1362 else:
-> 1363   _py_if_stmt(cond, body, orelse)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:1416, in _py_if_stmt(cond, body, orelse)
   1414 def _py_if_stmt(cond, body, orelse):
   1415   """Overload of if_stmt that executes a Python if statement."""
-> 1416   return body() if cond else orelse()

File ~\AppData\Local\Temp\__autograph_generated_filetsq4l59p.py:56, in outer_factory.<locals>.inner_factory.<locals>.tf___onnx_node_to_tensorflow_op.<locals>.if_body_1()
     54     nonlocal retval_, do_return
     55     pass
---> 56 ag__.if_stmt(ag__.ld(handler), if_body, else_body, get_state, set_state, ('do_return', 'retval_'), 2)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:1363, in if_stmt(cond, body, orelse, get_state, set_state, symbol_names, nouts)
   1361   _tf_if_stmt(cond, body, orelse, get_state, set_state, symbol_names, nouts)
   1362 else:
-> 1363   _py_if_stmt(cond, body, orelse)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:1416, in _py_if_stmt(cond, body, orelse)
   1414 def _py_if_stmt(cond, body, orelse):
   1415   """Overload of if_stmt that executes a Python if statement."""
-> 1416   return body() if cond else orelse()

File ~\AppData\Local\Temp\__autograph_generated_filetsq4l59p.py:48, in outer_factory.<locals>.inner_factory.<locals>.tf___onnx_node_to_tensorflow_op.<locals>.if_body_1.<locals>.if_body()
     46 try:
     47     do_return = True
---> 48     retval_ = ag__.converted_call(ag__.ld(handler).handle, (ag__.ld(node),), dict(tensor_dict=ag__.ld(tensor_dict), strict=ag__.ld(strict)), fscope)
     49 except:
     50     do_return = False

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\impl\api.py:439, in converted_call(f, args, kwargs, caller_fn_scope, options)
    437 try:
    438   if kwargs is not None:
--> 439     result = converted_f(*effective_args, **kwargs)
    440   else:
    441     result = converted_f(*effective_args)

File ~\AppData\Local\Temp\__autograph_generated_filec7_esoft.py:41, in outer_factory.<locals>.inner_factory.<locals>.tf__handle(cls, node, **kwargs)
     39     nonlocal retval_, do_return
     40     raise ag__.converted_call(ag__.ld(BackendIsNotSupposedToImplementIt), (ag__.converted_call('{} version {} is not implemented.'.format, (ag__.ld(node).op_type, ag__.ld(cls).SINCE_VERSION), None, fscope),), None, fscope)
---> 41 ag__.if_stmt(ag__.ld(ver_handle), if_body, else_body, get_state, set_state, ('do_return', 'retval_'), 2)
     42 return fscope.ret(retval_, do_return)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:1363, in if_stmt(cond, body, orelse, get_state, set_state, symbol_names, nouts)
   1361   _tf_if_stmt(cond, body, orelse, get_state, set_state, symbol_names, nouts)
   1362 else:
-> 1363   _py_if_stmt(cond, body, orelse)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:1416, in _py_if_stmt(cond, body, orelse)
   1414 def _py_if_stmt(cond, body, orelse):
   1415   """Overload of if_stmt that executes a Python if statement."""
-> 1416   return body() if cond else orelse()

File ~\AppData\Local\Temp\__autograph_generated_filec7_esoft.py:33, in outer_factory.<locals>.inner_factory.<locals>.tf__handle.<locals>.if_body()
     31 try:
     32     do_return = True
---> 33     retval_ = ag__.converted_call(ag__.ld(ver_handle), (ag__.ld(node),), dict(**ag__.ld(kwargs)), fscope)
     34 except:
     35     do_return = False

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\impl\api.py:439, in converted_call(f, args, kwargs, caller_fn_scope, options)
    437 try:
    438   if kwargs is not None:
--> 439     result = converted_f(*effective_args, **kwargs)
    440   else:
    441     result = converted_f(*effective_args)

File ~\AppData\Local\Temp\__autograph_generated_filevddqx9qt.py:12, in outer_factory.<locals>.inner_factory.<locals>.tf__version(cls, node, **kwargs)
     10 try:
     11     do_return = True
---> 12     retval_ = ag__.converted_call(ag__.ld(cls)._common, (ag__.ld(node),), dict(**ag__.ld(kwargs)), fscope)
     13 except:
     14     do_return = False

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\impl\api.py:439, in converted_call(f, args, kwargs, caller_fn_scope, options)
    437 try:
    438   if kwargs is not None:
--> 439     result = converted_f(*effective_args, **kwargs)
    440   else:
    441     result = converted_f(*effective_args)

File ~\AppData\Local\Temp\__autograph_generated_filedezd6jrz.py:122, in outer_factory.<locals>.inner_factory.<locals>.tf___common(cls, node, **kwargs)
    120 paddings = ag__.Undefined('paddings')
    121 constant_values = ag__.Undefined('constant_values')
--> 122 ag__.if_stmt(ag__.ld(cls).SINCE_VERSION < 11, if_body_1, else_body_1, get_state_1, set_state_1, ('constant_values', 'paddings'), 2)
    123 cond = ag__.converted_call(ag__.ld(tf).cond, (ag__.converted_call(ag__.ld(check_positive), (ag__.ld(paddings),), None, fscope), ag__.autograph_artifact(lambda : ag__.converted_call(ag__.ld(process_pos_pads), (ag__.ld(x), ag__.ld(paddings), ag__.ld(constant_values)), None, fscope)), ag__.autograph_artifact(lambda : ag__.converted_call(ag__.ld(process_neg_pads), (ag__.ld(x), ag__.ld(paddings), ag__.ld(constant_values)), None, fscope))), None, fscope)
    124 try:

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:1363, in if_stmt(cond, body, orelse, get_state, set_state, symbol_names, nouts)
   1361   _tf_if_stmt(cond, body, orelse, get_state, set_state, symbol_names, nouts)
   1362 else:
-> 1363   _py_if_stmt(cond, body, orelse)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\control_flow.py:1416, in _py_if_stmt(cond, body, orelse)
   1414 def _py_if_stmt(cond, body, orelse):
   1415   """Overload of if_stmt that executes a Python if statement."""
-> 1416   return body() if cond else orelse()

File ~\AppData\Local\Temp\__autograph_generated_filedezd6jrz.py:119, in outer_factory.<locals>.inner_factory.<locals>.tf___common.<locals>.else_body_1()
    117 nonlocal paddings, constant_values
    118 paddings = ag__.ld(tensor_dict)[ag__.ld(node).inputs[1]]
--> 119 constant_values = ag__.if_exp(ag__.converted_call(ag__.ld(len), (ag__.ld(node).inputs,), None, fscope) == 3, lambda : ag__.ld(tensor_dict)[ag__.ld(node).inputs[2]], lambda : 0, 'ag__.converted_call(len, (node.inputs,), None, fscope) == 3')

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\conditional_expressions.py:27, in if_exp(cond, if_true, if_false, expr_repr)
     25   return _tf_if_exp(cond, if_true, if_false, expr_repr)
     26 else:
---> 27   return _py_if_exp(cond, if_true, if_false)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\autograph\operators\conditional_expressions.py:52, in _py_if_exp(cond, if_true, if_false)
     51 def _py_if_exp(cond, if_true, if_false):
---> 52   return if_true() if cond else if_false()

File ~\AppData\Local\Temp\__autograph_generated_filedezd6jrz.py:119, in outer_factory.<locals>.inner_factory.<locals>.tf___common.<locals>.else_body_1.<locals>.<lambda>()
    117 nonlocal paddings, constant_values
    118 paddings = ag__.ld(tensor_dict)[ag__.ld(node).inputs[1]]
--> 119 constant_values = ag__.if_exp(ag__.converted_call(ag__.ld(len), (ag__.ld(node).inputs,), None, fscope) == 3, lambda : ag__.ld(tensor_dict)[ag__.ld(node).inputs[2]], lambda : 0, 'ag__.converted_call(len, (node.inputs,), None, fscope) == 3')

KeyError: in user code:

    File "C:\Users\alihe\AppData\Local\Programs\Python\Python39\lib\site-packages\onnx_tf\backend_tf_module.py", line 99, in __call__  *
        output_ops = self.backend._onnx_node_to_tensorflow_op(onnx_node,
    File "C:\Users\alihe\AppData\Local\Programs\Python\Python39\lib\site-packages\onnx_tf\backend.py", line 347, in _onnx_node_to_tensorflow_op  *
        return handler.handle(node, tensor_dict=tensor_dict, strict=strict)
    File "C:\Users\alihe\AppData\Local\Programs\Python\Python39\lib\site-packages\onnx_tf\handlers\handler.py", line 59, in handle  *
        return ver_handle(node, **kwargs)
    File "C:\Users\alihe\AppData\Local\Programs\Python\Python39\lib\site-packages\onnx_tf\handlers\backend\pad.py", line 91, in version_11  *
        return cls._common(node, **kwargs)
    File "C:\Users\alihe\AppData\Local\Programs\Python\Python39\lib\site-packages\onnx_tf\handlers\backend\pad.py", line 73, in _common  *
        constant_values = tensor_dict[node.inputs[2]] if len(

    KeyError: ''

Solution

  • The problem that you are facing is due to the use of dynamic padding instead of static pad shape at source of the model. This is exposed when you lower the onnx opset version during export.

    import warnings
    warnings.filterwarnings("ignore")
    
    #import onnxruntime
    import math
    from PIL import Image
    import requests
    import matplotlib.pyplot as plt
    import torch
    from torch import nn
    from torchvision.models import resnet50
    import torchvision.transforms as T
    import onnx
    from onnx_tf.backend import prepare
    #from onnxsim import simplify
    
    torch.set_grad_enabled(False)
    model = torch.hub.load('facebookresearch/detr', 'detr_resnet50', pretrained=True)
    
    url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
    im = Image.open(requests.get(url, stream=True).raw)
    transform = T.Compose([
        T.Resize(800),
        T.ToTensor(),
        T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
    img = transform(im).unsqueeze(0)
    
    model.eval()
    torch.onnx.export(model, img, 'detr.onnx', opset_version = 10)
        
    onnx_model = onnx.load('./detr.onnx')
    
    #onnx_model, _ = simplify(model)
        
    result = onnx.checker.check_model(onnx_model)
        
    tf_rep = prepare(onnx_model)
    tf_rep.export_graph('./model.pb')
    

    Which throws the following output:

    SymbolicValueError                        Traceback (most recent call last)
    c:\Anaconda3\envs\workenv\lib\site-packages\torch\onnx\symbolic_opset9.py in _convert_padding_node(input)
       1821         try:
    -> 1822             padding = [
       1823                 symbolic_helper._get_const(v, "i", "padding") for v in input_list
    
    c:\Anaconda3\envs\workenv\lib\site-packages\torch\onnx\symbolic_opset9.py in <listcomp>(.0)
       1822             padding = [
    -> 1823                 symbolic_helper._get_const(v, "i", "padding") for v in input_list
       1824             ]
    
    c:\Anaconda3\envs\workenv\lib\site-packages\torch\onnx\symbolic_helper.py in _get_const(value, desc, arg_name)
        169     if not _is_constant(value):
    --> 170         raise errors.SymbolicValueError(
        171             f"ONNX symbolic expected a constant value of the '{arg_name}' argument, "
    
    SymbolicValueError: ONNX symbolic expected a constant value of the 'padding' argument, got '509 defined in (%509 : Long(requires_grad=0, device=cpu) = onnx::Sub(%max_size_i, %498), scope: models.detr.DETR:: # C:\Users\Anurag/.cache\torch\hub\facebookresearch_detr_main\util\misc.py:349:0
    )'  [Caused by the value '509 defined in (%509 : Long(requires_grad=0, device=cpu) = onnx::Sub(%max_size_i, %498), scope: models.detr.DETR:: # C:\Users\Anurag/.cache\torch\hub\facebookresearch_detr_main\util\misc.py:349:0
    )' (type 'Tensor') in the TorchScript graph. The containing node has kind 'onnx::Sub'.] 
        (node defined in C:\Users\Anurag/.cache\torch\hub\facebookresearch_detr_main\util\misc.py(349): <listcomp>
    C:\Users\Anurag/.cache\torch\hub\facebookresearch_detr_main\util\misc.py(349): _onnx_nested_tensor_from_tensor_list
    C:\Users\Anurag/.cache\torch\hub\facebookresearch_detr_main\util\misc.py(313): nested_tensor_from_tensor_list
    C:\Users\Anurag/.cache\torch\hub\facebookresearch_detr_main\models\detr.py(60): forward
    c:\Anaconda3\envs\workenv\lib\site-packages\torch\nn\modules\module.py(1182): _slow_forward
    ...
            #5: 507 defined in (%507 : Long(requires_grad=0, device=cpu) = onnx::Sub(%478, %466), scope: models.detr.DETR:: # C:\Users\Anurag/.cache\torch\hub\facebookresearch_detr_main\util\misc.py:349:0
        )  (type 'Tensor')
        Outputs:
            #0: 510 defined in (%510 : int[] = prim::ListConstruct(%459, %509, %459, %508, %459, %507), scope: models.detr.DETR::
        )  (type 'List[int]')
    

    My suggestion would be to pick up the model from another source.

    For reference have a look at: ONNX symbolic expected a constant value of the padding argument