我是 Tensorflow 的新手,我开发了一个使用 Tensorflow OpenCV 检测特殊类型卡片的模型,我可以在离线模式下使用网络摄像头正确检测卡片,但我想将其迁移到web (tensorflowjs),但我在转换方面遇到了一些问题。
我有检查点、元、数据文件以及卡住的推理图 pb 文件
我已经使用以下代码生成了节点名称列表
import tensorflow as tf
modelName = './<path_to_meta_file>'
tf.reset_default_graph()
with tf.Session() as sess:
saver = tf.train.import_meta_graph(modelName)
graph_def = tf.get_default_graph().as_graph_def()
node_list=[n.name for n in graph_def.node]
print(node_list)
这是输出文件 Output node names using the tensorflow import_meta_graph()
我关心的是我应该在下面的命令中传递输出节点名称
tensorflowjs_converter --input_format=tf_frozen_model --output_node_names='<what to write here from that output txt file?>' ./frozen_inference_graph.pb ./web_model
我想在客户端使用真实的网络摄像头运行我现有的模型,非常感谢任何解决方案和建议
设置细节:
tensorflow 1.12.0
使用 Anaconda 的 Python 3.5。
最佳答案
对我来说,tensorflowjs_converter 通过使用“占位符”作为 --output_node_names 的参数运行:
tensorflowjs_converter --input_format=tf_frozen_model --output_format=tensorflowjs --output_node_names=Placeholder ./frozen_inference_graph.pb ./web_model
不确定这是否是一个有效的解决方案,因为即使转换器运行时没有错误消息,我从 model_pruner 得到输出:“之前的图形大小:1187 个节点,1221 条边。之后的图形大小:1 个节点, 0 条边。” - 所以我的输入实际上减少为零,这似乎也不对。
更新:
经过两个多小时的研究,我发现张量板指示节点名称(引用 this page )。在我的例子中,结果是 --output_node_names=final_result
- Placeholder 只不过是名称已经说明的内容,一个需要填充有效内容的占位符。
关于javascript - 需要找出需要为 Tensorflowjs 转换器传递哪些输出节点名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53759373/