Tensorflow: как конвертировать.мета.,данные и.индексируйте файлы модели в один график.файл PB

в tensorflow обучение с нуля произвело следующие 6 файлов:

  1. событий.из.tfevents.1503494436.06L7-BRM738
  2. модель.ckpt-22480.мета!--6-->
  3. КПП
  4. модель.ckpt-22480.данные-00000-оф-00001
  5. модель.ckpt-22480.индекс
  6. графика.pbtxt

Я хотел бы преобразовать их (или только необходимые) в один файл графика.pb чтобы иметь возможность перенести его в мое приложение для Android.

я попробовал скрипт freeze_graph.py но это требует в качестве ввода уже вход.pb файл, которого у меня нет. (У меня есть только эти 6 файлов, упомянутых ранее). Как продолжить, чтобы получить этот freezed_graph.pb? Я видел несколько нитей, но ни одна из них не работала на меня.

3 ответов


вы можете использовать этот простой скрипт для этого. Но вы должны указать имена выходных узлов.

import tensorflow as tf

meta_path = 'model.ckpt-22480.meta' # Your .meta file

with tf.Session() as sess:

    # Restore the graph
    saver = tf.train.import_meta_graph(meta_path)

    # Load weights
    saver.restore(sess,tf.train.latest_checkpoint('.'))

    # Output nodes
    output_node_names =[n.name for n in tf.get_default_graph().as_graph_def().node]

    # Freeze the graph
    frozen_graph_def = tf.graph_util.convert_variables_to_constants(
        sess,
        sess.graph_def,
        output_node_names)

    # Save the frozen graph
    with open('output_graph.pb', 'wb') as f:
      f.write(frozen_graph_def.SerializeToString())

поскольку это может быть полезно для других, я также отвечаю здесь после ответа на github ; -). Я думаю, вы можете попробовать что-то вроде этого (со скриптом freeze_graph в tensorflow/python/tools) :

python freeze_graph.py --input_graph=/path/to/graph.pbtxt --input_checkpoint=/path/to/model.ckpt-22480 --input_binary=false --output_graph=/path/to/frozen_graph.pb --output_node_names="the nodes that you want to output e.g. InceptionV3/Predictions/Reshape_1 for Inception V3 "

важным флагом здесь является --input_binary=false в качестве графа файла.pbtxt находится в текстовом формате. Я думаю, что это соответствует требуемому графику.ПБ эквивалент в двоичном формате.

Что касается имен output_node_names, это действительно сбивает меня с толку, поскольку я все еще есть некоторые проблемы в этой части, но вы можете использовать сценарий summarize_graph в tensorflow, который может принимать pb или pbtxt в качестве входных данных.

С уважением,

Стеф


я попробовал freezed_graph.py скрипт, но параметр output_node_name полностью запутан. Работа не удалась.

поэтому я попробовал другой: export_inference_graph.py. И это сработало, как и ожидалось!

python -u /tfPath/models/object_detection/export_inference_graph.py \
  --input_type=image_tensor \
  --pipeline_config_path=/your/config/path/ssd_mobilenet_v1_pets.config \
  --trained_checkpoint_prefix=/your/checkpoint/path/model.ckpt-50000 \
  --output_directory=/output/path

пакет установки tensorflow я использовал отсюда: https://github.com/tensorflow/models