news 2026/10/27 1:15:01

YOLO-V8 通过英特尔 OpenVINO 提高 CPU 推理速度

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO-V8 通过英特尔 OpenVINO 提高 CPU 推理速度

一、OpenVINO 加速 YOLO-V8 CPU 推理

在本专栏的前面几篇文章我们使用YOLO-V8进行了各种任务的实验,但是针对与推理速度一直使用的PyTorch的格式,并且很多情况下也是在CPU上推理的,实际运行速度其实不是非常的理想。而OpenVINO是一款由英特尔推出的深度学习推理引擎,可以帮助开发者高效地在各种硬件平台上部署深度学习模型,特别是英特尔的CPU上,因此本文借助OpenVINO实现对YOLO-V8CPU上的推理加速。

OpenVINO GitHub 地址:https://github.com/openvinotoolkit/openvino

关于YOLO-V8的介绍和使用,可以参考下面这篇文章:

https://xiaobichao.blog.csdn.net/article/details/137140038

本文使用ultralytics框架进行实验,而ultralytics框架针对格式的转换已经做好了封装,只需要通过model.export方法,便可以转到多种不同格式的模型,支持的格式如下:

格式format模型元数据论据
PyTorch-yolov8n.pt✅-
TorchScripttorchscriptyolov8n.torchscript✅imgsz, optimize, batch
ONNXonnxyolov8n.onnx✅imgsz, half, dynamic, simplify, opset, batch
OpenVINOopenvinoyolov8n_openvino_model/✅imgsz, half, int8, batch
TensorRTengineyolov8n.engine✅imgsz, half, dynamic, simplify, workspace, int8, batch
CoreMLcoremlyolov8n.mlpackage✅imgsz, half, int8, nms, batch
TF SavedModelsaved_modelyolov8n_saved_model/✅imgsz, keras, int8, batch
TF GraphDefpbyolov8n.pb❌imgsz, batch
TF 轻型tfliteyolov8n.tflite✅imgsz, half, int8, batch
TF 边缘TPUedgetpuyolov8n_edgetpu.tflite✅imgsz
TF.jstfjsyolov8n_web_model/✅imgsz, half, int8, batch
PaddlePaddlepaddleyolov8n_paddle_model/✅imgsz, batch
NCNNncnnyolov8n_ncnn_model/✅imgsz, half, batch

下面过程使用的依赖版本如下:

ultralytics==8.1.37 opencv-python==4.7.0.68openvino==2024.3.0 openvino-dev==2024.3.0 openvino-telemetry==2024.1.0

首先我的设备CPU是一款比较老的i5-10300H,使用yolov8n.pt模型实时推理速度,平均FPS只有8.83,平均每帧模型推理速度0.078s,处理过程如下:

importtimeimportcv2importsupervisionassvfromultralyticsimportYOLOfromsupervision.assetsimportdownload_assets,VideoAssets# 如果不存在则下载视频video_name=download_assets(VideoAssets.VEHICLES)# 加载 YoloV8n 模型,如果不存在会自动下载model=YOLO("yolov8n.pt")# 初始化展现对象corner_annotator=sv.BoxCornerAnnotator(corner_length=15,thickness=2,color=sv.Color(r=255,g=255,b=0))# 读取视频cap=cv2.VideoCapture(video_name)# 初始化计时器prev_tick=cv2.getTickCount()whileTrue:# 循环读取每一帧ret,frame=cap.read()# 由于原视频帧比较大,方便处理和后面展现,缩小一些frame=cv2.resize(frame,(1280,720))ifnotret:breakt=time.time()result=model(frame,device="cpu")[0]use_time=time.time()-t detections=sv.Detections.from_ultralytics(result)# 绘制边框frame=corner_annotator.annotate(frame,detections=detections)# 计算帧率current_tick=cv2.getTickCount()fps=cv2.getTickFrequency()/(current_tick-prev_tick)prev_tick=current_tick cv2.putText(frame,("FPS: {:.2f}".format(fps))+", USE_TIME: "+str(use_time),(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow('video',frame)cv2.waitKey(1)

