Tensorflow 冻结 protobuf 文件检查点文件不存在

Tensorflow freeze protobuf file checkpoint file doesn't exist

我正在使用此演示中的 retrain.python 文件。 我收到不同类型的文件:

我想用检查点文件冻结 graph.pb,优化冻结的文件,然后将优化的文件转换为 tflite 文件,以便在 android 应用程序中使用它。

我尝试了不同的方法来冻结文件,但没有成功,

getting checkpoint file doesn't exist in Terminal

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x86 in position 1: invalid start byte

如何完成所有步骤并获取tflite文件以及如何合并labels.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
....

请帮忙!

这是一个很好的冻结图表的脚本

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 参数 overwrites the input_meta_graph argument but you don't seem to have a SavedModel