Файл контрольной точки файла Tensorflow Freeze Probuf не существует

Я работаю с файлом retrain.python из этой демонстрации. Я получаю разные типы файлов:

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

Я пробовал разные способы заморозить файл, но не повезло,

получение файла контрольной точки не существует в Терминале

а также

UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0x86 в позиции 1: недопустимый начальный байт

Как выполнить все шаги и получить файл tflite и как объединить файл label.txt?

Примечание. Вот команда, которую я использовал в Терминале:

python freeze_graph.py \ 
--input_graph=/home/automator/Desktop/retrain/code/graph/graph.pb \ 
--input_checkpoint=/home/automator/Desktop/retrain/code/tmp/model.ckpt \ 
--output_graph=/home/automator/Desktop/retrain/code/frozen.pb \ 
--output_node_names=output_node \
--input_saved_model_dir=/home/automator/Desktop/retrain/code/export/frozen.pb \ --output_node_names=outInput 

Ошибка: контрольная точка '' не существует!

Пытался:

--input_checkpoint=/home/automator/Desktop/retrain/code/tmp/model.ckpt
--input_checkpoint=/home/automator/Desktop/retrain/code/tmp/model
--input_checkpoint=/home/automator/Desktop/retrain/code/tmp/modelmodel.ckpt
....

Пожалуйста помоги!

2 ответа

Решение

Вот хороший скрипт для замораживания графика

import os
import argparse
import tensorflow as tf
from tensorflow.python.framework import graph_util
from tensorflow.python.platform import gfile


def load_graph_def(model_path, sess=None):
    if os.path.isfile(model_path):
        with gfile.FastGFile(model_path, 'rb') as f:
            graph_def = tf.GraphDef()
            graph_def.ParseFromString(f.read())
            tf.import_graph_def(graph_def, name='')
    else:
        sess = sess if sess is not None else tf.get_default_session()
        saver = tf.train.import_meta_graph(model_path + '.meta')
        saver.restore(sess, model_path)


def freeze_from_checkpoint(checkpoint_file, output_layer_name):

    model_folder = os.path.basename(checkpoint_file)
    output_graph = os.path.join(model_folder, checkpoint_file + '.pb')

    with tf.Session() as sess:

        load_graph_def(checkpoint_file)

        graph = tf.get_default_graph()
        input_graph_def = graph.as_graph_def()

        print("Exporting graph...")
        output_graph_def = graph_util.convert_variables_to_constants(
            sess,
            input_graph_def,
            output_layer_name.split(","))

        with tf.gfile.GFile(output_graph, "wb") as f:
            f.write(output_graph_def.SerializeToString())


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('model_path')
    parser.add_argument('output_layer')
    args = parser.parse_args()
    freeze_from_checkpoint(checkpoint_file=args.model_path, output_layer_name=args.output_layer)

Сохраните его как freeze_graph.py

Назовите это: python freeze_graph.py /home/automator/Desktop/retrain/code/tmp/model.data-000000-of-00001 "output_node_name"

Учитывая, что у вас есть meta graph сохранено, попробуйте использовать input_meta_graph аргумент:

python freeze_graph.py \ 
--input_meta_graph=/home/automator/Desktop/retrain/code/tmp/model.meta \ 
--input_checkpoint=/home/automator/Desktop/retrain/code/tmp/model.ckpt \ 
--input_binary=true \
--output_graph=/home/automator/Desktop/retrain/code/frozen.pb \ 
--output_node_names=output_node 

Проблема в том, что вы передаете --input_saved_model_dir аргумент, который перезаписывает input_meta_graph аргумент, но у вас, похоже, нет SavedModel.

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