openvino格式模型文件生成后可以在不同的设备上进行部署,所以我们在训练好模型,并转换成openvino格式模型文件后,一般会进行推理测试,来观察我们训练的结果,那么如何用openvino模型文件对图片进行推理呢,这里我总结了以下,以方便后续查看使用。
# 导入必要的库
import openvino as ov
from ultralytics import YOLO
import pathlib
# OpenVINO初始化
# 使用pathlib.Path来处理模型文件路径,这里指定了目标检测模型的XML文件路径
det_model_path = pathlib.Path(r"best_s_openvino_model/best_s.xml")
# 定义一个函数用于创建OpenVINO编译后的模型
def create_openvino_model(model_path, device="CPU"):
# 初始化OpenVINO的核心对象,用于管理设备和读取模型
core = ov.Core()
# 读取指定路径的模型文件
model = core.read_model(model_path)
# 将读取的模型在指定设备(默认是CPU)上进行编译
compiled_model = core.compile_model(model, device)
# 返回编译后的模型
return compiled_model
# 调用create_openvino_model函数,创建目标检测的编译后模型
det_compiled_model = create_openvino_model(det_model_path)
# 使用YOLO模型,指定模型路径的父目录,任务类型为目标检测
det_model = YOLO(det_model_path.parent, task="detect")
# 检查预测器是否未初始化
if det_model.predictor is None:
# 定义自定义的预测参数,包括置信度阈值、批量大小、是否保存结果和预测模式
custom = {"conf": 0.25, "batch": 1, "save": False, "mode": "predict"} # method defaults
# 将模型的默认参数和自定义参数合并
args = {**det_model.overrides, **custom}
# 智能加载预测器,并传入合并后的参数和回调函数
det_model.predictor = det_model._smart_load("predictor")(overrides=args, _callbacks=det_model.callbacks)
# 为预测器设置模型
det_model.predictor.setup_model(model=det_model.model)
# 将编译后的OpenVINO模型赋值给预测器的ov_compiled_model属性
det_model.predictor.model.ov_compiled_model = det_compiled_model
# 对'00.jpg'图像进行推理,并获取结果
# 设置保存结果为True,置信度阈值为0.5,IoU阈值为0.5
results = det_model.predict(r"00.jpg", save=True, conf=0.5, iou=0.5)
# 处理返回的结果
for result in results:
# 获取检测结果中的边界框信息
boxes = result.boxes
# 显示检测结果图像
result.show()
这里需要注意的是,转换后的openvino模型文件必须在一个目录下,切缺一不可;置信度以及IOU可以根据自己训练后的模型质量进行适当的调整。最后就是路径一定要正确,否则会出错。