Преобразование 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"),