次のコマンドを実行してモデルを量子化します。
$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
をメイン グラフ部の最後のノードに設定することを推奨しています。つまり、前処理部と後処理部の一部の動作は量子化できないため、量子化したモデルを DPU で実行する必要がある場合に、Vitis AI クオンタイザーでコンパイルするとエラーが発生する可能性があります。
入力ノードは、グラフのプレースホルダー ノードとは異なる場合があります。凍結されたグラフにグラフ用の前処理部がない場合、プレースホルダー ノードは入力ノードに設定されている必要があります。
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 よりも範囲が狭くなります。