ONNX Runtime使用简单介绍

前面系列博客中有用tensorRT、OpenVINO加速模型推理

TensorRT加速方法介绍(python pytorch模型)_竹叶青lvye的博客-CSDN博客_tensorrt加速

OpenVINO使用介绍_竹叶青lvye的博客-CSDN博客_openvino resnet在

这边再简单提下ONNX Runtime的使用(微软推出),上面博客中只是将ONNX模型作为一个中间转换模型用,可能不怎么去接触更为原生态的推理框架ONNX Runtime

ONNX Runtime | Homehttps://onnxruntime.ai/从官网介绍看,其也是提供训练用API调用的,可以看到微软也是有一些想和tensorflow,pytorch在深度学习领域分一杯羹的想法的,大公司毕竟是有强有力的资本的,何愁招兵买马呢。

此时cuda、cuddn、python版本同前面博客时的配置

主要过程如下:

这边还是按照官方配置,去推断一张图片,pip安装下如下库

pip install onnxruntime-gpu

 博主这边还是拿tensorflow来示例

pip install tf2onnx

代码如下:

import tensorflow as tf
import numpy as np
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications import resnet50

from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
from PIL import Image
import time
import tf2onnx
import onnxruntime as rt
import cv2
import time

physical_devices = tf.config.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)

#加载预训练模型
model = resnet50.ResNet50(weights='imagenet')

spec = (tf.TensorSpec((None, 224, 224, 3), tf.float32, name="input"),)
output_path = "test.onnx"

model_proto, _ = tf2onnx.convert.from_keras(model, input_signature=spec, opset=13, output_path=output_path)
output_names = [n.name for n in model_proto.graph.output]

providers = ['CPUExecutionProvider']
m = rt.InferenceSession(output_path, providers=providers)

img = cv2.imread('2008_002682.jpg')
img = cv2.resize(img,(224,224))
img_np = np.array(img, dtype=np.float32) / 255.

img_np = np.expand_dims(img_np, axis=0)
print(img_np.shape)

t_model = time.perf_counter()
onnx_pred = m.run(output_names, {"input": img_np})
print(f'do inference cost:{time.perf_counter() - t_model:.8f}s')
print('ONNX Predicted:', decode_predictions(onnx_pred[0], top=3)[0])


 测试图片,还是前面常用的小猫图片

部分执行结果如下:

2022-05-01 22:41:51.165567: I tensorflow/core/grappler/optimizers/meta_optimizer.cc:1144] Optimization results for grappler item: graph_to_optimize
  constant_folding: Graph size after: 556 nodes (-320), 891 edges (-320), time = 253.008ms.
  function_optimizer: function_optimizer did nothing. time = 0.565ms.
  constant_folding: Graph size after: 556 nodes (0), 891 edges (0), time = 111.51ms.
  function_optimizer: function_optimizer did nothing. time = 0.847ms.

(1, 224, 224, 3)
do inference cost:0.01735498s
ONNX Predicted: [('n01930112', 'nematode', 0.13559905), ('n03041632', 'cleaver', 0.04139605), ('n03838899', 'oboe', 0.03445778)]

Process finished with exit code 0

预测结果同OpenVINO下的结果,耗时更少。暂时不再深入了解了,官网上也提供了一些方面资料,后面需要时再用吧。

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ONNXRuntime是微软推出的一款优秀的推理框架,它支持多种后端包括CPU、GPU、TensorRT和DML等,可以方便地运行ONNX模型。用户可以使用C、Python、Java等多种编程语言进行编写,并且提供了简单易用的API,使得使用者可以方便地进行模型推理。如果你想使用Python进行ONNXRuntime的模型推理,可以按照以下步骤进行操作: 1. 首先,你需要安装ONNXRuntime。可以通过pip命令来安装,例如在命令行中执行以下命令: ``` pip install onnxruntime ``` 2. 安装完成后,你可以导入ONNXRuntime库并加载你的ONNX模型。例如,在Python中执行以下代码: ```python import onnxruntime # 加载ONNX模型 model = onnxruntime.InferenceSession('your_model.onnx') ``` 3. 接下来,你可以准备输入数据并进行推理。例如,如果你的模型接受一个输入张量`input_data`,你可以执行以下代码进行推理: ```python import numpy as np # 准备输入数据 input_data = np.random.randn(1, 3, 224, 224).astype(np.float32) # 进行推理 output = model.run(None, {'input': input_data}) ``` 这里的`'input'`是你模型的输入名称,你需要根据你的模型进行相应的修改。 4. 最后,你可以获取推理结果并进行后续处理。例如,如果你的模型输出一个张量`output`,你可以执行以下代码获取结果: ```python # 获取推理结果 result = output[0] # 进行后续处理 # ... ``` 这里的`output[0]`表示获取第一个输出张量,你可以根据你的模型进行相应的修改。 通过以上步骤,你可以使用ONNXRuntime进行ONNX模型的推理。希望对你有帮助![1][2][3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹叶青lvye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值