tensorflow から onnx レコードへ

tf2onnx と onnxruntime をインストールする

pip install onnxruntime
pip install tf2onnx

tf を onnx に変換する手順は次のとおりです。

  1. tf 動的グラフをフリーズし、フリーズされた pb ファイルを生成します。
  2. 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

おすすめ

転載: blog.csdn.net/qq_45723275/article/details/129283375