当前位置: 首页 > news >正文

一号网站建设企业网站的搭建流程

一号网站建设,企业网站的搭建流程,wordpress免登录发布模块接口,微信小程序店铺怎么弄文章目录1 背景介绍2 实验环境3 paddle.onnx.export函数简介4 代码实操4.1 PaddlePaddle与ONNX模型导出4.2 ONNX正确性验证4.3 PaddlePaddle与ONNX的一致性检查4.4 多输入的情况5 ONNX模型可视化6 ir_version和opset_version修改7 致谢原文来自于地平线开发者社区,未…

文章目录

  • 1 背景介绍
  • 2 实验环境
  • 3 paddle.onnx.export函数简介
  • 4 代码实操
    • 4.1 PaddlePaddle与ONNX模型导出
    • 4.2 ONNX正确性验证
    • 4.3 PaddlePaddle与ONNX的一致性检查
    • 4.4 多输入的情况
  • 5 ONNX模型可视化
  • 6 ir_version和opset_version修改
  • 7 致谢

原文来自于地平线开发者社区,未来会持续发布深度学习、板端部署的相关优质文章与视频,如果文章对您有帮助,麻烦给点个赞,如果您有兴趣一起学习,欢迎点个关注:寻找永不遗憾(CSDN用户名)

1 背景介绍

使用深度学习开源框架Pytorch训练完网络模型后,在部署之前通常需要进行格式转换,地平线工具链模型转换目前支持Caffe1.0和ONNX(opset_version=10/11 且 ir_version≤7)两种。ONNX(Open Neural Network Exchange)格式是一种常用的开源神经网络格式,被较多推理引擎支持,例如Pytorch、PaddlePaddle、TensorFlow等。本文将详细介绍如何将PaddlePaddle格式的模型导出到ONNX格式。

2 实验环境

本教程的实验环境如下:

Python库Version
paddlepaddle2.4.1
paddle2onnx1.0.5
onnx1.13.0
onnxruntime1.14.0

3 paddle.onnx.export函数简介

paddle.onnx.export函数可以将PaddlePaddle模型导出为ONNX模型,函数介绍如下,其中x_spec用于配置paddle.onnx.export的input_spec参数。

x_spec = paddle.static.InputSpec(shape=None, dtype='float32', name=None)
#shape:   声明维度信息,默认为 None
#dtype:   数据类型,默认为 float32
#name:    网络输入节点名称paddle.onnx.export(layer, path, input_spec=[x_spec], opset_version=11, **configs)
#layer:          导出的Layer对象,即需要转换的网络模型
#path:           存储模型的路径前缀,导出后会自动添加后缀“.onnx”
#input_spec:     用于配置模型输入属性
#opset_version:  默认为9,请手动配置10或11

关于paddle.onnx.export的更多详细介绍,可以查阅PaddlePaddle的API文档:
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/onnx/export_cn.html

4 代码实操

4.1 PaddlePaddle与ONNX模型导出

以下代码展示了搭建一个简单分类模型并以PaddlePaddle和ONNX格式保存的过程。

import paddle
import paddle.nn as nnclass MyNet(nn.Layer):def __init__(self, num_classes=10):super(MyNet, self).__init__()self.num_classes = num_classesself.features = nn.Sequential(nn.Conv2D(in_channels=1, out_channels=2,kernel_size=3, stride=1, padding=1),nn.ReLU())self.linear = nn.Sequential(nn.Linear(98, num_classes))def forward(self, inputs):x = self.features(inputs)x = paddle.flatten(x, 1)x = self.linear(x)return xmodel = MyNet()#准备输入数据
x_spec = paddle.static.InputSpec([1, 1, 7, 7], 'float32', 'input1')
#将模型以PaddlePaddle的格式保存,以验证和ONNX模型推理的一致性
paddle.jit.save(layer=model, path='./pd_model/pdmodel',input_spec=[x_spec])
#将模型导出为ONNX格式保存
paddle.onnx.export(layer=model, path='./model',input_spec=[x_spec], opset_version=11)

4.2 ONNX正确性验证

可以用以下代码验证ONNX模型的正确性,会检查模型的版本,图的结构,节点及输入输出。若输出为 Check: None 则表示无报错信息,模型导出正确。

import onnxonnx_model = onnx.load("./model.onnx")
check = onnx.checker.check_model(onnx_model)
print('Check: ', check)

4.3 PaddlePaddle与ONNX的一致性检查

可以使用以下代码检查导出的ONNX模型和原始的PaddlePaddle模型是否有相同的计算结果。

import numpy as np
import onnxruntime
import paddleinput1 = np.random.random((1, 1, 7, 7)).astype('float32')ort_sess = onnxruntime.InferenceSession("./model.onnx")
ort_inputs = {ort_sess.get_inputs()[0].name: input1}
ort_outs = ort_sess.run(None, ort_inputs)model = paddle.jit.load("./pd_model/pdmodel")
model.eval()
paddle_input = paddle.to_tensor(input1)
paddle_outs = model(paddle_input)print(ort_outs[0])
print(paddle_outs.numpy())
np.testing.assert_allclose(tf_outs.numpy(), ort_outs[0], rtol=1e-03, atol=1e-05)
print("onnx model check finsh.")

