热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java调用onnx模型_ONNX预训练模型加载

tvm官网中,对从ONNX预训练模型中加载模型的教程说明教程来自于:https:docs.tvm.aitutorialsfrontendfrom_onn

tvm官网中,对从ONNX预训练模型中加载模型的教程说明

教程来自于:https://docs.tvm.ai/tutorials/frontend/from_onnx.html#sphx-glr-tutorials-frontend-from-onnx-py

首先我对教程进行了一些修改,很多东西没有必要,比如不是每次都需要从网上下载图片和模型,super_resolution.onnx和cat.png都预先下载到了文件同目录下,

同时,最新版本的tvm中不支持Python2.7,我没有编译llvm,所以我把我的设置都改到了cuda上,在24行和32行有体现,注意最新版本

1 importonnx2 importnumpy as np3 importtvm4 importtvm.relay as relay5 #from tvm.contrib.download import download_testdata

6

7 #model_url = ''.join(['https://gist.github.com/zhreshold/',

8 #'bcda4716699ac97ea44f791c24310193/raw/',

9 #'93672b029103648953c4e5ad3ac3aadf346a4cdc/',

10 #'super_resolution_0.2.onnx'])

11 #model_path = download_testdata(model_url, 'super_resolution.onnx', module='onnx')

12 #now you have super_resolution.onnx on disk

13 onnx_model = onnx.load('super_resolution.onnx')14

15 from PIL importImage16 #img_url = 'https://github.com/dmlc/mxnet.js/blob/master/data/cat.png?raw=true'

17 #img_path = download_testdata(img_url, 'cat.png', module='data')

18 img_path = 'cat.png'

19 img = Image.open(img_path).resize((224, 224))20 img_ycbcr = img.convert("YCbCr") #convert to YCbCr

21 img_y, img_cb, img_cr =img_ycbcr.split()22 x =np.array(img_y)[np.newaxis, np.newaxis, :, :]23

24 target = 'cuda'

25

26 input_name = '1'

27 shape_dict ={input_name: x.shape}28 sym, params =relay.frontend.from_onnx(onnx_model, shape_dict)29 print(sym)30

31 with relay.build_config(opt_level=1):32 intrp = relay.build_module.create_executor('graph', sym, tvm.gpu(0), target)33

34 dtype = 'float32'

35 tvm_output = intrp.evaluate(sym)(tvm.nd.array(x.astype(dtype)), **params).asnumpy()

第28行有一个从模型加载的函数from_onnx

官方的解释:tvm.relay.frontend.from_onnx(model, shape=None, dtype='float32')

Convert a ONNX model into an equivalent Relay Function.

ONNX graphs are represented as Python Protobuf objects. The companion parameters will be handled automatically. However, the input names from onnx graph is vague, mixing inputs and network weights/bias such as “1”, “2”… For convenience, we rename the real input names to “input_0”, “input_1”… And renaming parameters to “param_0”, “param_1”…

Parameters:

model (protobuf object) – ONNX ModelProto after ONNX v1.1.0

shape (dict of str to tuple,optional) – The input shape to the graph

dtype (strordict of str to str) – The input types to the graph

Returns:

sym (tvm.relay.expr.Function) – Compatible relay function

params (dict of str to tvm.NDArray) – The parameter dict to be used by relay

看返回值,sym是relay Function,在后边加一个print(sym)输出,可以看到图这一级的IR

fn (%v1: Tensor[(1, 1, 224, 224), float32], %v2: Tensor[(64, 1, 5, 5), float32], %v3: Tensor[(64,), float32], %v4: Tensor[(64, 64, 3, 3), float32], %v5: Tensor[(64,), float32], %v6: Tensor[(32, 64, 3, 3), float32], %v7: Tensor[(32,), float32], %v8: Tensor[(9, 32, 3, 3), float32], %v9: Tensor[(9,), float32]) {

%0 = nn.conv2d(%v1, %v2, padding=[2, 2], kernel_size=[5, 5])

%1 = expand_dims(%v3, axis=1, num_newaxis=2)

%2 = add(%0, %1)

%3 = nn.relu(%2)

%4 = nn.conv2d(%3, %v4, padding=[1, 1], kernel_size=[3, 3])

%5 = expand_dims(%v5, axis=1, num_newaxis=2)

%6 = add(%4, %5)

%7 = nn.relu(%6)

%8 = nn.conv2d(%7, %v6, padding=[1, 1], kernel_size=[3, 3])

%9 = expand_dims(%v7, axis=1, num_newaxis=2)

%10 = add(%8, %9)

%11 = nn.relu(%10)

%12 = nn.conv2d(%11, %v8, padding=[1, 1], kernel_size=[3, 3])

%13 = expand_dims(%v9, axis=1, num_newaxis=2)

%14 = add(%12, %13)

%15 = reshape(%14, newshape=[1, 1, 3, 3, 224, 224])

%16 = transpose(%15, axes=[0, 1, 4, 2, 5, 3])

reshape(%16, newshape=[1, 1, 672, 672])

}



推荐阅读
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
author-avatar
yax何
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有