【问题标题】:How to convert tf2 model so it will run on tflite interpreter如何转换 tf2 模型,使其在 tflite 解释器上运行
【发布时间】:2021-01-14 02:07:52
【问题描述】:

背景: 我正在尝试将来自官方 tf zoo 的 tf2 模型转换为 SSD MobileNet V2 FPNLite 320x320(例如)。该模型最终应该在树莓派上运行,所以我希望它在 tflite 解释器上运行(没有完整的 tf)。文档暗示支持 ssd 模型转换。

发生了什么: 该过程在this colab notebook 中有详细说明。它因错误而失败:

ConverterError: <unknown>:0: error: loc(callsite(callsite("Postprocessor/BatchMultiClassNonMaxSuppression/MultiClassNonMaxSuppression/SortByField_1/Size@__inference___call___23519" at "StatefulPartitionedCall@__inference_signature_wrapper_25508") at "StatefulPartitionedCall")): 'tf.Size' op is neither a custom op nor a flex op
<unknown>:0: note: loc("StatefulPartitionedCall"): called from
<unknown>:0: error: failed while converting: 'main': Ops that can be supported by the flex runtime (enabled via setting the -emit-select-tf-ops flag):
    tf.Size {device = ""}

如果我添加标志 tf.lite.OpsSet.SELECT_TF_OPS,它可以工作但不会在 rpi 上运行,因为它没有操作。

这可以吗?有人成功了吗?

【问题讨论】:

    标签: tensorflow raspberry-pi tensorflow2.0 tensorflow-lite


    【解决方案1】:

    由于 TFLite 本身不支持 TF.Size,因此您可以使用 TF Select 模式,该模式回退到 TF 以查找缺失的操作,在转换过程中使用您尝试过的“SELECT_TF_OPS”启用该操作。 当您运行推理时,您将需要使用链接了 Select ops 的解释器。 有关运行推理,请参阅 guide

    【讨论】:

    • 这意味着我必须安装 tf,不是吗?在这种情况下,在 rpi 上,这不是一个很好的选择。
    • 啊,我明白了……哎呀,正在编译……我会检查某处是否有预编译的二进制文件。谢谢
    • 如果你使用python,你可以只安装pip包。如果java有预编译的AAR。检查上面的链接。
    • 不幸的是不在 rpi 上。有一个特定的版本,它没有安装选定的操作
    • 为团队归档一个 github issue
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2019-10-28
    • 2021-01-24
    • 2021-03-28
    相关资源
    最近更新 更多