markdown在tvm编译onnx模型并执行(代码片段)

author author     2022-12-13     583

关键词:

# 编译ONNX模型

下面描述使用Relay如何部署ONNX模型:

```shell
#安装onnx,https://github.com/onnx/onnx
pip install onnx --user
```

首先导入所需要的python包:

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

## 加载预训练ONNX模型

```python
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')
#从硬盘加载supe_resolution.onnx
onnx_model = onnx.load(model_path)
```

## 加载一张测试图像

```python
from PIL import Image
img_url = 'https://github.com/dmlc/mxnet.js/blob/master/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")
img_y, img_cb, img_cr = img_ycbcr.split()
x = np.array(img_y)[np.newaxis, np.newaxis, :, :]
```

## 使用relay编译模型

```python
target = 'llvm'
input_name = '1'
shape_dict = input_name: x.shape
sym, params = relay.frontend.from_onnx(onnx_model, shape_dict)
with relay.build_config(opt_level = 1):
    intrp = relay.build_module.create_executor('graph',sym, tvm.cpu(0), target)
```

## 在TVM上执行

```python
dtype = 'float32'
tvm_output = intrp.evaluate(sym)(tvm.nd.array(x.astype(dtype)),**params).asnumpy()
```

## 显示结果

```python
from matplotlib import pyplot as plt
out_y = Image.fromarray(np.uint8((tvm_output[0,0]).clip(0, 255)),model='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()
```

markdown在tvm.relay中使用外部库(代码片段)

查看详情

使用protobuf编译onnx.proto过程中的一些问题总结

...用gitclone下载protobuf的源代码,然后gitcheckout到branch2.7.0:编译protobuf,先在代码顶层目录执行./configure,然后执行make,成功后执行sudoldconfig,重新加载动态库。经过试验发现,使用protoc编译onnx.proto,需要特别注意版本问题,使用3... 查看详情

onnx-开放式神经网络交换格式

...机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch,MXNet)可以采用相同格式存储模型数据并交互。ONNX的规范及代码主要由微软,亚马逊,Facebook和IBM等公司共同开发,以开放源... 查看详情

用opencv的dnn模块调onnx模型文件

...机器学习所设计的开放式的文件格式,用于存储训练好的模型。用于在各种深度学习训练和推理框架转换的一个中间表示格式。它定义了一组和环境,平台均无关的标准格式,来增强各种AI模型的可交互性,开放性较强。2.在对... 查看详情

tvm:成为深度学习领域的“linux”

...)等不同平台,就需要TVM、XLA、TensorRT等深度学习编译器来解决。  作为目前业界炙手可热的编译器,TVM(TensorVirtualMachine)于2017年8月由华盛顿大学的LuisCeze、陈天奇等人开源,利用这一工具,机器学... 查看详情

mlir基础及开发初探分析(代码片段)

...iateRepresentation),可以看作是一种中介的数据格式,便于模型在框架间转换。在深度学习中可以表示计算图的数据结构就可以称作一种IR,例如ONNX,TorchScript,TVMRelay等等。这里举几个例子介绍一下:首先,ONNX是微软和FaceBook提... 查看详情

jvm原理与内存模型

编译型语言:一次性地编译成机器码,生成可执行文件。解释型语言:使用专门的解释器对源码逐行解释成特定平台的机器码并立即执行的语言。JVM原理:Java语言既是编译型语言,又是解释型语言:Java源码通过javac命令被编译... 查看详情

在x86的docker中构建tvm的arm环境(代码片段)

文章目录前言1.加载arm-ubuntu镜像2.安装acl库3.编译arm运行时4.编译在x86运行在arm4.1在x86的环境中构建arm的编译环境4.2测试x86-ubuntu与arm-ubuntu能否ping通4.3调用RPC4.4ACL的使用5.arm版的tvm编译和运行时环境5.1构建arm版的tvm编译和运行时环... 查看详情

tvm在linux环境下的安装与编译及vscode如何配置tvm的远程连接调试环境(代码片段)

...前言1.安装TVM1.1下载源码1.2创建虚拟环境及安装依赖库1.3编译TVM源码1.4验证安装是否成功2.配置vscode3.安装FFINavigator结束语前言  本篇文章介绍一下tvm在linux环境下的安装与编译,以及如何使用vscode来配置tvm的远程连接调试... 查看详情

来自 PyTorch 模型的 ONNX 对象,无需导出

】来自PyTorch模型的ONNX对象,无需导出【英文标题】:ONNXobjectfromPyTorchmodelwithoutexporting【发布时间】:2021-09-0202:10:29【问题描述】:是否可以在不导出的情况下将PyTorch模型转换为ONNX,并在脚本中直接将其用作ONNX对象。【问题讨... 查看详情

markdown使用tvm编写可调模板和使用自动调优器(代码片段)

查看详情

onnx简介

...NNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。假设一个场景:现在某组织因为主要开发用TensorFlow为基础的框架,现在有一个深度算法,需要将其部署在移动设备上,... 查看详情

Pytorch 到 ONNX 导出功能失败并导致遗留功能错误

...题描述】:我正在尝试使用以下代码将this链接中的pytorch模型转换为onnx模型:device=t.device(\'cuda:0\'ift.cuda.is_available()else\ 查看详情

pytorch模型(.pth)转onnx模型(.onnx)(代码片段)

...神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如P... 查看详情

yolox导出onnx文件(代码片段)

...一步先确认类别,在yolox/exp/yolox_base.py下面,导出模型的类别数和这里的num_classes保持一致。本例使用yolo_s模型,yolox自带导出onnx的文件,直接执行命令:pythontools/export_onnx.py--output-nameyolox_s.onnx-fexp 查看详情

tvm架构设计

...sp;           示例编译流程概述了TVM将模型的高级概念转换为可部署模块的步骤。       &n 查看详情

tvm巡礼howtooptimizecpu(x86)gemm串讲(代码片段)

【GiantPandaCV导语】最近在整理一些编译器方面的基础知识翻译,回顾了一下TVM的Schedule然后想起自己1年前做的一些GEMM相关的实验和探索没做什么总结。所以基于TVM的三个教程也即TVM的三代优化来做对之前的学习做一个简单的... 查看详情

是否可以使用 C++ 训练在 tensorflow 和 pytorch 中开发的 ONNX 模型?

】是否可以使用C++训练在tensorflow和pytorch中开发的ONNX模型?【英文标题】:IsitpossibletotrainONNXmodelsdevelopedintensorflowandpytorchwithC++?【发布时间】:2021-12-1912:32:15【问题描述】:我想知道是否可以使用转换为onnx模型的tensorflow和pytorch... 查看详情