编译 ONNX 模型

OnnxRuntime编译 (注:网上有教程说可以通过修改.git/config文件来解决中断的问题,尝试之后还是经常会断,可能是我没修改对,可参考: https://zhuanlan.zhihu.com/p/411887386)define Minimal_Build 用来较少一些非必要的函数,但是仅支持ORT模型文件,即需要先使用官方提供给python脚本来将ONNX文件转为ORT模型文件。其中.ort文件用于模型推导,因为最小的编译的onnxruntime仅支持ort模型文件,不再支持onnx文件。得到四个文件,两两对应。 阅读详情

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

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

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

pip install --user onnx onnxoptimizer

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

import onnx
import numpy as np
import tvm
from tvm import te
import tvm.relay as relay
from tvm.contrib.download import download_testdata

加载预训练的 ONNX 模型

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

model_url = "".join(
    [
        "https://gist.github.com/zhreshold/",
        "bcda4716699ac97ea44f791c24310193/raw/",
        "93672b029103648953c4e5ad3ac3aadf346a4cdc/",
        "super_resolution_0.2.onnx",
    ]
)
model_path = download_testdata(model_url, "super_resolution.onnx", module="onnx")


# 现在磁盘上有 super_resolution.onnx 模型
onnx_model = onnx.load(model_path)

加载测试图像

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

from PIL import Image

img_url = "https://github.com/dmlc/mxnet.js/blob/main/data/cat.png?raw=true"
img_path = download_testdata(img_url, "cat.png", module="data")
img = Image.open(img_path).resize((224, 224))
img_ycbcr = img.convert("YCbCr")  # convert to YCbCr
img_y, img_cb, img_cr = img_ycbcr.split()
x = np.array(img_y)[np.newaxis, np.newaxis, :, :]

使用 Relay 编译模型

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

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

target = "llvm"

input_name = "1"
shape_dict = {input_name: x.shape}
mod, params = relay.frontend.from_onnx(onnx_model, shape_dict)

with tvm.transform.PassContext(opt_level=1):
    executor = relay.build_module.create_executor(
        "graph", mod, tvm.cpu(0), target, params
    ).evaluate()

输出结果:

/workspace/python/tvm/relay/frontend/onnx.py:5785: UserWarning: Mismatched attribute type in ' : kernel_shape'

==> Context: Bad node spec for node. Name:  OpType: Conv
  warnings.warn(str(e))
/workspace/python/tvm/driver/build_module.py:268: UserWarning: target_host parameter is going to be deprecated. Please pass in tvm.target.Target(target, host=target_host) instead.
  "target_host parameter is going to be deprecated. "

在 TVM 上执行

dtype = "float32"
tvm_output = executor(tvm.nd.array(x.astype(dtype))).numpy()

查看结果

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

from matplotlib import pyplot as plt

out_y = Image.fromarray(np.uint8((tvm_output[0, 0]).clip(0, 255)), mode="L")
out_cb = img_cb.resize(out_y.size, Image.BICUBIC)
out_cr = img_cr.resize(out_y.size, Image.BICUBIC)
result = Image.merge("YCbCr", [out_y, out_cb, out_cr]).convert("RGB")
canvas = np.full((672, 672 * 2, 3), 255)
canvas[0:224, 0:224, :] = np.asarray(img)
canvas[:, 672:, :] = np.asarray(result)
plt.imshow(canvas.astype(np.uint8))
plt.show()

from onnx

输出结果:

/workspace/gallery/how_to/compile_models/from_onnx.py:120: DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BICUBIC instead.
  out_cb = img_cb.resize(out_y.size, Image.BICUBIC)
/workspace/gallery/how_to/compile_models/from_onnx.py:121: DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BICUBIC instead.
  out_cr = img_cr.resize(out_y.size, Image.BICUBIC)

注意
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

Window10 ONNX Runtime 源码编译静态库 + MMDeploy源码编译动态库 管理员运行cmd ->cd /d D:/develop/onnxruntime。尝试过编译静态库,编译成功,但是在运行中出现model加载失败未找到原因,就放弃了。4、使用vs2019命令工具的lib.exe命令来把多个lib打包成一个lib。3、用vs2019打开生成的onnxruntime项目。2、管理员运行命令行进入onnxruntime目录。一、ONNX Runtime(v1.12.0)源码编译。正常编译会生成很多lib库。二、MMDeploy源码编译动态库。 阅读详情

相关推荐

ONNX Runtime编译之旅:从源码到优化的实战指南

本文详细介绍了ONNX Runtime从源码编译到性能优化的完整实战指南,涵盖Windows和Linux平台的编译配置、常见问题解决方案及高级优化技巧。通过源码编译可解决环境适配、功能定制和性能优化等企业级需求,特别适合需要深度定制AI推理引擎的开发者。文章还提供了GPU加速编译、交叉编译等高级场景的配置方法,帮助提升模型部署效率。

weixin_28835551的博客 317

Windows下编译Onnxruntime

Onnx解决了模型通用问题,但是使用onnx往往需要自己从源码编译,编译本身很简单,但是坑也不少,本文介绍个人在windows下编译的经验,希望能对大家有所帮助。

阿丹的彩蛋 1万+

编译ONNX模型Compile ONNX Models

编译ONNX模型Compile ONNX Models 本文是一篇介绍如何使用Relay部署ONNX模型的说明。 首先,必须安装ONNX包。 一个快速的解决方案是安装protobuf编译器,然后 pip install onnx –user 或者参考官方网站: https://github.com/onnx/onnx import onnx import numpy as np import tvm from tvm import te import tvm.relay as relay from tvm.

吴建明wujianming_110117 906

ONNX-TensorRT模型转换代码编译笔记

ONNX-TensorRT模型转换代码编译笔记

动力中原 1128

使用Relay部署编译ONNX模型

使用Relay部署编译ONNX模型 本文介绍如何使用Relay部署ONNX模型的入门。 首先,必须安装ONNX软件包。 一个快速的解决方案是安装protobuf编译器,然后 pip install onnx --user 或参考官方网站。 https://github.com/onnx/onnx import onnx import numpy as np import tvm from tvm import te import tvm.relay as relay from tvm.contrib.dow

吴建明wujianming_110117 684

昇腾模型编译优化实战:从ONNX到高效部署

模型编译技术是AI工程化落地的关键环节,通过将训练框架的中间表示(如ONNX)转化为硬件优化的可执行文件,解决推理延迟高、资源占用大等部署瓶颈。其核心原理包括图优化、算子融合和内存布局调整,能显著提升昇腾等AI芯片的运算效率。在计算机视觉和自然语言处理领域,合理的编译策略可使Transformer和CNN模型获得20-40%的加速。本文结合CANN工具链实战经验,详解如何通过动态Shape处理、算子融合等技术手段,将ResNet50等模型的端到端推理延迟从78ms优化至32ms,为AI应用部署提供性能保障。

weixin_29048775的博客 238

使用TVM编译ONNX模型的完整指南

在深度学习模型部署领域,ONNX(Open Neural Network Exchange)格式已经成为模型交换的重要标准。本文将详细介绍如何使用TVM(深度学习编译器)来编译和部署ONNX模型,帮助开发者将训练好的模型高效地部署到各种硬件平台上。 ## 准备工作 ### 安装必要的软件包 在开始之前,需要确保已经安装了以下Python包: ```bash pip install onnx

gitblog_00720的博客 945

TVM编译ONNX模型

编译ONNX模型 本文是介绍如何使用Relay部署ONNX模型的入门教程。 首先,必须安装ONNX软件包。 一个快速的解决方案是安装protobuf编译器,然后 pip install onnx --user 或请参考官方网站。 https://github.com/onnx/onnx import onnx import numpy as np import tvm from tvm import te import tvm.relay as relay from tvm.contrib.downloa

qq_33287871的博客 843

转换onnx_编译ONNX模型Compile ONNX Models

编译ONNX模型Compile ONNX Models本文是一篇介绍如何使用Relay部署ONNX模型的说明。 首先,必须安装ONNX包。 一个快速的解决方案是安装protobuf编译器,然后pip install onnx –user或者参考官方网站: https://github.com/onnx/onnximport onnximport numpy as npimport tvmfrom ...

weixin_29628189的博客 356

onnxruntime-projects:一些onnxruntime项目的代码

onnxruntime项目 介绍 该存储库包含一些onnxruntime项目的代码,例如分类,分段,检测,样式转换和超分辨率。 Onnx运行时 ONNX Runtime是面向性能的完整评分引擎,适用于开放神经网络交换(ONNX)模型,具有开放可扩展的体系结构,可不断解决AI和深度学习的最新发展。 在我的存储库中,onnxruntime.dll已被编译。 您可以下载它,并在查看有关onnxruntime的特定信息。 专案 编程语言是C ++,平台是Visual Studio。 我已经基于onnxruntime官方样本完成了一些项目。 该链接已在前面提到过。 另外,您可以在下载一些onnx模型。 如有必要,您可以在看到onnx模型的结构。 视窗 网络 班级 输入分辨率 批量大小 迭代次数 CPU运行时间 GPU运行时间 TRT运行时间* 移动网 1000 224x224 1个 1000

如何通过CAD图中的坐标来确定是哪个坐标系

地理坐标系:为球面坐标。参考平面地是椭球面,坐标单位:经纬度。以地球参考为例,坐标系就相当于整个地球,而地理坐标系就是椭球状的完整的立体地球。所以我们可以看到生活中的数据与地图是一定含有地理坐标系的,因为他是客观上来说确确实实存在的。投影坐标系:为平面坐标。参考平面地是水平面,坐标单位:米、千米等。这就相当于把地球当成一个橘子,然后一刀切开,把橘子皮平面铺开,这个过程就是地理投影的过程。严谨一点来说就是建立一个参考系统,按照对应位置把椭球体投射到平面。那坐标系统主要有那些呢?北京54。

vjmap的博客 2万+

TVM Compiler中文教程:TVM编译ONNX模型并执行

编译ONNX模型 下面描述使用Relay如何部署ONNX模型: #安装onnx,https://github.com/onnx/onnx pip install onnx --user 首先导入所需要的python包: import onnx import numpy as np import tvm import tvm.relay as relay from tvm.contrib.dow...

Mars_WH的专栏 3907

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3330

onnx转mnn模型mingw32编译的使用

onnx转mnn模型mingw32编译的使用

DaDianJiShiQi的博客 1671

同济大学C++mooc第五、六讲参考答案

同济大学C++moooc第5、6讲 第五讲 第一题 随机产生10个30~100(包括30,100)的正整数,求它们的最大值、最小值、平均值,并显示整个数组的值和结果。 代码片. // #include<iostream> const int n = 10; using namespace std; int main() { int s[n],i,j,t,sum=0; for (i = 0; i < n; i++)

cjzui6666的博客 1万+

OpenLayers源码解析1 Map.js

Map.js 父类:./PluggableMap/PluggableMap 引用:5个模块 ./renderer/Composite.js ./PluggableMap.js ./obj.js ./control.js(控件) ./interaction.js(交互) 主要功能:核心组件,渲染地图 必要参数: view layers target controls和interactions要是未指定,使用默认值 方法:createRenderer()? /** * @module ol/Map */ i

qq_45005996的博客 1898

gh_mirrors/model/models离线部署:ARM架构下ONNX模型编译教程

在边缘计算场景中,ARM架构设备(如树莓派、NVIDIA Jetson系列)凭借低功耗特性被广泛应用。然而ONNX模型在ARM平台部署常面临以下痛点: - 官方预编译库缺乏针对ARMv7/ARM64的优化支持 - 交叉编译环境配置复杂,依赖项版本冲突频发 - 模型量化与硬件加速特性(如NEON指令集)难以充分利用 本文基于`gh_mirrors/model/models`项目(仓库地址:http...

gitblog_00908的博客 1200

Uniapp+Vue3+Monorepo:如何优化你的前端开发流程(附完整配置代码)

本文详细介绍了如何利用Uniapp+Vue3+Monorepo技术栈优化前端开发流程,提升代码可维护性和团队协作效率。通过Monorepo架构实现依赖管理智能化、代码复用最大化和构建流程统一化,结合完整配置代码和实战指南,帮助开发者快速构建高性能跨端应用。

weixin_29011993的博客 453

模型编译前端表示对比 onnx vs tvm relax

(开放交换格式)、(ONNX → TensorRT 的 Parser/导入器)、(编译器内部 IR)。三者层次不同:ONNX 是格式,ONNX-TensorRT 是面向单一后端的导入桥,Relax 是通用编译器 IR。

happyAnger6的专栏 361

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

算法大师! 629

LLC 谐振变换器开发设计1

本文档详细介绍了基于DSP28335的LLC谐振变换器开发设计。系统采用频率调制(FM)控制方式,实现高效率、高功率密度的隔离型DC/DC变换。文档阐述了LLC拓扑结构和工作原理,给出了谐振频率、品质因数等关键参数的计算公式。硬件设计包括功率器件选型和采样电路实现,软件部分提供了DSP28335的核心控制算法和代码示例,涵盖频率转换、PI控制和PWM生成。系统还设计了启动策略和保护机制,确保可靠运行。该设计实现了主开关零电压开通和低纹波输出特性。

341

从 ONNX 到高效 OM:CANN 模型编译最佳实践

若 ONNX 包含非标准算子(如GridSample),需提供python编辑# 将 GridSample 拆解为 CANN 支持的原语(如 gather + interpolate)...然后在编译时指定:bash编辑这三篇文章分别聚焦于性能分析精度-效率权衡和模型编译优化,构成了 CANN 高效部署的“铁三角”。掌握这些技能,你不仅能“让模型跑起来”,更能“让模型飞起来”。所有技术细节均基于公开文档规范整理,适用于任何基于 CANN 架构的开发环境。

A2025_的博客 419

Pytorch实用教程:super(MLP,self).__init__()和super().__init__()有什么区别?

在 Python 中,super()函数用于调用父类(超类)的方法。它的使用在继承关系中非常常见,特别是在初始化继承自父类的属性时。在 PyTorch 中,这通常见于初始化nn.Module类的子类。super()的两种调用方式有微妙的差别,但在 Python 3 中常常用来达到同样的目的。这种写法在 Python 2 中非常常见。这里,super()被调用时需要指定当前类名(MLP)和当前实例(self。

若北辰 1026

ONNX-MLIR:加速深度学习模型的编译基础设施

ONNX-MLIR是一个由C++主导并融合了MLIR(Multi-Level Intermediate Representation)技术的开源项目,旨在实现Open Neural Network Exchange (ONNX)模型到高效执行代码的转换。此项目由一群致力于优化机器学习部署流程的开发者维护,它利用LLVM生态系统的力量,为AI模型提供了从表示到编译的一站式解决方案。 ### 核心功

gitblog_01274的博客 903

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ubuntu 下使用Hailo模块 将onnx 模型量化编译hef 模型(二)

原生模式使用 float32 参数运行原始模型,fp_optimize 模式使用 float32 参数和所有模型修改运行,量化模式提供模拟硬件实现的输出。原生模式可用于验证 Tensorflow/ONNX 翻译过程,fp_optimize 模式可用于验证模型修改,而量化模式可用于分析优化模型的准确性。model_optimization_flavor: 模型优化策略,optimization_level 更加自己测试数据进行调整,如果测试数据小于1000,则一般设为0。5. 优化量化,编译的参数。

ydscc的博客 2700

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TVM-CN项目实战:使用Relay编译ONNX模型的技术指南

在深度学习模型部署领域,ONNX(Open Neural Network Exchange)作为一种开放的模型格式,已经成为不同框架间模型转换的重要桥梁。本文将详细介绍如何在TVM-CN项目中使用Relay编译器来部署ONNX模型,帮助开发者实现高效的模型推理。 ## ONNX模型编译基础 ### 环境准备 在开始之前,我们需要确保环境中已安装必要的依赖: ```bash pip inst

gitblog_00889的博客 407

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 活动预告 | 2023 Meet TVM · 北京站定档,5 场 Talk 你最期待哪一场?
下一篇: 无人机+ AI 图像分析:里斯本大学高效检测林业害虫
HyperAI超神经
博客等级 码龄7年 8873粉丝 1753原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值