Siamese-pytorch
Siamese-pytorch copied to clipboard
怎么对训练出来的模型转onnx,然后简化!!最主要还是简化,原模型转onnx在cpu耗时太长,需要简化。不知道怎么简化,用torch的简化会报错
怎么对训练出来的模型转onnx,然后简化!!最主要还是简化,原模型转onnx在cpu耗时太长,需要简化。不知道怎么简化,用torch的简化会报错
什么是简化0 0
simplfy?
是的,用的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)
https://github.com/bubbliiiing/yolov5-pytorch/blob/24fca65152906a2fde6a9cd5fde88ab05bad4962/yolo.py#L336 可以参考这个看看0 0
请问onnx转成功了吗 ,我转一直报错
转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) 这个应该怎么修改
转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) 这个应该怎么修改
兄弟,请问你这个解决了吗,我也是一样
怎么对训练出来的模型转onnx,然后简化!!最主要还是简化,原模型转onnx在cpu耗时太长,需要简化。不知道怎么简化,用torch的简化会报错
兄弟,能请教一下你是怎么转onnx的吗
大家试试我这样能成功导出
-- 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)