web-dev-qa-db-ja.com

frozen_inference_graph.pbとsaved_model.pbの違いは何ですか?

推論に使用するexport_inference_graph.pyを使用してエクスポートしたトレーニング済みモデル(Faster R-CNN)があります。作成されたfrozen_inference_graph.pbsaved_model.pbおよびmodel.ckpt*ファイルの違いを理解しようとしています。 .pbtxt表現も見ました。

私はこれを読んでみましたが、答えが本当に見つかりませんでした: https://www.tensorflow.org/extend/tool_developers/

これらの各ファイルには何が含まれていますか?どのものを他のどのものに変換できますか?それぞれの理想的な目的は何ですか?

11
nickponline

frozen_inference_graph.pbは、もはやトレーニングできない凍結グラフであり、graphdefを定義し、実際にはシリアル化されたグラフであり、次のコードでロードできます。

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"))

保存されたモデルは、tf.saved_model.builderによって生成されたモデルであり、セッションにインポートする必要があります。このファイルには、すべてのトレーニングウェイト(フリーズグラフと同様)を含む完全なグラフが含まれますが、ここでトレーニングできます。シリアル化されていないため、このスニペットで読み込む必要があります。 []は saved_model_cli で読み取ることができるタグ定数です。このモデルは、Google mlエンジンの例のように、予測にもよく使用されます。

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

model.ckptファイルは、トレーニング中に生成されるチェックポイントです。これは、トレーニングを再開したり、トレーニング後に問題が発生した場合にバックアップしたりするために使用されます。保存されたモデルとフリーズされたグラフがある場合、これは無視できます。

.pbtxtファイルは、以前に説明したモデルと基本的に同じですが、バイナリではなく人間が読める形式です。これらも同様に無視できます。

変換の質問に答えるには、保存されたモデルを凍結グラフに変換できます。また、凍結グラフから抽出されたsaved_modelもトレーニングできませんが、保存方法は保存モデル形式です。チェックポイントを読み込んでセッションに読み込むことができ、そこから保存されたモデルを構築できます。

私が助けてくれたら、どんな質問でも、お願いします!

14
T. Kelher

追加するように、frozen_graph.pbには次の2つの要素が含まれます。1.グラフ定義2.トレーニングされたパラメーター

Save_model.pbに対して、グラフ定義のみがあります。

そのため、両方の.pbファイルのサイズをチェックすると、frozen_graph.pbのサイズは常に大きくなります。

2
vipin bansal