Tensorflow:如何将.meta,.data和.index模型文件转换为一个graph.pb文件
tensorflow
4
0

在tensorflow中,从头开始的训练产生了以下6个文件:

  1. events.out.tfevents.1503494436.06L7-BRM738
  2. 型号.ckpt-22480.meta
  3. 检查站
  4. 型号.ckpt-22480.data-00000-of-00001
  5. 型号.ckpt-22480.index
  6. graph.pbtxt

我想将它们(或仅需要的文件)转换为一个文件graph.pb ,以便能够将其传输到我的Android应用程序中。

我尝试了脚本freeze_graph.py但是它已经需要输入我没有的input.pb文件作为输入。 (我只有前面提到的这6个文件)。如何继续获得一个freeze_graph.pb文件?我看到了几个线程,但没有一个对我有用。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

因为这可能对其他人有帮助,所以我也会在github ;-)之后回答。我认为您可以尝试这样的事情(使用tensorflow / python / tools中的freeze_graph脚本):

python freeze_graph.py --input_graph=/path/to/graph.pbtxt --input_checkpoint=/path/to/model.ckpt-22480 --input_binary=false --output_graph=/path/to/frozen_graph.pb --output_node_names="the nodes that you want to output e.g. InceptionV3/Predictions/Reshape_1 for Inception V3 "

这里的重要标志是--input_binary = false,因为文件graph.pbtxt是文本格式。我认为它对应于所需的graph.pb,它相当于二进制格式。

关于output_node_names,这确实让我感到困惑,因为我在这部分上仍然存在一些问题,但是您可以在tensorflow中使用summary_graph脚本,该脚本可以将pb或pbtxt用作输入。

问候,

史蒂芬

收藏
评论

您可以使用此简单脚本来执行此操作。但是您必须指定输出节点的名称。

import tensorflow as tf

meta_path = 'model.ckpt-22480.meta' # Your .meta file
output_node_names = ['output:0']    # Output nodes

with tf.Session() as sess:
    # Restore the graph
    saver = tf.train.import_meta_graph(meta_path)

    # Load weights
    saver.restore(sess,tf.train.latest_checkpoint('path/of/your/.meta/file'))

    # Freeze the graph
    frozen_graph_def = tf.graph_util.convert_variables_to_constants(
        sess,
        sess.graph_def,
        output_node_names)

    # Save the frozen graph
    with open('output_graph.pb', 'wb') as f:
      f.write(frozen_graph_def.SerializeToString())

如果您不知道输出节点的名称,则有两种方法

  1. 您可以探索的图形,并用找到名称Netron或控制台summarize_graph效用。

  2. 您可以将所有节点用作输出节点,如下所示。

output_node_names = [n.name for n in tf.get_default_graph().as_graph_def().node]

(请注意,您必须在convert_variables_to_constants调用之前放置此行。)

但我认为这是一种不寻常的情况,因为如果您不知道输出节点,则实际上无法使用该图。

收藏
评论

我尝试了freezed_graph.py脚本,但是output_node_name参数完全令人困惑。作业失败。

所以我尝试了另一个: export_inference_graph.py 。它按预期工作!

python -u /tfPath/models/object_detection/export_inference_graph.py \
  --input_type=image_tensor \
  --pipeline_config_path=/your/config/path/ssd_mobilenet_v1_pets.config \
  --trained_checkpoint_prefix=/your/checkpoint/path/model.ckpt-50000 \
  --output_directory=/output/path

我使用的tensorflow安装包来自此处: https//github.com/tensorflow/models

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号