Closed xiaoyewww closed 1 month ago
@Zheng-Bicheng 具体接入的时候有几个问题需要请教一下:
// 1. 这个变量名称映射paddle的是哪个呢?看上去是ops.yaml和op_compat.yaml吗?
// 2. c++ api上没有bias,这个是def deformable_conv调用C_ops后再加上的,这里怎么处理呢?optional的输入也要全写入吗
// 3. 这个opsetx怎么具体对应起来呢?跟onnx似乎对不上
另外这个仓库pre-commit还在使用吗,昨天配置的时候一直遇到网络的问题
另外这个仓库pre-commit还在使用吗,昨天配置的时候一直遇到网络的问题
这个确实暂时用不了,先不管他,保持一个文件内的代码格式变化不要太大就好了
目前PR存在的问题
- ONNX DeformConv只支持 opset19+,因此需要升级 opset 版本,这个将由 @Zheng-Bicheng 来做支持
- OpsetX()函数的调用过程默认从当前模型的 Opset 版本 向下一级一级往下降。例如当前的Opset版本是16,那么Paddle2ONNX会先看Opset16()这个有没有实现,没有的话就会去调用Opset15(),最低调用到Opset7()
- Bias我看了下是可选的,可以暂时不用管它,传一个默认的参数(猜测过去应该是0),其他的函数有类似的逻辑,我晚上回去截图给你
- 变量名称映射 paddle 我没明白是什么意思
- 这里的opset 版本我没弄清楚是跟onnx什么关系,比如deformconv,onnx只支持19+,我们也只需要定义Opset19吗,但我看conv2d是Opset7,但是onnx上opset1就支持了。
- 变量名称映射,我是指GetAttr这里面的属性获取的第一个参数是怎么来的。
这里的opset 版本我没弄清楚是跟onnx什么关系,比如deformconv,onnx只支持19+,我们也只需要定义Opset19吗,但我看conv2d是Opset7,但是onnx上opset1就支持了。
opset和onnx版本绑定,一个onnx版本对应一个opset,Paddle2ONNX默认从opset7开始支持,目前Paddle2ONNX支持的最高opset是18,因此需要升级
变量名称映射,我是指GetAttr这里面的属性获取的第一个参数是怎么来的。
可以用netron可视化静态图模型获取
@Zheng-Bicheng 那我目前这边测例无法通过就不用改了吗,请麻烦看一下还有哪里需要修改。
目前单测报的是版本不支持的问题:
[Paddle2ONNX] Start to parse PaddlePaddle model...
[Paddle2ONNX] Model file path: deform_conv2d/cliped_model.pdmodel
[Paddle2ONNX] Parameters file path:
[Paddle2ONNX] Start to parsing Paddle model...
[ERROR] Paddle2ONNX now only support opset version in range of [7, 18].
--------------------------------------
C++ Traceback (most recent call last):
--------------------------------------
0 paddle2onnx::Export(char const*, char const*, char**, int*, int, bool, bool, bool, bool, bool, paddle2onnx::CustomOp*, int, char const*, char**, int*, char const*, bool*, bool, char**, int)
----------------------
Error Message Summary:
----------------------
FatalError: `Process abort signal` is detected by the operating system.
[TimeInfo: *** Aborted at 1716473326 (unix time) try "date -d @1716473326" if you are using GNU date ***]
[SignalInfo: *** SIGABRT (@0x7b3da) received by PID 504794 (TID 0x7f2e08d8e4c0) from PID 504794 ***]
[1] 504794 abort (core dumped) python tests/test_deform_conv2d.py
那我目前这边测例无法通过就不用改了吗,请麻烦看一下还有哪里需要修改。
我今天会添加Paddle2ONNX对OP19的支持,到时候你再测试下
在这个 PR 中更新 opset 版本到支持19
/root/miniconda3/envs/paddle_onnx/lib/python3.9/site-packages/paddle/static/io.py:610: UserWarning: no variable in your model, please ensure there are any variables in your model to save
warnings.warn(
[Paddle2ONNX] Start to parse PaddlePaddle model...
[Paddle2ONNX] Model file path: deform_conv2d/cliped_model.pdmodel
[Paddle2ONNX] Parameters file path:
[Paddle2ONNX] Start to parsing Paddle model...
[Paddle2ONNX] Use opset_version = 19 for ONNX export.
[Paddle2ONNX] The exported ONNX model is invalid.
[Paddle2ONNX] Model checker error log: No Op registered for DeformConv with domain_version of 19
==> Context: Bad node spec for node. Name: p2o.DeformConv.0 OpType: DeformConv
[Paddle2ONNX] PaddlePaddle model is exported as ONNX format now.
Traceback (most recent call last):
File "/wuzp/Paddle2ONNX/tests/test_deform_conv2d.py", line 41, in <module>
test_deform_conv2d()
File "/wuzp/Paddle2ONNX/tests/test_deform_conv2d.py", line 37, in test_deform_conv2d
obj.run()
File "/wuzp/Paddle2ONNX/tests/onnxbase.py", line 420, in run
res_fict[str(v)] = self._mk_onnx_res(ver=v)
File "/wuzp/Paddle2ONNX/tests/onnxbase.py", line 300, in _mk_onnx_res
sess = InferenceSession(
File "/root/miniconda3/envs/paddle_onnx/lib/python3.9/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 419, in __init__
self._create_inference_session(providers, provider_options, disabled_optimizers)
File "/root/miniconda3/envs/paddle_onnx/lib/python3.9/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 483, in _create_inference_session
sess.initialize_session(providers, provider_options, disabled_optimizers)
onnxruntime.capi.onnxruntime_pybind11_state.NotImplemented: [ONNXRuntimeError] : 9 : NOT_IMPLEMENTED : Could not find an implementation for DeformConv(19) node with name 'p2o.DeformConv.0'
上面还是报错了,这里有点困惑,其实我上面只输入了三个参数。X W offset,另外的bias和mask其实一开始没填,还是报同样的错。
我参考看了一下conv2d,这里面其实也只有两个输入参数,但是ONNX上是输入参数也是2~3个。
auto node = helper_->MakeNode(
"Conv", {input_info[0].name, kernel_info[0].name}, {output_info[0].name});
Model checker error log: No Op registered for DeformConv with domain_version of 19
这个我看了下好像是第三方库onnx的报错,我再看看原因。
Model checker error log: No Op registered for DeformConv with domain_version of 19
补充修复:
ONNXRuntime暂时没有对DeformConv进行实现,考虑实现后再合入这个PR
或者在这里加入一下你的test的名字吧,也不用注释了
@Zheng-Bicheng @jzhang533 已注释,麻烦review一下,感谢~
Details: add deform conv2d op