我已经使用 Azure Custom Vision 训练了一个模型,并下载了适用于 Android 的 TensorFlow 文件(见:https://learn.microsoft.com/en-au/azure/cognitive-services/custom-vision-service/export-your-model(。我怎样才能把它与 tensorflow.js一起使用?
我需要一个模型(pb 文件(和权重(json 文件(。但是,Azure给了我一个.pb和一个带有标签的文本文件。
根据我的研究,我还了解到还有不同的 pb 文件,但我找不到 Azure 自定义视觉导出的类型。
我找到了 tfjs 转换器。这是为了将 TensorFlow SavedModel(Azure 中的 *.pb 文件是 SavedModel 吗?(或 Keras 模型转换为 Web 友好的格式。但是我需要填写"output_node_names"(我如何获得这些?我也不是 100% 确定我的 Android pb 文件是否等于"tf_saved_model"。
我希望有人有一个提示或起点。
只是鹦鹉学舌我在这里所说的,以节省您的点击次数。我确实希望尽快提供直接导出到 tfjs 的选项。
这些是我为使导出的TensorFlow模型为我工作而执行的步骤:
- 将 PadV2 操作替换为 Pad。这个python函数应该可以做到这一点。
input_filepath
是 .pb 模型文件的路径,output_filepath
是将创建的更新的 .pb 文件的完整路径。
import tensorflow as tf
def ReplacePadV2(input_filepath, output_filepath):
graph_def = tf.GraphDef()
with open(input_filepath, 'rb') as f:
graph_def.ParseFromString(f.read())
for node in graph_def.node:
if node.op == 'PadV2':
node.op = 'Pad'
del node.input[-1]
print("Replaced PadV2 node: {}".format(node.name))
with open(output_filepath, 'wb') as f:
f.write(graph_def.SerializeToString())
- 安装 tensorflowjs 0.8.6 或更早版本。转换冻结模型在更高版本中已弃用。
- 调用转换器时,将
--input_format
设置为tf_frozen_model
,output_node_names
设置为model_outputs
。这是我使用的命令。
tensorflowjs_converter --input_format=tf_frozen_model --output_json=true --output_node_names='model_outputs' --saved_model_tags=serve pathtomodifiedmodel.pb foldertosaveconvertedoutput
理想情况下,tf.loadGraphModel('path/to/converted/model.json')
现在应该可以工作(针对 tfjs 1.0.0 及更高版本进行了测试(。
部分答案:
尝试实现同样的事情 - 这是一个答案的开始 - 利用output_node_names:
tensorflowjs_converter --input_format=tf_frozen_model --output_node_names='model_outputs' model.pb web_model
我还不确定如何将其合并到同一代码中 - 您对坎珀曼有什么@Kasper吗?