我有一个在YOLOv 5上训练的模型,工作得很好。
这是一个输入图像:x1c 0d1x
我可以在做一个推断后使用pytorch得到一个预期的结果:
的数据
这是一个输出图像:
的
问题是,我在Openvino中需要它,无论我使用.onnx或.bin和.xml(对于openvino)中的模型进行推理,我都不会得到预期的推理结果。
我得到的是一个形状为(1,25200,6)的向量。我知道:
- 25200等于1x 3x 80 x80 + 1x 3x 40 x40 + 1x 3x 20 x20;
- 6 = 1类+4(x,y,w,h)+1(score);
- batch_size = 1
为了导出它,我使用:
!python export.py --data models/custom_yolov5s.yaml --weights /content/bucket_11_03_2022.pt --batch-size 1 --device cpu --include openvino --imgsz 640
字符串
我用两种方法来重现这个问题:
1..onnx:
import cv2
image = cv2.imread('data/cropped.png')
# Resize image to meet network expected input sizes
resized_image = cv2.resize(image, (640, 640))
# Reshape to network input shape
input_image = np.expand_dims(resized_image.transpose(2, 0, 1), 0)
import onnxruntime as onnxrt
onnx_session= onnxrt.InferenceSession("models/bucket_11_03_2022.onnx")
onnx_inputs= {onnx_session.get_inputs()[0].name:input_image.astype(np.float32)}
onnx_output = onnx_session.run(None, onnx_inputs)
img_label = onnx_output[0]
print(onnx_output[0].shape)
型
- Openvino:
import cv2
import matplotlib.pyplot as plt
import numpy as np
from openvino.inference_engine import IECore
ie = IECore()
net = ie.read_network(
model="bucket_11_03_2022.xml",
weights="bucket_11_03_2022.bin",
)
exec_net = ie.load_network(net, "CPU")
output_layer_ir = next(iter(exec_net.outputs))
input_layer_ir = next(iter(exec_net.input_info))
# Text detection models expects image in BGR format
image = cv2.imread("data/cropped.png")
# N,C,H,W = batch size, number of channels, height, width
N, C, H, W = net.input_info[input_layer_ir].tensor_desc.dims
# Resize image to meet network expected input sizes
resized_image = cv2.resize(image, (W, H))
# Reshape to network input shape
input_image = np.expand_dims(resized_image.transpose(2, 0, 1), 0)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB));
result = exec_net.infer(inputs={input_layer_ir: input_image})
result['output'].shape
型
你们能帮助我使用.onnx或IE格式(openvino - .bin,.xml)获得正确的推断(带有分数的边界框)吗?
模型文件是here。
1条答案
按热度按时间qc6wkl3g1#
根据我的复制,这个问题的发生是由于从PyTorch到ONNX的错误转换。我发现从PyTorch模型转换的ONNX能够检测到对象(bucket),但没有反映正确的标签,因为它从coco128.yaml中获取了一个类名。
你可能需要按照Train Custom Data重新训练你的模型。但是我不能保证这个方法会成功,因为它没有经过OpenVINO的验证。
我建议你在ultralytics GitHub论坛上发布这个问题。供你参考,ultralytics不是OpenVINO Toolkit的一部分。