Использование обученной модели Azure с настраиваемым зрением с помощью tensorflow.js

Я обучил модель с помощью Azure Custom Vision и загрузил файлы TensorFlow для Android (см .: 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. Это необходимо для преобразования SavedModel TensorFlow (является ли файл * .pb из Azure SavedModel?) Или модели Keras в удобный для Интернета формат. Однако мне нужно заполнить «output_node_names» (как мне их получить?). Я также не на 100% уверен, что мой pb-файл для Android равен "tf_saved_model".

Надеюсь, у кого-то есть подсказка или отправная точка.


person Kasper Kamperman    schedule 15.04.2018    source источник


Ответы (2)


Просто повторяю то, что я сказал здесь, чтобы сэкономить вам клик. Я очень надеюсь, что скоро появится возможность экспорта напрямую в tfjs.

Вот шаги, которые я сделал, чтобы на меня работала экспортированная модель TensorFlow:

  1. Замените операции 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())
  1. Установите tensorflowjs 0.8.6 или более раннюю версию. Преобразование замороженных моделей устарело в более поздних версиях.
  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 и выше).

person Harish    schedule 27.09.2019
comment
ОБНОВЛЕНИЕ: возможность экспорта напрямую в TensorFlowJS теперь является частью последней версии API. - person Harish; 21.10.2019

Частичный ответ:

Попытка добиться того же - вот начало ответа - использовать output_node_names:

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

Я еще не уверен, как включить это в тот же код - у вас есть что-нибудь @Kasper Kamperman?

person jtlz2    schedule 25.02.2019
comment
возможно, эта статья поможет javascriptjanuary.com/blog/. для загрузки модели вам нужно будет сделать что-то похожее на: mount: async function () {... другие вещи ... // загрузить модель const MODEL = 'model / tensorflowjs_model.pb'; const WEIGHTS = 'модель / weights_manifest.json'; this.model = await tf.loadFrozenModel (МОДЕЛЬ, ВЕС); } - person simonaco; 01.03.2019
comment
См. github.com/MicrosoftDocs/azure-docs/issues/ для решения - я надеюсь, что автор добавит свой ответ - person jtlz2; 27.09.2019