Caffe と TensorFlow の主な違いは、モデルが単一ファイルで定義され、量子化情報を GraphDef から取得する必要があるという点です。
**************************************************
* VITIS_AI Compilation - Xilinx Inc.
**************************************************
usage: vai_c_tensorflow.py [-h] [-f FROZEN_PB] [-a ARCH] [-o OUTPUT_DIR]
[-n NET_NAME] [-e OPTIONS] [-q]
optional arguments:
-h, --help show this help message and exit
-f FROZEN_PB, --frozen_pb FROZEN_PB
prototxt
-a ARCH, --arch ARCH json file
-o OUTPUT_DIR, --output_dir OUTPUT_DIR
output directory
-n NET_NAME, --net_name NET_NAME
prefix-name for the outputs
-e OPTIONS, --options OPTIONS
extra options
-q, --quant_info extract quant info
これで、インターフェイスは凍結されたグラフの指定方法を明確に定義しています。モデルと量子化情報が必要であると想定します。
vai_c_tensorflow.py --frozen_pb deploy.pb --net_name cmd --options "{'placeholdershape': {'input_tensor' : [1,224,224,3]}, 'quant_cfgfile': 'fix_info.txt'}" --arch arch.json --output_dir work/temp
ここに示されているとおり、量子化情報と入力プレースホルダーの形状が指定されています。通常、モデルの入力を指定するプレースホルダー レイヤーを使用します。すべてのサイズを指定し、バッチ数 (= 1) を使用することを推奨しています。レイテンシを最適化し、バッチ サイズ 1 ~ 4 を受け入れます (ただし、これによりレイテンシは改善されず、スループットもほとんど改善されず、どのネットワークに対しても完全なテストは実施されない)。
キャリブレーションと微調整では、ネイティブ TensorFlow で実行できないモデルが提供される場合がありますが、量子化情報が含まれています。[-q, --quant_info extract quant info
]
を使用してフロント エンドを実行すると、量子化情報が作成されます。
ソフトウェア リポジトリには、コンパイラが 2 回呼び出される例が提供されています。1 回目の呼び出しで量子化情報ファイルを作成し (デフォルトの名前と場所を使用)、これをコード生成の入力として使用します。
注記: 出力ディレクトリと生成されるコード名を必ず提供してください。ランタイム コントラクトは、出力が書き込まれる場所に基づいています。アーキテクチャごとに異なるコンパイラを呼び出す主な方法として、arch.json ファイルの使用があります。このファイルは、出力記述用のテンプレートとして、およびプラットフォーム/ターゲット FPGA デザインの内部機能として使用されます。さらに、アドバンス ユーザーが独自の最適化を利用できる Python インターフェイスもあります。