Onnx est génial, mais parfois trop compliqué.
Un jour, je voulais exporter l'opération de remodelage simple suivante vers 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' ])La forme d'entrée de ce modèle est statique, donc ce à quoi je m'attendais, c'est

Cependant, j'ai plutôt le modèle compliqué suivant:

Le simplificateur ONNX est présenté pour simplifier le modèle ONNX. Il déduit l'ensemble du graphique de calcul, puis remplace les opérateurs redondants par leurs sorties constantes (aka pliage constant).
Nous avons publié ONNX Simplifier sur convertmodel.com. Il fonctionne hors de la boîte et n'a besoin d'aucune installation . Notez qu'il s'exécute localement dans le navigateur et que votre modèle est complètement sûr.
pip3 install -U pip && pip3 install onnxsim
Alors
onnxsim input_onnx_model output_onnx_model
Pour des fonctionnalités plus avancées, essayez la commande suivante pour un message d'aide
onnxsim -h
Une comparaison globale entre un modèle compliqué et sa version simplifiée:

Si vous souhaitez intégrer le package Python ONNX Simplifier dans un autre script, c'est tout simplement simple.
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 objectVous pouvez voir plus de détails sur l'API dans onnxsim / onnx_simplifier.py
Nous avons créé un groupe QQ chinois pour ONNX!
ONNX QQ Group (chinois): 1021964010, code de vérification: Nndab. Bienvenue à rejoindre!
Pour les utilisateurs anglais, je suis actif sur l'Onnx Slack. Vous pouvez trouver et discuter avec moi (daquexian) là-bas.