我是靠谱客的博主 害怕纸飞机,最近开发中收集的这篇文章主要介绍转换onnx_PyTorch 到 ONNX 到 Tensorflow 到 TFLite的坑,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

.view()

在 Pytorch 中,经常会对某个具体的 Tensor 做变换的处理。但在 PyTorch 转换到 ONNX 的过程中,例如

fea = fea.view(1, -1, 1, 1)

ONNX 会错误将 view 的纬度扩张变成 Reshape 节点,如下图所示

db00e9d74ed92af125b89c71cbe1da2a.png

但是在 Reshape 节点转换到 Tensorflow 的时候,Reshape 节点就变成了 Where 节点和若干节点的组合以防止出现纬度扩张的时候的 Bug,如下图所示

a2825dee2f9f4dc528a43734029faa40.png

虽然这样子处理貌似稳妥,但是在后续 TF 模型转换到 TFLite 的时候,TFLite 是不支持 Where 节点的。在翻阅 PyTorch Discuss 和 Stackoverflow 的众多讨论后发现大部分人也都是在这里弃坑。

为了避免这个自动转换的问题,这里正确的处理方式为

fea = fea.unsqueeze(-1).unsqueeze(-1)

在修改代码后,我们得到的节点再也不是 Reshape 而是两个 Sequeeze,如下图所示

4fe0db2c404286f38c4be035c1e108b7.png

对应的节点在转换到 Tensorflow的时候,也自动被正确转换成 TFLite 能处理的节点,如下图所示

c7153aa33adabec6250c837c2838d965.png

最后

以上就是害怕纸飞机为你收集整理的转换onnx_PyTorch 到 ONNX 到 Tensorflow 到 TFLite的坑的全部内容,希望文章能够帮你解决转换onnx_PyTorch 到 ONNX 到 Tensorflow 到 TFLite的坑所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部