Onnx é ótimo, mas às vezes complicado demais.
Um dia, eu queria exportar a seguinte operação de remodelamento simples para o 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' ])A forma de entrada neste modelo é estática, então o que eu esperava é

No entanto, recebi o seguinte modelo complicado:

O Onnx Simplificador é apresentado para simplificar o modelo ONNX. Ele infere todo o gráfico de computação e substitui os operadores redundantes por suas saídas constantes (também conhecidas como dobragem constante).
Publicamos o OnNX Simplifier no convertmodel.com. Funciona fora da caixa e não precisa de nenhuma instalação . Observe que ele é executado no navegador localmente e seu modelo é completamente seguro.
pip3 install -U pip && pip3 install onnxsim
Então
onnxsim input_onnx_model output_onnx_model
Para recursos mais avançados, tente o seguinte comando para obter uma mensagem de ajuda
onnxsim -h
Uma comparação geral entre um modelo complicado e sua versão simplificada:

Se você deseja incorporar o pacote Python simplificador OnNX em outro script, é tão simples assim.
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 objectVocê pode ver mais detalhes da API em onnxsim/ondnx_simplifier.py
Criamos um grupo QQ chinês para ONNX!
Onnx QQ Group (chinês): 1021964010, Código de verificação: nndab. Bem -vindo para participar!
Para usuários ingleses, estou ativo no Slack Onnx. Você pode encontrar e conversar comigo (Daquexian) lá.