Onnx es genial, pero a veces demasiado complicado.
Un día quería exportar la siguiente operación simple de remodelación a 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 forma de entrada en este modelo es estática, así que lo que esperaba es

Sin embargo, obtuve el siguiente modelo complicado: en su lugar:

ONNX Simplifier se presenta para simplificar el modelo ONNX. Infiere todo el gráfico de cálculo y luego reemplaza a los operadores redundantes con sus salidas constantes (también conocido como plegamiento constante).
Hemos publicado ONNX Simplifier en ConvertModel.com. Funciona fuera de la caja y no necesita ninguna instalación . Tenga en cuenta que se ejecuta en el navegador localmente y su modelo es completamente seguro.
pip3 install -U pip && pip3 install onnxsim
Entonces
onnxsim input_onnx_model output_onnx_model
Para funciones más avanzadas, pruebe el siguiente comando para el mensaje de ayuda
onnxsim -h
Una comparación general entre un modelo complicado y su versión simplificada:

Si desea incrustar el paquete Python de Simplificador ONNX en otro script, es tan 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 objectPuede ver más detalles de la API en onnxsim/onnx_simplifier.py
¡Creamos un grupo QQ chino para ONNX!
ONNX QQ Group (chino): 1021964010, Código de verificación: NNDAB. ¡Bienvenido a unirse!
Para los usuarios ingleses, estoy activo en el Slack ONNX. Puedes encontrar y charlar conmigo (Daquexian) allí.