次のコマンドを実行してモデルを量子化します。
$vai_q_tensorflow quantize \
--input_frozen_graph frozen_graph.pb \
--input_nodes ${input_nodes} \
--input_shapes ${input_shapes} \
--output_nodes ${output_nodes} \
--input_fn input_fn \
[options]
input_nodes
と output_nodes
の引数は、量子化グラフの入力ノード名の一覧です。これらが量子化の開始点と終了点となります。次の図に示すように、それらの間のメイングラフは、量子化可能でな場合のみ量子化されます。
図 1. TensorFlow の量子化フロー
前処理部と後処理部の動作には量子化できないものがあるため、–input_nodes
を前処理部の最後のノード、-output_nodes
をメイン グラフの最後のノードとして設定することを推奨します。モデルが Vitis AI コンパイラによってコンパイルされ、DPU で運用されるとエラーが発生する場合があります。
入力ノードは、グラフのプレースホルダー ノードとは異なる場合があります。凍結されたグラフにグラフ用の前処理部が含まれない場合、プレースホルダー ノードを入力ノードとして設定する必要があります。
input_fn
はプレースホルダー ノードと一致している必要があります。
[options] は、オプションのパラメーターを表します。最も一般的に使用されるオプションは次のとおりです。
- weight_bit
- 量子化後の重みおよびバイアスのビット幅 (デフォルト値は 8)。
- activation_bit
- 量子化後の活性化値のビット幅 (デフォルト値は 8)。
- method
- 量子化方法。0 は non-overflow、1 は min-diffs、2 は min-diffs (正規化あり) を表します。non-overflow 手法は、量子化プロセスで値がオーバーフローしないようにします。量子化結果は、外れ値の影響を受けることがあります。min-diffs は、量子化プロセスでオーバーフローを許可し、量子化誤差を極力抑えることができます。外れ値に対する耐性があり、通常 non-overflow よりも範囲が狭くなります。