说明:基于retinaFace源码,pytorch转onnx遇到的问题。
**
问题一:opset版本
**
解决方法 :添加opset_version=11参数
torch_out = torch.onnx.export(net, inputs, output_onnx, export_params=True, verbose=True, input_names=input_names, output_names=output_names, opset_version=11)
问题二:opencv版本
因为最初使用的opencv版本是3.4.5,调用转换后的onnx文件时,报错如下
解决方法:更换版本为opencv==4.4.0
问题三:获取推理信息缺失(只有一个output)
因为retinaface输出loc, conf, landm三个信息。pytorch转onnx代码中output_names中只用一个’output0’,修改如下:
解决方法:
output_onnx = 'HyperDetector.onnx'
print("==> Exporting model to ONNX format at '{}'".format(output_onnx))
input_names = ['input0']
# output_names = ['output0']
output_names = ["output0", "output1", "output2"]
inputs = torch.randn(1, 3, args.long_side, args.long_side).to(device)
torch_out = torch.onnx.export(net, inputs, output_onnx, export_params=True, verbose=True, input_names=input_names, output_names=output_names, opset_version=11)
另外,opencv推理代码中forwar()里需要对用这三个输出对应的参数
res = net.forward(['output0', 'output1', 'output2'])