首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pytorch -> [Onnx -> tensorflow] -> tflite生成大量冗余的conv2d操作符

Pytorch -> [Onnx -> tensorflow] -> tflite生成大量冗余的conv2d操作符
EN

Stack Overflow用户
提问于 2021-03-17 14:39:00
回答 1查看 789关注 0票数 0

我正在将效率网从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的来源来看,它们确实会拆分输出,产生单独的卷积,然后将它们串联起来。

能避免这种分裂成多个卷积吗?

EN

Stack Overflow用户

回答已采纳

发布于 2021-03-18 09:53:46

经过进一步的挖掘,我发现了以下几点

  • i凸集是深度的(conv2d是深度的,如果它的群参数>1)
  • 是一种低效的深度计算方法。为了有效地完成这个任务,我们需要使用tf.depthwiseconv

要在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的小图

我还用上面的修复创建了一个叉子,所以您可以这样做

代码语言:javascript
复制
pip install git+https://github.com/Vozf/onnx-tensorflow

应用它而不是自己修补

似乎应该在下一个主要版本中解决这个问题(可能是1.8.0)。

另外,考虑使用https://github.com/nerox8664/onnx2keras,因为它支持深度卷积,而且支持完全nhwc转换,这允许删除所有转置操作。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66675299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档