如何解决如何保存包括所有权重的 Tensorflow 2 对象检测模型?
我正在使用 Python 中的 Tensorflow 2 API 进行对象检测。到目前为止,这很好用。但是,如果我想保存模型,我将使用 exporter_main_v2.py
导出图形 (.pb) 和检查点 (checkpoint
,ckpt-0.data
,ckpt-0.index
)。该图不包括任何权重,我总是必须使用检查点来处理保存的模型。
有没有办法将所有权重保存到 Protobuf (.pb) 文件中?
这是我尝试过的:
- 保存冻结模型:TF2 显然不再支持冻结图。
export_inference_graph.py
会冻结包括所有权重的图形,在 TF2 下不起作用。 - 同样适用于
freeze_graph.py
:只能使用 TF1
解决方法
您仍可以使用冷冻技术从TF1在TF2,使用compat.v1
模块:
在下面的代码段中,我假定有与保存在TF2方式,配重块一个预训练的模型tf.saved_model.save
。
graph = tf.Graph()
with graph.as_default():
sess = tf.compat.v1.Session()
with sess.as_default():
# creating the model/loading it from a TF2 pb file
# (If you have a keras model,you can use
#`tf.keras.models.load_model` instead).
model = tf.saved_model.load("/path/to/model")
# the default signature might be different.
sign = model.signatures["serving_default"]
# if using keras,just use model.outputs
tensor_out_names = [out.name.split(":")[0] for out in sign.outputs]
graphdef = tf.compat.v1.graph_util.convert_variables_to_constants(
sess,graph.as_graph_def(),tensor_out_names
)
# the following is optional,use only if no more training is required
graphdef = tf.compat.v1.graph_util.remove_training_nodes(graphdef)
tf.python.framework.graph_io.write_graph(graphdef,"./","/path/to/frozengraph",as_text=False)
然而,我会避免这样做比兼容性原因与旧工具其他。的compat
模块可能被弃用一天,据我能理解,没有具有包含图表+的权重,而不是分割他们只有一个文件一个大值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。