下面将yolov8n.pt模型转为OpenVINO格式:

需要添加openvino依赖:

pipinstallopenvino-dev-ihttps://pypi.tuna.tsinghua.edu.cn/simple

转换:

fromultralyticsimportYOLO# 加载 YoloV8n 模型,如果不存在会自动下载model=YOLO("yolov8n.pt")# 导出 openvino 模型model.export(format="openvino",imgsz=[640,640])

可以在当前目录下看到导出的模型:

使用OpenVINO模型推理:

importtimeimportcv2importsupervisionassvfromultralyticsimportYOLOfromsupervision.assetsimportdownload_assets,VideoAssets# 如果不存在则下载视频video_name=download_assets(VideoAssets.VEHICLES)model=YOLO("yolov8n_openvino_model")# 初始化展现对象corner_annotator=sv.BoxCornerAnnotator(corner_length=15,thickness=2,color=sv.Color(r=255,g=255,b=0))# 读取视频cap=cv2.VideoCapture(video_name)# 初始化计时器prev_tick=cv2.getTickCount()whileTrue:# 循环读取每一帧ret,frame=cap.read()# 由于原视频帧比较大,方便处理和后面展现,缩小一些frame=cv2.resize(frame,(1280,720))ifnotret:breakt=time.time()result=model(frame,device="cpu")[0]use_time=time.time()-t detections=sv.Detections.from_ultralytics(result)# 绘制边框frame=corner_annotator.annotate(frame,detections=detections)# 计算帧率current_tick=cv2.getTickCount()fps=cv2.getTickFrequency()/(current_tick-prev_tick)prev_tick=current_tick cv2.putText(frame,("FPS: {:.2f}".format(fps))+", USE_TIME: "+str(use_time),(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow('video',frame)cv2.waitKey(1)

可以明显看到FPS由原先的8.83提高到14.26,模型推理处理速度由之前0.078s降低到0.039s。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 1:14:38

Pytorch基础:Tensor的连续性

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中,一个连续的张量指的是张量中各数据元素在底层的存储顺序与其在张量中的位置一致。这意味着每一个元素的地址可以通过下面的线性映射公式来…

作者头像 李华
网站建设 2026/10/27 1:14:38

基于 YOLO V10 Fine-Tuning 训练自定义的目标检测模型

一、YOLO V10 在本专栏的前面几篇文章中,我们使用 ultralytics 公司开源发布的 YOLO-V8 模型,分别 Fine-Tuning 实验了 目标检测、关键点检测、分类 任务,实验后发现效果都非常的不错,但它已经不是最强的了。最新的 YOLO-V10 已经…

作者头像 李华
网站建设 2026/10/27 1:14:19

Sentinel Dashboard 规则联动持久化方案

一、Sentinel Dashboard 规则联动持久化方案 Sentinel 是阿里开源的一个流量控制组件,它提供了一种流量控制、熔断降级、系统负载保护等功能的解决方案。并且我们通过 Sentinel Dashboard 可以非常便捷的添加或修改规则策略,但是如果细心的小伙伴应该可以…

作者头像 李华
网站建设 2026/10/27 1:14:15

常见的文件系统

NTFS (New Technology File System)开发者: 微软(1993年)用途: 主要用于 Windows 操作系统详细介绍:1. 历史背景与演变NTFS(New Technology File System)是微软在1993年随Windows NT 3.1推出的一…

作者头像 李华
网站建设 2026/10/27 1:13:24

Verilog基础:编译指令`timescale

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 timescale编译指令用于指定该指令后编译单元内的模块的时间单位和时间精度,直到在编译单元中遇到了另一个timescale编译指令(关于编译单元…

作者头像 李华
网站建设 2026/10/27 1:12:43

ArmNN : Fronted model to ComputeLibrary OpenCL model

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华