Файл контрольной точки файла 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.