TensorFlow Model Conversion
1. TensorFlow 1.x
1.1 Frozen Graph / Protobuf
# Freeze variables to constants output_graph_def = tf.graph_util.convert_variables_to_constants( sess, tf.get_default_graph().as_graph_def(), ["output_names"]) # Serialize and dump the output graph with tf.gfile.GFile(output_graph, "wb") as f: f.write(output_graph_def.SerializeToString())
Reference:
1.2 Keras to Frozen Graph
Convert Keras model (.h5) into frozen graph protobuf (.pb) format.
tf.keras.backend.set_learning_phase(0) # Disable learning phase model = tf.keras.models.load_model(model_path) sess = tf.keras.backend.get_session() output_nodes = [node.op.name for node in model.outputs] frozen_graph = freeze_session(sess, output_nodes) tf.train.write_graph(frozen_graph, "some_directory", "my_model.pb", as_text=False)
Reference:
1.3 Saved Model to Frozen Graph
Convert Saved_Model in TF 1.x and TF 2.x to frozen graph protobuf (.pb):
from tensorflow.python.saved_model import tag_constants from tensorflow.python.tools import freeze_graph def freeze_model(saved_model_dir, output_node_names, output_filename): output_graph_filename = os.path.join(saved_model_dir, output_filename) initializer_nodes = '' freeze_graph.freeze_graph( input_saved_model_dir=saved_model_dir, output_graph=output_graph_filename, saved_model_tags = tag_constants.SERVING, output_node_names=output_node_names, initializer_nodes=initializer_nodes, input_graph=None, input_saver=False, input_binary=False, input_checkpoint=None, restore_op_name=None, filename_tensor_name=None, clear_devices=True, input_meta_graph=False, )
1.4 Checkpoint to Saved Model
Convert checkpoint (in session) to saved model:
inputs = {"lowres_input": input_tensor} outputs = {"output_coefficients": output_tensor} tf.saved_model.simple_save( sess, "saved_model", inputs, outputs )
Reference:
For TFLite related conversion and quantization: