onnx simplifier
1.0.0
ONNXは素晴らしいですが、複雑すぎることもあります。
ある日、私は次の単純な再シャープ操作をONNXにエクスポートしたかった:
import torch
class JustReshape ( torch . nn . Module ):
def __init__ ( self ):
super ( JustReshape , self ). __init__ ()
def forward ( self , x ):
return x . view (( x . shape [ 0 ], x . shape [ 1 ], x . shape [ 3 ], x . shape [ 2 ]))
net = JustReshape ()
model_name = 'just_reshape.onnx'
dummy_input = torch . randn ( 2 , 3 , 4 , 5 )
torch . onnx . export ( net , dummy_input , model_name , input_names = [ 'input' ], output_names = [ 'output' ])このモデルの入力形状は静的なので、私が期待したのは

ただし、代わりに次の複雑なモデルを取得しました。

ONNXモデルを簡素化するために、ONNX Simplifierが提示されます。計算グラフ全体を推進し、冗長な演算子を一定の出力(別名一定の折りたたみ)に置き換えます。
convertModel.comでonnx simplifierを公開しました。それは箱から出して動作し、インストールは必要ありません。ブラウザでローカルで実行され、モデルが完全に安全であることに注意してください。
pip3 install -U pip && pip3 install onnxsim
それから
onnxsim input_onnx_model output_onnx_model
より高度な機能については、ヘルプメッセージのために次のコマンドを試してください
onnxsim -h
複雑なモデルとその簡素化されたバージョンの全体的な比較:

別のスクリプトにonnx simplifier pythonパッケージを埋めたい場合は、まさに簡単です。
import onnx
from onnxsim import simplify
# load your predefined ONNX model
model = onnx . load ( filename )
# convert model
model_simp , check = simplify ( model )
assert check , "Simplified ONNX model could not be validated"
# use model_simp as a standard ONNX model objectonnxsim/onnx_simplifier.pyでAPIの詳細を見ることができます
ONNX用の中国のQQグループを作成しました!
ONNX QQグループ(中国語):1021964010、検証コード:nndab。参加してください!
英語ユーザーの場合、私はONNXスラックで活動しています。あなたはそこで私(daquexian)を見つけてチャットすることができます。