欢迎光临散文网 会员登陆 & 注册

编译 ONNX 模型

2023-06-05 21:04 作者:HyperAI超神经  | 我要投稿

本篇文章译自英文文档 Compile ONNX Models — tvm 0.13.dev0 documentation
作者是 Joshua Z. Zhang
更多 TVM 中文文档可访问 →TVM 中文站。


本文将介绍如何用 Relay 部署 ONNX 模型。

首先安装 ONNX 包,最便捷的方法推荐安装 protobuf 编译器:



或参考官方网站:
https://github.com/onnx/onnx


加载预训练的 ONNX 模型

下面示例中的超分辨率模型与 ONNX 教程 中的模型完全相同,跳过 PyTorch 模型的构建部分,下载保存的 ONNX 模型:



加载测试图像

该模型接收大小为 224x224 的单个图像作为输入,输出沿每个轴放大 3 倍的图像(即大小为 672x672)。为适配输入的 shape,重新缩放猫图像,并转换为 YCbCr。然后超分辨率模型应用于亮度(Y)通道。



使用 Relay 编译模型

通常 ONNX 模型将输入值与参数值混合在一起,输入名称为 1,具体要查看模型文档来确定完整的输入和参数名称空间。

将 shape 字典传给 relay.frontend.from_onnx 方法,以便 Relay 知道哪些 ONNX 参数是输入,哪些是参数,并提供输入尺寸的静态定义:



输出结果:



在 TVM 上执行


查看结果

将输入和输出图像放在一起比对。亮度通道 Y是模型的输出。将色度通道 Cb 和 Cr 调整到匹配简单的双三次算法,然后将图像重新组合,并转换回 RGB。



输出结果:


注意

ONNX 导入器在导入时默认根据动态 shape 定义模型,编译器在编译时将模型转换为静态 shape。如果失败,模型中可能仍存在动态操作。目前并非所有 TVM 内核都支持动态 shape,如果遇到动态内核错误,请在 discuss.tvm.apache.org 上提交 issue。

这个特定的模型是用旧版本的 ONNX 构建的。在导入阶段,ONNX 导入器运行 ONNX 验证程序(可能抛出属性类型不匹配的警告)。由于 TVM 支持许多不同的 ONNX 版本,所以 Relay 模型仍然有效。

下载 Python 源代码:from_onnx.py

下载 Jupyter Notebook:from_onnx.ipynb



编译 ONNX 模型的评论 (共 条)

分享到微博请遵守国家法律