有什么区别frozen_inference_graph.pb和saved_model.pb?

问题描述 投票:5回答:2

我有一个训练有素的模型(更快的R-CNN),我使用export_inference_graph.py导出用于推理。我试图了解创建的frozen_inference_graph.pbsaved_model.pb以及model.ckpt*文件之间的区别。我也看过.pbtxt的陈述。

我尝试阅读这个,但无法找到答案:https://www.tensorflow.org/extend/tool_developers/

每个文件包含什么?哪些可以转换为其他?每个人的理想目的是什么?

python tensorflow object-detection-api
2个回答
11
投票

frozen_inference_graph.pb是一个无法再训练的冻结图,它定义了graphdef并且实际上是一个序列化图形,可以加载以下代码:

def load_graph(frozen_graph_filename):
    with tf.gfile.GFile(frozen_graph_filename, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        return graph_def
tf.import_graph_def(load_graph("frozen_inference_graph.pb"))

保存的模型是由tf.saved_model.builder生成的模型,必须导入到会话中,此文件包含所有训练权重的完整图形(就像冻结的图形一样)但是这里可以训练,这一个未序列化,需要通过此代码段加载。 []是tagconstants,可以被saved_model_cli读取。这个模型也常常用于预测,就像google ml engine par例子一样:

with tf.Session() as sess:
    tf.saved_model.loader.load(sess, [], "foldername to saved_model.pb, only folder")

model.ckpt文件是在训练期间生成的检查点,用于恢复训练或在训练后出现问题时进行备份。如果您有已保存的模型和冻结的图形,则可以忽略它。

.pbtxt文件与之前讨论的模型基本相同,但后来人类可读,而不是二进制。这些也可以忽略。

要回答您的转换问题:已保存的模型可以转换为冻结图形,反之亦然,尽管从冻结图形中提取的saved_model也不可训练,但它的存储方式是保存的模型格式。可以读入检查点并将其加载到会话中,您可以在其中构建保存的模型。

希望我帮助,任何问题,请求!


2
投票

要添加,frozen_graph.pb包括两件事:1。图形定义2.训练参数

而save_model.pb,只是有图形定义。

这就是为什么如果你检查两个.pb文件的大小,frozen_graph.pb的大小总是更大。

© www.soinside.com 2019 - 2024. All rights reserved.