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

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

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 日本語

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

次にコマンド ラインの使用例を示します。

[docker] $ 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 クオンタイザーを使用して調査および推定できます。次のコード スニペット例を参照してください。

[docker] $ vai_q_tensorflow inspect --input_frozen_graph=/tmp/inception_v1_inf_graph.pb

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

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

[docker] $ pip install netron
[docker] $ netron /tmp/inception_v3_inf_graph.pb