¿Qué es la diferencia frozen_inference_graph.pb y saved_model.pb?

Tengo un modelo entrenado (Faster R-CNN) que export_inference_graph.py usando export_inference_graph.py para usar para inferencia. Estoy tratando de entender la diferencia entre los frozen_inference_graph.pb y saved_model.pb y también los de model.ckpt* . También he visto representaciones .pbtxt .

Intenté leer todo esto pero realmente no pude encontrar las respuestas: https://www.tensorflow.org/extend/tool_developers/

¿Qué contiene cada uno de estos archivos? ¿Cuáles se pueden convertir a cuáles otros? ¿Cuál es el propósito ideal de cada uno?

frozen_inference_graph.pb, es un gráfico congelado que ya no se puede entrenar, define el graphdef y en realidad es un gráfico serializado y se puede cargar con este código:

 def load_graph(frozen_graph_filename): with tf.gfile.GFile(frozen_graph_filename, "rb") as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) return graph_def tf.import_graph_def(load_graph("frozen_inference_graph.pb")) 

el modelo guardado es un modelo generado por tf.saved_model.builder y se debe importar a una sesión, este archivo contiene el gráfico completo con todos los pesos de entrenamiento (como el gráfico congelado), pero aquí se puede entrenar, y este no está serializado y necesita ser cargado por este fragmento de código. Los [] son ​​tagstants que pueden ser leídos por saved_model_cli . Este modelo a menudo también se sirve para predecir, como ejemplo del motor de google ml:

 with tf.Session() as sess: tf.saved_model.loader.load(sess, [], "foldername to saved_model.pb, only folder") 

Los archivos model.ckpt son puntos de control, generados durante el entrenamiento, esto se usa para reanudar el entrenamiento o para tener una copia de seguridad cuando algo sale mal después del entrenamiento. Si tiene un modelo guardado y un gráfico congelado, puede ignorarlo.

Los archivos .pbtxt son básicamente los mismos que los modelos discutidos anteriormente, pero luego son legibles para el ser humano, no binarios. Estos también pueden ser ignorados.

Para responder a su pregunta de conversión: los modelos guardados se pueden transformar en un gráfico congelado y viceversa, aunque un modelo guardado extraído de un gráfico congelado tampoco es entrenable, pero la forma en que se almacena es en el formato del modelo guardado. Los puntos de control se pueden leer y cargar en una sesión, y allí puede construir un modelo guardado a partir de ellos.

Espero haberte ayudado, cualquier pregunta, pregunta lejos!

Al igual que para agregar, frozen_graph.pb incluye dos cosas: 1. Definición de gráfico 2. Parámetros entrenados

Mientras que save_model.pb, solo tiene una definición gráfica.

Es por eso que si verifica el tamaño de ambos archivos .pb, frozen_graph.pb siempre será de mayor tamaño.