Pytorch模型转onnx,变得很大

引言
  • 自己用PyTorch训练一个模型,pth模型大小有6.58M
  • 寻思着转换为onnx格式,便于推理和部署
  • 不料转换后模型竟然增加到242M
模型名称大小
raw.pth6.58M
convert_raw.onnx242M
slim_convert_raw.onnx7.5M
解决方案
  • 可能原因:onnx中有大量算子重复
  • 解决代码 [来源]
from onnxruntime.transformers.onnx_model import OnnxModel
import onnx

def has_same_value(val_one,val_two):
    if val_one.raw_data == val_two.raw_data:
        return True
    else:
        return False

path = f"convert_raw.onnx"  # 242M
output_path = f"slim_convert.onnx"  # 7.50M
model = onnx.load(path)
onnx_model = OnnxModel(model)

count = len(model.graph.initializer)
same = [-1] * count
for i in tqdm(range(count - 1)):
  if same[i] >= 0:
        continue
  for j in range(i+1, count):
      if has_same_value(model.graph.initializer[i], 
                        model.graph.initializer[j]):
          same[j] = i

for i in tqdm(range(count)):
   if same[i] >= 0:
       onnx_model.replace_input_of_all_nodes(model.graph.initializer[i].name,
                                             model.graph.initializer[same[i]].name)
onnx_model.update_graph()
onnx_model.save_model_to_file(output_path)
相关资料
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值