1517浏览
查看: 1517|回复: 0

[动态] 使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8

[复制链接]

介绍

本文介绍利用DFRobot最新的微型x86计算模块LattePanda Mu,通过OpenVINO加速运行YOLOv8,实现高效、准确的物体检测,同时解决传统高性能计算机体积大、使用不便的问题。

随着物体检测技术在各个领域的应用越来越广泛,越来越多的工业和商业用户开始利用 YOLO 进行实时检测、物体跟踪等应用。其中,由 Ultralytics 于 2023 年提出的 YOLOv8 尤为受欢迎。然而,YOLOv8 虽然功能强大,但计算资源要求高,在轻量级计算设备上经常会卡顿。高性能计算机虽然可以满足 YOLO 的要求,但通常体积较大,不便于携带和部署。

因此,在本文中,我们将使用 DFRobot 最新的 Mu 核心板来运行 YOLOv8,并尝试通过 OpenVINO 对其进行加速。LattePanda Mu 是一款微型 x86 计算模块,配备英特尔 N100 四核处理器、8GB LPDDR5 内存和 64GB 存储。该模块提供丰富的扩展引脚,例如 3 个 HDMI/DisplayPort、8 个 USB 2.0、最多 4 个 USB 3.2 和最多 9 个 PCIe 3.0 通道,结合开源载板设计文件,使用户可以轻松设计或定制载板以满足其独特需求。

与其他产品不同,这款卡片大小的计算模块可以轻松嵌入到空间受限的设备中,在不占用太多空间的情况下提供强大的计算能力。此外,英特尔 N100 处理器的 TDP(热设计功率)可在 6W 至 35W 之间调整,使用户能够在功耗和性能之间灵活选择,以满足不同应用场景的需求。

利用该模块,可以在享受便携设备便利的同时,在各种应用场景中实现更高效、更准确的物体检测。

您可以在GitHub 链接中找到本文中使用的所有代码和模型文件。

本地YOLO 部署

首先我们测试了在没有任何量化加速的情况下直接在MU上运行YOLOv8n模型,可以看出运行性能比较卡顿,无法实现高速、精准的流式物体识别任务。

代码

pip install ultralytics opencv-python numpy

这些库包括:

·ultralytics:用于快速设置和运行YOLO模型的库。

·opencv-python:提供丰富的图像处理函数,用于处理和显示图像。

·numpy:用于数组和矩阵操作,是Python中常用的数值计算库。

安装库后,下载 GitHub 文件:

代码

        Git clone https://github.com/winster-bai/yolo_on_MU.git
cd yolo_on_MU

确保 Mu 已经连接好 USB 摄像头,然后才能进行下面的操作。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图1

图 1. 将相机连接到任意 LattePanda USB 端口

物体检测 (CPU)

1.下载模型yolov8n.pt(包含在GitHub文件夹中)

