凍結された推論グラフを生成 - 2.5 日本語

Vitis AI ユーザー ガイド (UG1414)

Document ID
UG1414
Release Date
2022-06-15
Version
2.5 日本語

TensorFlow 1.x を使用してモデルをトレーニングすると、GraphDef ファイル (通常は .pb または .pbtxt 拡張子で終わる) とチェックポイント ファイル セットを格納するフォルダーが作成されます。モバイルまたは組み込みシステムでの運用に必要なのは、「凍結」された単一の GraphDef ファイルです。すべての変数をインライン定数に変換しているため、すべて 1 つのファイルに含めることができます。変換処理用として、TensorFlow は freeze_graph.py を提供します。これは vai_q_tensorflow クオンタイザー ツールと共に自動的にインストールされます。

コマンド ラインの使用例は次のとおりです。

$ freeze_graph \
    --input_graph  /tmp/inception_v1_inf_graph.pb \
    --input_checkpoint  /tmp/checkpoints/model.ckpt-1000 \
    --input_binary  true \
    --output_graph  /tmp/frozen_graph.pb \
    --output_node_names  InceptionV1/Predictions/Reshape_1

–input_graph は、トレーニング グラフ以外の推論グラフである必要があります。データ プリプロセッシング処理と損失関数は推論と運用には不要なため、frozen_graph.pb にはモデルの主要な部分のみが含まれます。特にデータ プリプロセッシング処理は、量子化の実行中にInput_fn によって行われ、キャリブレーション用に適切な入力データが生成されます。

注記: ドロップアウトやバッチ正規化などの一部の動作は、トレーニング フェーズと推論フェーズで異なる動作をします。グラフを凍結するときは、それらが推論フェーズであることを確認してください。たとえば、tf.layers.dropout/tf.layers.batch_normalization を使用する際にフラグ is_training=false を設定できます。tf.keras を使用するモデルの場合、グラフを作成する前に tf.keras.backend.set_learning_phase(0) を呼び出します。
ヒント: オプションの詳細は、freeze_graph --help と入力します。

入力ノード名と出力ノード名はモデルによって異なりますが、vai_q_tensorflow クオンタイザーを使用して調査および推定できます。例として、次のコード スニペットを参照してください。

$ vai_q_tensorflow inspect --input_frozen_graph=/tmp/inception_v1_inf_graph.pb

グラフ内にグラフ用の前処理や後処理がある場合、推定された入力ノードと出力ノードは量子化に使用できません。これは、一部の動作が量子化できないため、量子化したモデルを DPU で運用する場合に、Vitis AI コンパイラでコンパイルするとエラーが発生する可能性があるためです。

グラフの入力および出力名を取得するもう 1 つの方法は、グラフを可視化することです。これには、TensorBoard と Netron を使用できます。次の例は Netron を使用しています。

$ pip install netron
$ netron /tmp/inception_v3_inf_graph.pb