2024-12-13 15:48:39 只看该作者
4526浏览
查看: 4526|回复: 1
打印 上一主题 下一主题

[动态] 在行空板M10上运行 YOLOv10:高效物体检测的分步指南

[复制链接]

对于有兴趣在紧凑型硬件平台上部署高级对象检测算法的开发人员、教育工作者和业余爱好者,本指南提供了全面的概述。如果您希望探索 AI 与嵌入式系统的集成,尤其是在行空板M10 单板计算机上使用 YOLOv10 算法,您会发现它特别有用。您将学习如何设置环境、优化模型以提高性能以及实现实际应用。这使它成为提高您在 AI 和嵌入式系统开发方面的技能的宝贵资源。

1. 简介

1.1 YOLOv10简介

YOLO(You Only Look Once)系列是目前主流的端侧物体检测算法之一,最早由Joseph Redman等人提出,随着时间的推移,已经发布了多个版本,每个版本在性能和速度上都有“看似”的提升。

本文介绍的是运行在行空板M10板子上的 YOLOv10。YOLOv10 由清华大学研究团队提出,遵循 YOLO 系列的设计原则,致力于打造实时、端到端的高性能物体检测器。YOLOv10 弥补了 YOLO 系列在后处理和模型架构方面的不足,通过消除非极大值抑制 (NMS) 操作和优化模型架构,YOLOv10 在达到 SOTA 性能的同时,显著降低了计算开销。在标准物体检测基准上进行的大量实验表明,YOLOv10 在各个模型规模上在计算量-精度权衡方面显著优于之前的 SOTA 模型。如下图所示,YOLOv10-S / X 比性能相近的 RT-DETR R18 / R101 快 1.8 倍 / 1.3 倍。相比于YOLOv9-C,在同等性能​​下,YOLOv10-B将延迟降低了46%。此外,YOLOv10还展现出极高的参数利用效率,YOLOv10-L/X的参数量分别减少了1.8倍和2.3倍,性能比YOLOv8-L/X高出0.3 AP和0.5 AP;YOLOv10-M的参数量分别减少了23%和31%,但性能却与YOLOv9-M/YOLO-MS相近。

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图1

yolov10性能参数对比

1.2 行空板M10介绍

行空板M10是专为Python学习使用而设计的新一代国产开源硬件,采用单板机架构,集成LCD彩屏、WiFi蓝牙、各类常用传感器、丰富的扩展接口,自带Linux操作系统和Python环境,预装常用Python库,学生和老师只需两步即可开始Python教学。

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图2

行空板M10基于主频 1.2GHz 的 RK3308 Arm 64 位四核处理器,配备 512MB DDR3 内存和 16GB eMMC 硬盘,运行 Debian 10 操作系统。还支持 2.4G Wi-Fi 和蓝牙 4.0,采用 RTL8723DS 芯片。行空板M10还集成了主频 108MHz 的 GD32VF103C8T6 RISC-V 协处理器、64KB Flash 和 32KB SRAM。

行空板M10具有各种板载组件,包括 Home 按钮、A/B 按钮、2.8 英寸触摸彩色屏幕(分辨率为 240x320)、电容式硅麦克风、PT0603 光敏三极管光传感器、无源蜂鸣器和蓝色 LED。它还具有 ICM20689 六轴传感器,其中包括三轴加速度计和三轴陀螺仪。

接口方面,行空板M10提供了丰富的连接方式,拥有一个 USB Type-C 接口,用于将 CPU 连接到 PC 进行编程或为主板供电,还有一个 USB TYPE-A 接口,用于连接外部 USB 设备。此外,该板还具有一个 microSD 卡接口,可用于扩展存储空间,一个支持三个 10 位 PWM 通道和两个 12 位 ADC 通道的 3Pin I/O,一个独立的 4Pin I2C 接口,以及 19 个与 micro:bit 兼容的独立 I/O 金手指,支持各种通信协议和功能。

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图3

1.3 在行空板M10上使用 YOLOv10 进行物体检测

在本文中,我们将使用 DFRobot 开发的行空板M10 运行 YOLOv10,并尝试通过转换为 ONNX 格式来加速它。

