PaddleGAN
PaddleGAN copied to clipboard
fom转onnx遇到问题
您好,在将fom动转静保存为pdmodel,pdiparams之后,我利用paddle2onnx,用于将模型转换成onnx格式,但在转换时候遇到一些op无法支持的问题:
There's 9 ops are not supported yet
=========== grid_sampler ===========
=========== logical_not ===========
=========== select_input ===========
=========== sync_batch_norm ===========
=========== logical_or ===========
=========== conditional_block ===========
=========== reduce_any ===========
=========== inverse ===========
=========== not_equal ===========
在paddle2onnx的github上提了issue,那边的工程师给出的答复为:
1. Sync_batch_norm 这个属于训练时才会有的Operator,导出来的inference模型不应该有这个OP
2. Select_input/conditional_block这些属于控制流相关的OP,是否一定有必要存在呢,因为目前Paddle2ONNX不支持控制流转换
对于如上2个问题,如果方便的话,请给PaddleGan的Github提个issue反馈此问题~
想问一下针对这些op无法支持的问题,我应该如何解决?谢谢您~
定位到了控制流相关op的问题,在occlusion_aware.py中:
注释以后
重新动转静,得到pdmodel pdiparams以后,再paddle2onnx:
这三个op有办法可以解决吗?
第一个op,在这里https://github.com/PaddlePaddle/PaddleGAN/blob/develop/ppgan/modules/first_order.py#L25。统一改成使用nn.BatchNorm就好。 剩下的两个op需要paddle2onnx的同学支持下
第一个op,在这里https://github.com/PaddlePaddle/PaddleGAN/blob/develop/ppgan/modules/first_order.py#L25。统一改成使用nn.BatchNorm就好。 剩下的两个op需要paddle2onnx的同学支持下
我也注意到了first_order.py中的这里:
但我有一个顾虑从,sync_batch_norm改成batchnorm之后,训练好的模型不需要变动吗,还是说需要重新训练模型呢?
第一个op,在这里https://github.com/PaddlePaddle/PaddleGAN/blob/develop/ppgan/modules/first_order.py#L25。统一改成使用nn.BatchNorm就好。 剩下的两个op需要paddle2onnx的同学支持下
我也注意到了first_order.py中的这里:
但我有一个顾虑从,sync_batch_norm改成batchnorm之后,训练好的模型不需要变动吗,还是说需要重新训练模型呢?
不需要变动的,可以直接加载已经训练好的参数。
看了一下fom的原始pytorch版本代码,训练用的是sync_batch_norm,测试用的是batch_norm, 确实是不用变动,fom的paddle版本这部分实现的工程师可能需要稍微加个类似的判断~
问题过于久远,如果有图像和视频生成的需求,可以使用新的跨模态工具: https://github.com/PaddlePaddle/PaddleMIX/tree/develop