微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Frozen_interference_graph.pb创建Keras模型?

如何解决如何使用Frozen_interference_graph.pb创建Keras模型?

我想使用预先训练的模型并在其末尾添加一个细分头,但是问题是我只有' frozen_inference_graph.pb '。这些是我从模型中获得的文件

enter image description here

我尝试了几种方法

1。将预先训练的模型加载到Keras模型中: 我拥有的文件似乎不可能。它只是给了我一个AutoTrackable对象而不是模型。

2。访问冻结模型的张量对象并使用张量制作模型: 我发现了如何访问张量,但无法使用张量对象创建Keras模型。

with self.graph.as_default():
    graph = tf.import_graph_def(graph_def,name='')

graph = tf.compat.v1.import_graph_def(graph_def)
tf.compat.v1.Graph.as_default(graph)
self.sess = tf.Session(graph=self.graph)
self.tensors = [tensor for op in tf.compat.v1.get_default_graph().get_operations() for tensor in op.values()]

这里我可以得到张量,但不能在模型中使用张量:

model = tf.keras.models.Model(inputs=self.tensors[0],outputs=self.tensors[-1])

有什么方法可以将此冻结图转换为Keras模型? 或者,如果还有其他方法可以训练模型,我将很高兴知道。

P.S。预先训练的模型是“ ssd_mobilenet_v3_small_coco_2020_01_14 ”,可以在Here上找到。

解决方法

您可以使用两种方法:

  1. 文件'frozen_inference_graph.pb'包含有关权重和模型架构的所有必要信息。使用以下代码片段读取模型并添加新层:a
 customModel = tf.keras.models.load_model('savedModel')  
 # savedModel is the folder with .pb data

 pretrainedOutput = customModel.layers[-1].output 
 newOutput = tf.keras.layers.Dense(2)(pretrainedOutput) # change layer as needed

 new_model = tf.keras.Model(inputs=customModel.inputs,outputs=[newOutput]) 
 # create a new model with input of old model and new output tensors

其中“ savedModel”是具有'frozen_inference_graph.pb'和其他元数据的文件夹的名称。在TFguide中查看有关使用.pb文件和微调自定义模型的详细信息。

  1. 尝试使用具有模型体系结构的 .meta 文件和 .ckpt 恢复TF 1.x中的权重:
with tf.Session() as sess:
  new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')
  new_saver.restore(sess,tf.train.latest_checkpoint('./'))

有关如何在TF 1.x中加载和自定义恢复的模型,请参考tutorial

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?