在行空板上部署 YOLOv10 具有重要的实际意义和教育意义:

1. 便携性与部署灵活性: 行空板M10 体积小巧,适合嵌入到空间受限的设备中,实现便携的物体检测部署。相比大型计算机,行空板M10更适合现场和移动场景。

2. 性价比高: 行空板M10成本相对较低,适合预算有限的项目和教育用途。通过在行空板M10上运行 YOLOv10,可以进行低成本的物体检测应用开发和实验。

3. 学习与实验平台: 行空板M10提供了丰富的接口和板载组件,非常适合作为学习与实验平台。通过在 行空板M10上运行 YOLOv10,学生和开发者可以深入了解嵌入式系统与人工智能的融合,了解资源受限环境下的优化和加速算法。

4. 技术挑战与创新:在资源有限的 行空板 上运行 YOLOv10 需要克服与计算性能和内存限制相关的挑战。这为开发人员提供了探索和创新的机会,可以尝试各种优化技术,例如模型压缩、量化和硬件加速。

2.准备:设置运行YOLOv10的环境

为了在行空板M10上成功运行 YOLOv10,我们将使用 Ultralytics 提供的库进行部署。首先,我们需要确保 行空板M10上的 Python 环境满足 YOLOv10 的要求,具体升级到 Python 3.8 或更高版本。为此,我们建议使用 MiniConda 进行版本管理,以便轻松切换和管理不同的 Python 环境。

步骤如下:
1. 安装 MiniConda:首先,在行空板M10上下载并安装 MiniConda。MiniConda 是一个轻量级 Python 发行版,专门用于简化 Python 环境和软件包安装的管理。

2. 创建新环境:使用 MiniConda 创建一个 Python 3.8 或更高版本的虚拟环境。这可以确保我们部署 YOLOv10 不会受到系统默认 Python 环境的影响,避免出现兼容性问题。

3.激活环境:激活新创建的虚拟环境,使其成为当前工作环境。

4. 安装 Ultralytics 库:在激活的虚拟环境中,使用 pip 命令安装 Ultralytics 提供的 YOLO 库。这将下载并安装所有必要的依赖项和组件,使我们能够顺利运行 YOLOv10。

通过以上步骤,我们成功地将 YOLOv10 部署到了 行空板上,充分利用了其强大的物体检测能力。这种方式不仅保证了 YOLOv10 的高效运行,还便于环境管理和版本控制,为后续的开发和实验打下了稳定的基础。另外,通过使用 MiniConda 进行版本管理,我们可以更灵活地应对不同项目的 Python 环境需求,提高开发效率。

以下是详细步骤:

步骤1检查当前Python版本:

在终端中输入:

python --version

终端显示:

Python 3.7.3

Ultralytics 不支持低版本的 Python,因此需要升级 Python。我们选择使用 MiniConda 进行版本管理和升级。

注意:不要使用 Anaconda,因为它在行空板M10上运行时可能会出现错误。

第 2 步下载 MiniConda:

在终端中输入:

wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh

下载完成后终端显示:

Saved “Miniforge3-Linux-aarch64.sh” [74300552/74300552])

步骤 3 安装 MiniConda:

在终端中输入:

sudo bash Miniforge3-Linux-aarch64.sh

按照提示按ENTER或者yes键即可。终端最后显示:

Added mamba to /root/.bashrc

==> For changes to take effect, close and re-open your current shell. <==

Thank you for installing Miniforge3!

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图4

在终端中输入:

source ~/.bashrc

安装完成后在终端输入:

conda

终端显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图5

步骤4激活Conda:

在终端中输入:

conda activate

终端显示变化如下:

root@unihiker:

到:

(base)root@unihiker:

表示 Conda 激活成功。

步骤5 在Conda中创建YOLO环境:

将环境命名为“yolo”,并选择 Python 版本 3.11。在终端中输入:

conda create -n yolo python==3.11

在此过程中,显示​​屏显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图6

输入“y”

环境创建完成后,终端显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图7

步骤6激活YOLO环境:

在终端中输入:

conda activate yolo

终端显示变化如下:

(基地)根@unihiker:

到:

(yolo)root@unihiker:

表示成功激活YOLO环境。

步骤 7 安装 Ultralytics:

在终端中输入:

pip install ultralytics

完成后终端显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图8

步骤 8 安装 Pillow 库:

在终端中输入:

pip install pillow

如果已经安装,终端显示:

Requirement already satisfied: pillow in /root/miniforge3/envs/yolo/lib/python3.11/site-packages (10.3.0)

步骤9安装OpenCV:

在终端中输入:

pip install opencv-python

如果已经安装,终端显示:

Requirement already satisfied: opencv-python in /root/miniforge3/envs/yolo/lib/python3.11/site-packages (4.9.0.80)

Requirement already satisfied: numpy>=1.21.2 in /root/miniforge3/envs/yolo/lib/python3.11/site-packages (from opencv-python) (1.26.4)

步骤 10 安装 Hugging Face 库:

在终端中输入:

pip install huggingface

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图9

步骤11 安装Hugging Face Hub库:

在终端中输入:

pip install huggingface_hub

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图10

3.快速入门:运行原生 YOLOv10

步骤1从GitHub下载项目:

YOLOv10项目网址:https://github.com/THU-MIG/yolov10

在终端中输入:

git clone https://github.com/THU-MIG/yolov10.git

下载 YOLOv10 项目。然后在终端中输入以下内容进入目录:

cd yolov10

步骤2 准备所需文件:

重量文件:

[yolov10n.pt]

步骤3创建Python文件:

快速启动.py

示例代码:

Python

from ultralytics import YOLO

# Load a pretrained YOLO model (recommended for training)

model = YOLO("yolov10n.pt")

# Perform object detection on an image using the model

results = model("https://ultralytics.com/images/bus.jpg")

# Save results to disk

results[0].save(filename=f"result_bus.jpg")

步骤4 确认YOLO环境已激活:

在终端中输入:

conda activate yolo

确认终端显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图11

步骤 5 运行你编写的 Python 脚本:

在终端中输入:

python quick_start.py

终端显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图12
使用原生的YOLOv10n模型进行单张图片推理大约需要7秒。

自动下载了我们为 YOLO 推理准备的图像“bus.jpg”,如下所示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图13

最终模型推理结果存储为“result_bus.jpg”:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图14

4. 优化:转换为 ONNX 格式

运行原生的YOLOv10n的时候速度比较慢,所以我们需要将其转换为ONNX格式,以加快其运行速度。

本节介绍如何将yolov10n.pt转换为ONNX格式,以加速其运行。以下是详细步骤:

步骤1 移动到上一节创建的YOLO目录:

在终端中输入:
cd yolov10

步骤2 创建一个名为export_onnx.py的Python文件,内容如下:

Pythonfrom ultralytics import YOLO # Load a modelmodel = YOLO("yolov10n.pt")  # load an official model # Export the modelmodel.export(format="onnx")

步骤3确认YOLO环境已激活:

在终端中输入:

conda activate yolo

确认终端显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图15

步骤 4 运行你编写的 Python 脚本:

在终端中输入:

python export_onnx.py

终端显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图16
可以看到转换后的文件“yolov10n.onnx”已被自动保存。

步骤5 编写文件来运行ONNX模型:

创建一个名为predict_onnx.py的文件,并写入以下代码:

Pythonfrom ultralytics import YOLO # Load the exported NCNN modelonnx_model = YOLO("yolov10n.onnx", task = 'detect') # Run inferenceresults = onnx_model("https://ultralytics.com/images/bus.jpg") # Save results to diskresults[0].save(filename=f"result_bus_onnx.jpg")

步骤6 运行推理代码:

在终端中输入:

python predict_onnx.py

终端显示:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图17
该目录生成预测结果:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图18

可以看到使用ONNX模型进行物体检测大概需要6.5秒,比原生模型快了0.5秒。

5.进一步优化:减小输入图像尺寸

显然,目前的推理速度仍然很慢。

