问题
将pytorch的pth文件读取后转换为ONNX格式,尝试使用下述代码将model导出为onnx格式
onnx.export(model, input_image, 'model.onnx')
出现了如下错误
RuntimeError: ONNX export failed: Couldn‘t export operator aten::upsample_bilinear2d
环境
目前测试发现pytorch1.6及以下均存在此问题
复现
下述代码中使用的mode为bilinear
,align_corners设置为True
nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)
解析
在pytorch转onnx的上采样操作中的align_corners设置为True之后,就为upsample_bilinear2d操作了。将align_corners=False对应到onnx::Upsample
解决方案一:
替换为onnx支持的操作,调用 torch.nn.functional.interpolate 时(即在模型定义处修改),将 mode 从 bilinear 改成默认的 nearest,注意这个模式下不能设align_corners。改过后可以转onnx,但会丢精度
解决方案二:
# 报错代码
torch.onnx.export(model, input, onnx_path, verbose=True, input_names=input_names, output_names=output_names)
# 修改增加参数:opset_version=11
torch.onnx.export(model, input, onnx_path, verbose=True, input_names=input_names, output_names=output_names, opset_version=11)
参考
https://blog.csdn.net/u011622208/article/details/100779248
https://blog.csdn.net/weixin_40437821/article/details/113633166