4.4 多输入的情况

若您的模型存在多输入,则可参考下方代码保存成PaddlePaddle和ONNX格式。ONNX的正确性验证和PaddlePaddle与ONNX的一致性检查不再赘述,仿照上述代码编写即可。

import paddle
import paddle.nn as nnclass MyNet(nn.Layer):def __init__(self, num_classes=10):super(MyNet, self).__init__()self.num_classes = num_classesself.features_1 = nn.Sequential(nn.Conv2D(in_channels=1, out_channels=2,kernel_size=3, stride=1, padding=1),nn.ReLU())self.features_2 = nn.Sequential(nn.Conv2D(in_channels=1, out_channels=2,kernel_size=3, stride=1, padding=1),nn.ReLU())self.linear = nn.Sequential(nn.Linear(98, num_classes))def forward(self, inputs1, inputs2):x = self.features_1(inputs1)y = self.features_2(inputs2)z = paddle.concat((x, y), 1)z = paddle.flatten(z, 1)z = self.linear(z)return zmodel = MyNet()x_spec = paddle.static.InputSpec([1, 1, 7, 7], 'float32', 'input1')
y_spec = paddle.static.InputSpec([1, 1, 7, 7], 'float32', 'input2')
paddle.jit.save(layer=model, path='./pd_model/pdmodel',input_spec=[x_spec, y_spec])
paddle.onnx.export(layer=model, path='./model',input_spec=[x_spec, y_spec], opset_version=11)

5 ONNX模型可视化

导出成ONNX模型后,可以使用开源可视化工具Netron来查看网络结构及相关配置信息。Netron的使用方式主要分为两种,一种是使用在线网页版 https://netron.app/ ,另一种是下载安装程序 https://github.com/lutzroeder/netron 。此教程中模型的可视化效果为:

6 ir_version和opset_version修改

地平线工具链支持的ONNX模型需要满足 opset_version=10/11 且 ir_version≤7,当拿到的ONNX模型不满足这两个要求时,可以修改代码重新导出,或者尝试编写脚本直接修改ONNX模型的对应属性,第二种方式的示例代码如下:

import onnxmodel = onnx.load("./model.onnx")
model.ir_version = 6
model.opset_import[0].version = 10
onnx.save_model(model, "./model_version.onnx")

**注意:**高版本向低版本切换时可能会出现问题,这里只是一种可尝试的解决方案。
调整结束后,使用Netron可视化model_version.onnx,如下图所示:
在这里插入图片描述

此时,ONNX模型的ir_version=6,opset_version=10,满足地平线工具链的转换条件。

7 致谢

原文来自于地平线开发者社区,未来会持续发布深度学习、板端部署的相关优质文章与视频,如果文章对您有帮助,麻烦给点个赞,如果您有兴趣一起学习,欢迎点个关注:寻找永不遗憾(CSDN用户名)

http://www.15wanjia.com/news/167550.html

相关文章:

  • 政务网站建设论文蒲公英路由做网站
  • 涿州建设局网签网站网络公司注册流程
  • 网站建设给客户看的ppt模板长沙建网站的
  • 网站建设的内容网站一般多少钱
  • 大学科研项目做网站个人备案的公司网站
  • 百合怎么doi怎么做网站网站开发 浏览器
  • 欧米伽男士手表官方网站设计专业
  • 长春制作网站定制重庆网站建设重庆网站制作
  • 用jsp做网站需要的知识记事本做网站的流程
  • 虚拟机中做网站ui设计30岁后的出路
  • 吕梁网站建设kuyiso成都有哪些做网站开发的大公司
  • 兼职网站建设收费深圳 建设工程招标有限公司网站
  • wordpress 仿站 菜单网页美工设计实训
  • 南昌网站推广策划wordpress文章批量模版
  • 网站宣传活动怎么做网站建设一年多少钱
  • 做效果图的网站有哪些软件建设银行网站怎么预约纪念币
  • 购物网站优化的建议佛山网站建设佛山网站制作
  • 最新73种暴利产品竞价单页网站制作带订单后台系统模板jsp网站建设项目实战课本内容
  • 济南建站方案三六五网做网站吗
  • 地方门户网站建设网站 html 作用
  • 苏州 网站建设浙江网站建设而
  • 网站 建设 内容 安排好口碑的网站制作安装价格
  • 公司网站做的好的腾讯网qq网站
  • 广州建设网站技术威海建设公司网站
  • 佛山电商网站制作平台经济概念股票龙头
  • 网站开发合同范本品牌推广方案设计
  • wordpress 分享 微信二维码wordpress配置搜索引擎优化
  • 怎样搭建网站视频教程网站开发手机充值接口
  • 无锡新吴区建设环保局网站郑州优化网站
  • 天津网站优化实战网站如何建数据库