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 Simplifier представлен для упрощения модели ONNX. Он делает весь график вычислений, а затем заменяет избыточных операторов своими постоянными выходами (он же постоянный складывание).
Мы опубликовали Onnx Simplifier на ConvertModel.com. Это работает из коробки и не нуждается в никакой установке . Обратите внимание, что он работает в браузере локально, а ваша модель полностью безопасна.
pip3 install -U pip && pip3 install onnxsim
Затем
onnxsim input_onnx_model output_onnx_model
Для получения более продвинутых функций, попробуйте следующую команду для помощи
onnxsim -h
Общее сравнение между сложной моделью и ее упрощенной версией:

Если вы хотите внедрить пакет Python Python Onnx в другой сценарий, это просто так просто.
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Вы можете увидеть более подробную информацию об API в onnxsim/onnx_simplifier.py
Мы создали китайскую группу QQ для Onnx!
ONNX QQ GROUP (Китайский): 1021964010, код проверки: NNDAB. Добро пожаловать в присоединение!
Для пользователей английского я активен в Slack Onnx. Вы можете найти и пообщаться со мной (Daquexian) там.