使用带有Tensorflow.js的Azure自定义视觉训练的模型

问题描述 投票:3回答:2

我已经使用Azure Custom Vision训练了一个模型,并下载了Android的TensorFlow文件(请参阅:https://docs.microsoft.com/en-au/azure/cognitive-services/custom-vision-service/export-your-model)。如何与tensorflow.js一起使用?

我需要一个模型(pb文件)和权重(json文件)。但是,Azure给了我一个.pb和一个带有标签的文本文件。

根据我的研究,我还了解到,还有其他pb文件,但是我找不到Azure Custom Vision导出的类型。

我找到了tfjs converter。这是为了将TensorFlow SavedModel(来自Azure的* .pb文件是SavedModel?)或Keras模型转换为Web友好格式。但是,我需要填写“ output_node_names”(如何获取这些?)。我也不确定100%我的Android pb文件是否等于“ tf_saved_model”。

我希望有人提出建议或切入点。

microsoft-cognitive azure-cognitive-services tensorflow.js
2个回答
2
投票

[仅模仿我说的here即可节省您的点击时间。我希望直接导出到tfjs的选项很快可用。

这些是我为获得导出的TensorFlow模型而为我工作的步骤:

  1. 用Pad替换PadV2操作。这个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())
  1. Install tensorflowjs 0.8.6或更早的版本。在更高版本中转换冻结的模型is deprecated
  2. [调用转换器时,将--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  path\to\modified\model.pb  folder\to\save\converted\output

理想情况下,tf.loadGraphModel('path/to/converted/model.json')现在应该可以工作了(已针对tfjs 1.0.0及更高版本进行了测试)。


0
投票

部分答案:

尝试实现相同的目的-这是答案的开始-利用output_node_names:

tensorflowjs_converter --input_format=tf_frozen_model --output_node_names='model_outputs' model.pb web_model

我还不确定如何将其合并到同一代码中-您有@Kasper Kamperman吗?

© www.soinside.com 2019 - 2024. All rights reserved.