在张量流中将 SSD 转换为冻结图。必须使用哪些输出节点名称?
Posted
技术标签:
【中文标题】在张量流中将 SSD 转换为冻结图。必须使用哪些输出节点名称?【英文标题】:Converting SSD to frozen graph in tensorflow. Which output node names must be used? 【发布时间】:2017-12-14 12:02:03 【问题描述】:我使用TensorFlow Object Detection API 训练SSD,如here 所述。它产生一个ckpt、元和索引文件。为了在我的图像上运行它,我尝试检查演示代码。它要求将模型转换为冻结图。如here 所述,我尝试将我的模型转换为冻结推理图。在该程序中,我必须提供输出节点名称。我无法确定必须在此处使用的 SSD 模型中的节点名称。请帮忙。我试过 'num_detections:0'、'detection_boxes:0' 等。只是得到错误:
AssertionError: num_detections 不在图中
【问题讨论】:
【参考方案1】:我们有一个特殊的工具可以在 Tensorflow 对象检测 API 中转换为冻结图 --- 只需运行 export_inference_graph.py 二进制文件。使用此工具的说明是here。
【讨论】:
【参考方案2】:您可以自行探索图形:A Tool Developer's Guide to TensorFlow Model Files 并查找节点名称。我可以从我的模型中给出样本:“prefix/digit1/Softmax:0”(在我的 keras 模型中是“digit1”) 另外,我记得您应该将这些名称的列表提供给 transform_graph 实用程序(“--output”参数)。
【讨论】:
【参考方案3】:我正在使用这个小 Python 脚本根据其操作来本地化节点。 “PLaceholder”和“Identity”似乎对查找输入和输出节点很有趣:
import tensorflow as tf
NODE_OPS = ['Placeholder','Identity']
MODEL_FILE = '/path/to/frozen_inference_graph.pb'
gf = tf.GraphDef()
gf.ParseFromString(open(MODEL_FILE,'rb').read())
print([n.name + '=>' + n.op for n in gf.node if n.op in (NODE_OPS)])
【讨论】:
以上是关于在张量流中将 SSD 转换为冻结图。必须使用哪些输出节点名称?的主要内容,如果未能解决你的问题,请参考以下文章