下的多个内文本同时读出
赞
踩
目录
对于嵌入式设备,将模型转成onnx后,可以方便的将pytorch或者tensorflow的模型在嵌入式设备上运行,但是onnx模型默认只调用一个CPU核心去做推理,所以有些嵌入式设备有多核的CPU,推理推理可以适当的加速。
(1) 模型:yolov7.onnx
(2) 嵌入式设备:rk3588
(3) 系统:ubuntu 18.04
- import onnxruntime as rt
- import onnx
- import numpy as np
- import time
-
-
- # 输入数据ndarray形式
- img = np.ones((1, 3, 640, 640)).astype(np.float32)
-
- # onnx模型
- model_path = './yolov7.onnx'
-
- # 加载模型,传入模型路径
- model = onnx.load_model(model_path)
- # 创建一个SessionOptions对象
- rtconfig = rt.SessionOptions()
-
- # 设置CPU线程数为4
- cpu_num_thread = 4
- # 设置执行模式为ORT_SEQUENTIAL(即顺序执行)
- rtconfig.intra_op_num_threads = cpu_num_thread
- rtconfig.execution_mode = rt.ExecutionMode.ORT_SEQUENTIAL
- # 设置使用的ExecutionProvider为CPUExecutionProvider
- providers = ['CPUExecutionProvider']
- # 创建一个InferenceSession对象
- sess = rt.InferenceSession(model.SerializeToString(), providers=providers, sess_options=rtconfig)
-
-
- # 模型的输入和输出节点名,可以通过netron查看
- input_name = 'images'
- outputs_name = ['output']
- # 模型推理:模型输出节点名,模型输入节点名,输入数据(注意节点名的格式!!!!!)
- t1 = time.time()
- net_outs = sess.run(outputs_name, {input_name: img})
- result = np.array(net_outs)
- t2 = time.time()
- print("inf_time:", (t2 - t1))
-
(1) 这个示例首先加载了一个ONNX模型,并创建了一个InferenceSession对象。
(2) 为会话设置了一些选项,包括CPU线程数和执行模式。
(3) 使用 `np.random.rand()` 函数生成了一个随机的输入数据,并将其传递给 `sess.run()` 函数进行推理。最后,将推理结果保存在 `output` 变量中。
示例中,设置了 `cpu_num_thread = 4` 来指定使用4个CPU核心进行推理。可以根据自己的硬件配置和应用需求,调整这个参数的值。注意,这个参数的值不能超过CPU的物理核心数。
此外,可以使用 `ExecutionMode.ORT_PARALLEL` 来指定并行执行模式,从而进一步提高推理性能。但是,需要注意的是,在并行执行模式下,模型的推理结果可能会发生微小的变化,因为并行执行会改变计算顺序。因此,在选择并行执行模式时,需要进行充分的测试和验证。
分别将cpu_num_thread 设置成1和4进行对比
-
- # cpu_num_thread = 1
- >> python3.7 test_onnx_yolov7.py
- >> 2023-05-17 10:52:18.624406353 [W:onnxruntime:, execution_frame.cc:835
- VerifyOutputSizes] Expected shape from model of {44,7} does not match actual
- shape of {0,7} for output output
- >> inf_time: 4.372642993927002
-
-
- # cpu_num_thread = 4
- >> python3.7 test_onnx_yolov7.py
- >> 2023-05-17 10:52:40.901618925 [W:onnxruntime:, execution_frame.cc:835
- VerifyOutputSizes] Expected shape from model of {44,7} does not match actual
- shape of {0,7} for output output
- >> inf_time: 1.2177777290344238
从推理时间来看,设置后速度的优化还是不错的!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。