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)聊天。