如果想要提升推理速度,可以减小输入图片大小。在导出 ONNX 模型时,我们可以设置 imgsz 参数来指定输入图片大小。如果输入图片大小不确定,我们也可以设置 dynamic 参数为 True,让导出的 ONNX 可以接受任意大小的图片输入进行推理。具体步骤如下:

步骤1 移动到上一节创建的YOLO目录:

在终端中输入:

cd yolov10

步骤2 创建一个名为export_onnx.py的Python文件,内容如下:

这一步我们将动态参数设置为True。

Pythonfrom ultralytics import YOLO # Load a modelmodel = YOLO("yolov10n.pt")  # load an official model # Export the modelmodel.export(format="onnx", dynamic = True)

步骤3确认YOLO环境已激活:

在终端中输入:

conda activate yolo

确认终端显示:

在行空板M10上运行 YOLOv10:高效物体检测的分步指南图19

步骤 4 运行你编写的 Python 脚本:

在终端中输入:

python export_onnx.py

终端显示:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图20
可以看到文件“yolov10n.onnx”已自动保存。

步骤5 编写文件来运行ONNX模型:

创建一个名为predict_onnx.py的文件,并写入以下代码:

Pythonfrom ultralytics import YOLOimport cv2 # Load the exported NCNN modelonnx_model = YOLO("yolov10n.onnx", task = 'detect') image = cv2.imread('bus.jpg')print(image.shape) # Run inferenceprint('original')results = onnx_model("bus.jpg")results[0].save(filename='bus_640.jpg')print(256)results = onnx_model("bus.jpg", imgsz = 256)results[0].save(filename='bus_256.jpg')print(128)results = onnx_model("bus.jpg", imgsz = 128)results[0].save(filename='bus_128.jpg')print(64)results = onnx_model("bus.jpg", imgsz = 64)results[0].save(filename='bus_64.jpg')

本代码中我们分别测试了原始尺寸图像、256尺寸图像、128尺寸图像、64尺寸图像的运行情况。

步骤6 运行推理代码:

在终端中输入:

python predict_onnx.py

终端显示:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图21
原图大小为1080*810,原生YOLOv10n最大预测尺寸为640,耗时约6秒,结果如下:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图22
当输入大小为448时,耗时约为秒。结果如下:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图23
当输入大小为320时,耗时约为1.2秒,结果如下:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图24
当输入大小为256时,所需时间约为0.8秒。
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图25
当输入大小为128时,所需时间约为0.4秒。
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图26

总结:

注意:性能基于 bus.jpg 图像。如果您有自己的数据集,可能需要进一步测试。

本次测试准确率判断标准为:
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图27

6.与YOLOv8n的比较

使用官方代码,图像大小与运行时间对比如下:

注意:准确度是使用 bus.jpg 测试的。如果您有自己的数据集,可能需要进一步测试。
在行空板M10上运行 YOLOv10:高效物体检测的分步指南图28

7. 结论

行空板M10可以运行 YOLOv10n

使用行空板M10,用简单的代码即可运行YOLOv10n,速度比YOLOv8n稍快。

本文介绍如何在行空板M10上完成YOLOv10的部署

YOLOv10 虽然是基于 Ultralytics 开发的,但是单纯安装 Ultralytics 库并不能直接运行 YOLOv10,还是需要 clone 官方仓库。

推荐的分辨率配置

如果使用行空板M10进行图片物体检测,可以考虑使用448的输入分辨率,单张图片的处理时间大概为2.5秒,准确率已经很不错了。如果使用行空板M10进行视频物体检测,考虑到行空板M10的算力,建议使用128的输入分辨率,单张图片的处理时间大概为0.28秒,不过此时表现一般。可以考虑使用YOLOv8n的128输入分辨率,准确率表现更佳。同样,准确率表现是基于bus.jpg的测试,如果你有自己的数据集,可能还需要进一步测试。

持续优化,敬请期待

我们会持续优化YOLOv10n在行空板M10上的运行,敬请期待。




沙发

地下铁  高级技师

发表于 前天 13:16

好文章!马上来试试。谢谢作者。
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail