Siamese-pytorch icon indicating copy to clipboard operation
Siamese-pytorch copied to clipboard

怎么对训练出来的模型转onnx,然后简化!!最主要还是简化,原模型转onnx在cpu耗时太长,需要简化。不知道怎么简化,用torch的简化会报错

Open rickykazaf opened this issue 2 years ago • 9 comments

怎么对训练出来的模型转onnx,然后简化!!最主要还是简化,原模型转onnx在cpu耗时太长,需要简化。不知道怎么简化,用torch的简化会报错

rickykazaf avatar Apr 05 '23 09:04 rickykazaf

什么是简化0 0

bubbliiiing avatar Apr 07 '23 16:04 bubbliiiing

simplfy?

bubbliiiing avatar Apr 07 '23 16:04 bubbliiiing

是的,用的simplfy torch.onnx.export(self.net, dummy_input, output_path, verbose=True, opset_version=13) import onnx as onnx2 # Checks onnx_model = onnx2.load(output_path) # load onnx model onnx2.checker.check_model(onnx_model) # check onnx model

        try:
            import onnxsim

            print('\nStarting to simplify ONNX...')
            onnx_model, check = onnxsim.simplify(onnx_model)
            assert check, 'assert check failed'
        except Exception as e:
            print(f'Simplifier failure: {e}')

        # print(onnx.helper.printable_graph(onnx_model.graph))  # print a human readable model
        onnx2.save(onnx_model, output_path)
        print('ONNX export success, saved as %s' % output_path)

rickykazaf avatar Apr 08 '23 12:04 rickykazaf

https://github.com/bubbliiiing/yolov5-pytorch/blob/24fca65152906a2fde6a9cd5fde88ab05bad4962/yolo.py#L336 可以参考这个看看0 0

bubbliiiing avatar Apr 09 '23 15:04 bubbliiiing

请问onnx转成功了吗 ,我转一直报错

banzhaoyang avatar Jun 30 '23 06:06 banzhaoyang

转export的代码是 model = Siamese(input_shape=[35, 35], pretrained=False) model.load_state_dict(torch.load('logs/ep500-loss0.181-val_loss0.023.pth')) model.eval() dummy_input = torch.randn(1, 3, 35, 35) output_path = "model.onnx" torch.onnx.export(model, dummy_input, output_path, export_params=True, do_constant_folding=True, input_names=['input'], output_names=['output'])

然后报错 File "/home/lium/Siamese-pytorch-master/nets/siamese.py", line 31, in forward x1, x2 = x ValueError: not enough values to unpack (expected 2, got 1) 这个应该怎么修改

pythonL123 avatar Nov 18 '23 13:11 pythonL123

转export的代码是 model = Siamese(input_shape=[35, 35], pretrained=False) model.load_state_dict(torch.load('logs/ep500-loss0.181-val_loss0.023.pth')) model.eval() dummy_input = torch.randn(1, 3, 35, 35) output_path = "model.onnx" torch.onnx.export(model, dummy_input, output_path, export_params=True, do_constant_folding=True, input_names=['input'], output_names=['output'])

然后报错 File "/home/lium/Siamese-pytorch-master/nets/siamese.py", line 31, in forward x1, x2 = x ValueError: not enough values to unpack (expected 2, got 1) 这个应该怎么修改

兄弟,请问你这个解决了吗,我也是一样

ggsimida-cw avatar Mar 22 '24 19:03 ggsimida-cw

怎么对训练出来的模型转onnx,然后简化!!最主要还是简化,原模型转onnx在cpu耗时太长,需要简化。不知道怎么简化,用torch的简化会报错

兄弟,能请教一下你是怎么转onnx的吗

ggsimida-cw avatar Mar 22 '24 19:03 ggsimida-cw

大家试试我这样能成功导出

-- coding: utf-8 --

import onnx import torch

from nets.siamese import Siamese

if name == 'main': cuda = torch.cuda.is_available() device = torch.device('cuda:0' if cuda else 'cpu') model = Siamese([105, 105]) model.load_state_dict(torch.load("../best_weights/best_siamese_1_8k.pth", map_location=device)) input_image = [torch.randn(1, 3, 105, 105), torch.randn(1, 3, 105, 105)] onnx_outpath = "best_siamese_1_8k.onnx" torch.onnx.export(model, input_image, onnx_outpath, opset_version=13, verbose=True, do_constant_folding=True, input_names=['input'], output_names=['output'])

# 检查导出的onnx模型
onnx_model = onnx.load(onnx_outpath)
onnx.checker.check_model(onnx_model, full_check=True)
inferred = onnx.shape_inference.infer_shapes(onnx_model, check_type=True)

ronghuaxiang avatar Mar 29 '24 17:03 ronghuaxiang