tf2onnx と onnxruntime をインストールする
pip install onnxruntime
pip install tf2onnx
tf を onnx に変換する手順は次のとおりです。
- tf 動的グラフをフリーズし、フリーズされた pb ファイルを生成します。
- tf2onnx を使用して pb ファイルを onnx ファイルに変換します
次のコードを使用して、tf 動的グラフをフリーズします。
def export_frozen_graph(model, model_dir, name_pb) :
f = tf.function(lambda x: model(inputs=x))
f = f.get_concrete_function(x=(tf.TensorSpec(model.inputs[0].shape, model.inputs[0].dtype)))
frozen_func = convert_variables_to_constants_v2(f)
frozen_func.graph.as_graph_def()
print("-" * 50)
print("Frozen model inputs: ")
print(frozen_func.inputs)
print("Frozen model outputs: ")
print(frozen_func.outputs)
tf.io.write_graph(graph_or_graph_def=frozen_func.graph,
logdir=model_dir,
name=name_pb,
as_text=False)
tf2onnx を使用して pb ファイルを onnx ファイルに変換する場合は、ターミナル上で実行する必要があります。ほとんどの tf モデルの入力レイアウトは NHWC ですが、ONNX モデルの入力レイアウトは NCHW であることに注意してください。変換時にこのオプションを追加します。--inputs-as-nchw
他のオプションについては、非常に詳細なドキュメントを参照してください。具体的な実行コマンドは次のとおりです。
python -m tf2onnx.convert --input yolo.pb --output model.onnx --outputs Identity:0,Identity_1:0,Identity_2:0 --inputs x:0 --inputs-as-nchw x:0 --opset 10
パラメータの説明:
- 入力 入力 PB モデル
- 出力 出力 onnx ファイル名
- inputs 入力レイヤーの名前。複数の入力がある場合は、カンマで区切ります。
- 出力 出力レイヤー名。出力が複数ある場合はカンマで区切ります。
- –inputs-as-nchw は入力を nchw 形式として受け取ります。入力レイヤーの名前を追加することに注意してください
- --opset onnx バージョン番号
プログラムを通じて直接転送します。
tf2onnx.convert.from_keras(model, inputs_as_nchw=[model.inputs[0].name], output_path=model_filepath + 'yolo.onnx') --opset 10