【问题标题】:Using a image_ocr tensorflow model from Keras Examples on Android在 Android 上使用 Keras 示例中的 image_ocr tensorflow 模型
【发布时间】:2017-05-17 06:52:11
【问题描述】:

我正在尝试通过在 Android 上训练 the image_ocr example in Keras 来了解如何使用 tensorflow 模型。我已经按照本教程创建了一个 tensorflow 模型(即冻结图形以创建一个 .pb 文件)以供应用程序使用。

TFDroid 中的示例非常好,但似乎没有一个适用于我拥有的模型。我现在有几个问题:

  1. 在 Android 上使用自己的模型时需要考虑哪些事项?
  2. 从训练 TensorFlow 模型到在 Android 上使用它的工作流程是怎样的?

【问题讨论】:

    标签: android tensorflow keras


    【解决方案1】:

    我正在为此编写更好的文档,但现在这里是我当前草稿中的摘录,可能会有所帮助:

    在大多数情况下,使用 TensorFlow 训练模型会为您提供一个文件夹,其中包含一个 GraphDef 文件(通常以 .pb 或 .pbtxt 扩展名结尾)和一组检查点文件。移动或嵌入式部署需要的是单个 GraphDef 文件,该文件已被“冻结”,或者将其变量转换为内联常量,以便所有内容都在一个文件中。 要处理转换,您需要 freeze_graph.py 脚本,该脚本保存在 tensorflow/pythons/tools/freeze_graph.py 中。你会像这样运行它:

    bazel build tensorflow/tools:freeze_graph
    bazel-bin/tensorflow/tools/freeze_graph \
    --input_graph=/tmp/model/my_graph.pb \ --input_checkpoint=/tmp/model/model.ckpt-1000 \ --output_graph=/tmp/frozen_graph.pb \
    --input_node_names=input_node \
    --output_node_names=output_node \
    

    input_graph 参数应指向保存模型架构的 GraphDef 文件。您的 GraphDef 可能以文本格式存储在磁盘上,在这种情况下,它可能以“.pbtxt”而不是“.pb”结尾,您应该在命令中添加一个额外的--input_binary=false 标志。

    input_checkpoint 应该是最近保存的检查点。如检查点部分所述,您需要在此处为​​检查点集提供公共前缀,而不是完整的文件名。

    output_graph 定义生成的冻结 GraphDef 将保存在哪里。因为它可能包含大量占用大量文本格式空间的权重值,所以它总是保存为二进制 protobuf。 output_node_names 是您要从中提取图形结果的节点名称列表。这是必要的,因为冻结过程需要了解图形的哪些部分是实际需要的,以及哪些是训练过程的工件,例如汇总操作。只有有助于计算给定输出节点的操作才会被保留。如果你知道你的图将如何被使用,这些应该只是你传递给 Session::Run() 作为获取目标的节点的名称。如果您手头没有这些信息,您可以通过运行summarize_graph 工具获得一些关于可能输出的建议。

    由于 TensorFlow 的输出格式随着时间的推移而发生变化,因此还有许多其他不太常用的标志可用,例如 input_saver,但希望您在使用现代版本的框架训练的图形上不需要这些。

    【讨论】:

    • 感谢您的回复。在尝试了这么多东西之后,我已经有了我的冻结图。现在我想将它用于我的 android 应用程序。我目前有这个problem
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 2020-12-24
    • 2017-12-17
    • 2019-11-11
    • 2021-08-20
    • 1970-01-01
    • 2017-04-08
    • 2017-09-24
    相关资源
    最近更新 更多