autonomousvision / unimatch

[TPAMI'23] Unifying Flow, Stereo and Depth Estimation
https://haofeixu.github.io/unimatch/
MIT License
980 stars 102 forks source link

Export to onnx #29

Open petropetropetro opened 1 year ago

petropetropetro commented 1 year ago

Hi, I try to export your model to onnx. Did you try to do something like this? Now I`m stuck with "RuntimeError: Expected a sequence type, but received a non-iterable type in graph output index 0". Is this because flow_preds is a dic, or can it be related to something else?

petropetropetro commented 1 year ago

Added more context torch.onnx.export(model_without_ddp, # model being run args=(right, left, 'self_swin2d_cross_swin1d', [2, 8], [-1, 4], [-1, 1], 3, False, 'stereo', None, None,

  1. / 0.5, 1. / 10, 64, False, False), # model input (or a tuple for multiple inputs) f="super_resolution.onnx", # where to save the model (can be a file or file-like object) verbose=True, export_params=True, # store the trained parameter weights inside the model file opset_version=16, # the ONNX version to export the model to do_constant_folding=True, # whether to execute constant folding for optimization input_names = ['img0', 'img1', 'attn_type', 'attn_splits_list', 'corr_radius_list', 'prop_radius_list', 'num_reg_refine', 'pred_bidir_flow' , 'task', 'intrinsics', 'pose', 'min_depth', 'max_depth', 'num_depth_candidates', 'depth_from_argmax', 'pred_bidir_depth'], # the model's input names output_names = ['flow_preds'])

    RuntimeError Traceback (most recent call last) Cell In[21], line 1 ----> 1 torch.onnx.export(model_without_ddp, # model being run 2 args=(right, left, 'self_swin2d_cross_swin1d', 3 [2, 8], [-1, 4], 4 [-1, 1], 3, 5 False, 'stereo', None, None, 6 1. / 0.5, 1. / 10, 64, 7 False, False), # model input (or a tuple for multiple inputs) 8 f="super_resolution.onnx", # where to save the model (can be a file or file-like object) 9 verbose=True, 10 export_params=True, # store the trained parameter weights inside the model file 11 opset_version=16, # the ONNX version to export the model to 12 do_constant_folding=True, # whether to execute constant folding for optimization 13 input_names = ['img0', 'img1', 'attn_type', 14 'attn_splits_list', 'corr_radius_list', 15 'prop_radius_list', 'num_reg_refine', 16 'pred_bidir_flow' , 'task', 'intrinsics', 'pose', 17 'min_depth', 'max_depth', 'num_depth_candidates', 18 'depth_from_argmax', 'pred_bidir_depth'], # the model's input names 19 output_names = ['flow_preds'])

File c:\ProgramData\Anaconda3\lib\site-packages\torch\onnx\utils.py:506, in export(model, args, f, export_params, verbose, training, input_names, output_names, operator_export_type, opset_version, do_constant_folding, dynamic_axes, keep_initializers_as_inputs, custom_opsets, export_modules_as_functions) 188 @_beartype.beartype 189 def export( 190 model: Union[torch.nn.Module, torch.jit.ScriptModule, torch.jit.ScriptFunction], (...) 206 export_modules_as_functions: Union[bool, Collection[Type[torch.nn.Module]]] = False, 207 ) -> None: 208 r"""Exports a model into ONNX format. 209 210 If model is not a :class:torch.jit.ScriptModule nor a (...) 503 All errors are subclasses of :class:errors.OnnxExporterError. 504 """ --> 506 _export( 507 model, 508 args, 509 f, 510 export_params, 511 verbose, 512 training, 513 input_names, 514 output_names, 515 operator_export_type=operator_export_type, 516 opset_version=opset_version, 517 do_constant_folding=do_constant_folding, 518 dynamic_axes=dynamic_axes, 519 keep_initializers_as_inputs=keep_initializers_as_inputs, 520 custom_opsets=custom_opsets, 521 export_modules_as_functions=export_modules_as_functions, 522 )

File c:\ProgramData\Anaconda3\lib\site-packages\torch\onnx\utils.py:1548, in _export(model, args, f, export_params, verbose, training, input_names, output_names, operator_export_type, export_type, opset_version, do_constant_folding, dynamic_axes, keep_initializers_as_inputs, fixed_batch_size, custom_opsets, add_node_names, onnx_shape_inference, export_modules_as_functions) 1545 dynamic_axes = {} 1546 _validate_dynamic_axes(dynamic_axes, model, input_names, output_names) -> 1548 graph, params_dict, torch_out = _model_to_graph( 1549 model, 1550 args, 1551 verbose, 1552 input_names, 1553 output_names, 1554 operator_export_type, 1555 val_do_constant_folding, 1556 fixed_batch_size=fixed_batch_size, 1557 training=training, 1558 dynamic_axes=dynamic_axes, 1559 ) 1561 # TODO: Don't allocate a in-memory string for the protobuf 1562 defer_weight_export = ( 1563 export_type is not _exporter_states.ExportTypes.PROTOBUF_FILE 1564 )

File c:\ProgramData\Anaconda3\lib\site-packages\torch\onnx\utils.py:1160, in _model_to_graph(model, args, verbose, input_names, output_names, operator_export_type, do_constant_folding, _disable_torch_constant_prop, fixed_batch_size, training, dynamic_axes) 1156 # assign_output_shape pass is not compatible with quantized outputs. 1157 # Quantized outputs are flattened to 3 values in ONNX, while packed as 1158 # single value in PyTorch. 1159 if not any(getattr(out, "is_quantized", False) for out in output_tensors): -> 1160 _C._jit_pass_onnx_assign_output_shape( 1161 graph, 1162 output_tensors, 1163 out_desc, 1164 GLOBALS.onnx_shape_inference, 1165 is_script, 1166 GLOBALS.export_onnx_opset_version, 1167 ) 1169 _set_input_and_output_names(graph, input_names, output_names) 1170 params_dict = _get_named_param_dict(graph, params)

RuntimeError: Expected a sequence type, but received a non-iterable type in graph output index 0

juandavid212 commented 9 months ago

Do you have any updates about this?

petropetropetro commented 9 months ago

@juandavid212 No, I had found the https://github.com/fateshelled/unimatch_onnx, It was okay for me as PoV design