PaddlePaddle / PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.
Apache License 2.0
12.74k stars 2.88k forks source link

paddle2onnx导出solov2模型报错,报错原因是不支持三个op #8716

Open EthanZhang-China opened 11 months ago

EthanZhang-China commented 11 months ago

问题确认 Search before asking

Bug组件 Bug Component

Deploy

Bug描述 Describe the Bug

paddle2onnx转换指令是paddle2onnx --model_dir ./solov2_r50_fpn_1x_coco/ --model_filename ./solov2_r50_fpn_1x_coco/model.pdmodel --params_filename ./solov2_r50_fpn_1x_coco/model.pdiparams --save_file solov2.onnx --enable_dev_version False 报错信息如下 opt/conda/lib/python3.7/site-packages/pkg_resources/init.py:121: DeprecationWarning: pkg_resources is deprecated as an API warnings.warn("pkg_resources is deprecated as an API", DeprecationWarning) /opt/conda/lib/python3.7/site-packages/pkg_resources/init.py:2870: DeprecationWarning: Deprecated call to pkg_resources.declare_namespace('google'). Implementing implicit namespace packages (as specified in PEP 420) is preferred to pkg_resources.declare_namespace. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages declare_namespace(pkg) /opt/conda/lib/python3.7/site-packages/pkg_resources/init.py:2870: DeprecationWarning: Deprecated call to pkg_resources.declare_namespace('mpl_toolkits'). Implementing implicit namespace packages (as specified in PEP 420) is preferred to pkg_resources.declare_namespace. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages declare_namespace(pkg) /opt/conda/lib/python3.7/site-packages/pkg_resources/init.py:2870: DeprecationWarning: Deprecated call to pkg_resources.declare_namespace('ruamel'). Implementing implicit namespace packages (as specified in PEP 420) is preferred to pkg_resources.declare_namespace. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages declare_namespace(pkg) Traceback (most recent call last): File "/opt/conda/bin/paddle2onnx", line 8, in sys.exit(main()) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/command.py", line 267, in main auto_update_opset=args.enable_auto_update_opset) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/command.py", line 177, in program2onnx auto_update_opset) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/legacy/command.py", line 210, in program2onnx output_names=output_names) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/convert.py", line 83, in program2onnx operator_export_type, auto_update_opset, **configs) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/legacy/convert.py", line 102, in program2onnx output_names=output_names) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/legacy/convert.py", line 37, in export_onnx auto_update_opset) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/legacy/graph/onnx_graph.py", line 327, in build auto_update_opset=auto_update_opset) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/legacy/graph/onnx_graph.py", line 85, in init self.update_opset_version() File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/legacy/graph/onnx_graph.py", line 203, in update_opset_version node_map, self.opset_version) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/legacy/op_mapper/op_mapper.py", line 142, in get_recommend_opset_version node_map, opset_version, True) File "/opt/conda/lib/python3.7/site-packages/paddle2onnx/legacy/op_mapper/op_mapper.py", line 188, in check_support_status raise NotImplementedError(error_info) NotImplementedError: There's 3 ops are not supported yet =========== tril_triu =========== =========== select_input =========== =========== conditional_block =========== 重点信息截图:

CleanShot 2023-11-13 at 17 09 06@2x

复现环境 Environment

OS: Linux Paddle: 2.2.1 commit: a5cf2e305b744e3ebd2f2210341f88d349d4ec5e

Bug描述确认 Bug description confirmation

是否愿意提交PR? Are you willing to submit a PR?

laishenghui commented 9 months ago

同问,我遇到了一样的问题。 另外,转换我自己训练的mask_rcnn_r50_1x_coco模型的时候,也会出现类似的错误 00000

EthanZhang-China commented 9 months ago

你可以把后处理部分exclude掉,然后就可以转换成onnx了,不过还需要加下手写的基于onnx的后处理即可。 这个问题是流式的op不支持,这块问题问过paddle的人,说这个问题比较难解,还需要时间。 如果模型里有流式的op,那就无法转onnx了,基本就无解了,比如solov2,这块v5,ppyoloe去掉后处理都是ok的

LokeZhou commented 7 months ago

可以先尝试一下上述方案