[PYTHON] Tipps zum Wiederherstellen eines Modells beim Ersetzen des Platzhalters von INPUT in der FreezeGraphed .pb-Datei von Tensorflow [Ersetzen / Ersetzen / Konvertieren / Ändern / Aktualisieren / Ersetzen]

** [1,?,?, 3] ** Der ** Platzhalter ** der .pb-Datei, definiert durch die Eingabegröße [1, 513, 513, 3] Ein Beispielprogramm, das .pb neu generiert, indem es gewaltsam durch ** Platzhalter ** ersetzt wird.

** name = 'image' ** Teil ermöglicht es Ihnen, den Namen des ersetzten Platzhalters frei anzugeben. Der Teil ** image: 0 ** von input_map = {'image: 0': input} gibt den Platzhalternamen des Modells vor der Konvertierung an.

replacement_of_input_placeholder.py


import tensorflow as tf
from tensorflow.tools.graph_transforms import TransformGraph

with tf.compat.v1.Session() as sess:

    # shape=[1, ?, ?, 3] -> shape=[1, 513, 513, 3]
    # name='image' specifies the placeholder name of the converted model
    inputs = tf.compat.v1.placeholder(tf.float32, shape=[1, 513, 513, 3], name='image')
    with tf.io.gfile.GFile('./model-mobilenet_v1_101.pb', 'rb') as f:
        graph_def = tf.compat.v1.GraphDef()
    graph_def.ParseFromString(f.read())

    # 'image:0' specifies the placeholder name of the model before conversion
    tf.graph_util.import_graph_def(graph_def, input_map={'image:0': inputs}, name='')
    print([n for n in tf.compat.v1.get_default_graph().as_graph_def().node if n.name == 'image'])

    # Delete Placeholder "image" before conversion
    # see: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms
    # TransformGraph(
    #     graph_def(),
    #     input_op_name,
    #     output_op_names,
    #     conversion options
    # )
    optimized_graph_def = TransformGraph(
                              tf.compat.v1.get_default_graph().as_graph_def(),
                              'image',
                              ['heatmap','offset_2','displacement_fwd_2','displacement_bwd_2'],
                              ['strip_unused_nodes(type=float, shape="1,513,513,3")'])

    tf.io.write_graph(optimized_graph_def, './', 'model-mobilenet_v1_101_513.pb', as_text=False)

Result


[name: "image"
op: "Placeholder"
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "shape"
  value {
    shape {
      dim {
        size: 1
      }
      dim {
        size: 513
      }
      dim {
        size: 513
      }
      dim {
        size: 3
      }
    }
  }
}
]

Graph Transform Tool https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms

Recommended Posts

Tipps zum Wiederherstellen eines Modells beim Ersetzen des Platzhalters von INPUT in der FreezeGraphed .pb-Datei von Tensorflow [Ersetzen / Ersetzen / Konvertieren / Ändern / Aktualisieren / Ersetzen]
Tipps zur Implementierung eines etwas schwierigen Modells oder Trainings mit Keras