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 OnNx Simplifier ในสคริปต์อื่นมันเป็นเรื่องง่าย
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 ยินดีต้อนรับสู่เข้าร่วม!
สำหรับผู้ใช้ภาษาอังกฤษฉันใช้งานบน Onnx Slack คุณสามารถค้นหาและแชทกับฉัน (Daquexian) ที่นั่น