我正在将效率网从onnx转换为tensorflow,以便进一步转换为tflite。从onnx到tensorflow的转换产生了奇怪的结果
Onnx有一个conv2d算子

在转换成tensorflow和以后的tflite模型之后,我得到了这一堆凸起(它们都不能在图片中显示,总共有32个,作为onnx中的核数)。

我怀疑问题在于onnx-tf转换。看起来,conv2d输出被分割成32个单独的输出,然后在单独的conv2d操作符上单独处理,然后连接在一起。
在他们的github上有两个相关的问题。
首先,对深度对流层有一个修正,但在我的情况下不能应用它
https://github.com/onnx/onnx-tensorflow/issues/473
https://github.com/onnx/onnx-tensorflow/issues/754
从https://github.com/onnx/onnx-tensorflow/blob/master/onnx_tf/handlers/backend/conv_mixin.py的来源来看,它们确实会拆分输出,产生单独的卷积,然后将它们串联起来。
能避免这种分裂成多个卷积吗?
发布于 2021-03-18 09:53:46
经过进一步的挖掘,我发现了以下几点
要在onnx-tf v1.7.0中修复这个问题,您应该将一个补丁应用到在这里发布的onnx-tf源代码中,https://github.com/onnx/onnx-tensorflow/issues/473#issuecomment-533522917
在当前的主分支中,有人试图通过检测深度凸起来修复这个问题,但它目前包含一个bug。要修复主分支中的错误,可以应用我在这里发布的修复,https://github.com/onnx/onnx-tensorflow/issues/754#issuecomment-801775203,我使用了主分支和上面的修复,生成了一个具有深度conv的小图
我还用上面的修复创建了一个叉子,所以您可以这样做
pip install git+https://github.com/Vozf/onnx-tensorflow应用它而不是自己修补

似乎应该在下一个主要版本中解决这个问题(可能是1.8.0)。
另外,考虑使用https://github.com/nerox8664/onnx2keras,因为它支持深度卷积,而且支持完全nhwc转换,这允许删除所有转置操作。
https://stackoverflow.com/questions/66675299
复制相似问题