OpenVINO加速YOLOv8目标检测模型(含完整源代码)

上文介绍了《使用OpenVINO加速YOLOv8分类模型(含完整源代码)》, 本文接着介绍OpenVINO加速YOLOv8目标检测模型(含完整源代码)。

首先请先下载本文的范例代码仓

git clone https://gitee.com/ppov-nuc/yolov8_openvino.git

本文代码在AI爱克斯开发板上完成验证

AI爱克斯开发板

第一步:使用命令:yolo export model=yolov8n.pt format=onnx,完成yolov8n.onnx模型导出。

导出yolov8n.onnx

第二步:使用命令:mo -m yolov8n.onnx --compress_to_fp16,优化并导出FP16精度的OpenVINO IR格式模型。

导出FP16精度的OpenVINO IR格式模型

第三步:使用命令:benchmark_app -m yolov8n.xml -d GPU,获得yolov8n.xml模型在AI爱克斯开发板的集成显卡上的异步推理计算性能。

Benchmark性能

第四步:使用OpenVINO Python API编写YOLOv8目标检测模型推理程序。基于OpenVINO Python API的YOLOv8目标检测模型的范例程序:yolov8_od_ov_sync_infer_demo.py(请读者克隆本文代码仓),其核心源代码如下所示:

# 实例化Core对象
core = Core() 
# 载入并编译模型
net = core.compile_model(f'{MODEL_NAME}.xml', device_name="AUTO")
# 获得模型输出节点
output_node = net.outputs[0]  # yolov8n只有一个输出节点
ir = net.create_infer_request()
cap = cv2.VideoCapture("store-aisle-detection.mp4")

while True:
    start = time.time()
    ret, frame = cap.read()
    if not ret:
        break
    # 图像数据前处理
    [height, width, _] = frame.shape
    length = max((height, width))
    image = np.zeros((length, length, 3), np.uint8)
    image[0:height, 0:width] = frame
    scale = length / 640
    blob = cv2.dnn.blobFromImage(image, scalefactor=1 / 255, size=(640, 640), swapRB=True)
    # 执行推理计算
    outputs = ir.infer(blob)[output_node]
    # 推理结果后处理并显示处理结果
    outputs = np.array([cv2.transpose(outputs[0])])
    ... ...
cv2.imshow('YOLOv8 OpenVINO Infer Demo on AIxBoard', frame)

运行结果如下所示:
运行结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容