Openvino 导出YOLO模型指定输出层

openvinoC# 部署报错

  Output output = compiled_model.output();

此句报错,YOLOV5 onnx 模型查看输出层发现有4个输出,而github 上给出的模型IR只有一个输出层,所以报错。所以使用openvino导出IR模型时需要指定输出的层。

output
name: output
tensor: float32[1,25200,6]
350
name: 350
tensor: float32[1,3,80,80,6]
416
name: 416
tensor: float32[1,3,40,40,6]
482
name: 482
tensor: float32[1,3,20,20,6]

官网说明
参数输出:
转换后的模型中要保留的一个或多个以逗号分隔的模型输出。其他输出将被删除。如果未指定输出参数,则保留原始模型的所有输出。请勿将 :0 添加到 TensorFlow 的名称中。转换后的模型中输出的顺序与指定名称的顺序相同。示例:output=”out_1”,或 output=[“out_1”,“out_2”]。对于以 Python 对象表示的 PaddlePaddle 模型,您可以将输出指定为 PaddlePaddle Python 对象或此类对象的列表。

参数示例输入:
原框架模型输入示例。对于 PyTorch 可以是 torch.Tensor。对于 Tensorflow 可以是 tf.Tensor 或 numpy.ndarray。对于 PaddlePaddle 可以是 Paddle Variable。

参数扩展:
带有扩展名的库(.so 或 .dll)的路径、以逗号分隔的路径列表、从 BaseExtension 类派生的对象或对象列表。

参数详细:
打印有关转换的详细信息。

参数 share_weights :
重用原始模型中分配的权重。如果输入模型在文件中,则使用 mmap 直接从文件分配权重。如果输入模型是运行时对象,则原始模型中分配的原始内存区域将重用于转换后的模型中的权重。
只需要最上面name:output

import openvino as ov
model = ov.convert_model('your_model_file.onnx',output='output')
save_model(model, './model.xml')

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenVINO是一个深度学习推理框架,可用于将训练好的神经网络模型部署到各种硬件平台上进行推理。下面是在OpenVINO上部署Yolo的一些步骤: 1. 下载和安装OpenVINO Toolkit。在OpenVINO官网下载并安装适合您操作系统的版本。 2. 下载Yolo的权重文件和配置文件。在Yolo官网上下载权重文件和配置文件。 3. 将Yolo模型转换为OpenVINO格式。使用OpenVINO提供的Model Optimizer工具将Yolo模型转换为OpenVINO格式。您需要使用以下命令: ``` python mo_tf.py --input_model yolov3.weights --tensorflow_use_custom_operations_config extensions/front/tf/yolo_v3.json --input_shape [1,416,416,3] --data_type FP32 --output_dir yolov3_openvino --model_name yolov3 ``` 其中,yolov3.weights是您下载的权重文件,yolo_v3.json是一个自定义操作文件,用于告诉Model Optimizer如何处理Yolo模型。--input_shape参数指定输入张量的形状,--data_type参数指定数据类型,--output_dir参数指定输出文件夹,--model_name参数指定模型名称。 4. 运行OpenVINO推理引擎。使用OpenVINO Inference Engine API加载和推理转换后的模型。您需要编写一个Python脚本来完成这一步骤。以下是一个简单的示例: ``` import cv2 import numpy as np from openvino.inference_engine import IECore # Load the OpenVINO model model_xml = 'yolov3_openvino/yolov3.xml' model_bin = 'yolov3_openvino/yolov3.bin' ie = IECore() net = ie.read_network(model=model_xml, weights=model_bin) # Load the input image img = cv2.imread('input.jpg') # Preprocess the input image input_blob = next(iter(net.inputs)) n, c, h, w = net.inputs[input_blob].shape img = cv2.resize(img, (w, h)) img = img.transpose((2, 0, 1)) img = img.reshape((n, c, h, w)) # Run inference exec_net = ie.load_network(network=net, device_name='CPU') output = exec_net.infer(inputs={input_blob: img}) # Process the output output_blob = next(iter(net.outputs)) output = output[output_blob][0] boxes = output[:, 0:4] confs = output[:, 4] class_ids = output[:, 5:].argmax(axis=-1) # Draw the predicted boxes on the input image for i in range(len(boxes)): if confs[i] > 0.5: x, y, w, h = boxes[i] cv2.rectangle(img, (int(x), int(y)), (int(x+w), int(y+h)), (0, 255, 0), 2) # Save the output image cv2.imwrite('output.jpg', img.transpose((1, 2, 0))) ``` 这个脚本加载了转换后的Yolo模型,读取了输入图像,对图像进行预处理,运行了推理,处理了输出并将结果绘制在输入图像上,最后保存了输出图像。 这些步骤仅仅是一个简单的例子,如果您需要更复杂的操作,您需要仔细阅读OpenVINO文档,并参考OpenVINO的示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值