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模型。它會滲透整個計算圖,然後用恆定輸出(又稱常數折疊)代替冗餘運算符。
我們已經在convertmodel.com上發布了ONNX簡化器。它開箱即用,不需要任何安裝。請注意,它在本地瀏覽器中運行,並且您的型號完全安全。
pip3 install -U pip && pip3 install onnxsim
然後
onnxsim input_onnx_model output_onnx_model
有關更高級功能,請嘗試以下命令獲取幫助消息
onnxsim -h
複雜模型與簡化版本之間的總體比較:

如果您想在另一個腳本中嵌入onnx簡化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 object您可以在onnxsim/onnx_simplifier.py中查看API的更多詳細信息。
我們為ONNX創建了一個中國QQ組!
ONNX QQ組(中文):1021964010,驗證代碼:NNDAB。歡迎加入!
對於英語用戶,我活躍在ONNX Slack上。您可以在那裡找到並與我(Daquexian)聊天。