官方下载链接:[https ://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8n.pt](https ://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8n.pt)

YOLOv8 物体检测模型包含 5 个变体,均在 COCO 数据集上训练。模型后缀的含义及其性能如下:

·n:纳米(超轻量)
·s:Small(小型)
·m:Medium(中型)
·l:Large(大尺寸)
·x:特大号(特大尺寸)

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图2

表 1. 不同尺寸的 YOLOv8 物体检测模型性能比较

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图3

表 2. 参数说明

为了实现快速物体识别,本示例使用 YOLOv8n 进行物体检测。YOLOv8n 是 YOLOv8 系列中最轻量级的模型,能够以更低的计算资源和更快的速度完成物体检测任务,同时保持准确性。它特别适合资源受限的应用程序。

2.运行yolo.py文件

代码

python yolo.py 

代码解释:

· 加载 YOLOv8n 模型:使用 YOLO('yolov8n.pt') 加载预先训练的 YOLOv8n 模型。
· 打开相机:使用“cv2.VideoCapture(0)”打开默认相机。
· 读取帧:使用“cap.read()”读取视频帧。
· 模型预测:将读取的帧传递给 YOLO 模型进行对象检测。
· 绘制检测框:在检测到的物体的位置周围绘制矩形框并显示物体标签和置信度。
· 计算并显示FPS:计算帧率并在帧的左上角显示FPS值。
· 显示帧:使用“cv2.imshow”显示已处理过的帧。
· 退出循环:按“Q”键退出循环。
· 释放资源:释放相机并关闭所有OpenCV窗口。

3.运行结果:

当使用 Mu 上的 CPU 时,使用 YOLOv8n 进行对象检测的帧速率 (FPS) 大约在 4 到 7 之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图4

图 2. 在 LattePanda Mu x86 计算机模块上运行 YOLOv8n 物体检测模型

对象分割 (CPU)

1.下载官方模型(包含在GitHub文件夹中)
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-seg.pt

与之前类似,YOLOv8的五种物体分割模型在COCO数据集上进行训练,其性能如下:

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图5

表 3. 不同尺寸的 YOLOv8 物体分割模型性能比较

2.运行yolo_seg.py文件

代码

python yolo_seg.py

代码解释:

· 加载 YOLO 模型:实例化 YOLOv8n 模型(yolov8n-seg.pt 文件)用于对象分割。

· 打开相机:使用 OpenCV 库中的 VideoCapture 函数打开相机。

· 检测相机是否打开:使用isOpened方法检测相机是否打开成功,若未打开则输出错误信息并退出程序。

· 获取视频帧的宽度和高度:使用OpenCV库中的get方法获取视频帧的宽度和高度。

· 初始化计时器和 FPS:使用变量 prev_time 和 fps 初始化计时器和帧速率 (FPS)。

· 循环读取视频帧并处理:使用while循环连续读取摄像头捕获的视频帧。

· 将帧传递给模型进行预测:使用 YOLO 模型对每一帧进行对象检测,并将检测结果存储在变量 results 中。

· 处理预测结果并绘制框架:

· 将预测结果转换为 PIL 图像,然后转换为 NumPy 数组。

· 获取检测的边界框、置信度和类别 ID,并迭代绘制边界框和标签。

· 计算并绘制FPS:计算每秒处理的帧数(FPS),并将其绘制在视频帧的左上角。

· 显示帧并退出循环:使用 OpenCV 中的 imshow 函数显示已处理的视频帧,同时监听键盘输入。如果按下“Q”键,则退出循环。

· 释放摄像头并关闭窗口:释放摄像头资源并关闭OpenCV窗口。

3.运行结果:

当使用 Mu 上的 CPU 时,使用 YOLOv8n 进行对象分割的帧速率 (FPS) 大约在 2 到 5 之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图6

图 3. 在 LattePanda Mu x86 计算机模块上运行 YOLOv8n 对象分割模型

姿势估计(CPU)

1.下载官方模型(包含在GitHub文件夹中)。
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-pose.pt

YOLOv8 共有 6 个姿态估计模型,在 COCO 数据集上进行训练。模型性能如下。YOLOv8x-pose-p6 是 YOLOv8x 的一个变体,它使用更大的输入尺寸(1280 像素),提供更高的准确率,但需要更多的计算资源。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图7

表4 不同尺寸YOLOv8姿态估计模型性能对比

2.运行yolo_pos.py文件

代码

python yolo_pos.py

代码解释:

· 加载 YOLO 模型:实例化 YOLOv8n 模型(yolov8n-pose.pt 文件)用于人体姿势检测。
· 打开本地视频文件:使用OpenCV的VideoCapture函数打开名为“people.mp4”的本地视频文件。如果需要,可以将其更改为网络摄像头。
· 获取视频帧的宽度和高度:使用OpenCV中的get方法获取视频帧的宽度和高度。
· 初始化计时器和 FPS:使用变量 prev_time 和 fps 初始化计时器和帧速率 (FPS)。
· 循环读取视频帧并处理:使用 while 循环连续从视频文件中读取每一帧。
· 将帧传递给模型进行预测:使用 YOLO 模型对每一帧执行人体姿势检测,明确指定 CPU 使用率。
· 处理预测结果并在框架上绘制:将预测结果转换为 PIL 图像,然后转换为 NumPy 数组。获取检测的边界框、置信度和类别 ID,并迭代绘制边界框和标签。
· 计算并绘制FPS:计算每秒处理的帧数(FPS),并将其绘制在视频帧的左上角。
· 调整帧大小:使用 OpenCV 中的调整大小功能将帧大小调整为 640x480 像素。
· 显示帧并退出循环:使用 OpenCV 中的 imshow 函数显示已处理的视频帧,同时监听键盘输入。如果按下“Q”键,则退出循环。
· 释放视频文件并关闭窗口:释放视频文件的资源并关闭OpenCV窗口。

如果要使用摄像头而不是本地视频文件,请跳过此步骤并更改代码:

代码

cap = cv2.VideoCapture("people.mp4")

进入:

代码

cap = cv2.VideoCapture(0)

3.运行结果:

当使用 Mu 上的 CPU 时,使用 YOLOv8n 进行人体姿势检测的帧速率 (FPS) 大约在 3 到 6 之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图8

图 4. 在 LattePanda Mu x86 计算机模块上运行 YOLOv8n 姿态估计模型

ONNX 变换

YOLOv8n 模型支持导出为不同的格式,例如 ONNX、CoreML 等,具体可导出的格式如下表所示,可以使用 format 参数,即format='onnx'或format='engine',也可以直接对导出的模型进行预测或验证,即 YOLO predict model=yolov8n.onnx,导出完成后会展示一个使用该模型的示例。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图9

图 5. YOLOv8 导出格式

本文将模型导出为.onnx格式,可以拥有更强的跨平台兼容性和部署灵活性,模型转换代码如下:

代码:

        from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # load the official model

# Export the model
model.export(format="onnx" , dynamic=True)

输出如下:

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图10

图 6. 成功将模型转换为 ONNX 格式

在Mu上测试ONNX模型(首次运行会​​自动安装onnxruntime),在目前的测试环境和硬件条件下,如果不改变输入图像大小(推理大小),.pt模型和ONNX模型的速度差别并不大,因此就不再赘述了

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图11

图 7. 在 LattePanda Mu 上运行 ONNX 模型(原始图像大小)

使用 OpenVINO 优化

在对原生模型进行测试后发现,在实时推理环境下,推理速度还有相当大的提升空间,因此我们在慕课的Intel集成GPU上测试了使用OpenVINO优化的YOLOv8n模型的性能,在模型准确率没有明显下降的情况下,推理速度得到了大幅提升。

环境配置

1.安装Anaconda

进入官网,下载对应系统版本的安装包,按照步骤提示确认安装完成。

2.下载GIT

  1. 安装Microsoft Visual C++ Redistributable

4.创建Conda环境,并在Anaconda Prompt中指定Python版本。

代码

conda create -n yolov8 python=3.8

注意:建议指定Python版本3.8,3.11版本可能与YOLOv8库存在兼容性问题,不利于后续自定义数据训练。

5.安装OpenVINO(以Windows环境为例)

将笔记本存储库从 GitHub 克隆到本地机器。

代码

        git clone --depth=1 https://github.com/openvinotoolkit/openvino_notebooks.git
cd openvino_notebooks

安装 OpenVINO 环境

代码

        python -m pip install --upgrade pip wheel setuptools
pip install -r requirements.txt
  1. 在终端中打开 YOLOv8 笔记本

代码

jupyter lab notebooks/yolov8-optimization

然后就可以在jupyter notebook中选择YOLOv8优化项目并在本地运行了。

物体检测(CPU/GPU)

使用 YOLOv8n 进行 INT8 量化

精度变化参数解释:

· 精度:模型识别相关对象的准确率。

· 召回率:衡量模型检测所有真实对象的能力。

· mAP@t:平均精度,表示为数据集中所有类别的精确度-召回率曲线下的面积,其中 t 是交并比 (IOU) 阈值,即真实值和预测对象之间的重叠程度。因此,mAP@.5 表示在 0.5 IOU 阈值下计算的平均精度,而 mAP@.5:.95 表示相同的精度,但在 0.5 到 0.95 的 IOU 阈值范围内以 0.05 的步长计算。

运行结果

经过 INT8 量化后,在 Mu 的 CPU 上使用 YOLOv8 进行物体检测的帧率(FPS)大约在 7 到 9 之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图12

图 10.在经过 OpenVINO 优化的 LattePanda Mu CPU 上运行 YOLOv8n 对象检测模型

图形处理器

经过 INT8 量化后,在 Mu 的集成 GPU 上使用 YOLOv8 进行对象检测的帧率 (FPS) 大约在 15 到 20 之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图13

图 11.在 LattePanda Mu GPU 上运行 YOLOv8n 对象检测模型,并采用 OpenVINO 优化

对象分割(CPU/GPU)

模型量化后的准确率对比

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图14

图12. 训练NFCC和INT8量化后的准确率

中央处理器

经过 INT8 量化后,在 Mu 的集成 GPU 上使用 YOLOv8 进行对象分割的帧率 (FPS) 大约在 5 到 7 之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图15

图 13.在采用 OpenVINO 优化的 LattePanda Mu CPU 上运行 YOLOv8n 对象分割模型

图形处理器

经过 INT8 量化后,在 Mu 的 GPU 上使用 YOLOv8 进行对象分割的帧率 (FPS) 大约在 12 到 14 之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图16

图 14.在 LattePanda Mu GPU 上运行 YOLOv8n 对象分割模型,并采用 OpenVINO 优化

姿势估计(CPU/GPU)

INT8量化精度对比

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图17


图15.训练NFCC和INT8量化后的准确率

中央处理器

经过int8量化后,在mu的CPU上运行YOLOv8人体关键点检测的帧率(FPS)大约在8到9之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图18

图 16.在 LattePanda Mu CPU 上运行 YOLOv8n 姿势估计模型,并采用 OpenVINO 优化

图形处理器

经过int8量化之后,在mu的GPU上运行yolov8n人体关键点检测的帧率(FPS)大约在19到22之间。

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图19

图 17.在 LattePanda Mu GPU 上运行 YOLOv8n 姿势估计模型,并采用 OpenVINO 优化

结论
在LattePanda Mu核心板上以不同方式运行yolov8n进行物体识别、分割等操作的帧率(FPS)结果如下:

使用 OpenVINO 在 LattePanda Mu(Intel N100 处理器)上运行 YOLOv8图20

表 5:在 LattePanda Mu 上以不同方式运行 YOLOv8n 的帧率(FPS)结果

录制数据截图可能会造成fps下降,实际情况下可以在上述范围上增加1~2个。

参考

1. OpenVINO 笔记本 GitHub

2.Ultralytics官方网站



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail