【问题标题】:Retraining Inception5h model from TensorFlow Android Camera Demo从 TensorFlow Android Camera Demo 重新训练 Inception5h 模型
【发布时间】:2017-02-02 13:45:52
【问题描述】:

TensorFlow Android Camera Demo 使用Inception5h model 进行实时图像识别,提供卓越的性能。由于我没有成功重新训练 Inception5h,所以我选择了InceptionV3 model,但它在图像识别方面并不那么敏捷。所以我回到开始尝试重新训练(或迁移学习)Inception5h 模型。我已经尝试修改retrain.py,但它显然是为 v3 模型编写的。 5h 模型开始时不包含“pool_3/_reshape:0”、“DecodeJpeg/contents:0”或“ResizeBilinear:0”张量。还有其他差异。

我是机器学习和 TensorFlow 方面的新手,所以我非常感谢我必须做的明确步骤。

谢谢!

【问题讨论】:

  • 在 download.tensorflow.org 上找到的 inception5h 模型已经去除了用于移动推理的未使用节点,这就是它找不到 DecodeJpeg 和 ResizeBilinear 节点的原因。您可以尝试将它们重新添加以进行重新训练(您应该能够使用 Inceptionv3 GraphDef 作为参考),或者只是将您的图像数据自己转换为大小为 224x224 的 RGB 格式作为预处理步骤。
  • @AndrewHarp,在完整的 inception5H 模型上重新训练然后在 Android 模型上运行 optimize_for_inference.py 是否是个好主意?

标签: android python tensorflow


【解决方案1】:

看起来retrain.py 脚本和tutorial 刚刚更新为与mobilenet 架构配合使用。

这样就解决了您问题的第一部分,它实际上不是 inception5h,但它在移动设备上运行良好,准确度比 inception5h 高得多。

要真正让它在 android 示例中运行,您仍然需要更新 these settings

我认为你应该可以只复制the settings determined for the mobilenet you choose, from the retrain script,你可能会没事的。


如果您想使用其他网络,而 retrain.py 中没有设置,那么我能想到的确定它们的最简单方法是使用 TensorBoard 探索图表。

所以如果你真的想使用 inception 5h,你可以下载并解压它:

curl -O https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
unzip -d inception5h inception5h.zip

然后从 Tensorflow for Poets: 2 codelab repo 中获取这个简单的脚本,将图形 .pb 文件转换为 tensorboard 可以使用的东西:

curl -O https://raw.githubusercontent.com/googlecodelabs/tensorflow-for-poets-2/master/scripts/graph_pb2tb.py

然后在你的 graph.pb 上运行它:

mkdir tb_graph
python graph_pb2tb.py tb/inception5h inception5h/tensorflow_inception_graph.pb 

还有open it in tensorboard:

tensorboard --logdir tb_graph

然后在图表中四处寻找并找到您需要填写自己的model_info dict的节点名称可能相对简单。

我认为这是您想要设置为 bottleneck_tensor 的节点:

【讨论】:

    【解决方案2】:

    在 retrain.py 脚本的末尾,您可以注意到以下几行:

    output_graph_def = graph_util.convert_variables_to_constants(
      sess, graph.as_graph_def(), [FLAGS.final_tensor_name])
    with gfile.FastGFile(FLAGS.output_graph, 'wb') as f:
       f.write(output_graph_def.SerializeToString())
    

    这里所有的变量都作为常量保存在协议缓冲区 (pb) 文件中,该文件是二进制文件 ('wb')。您还应该将模型类的名称保存在文本文件中。然后正如android文档提到的那样,您应该将这两个文件保存在tensorflow的android路径中名为“assets”的文件夹中。然后需要进行一些修改以加载 inception-v3 模型,您可以在此处看到:https://github.com/tensorflow/tensorflow/issues/1269 我希望这个能帮上忙!

    【讨论】:

    • 感谢您的回复,但这不是我要解决的问题。我已经知道如何在 Android 应用程序中加载我的模型。我正在尝试做的是重新训练 Inception5h 模型,它是一个更苗条的 Inception 模型,并且在移动设备上运行得更快。
    • 哦,好的。我在 inception-v3 上工作过,所以我帮不了你。祝您研究顺利!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多