【问题标题】:Tensorflow Lite: No module named tf.contrib.liteTensorflow Lite:没有名为 tf.contrib.lite 的模块
【发布时间】:2018-05-15 11:50:32
【问题描述】:

我尝试使用以下代码 (tf_lite_converter.py) 转换保存在 .pb 文件中的现有冻结图:

#!/usr/bin/env python
import sys
import tensorflow as tf

from tf.contrib.lite import convert_savedmodel

convert_savedmodel.convert(
    saved_model_dir="/frozen_inference_graph.pb",
    output_tflite="/TF_Lite_Model")

运行代码时

python tf_lite_converter.py 

在我的 anaconda 环境中,它给了我错误:

ImportError: No module named tf.contrib.lite

我的目标是从我的 .pb-graph 中获得一个 tensorflowlite 模型,以便在 Android 应用程序中使用它。我已经尝试通过 bazel 使用 toco 构建 tflite,但可能(或很可能)我做错了什么,或者这不是解决问题的正确方法。

参考来自 Tensorflow-Developers 的视频: https://youtu.be/FAMfy7izB6A?t=11m49s

【问题讨论】:

    标签: android tensorflow tensorflow-lite


    【解决方案1】:

    该视频中的代码可能来自内部开发版本。

    convert_savedmodel 已在 https://github.com/tensorflow/tensorflow/commit/db076ca01f12368c9476fa4db9d87756f22f9670 中重命名为 convert_saved_model

    以下似乎适用于 tensorflow 1.8:

    from  tensorflow.contrib.lite.python import convert_saved_model
    
    convert_saved_model.convert(saved_model_dir="/frozen_inference_graph.pb",output_tflite="/TF_Lite_Model")
    

    以下是从当前master构建的tensorflow(方法和参数已重命名):

    from  tensorflow.contrib.lite.python import convert_saved_model
    
    convert_saved_model.tflite_from_saved_model(saved_model_dir="/frozen_inference_graph.pb",output_file="/TF_Lite_Model")
    

    【讨论】:

    • 现在它给了我“导入错误:无法导入名称 convert_savedmodel”(或 convert_saved_model)。我很困惑'^^
    • 注意是convert_saved_model,不是convert_savedmodel
    • 是的,我尝试过,如括号中所述。看起来是个奇怪的问题。
    • 对不起,我已经用从 master 构建的 tensorflow 进行了测试,他们已经从 1.8 开始重命名了 - 我已经编辑了答案。如果仍有问题,请尝试检查 tensorflow 版本。
    • 嗯,我重新安装了 tensorflow,现在它可以工作了。谢谢你的帮助!也许你也知道为什么 convert 方法给我错误“IOError:SavedModel 文件不存在于:/frozen_inference_graph.pb”。我在正确的目录中并且 pb 文件存在。从一个错误跌跌撞撞到下一个错误... grrr^^。
    【解决方案2】:

    以上方法都不适合我。

    我降级到 Tensorflow 1.7 并使用 toco 将 .pb 模型转换为 .tflite 模型。

    $ pip install --upgrade "tensorflow==1.7.*"
    
    $ toco \
      --input_file=tf_files/retrained_graph.pb \
      --output_file=tf_files/optimized_graph.lite \
      --input_format=TENSORFLOW_GRAPHDEF \
      --output_format=TFLITE \
      --input_shape=1,${IMAGE_SIZE},${IMAGE_SIZE},3 \
      --input_array=input \
      --output_array=final_result \
      --inference_type=FLOAT \
      --input_data_type=FLOAT
    

    参考: https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#2 https://github.com/googlecodelabs/tensorflow-for-poets-2/issues/52 https://medium.com/@rdeep/tensorflow-lite-tutorial-easy-implementation-in-android-145443ec3775

    【讨论】:

    • 我试过了,但它给了我以下错误:转换不支持的操作:TensorArraySizeV3
    • 有人说TensorflowLite不支持物体检测,对吗? github.com/tensorflow/tensorflow/issues/19078
    • 迟到的评论,但不,这是不正确的。我最终设法将它用于对象检测。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2020-02-23
    • 2017-07-03
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多