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

数据挖掘 张量流 训练 物体检测
2021-09-29 03:59:13

我已经在 WIDER Faces 数据集上从谷歌的对象检测动物园(ssd_inception_v2_coco)重新训练了一个模型(按照本教程),如果我从 python使用它似乎可以工作,但是如果我把它放到 tensorflow 服务中,它以低于 0.10 的置信度预测大量检测。frozen_inference_graph.pbsaved_model.pb

我不明白的另一件事是这两个文件都是 52Mb,但是从对象检测动物园下载的原始文件每个都需要 98Mb。

以下是使用saved_modeltensorflow 服务进行的预测示例:

TensorFlow Serving 的预测

这是同一模型的预测示例,但使用的是frozen_inference_graph.pb

python代码和frozen_inference_graph.pb的预测

  1. 那么saved_model.pb和之间的实际区别是frozen_inference_graph.pb什么?
  2. 有什么方法可以检查saved_model.pb我使用的问题吗?
  3. 如何解释重新训练的模型与原始模型相比要小得多?
1个回答

saved_model.pb可以将多个图形定义表示为 MetaGraphDef 协议缓冲区。在训练期间,权重和其他变量通常不会存储在文件中。相反,它们保存在单独的检查点文件中


TensorFlow 保存的模型.


freeze_inference_graph.pb将其变量转换为内联常量,因此所有内容都在一个文件中,可以在包括移动设备在内的任何平台上提供服务。冻结过程包括加载 GraphDef,从最新的检查点文件中提取所有变量的值,然后将每个变量操作替换为具有存储在其属性中的权重的数值数据的 Const 然后剥离所有无关的节点不用于前向推理。参考:Tensorflow 模型文件