Преобразование SSD в замороженный граф в тензорном потоке. Какие имена выходных узлов должны использоваться?

Я обучил SSD, используя TensorFlow Object Detection API, как описано здесь. Создает файл ckpt, meta и index. Чтобы запустить его на своих изображениях, я попытался проверить демонстрационный код. Требуется преобразование модели в замороженный график. Я попытался преобразовать свою модель в замороженный граф вывода, как описано здесь. В этой программе я должен предоставить имена выходных узлов. Я не мог понять имя узла в модели SSD, который должен использоваться здесь. Пожалуйста помоги. Я пробовал 'num_detections:0', 'detection_boxes:0' и т. Д. Только чтобы получить ошибку:

AssertionError: num_detections отсутствует в графе

3 ответа

Решение

У нас есть специальный инструмент для преобразования в замороженные графики в API обнаружения объектов Tensorflow - просто запустите двоичный файл export_inference_graph.py. Инструкции по использованию этого инструмента здесь.

Я использую этот маленький скрипт 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)])

Вы можете исследовать график самостоятельно: Руководство разработчика инструментов для файлов моделей TensorFlow и найти имена узлов. Я могу привести пример из моей модели: "prefix/digit1/Softmax:0" (это был "digit1" в моей модели keras) Также, насколько я помню, вы должны предоставить список этих имен для утилиты transform_graph (параметр "--output"),

Другие вопросы по тегам