Pytorch——初探onnx(1)解决upsample_bilinear2d转换问题


问题

将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及以下均存在此问题

复现

下述代码中使用的modebilinearalign_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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM