635| 0
|
[动态] 在行空板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相近。 yolov10性能参数对比
1.2 行空板M10介绍行空板M10是专为Python学习使用而设计的新一代国产开源硬件,采用单板机架构,集成LCD彩屏、WiFi蓝牙、各类常用传感器、丰富的扩展接口,自带Linux操作系统和Python环境,预装常用Python库,学生和老师只需两步即可开始Python教学。 行空板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 金手指,支持各种通信协议和功能。 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 环境。 步骤如下: 2. 创建新环境:使用 MiniConda 创建一个 Python 3.8 或更高版本的虚拟环境。这可以确保我们部署 YOLOv10 不会受到系统默认 Python 环境的影响,避免出现兼容性问题。 3.激活环境:激活新创建的虚拟环境,使其成为当前工作环境。 4. 安装 Ultralytics 库:在激活的虚拟环境中,使用 pip 命令安装 Ultralytics 提供的 YOLO 库。这将下载并安装所有必要的依赖项和组件,使我们能够顺利运行 YOLOv10。 通过以上步骤,我们成功地将 YOLOv10 部署到了 行空板上,充分利用了其强大的物体检测能力。这种方式不仅保证了 YOLOv10 的高效运行,还便于环境管理和版本控制,为后续的开发和实验打下了稳定的基础。另外,通过使用 MiniConda 进行版本管理,我们可以更灵活地应对不同项目的 Python 环境需求,提高开发效率。 以下是详细步骤: 步骤1检查当前Python版本:在终端中输入:
终端显示:
Ultralytics 不支持低版本的 Python,因此需要升级 Python。我们选择使用 MiniConda 进行版本管理和升级。 注意:不要使用 Anaconda,因为它在行空板M10上运行时可能会出现错误。 第 2 步下载 MiniConda:在终端中输入:
下载完成后终端显示:
步骤 3 安装 MiniConda:在终端中输入:
按照提示按ENTER或者yes键即可。终端最后显示:
在终端中输入:
安装完成后在终端输入:
终端显示: 步骤4激活Conda:在终端中输入:
终端显示变化如下: root@unihiker:到: (base)root@unihiker:表示 Conda 激活成功。 步骤5 在Conda中创建YOLO环境:将环境命名为“yolo”,并选择 Python 版本 3.11。在终端中输入:
在此过程中,显示屏显示: 输入“y” 环境创建完成后,终端显示: 步骤6激活YOLO环境:在终端中输入:
终端显示变化如下: (基地)根@unihiker:到: (yolo)root@unihiker:表示成功激活YOLO环境。 步骤 7 安装 Ultralytics:在终端中输入:
完成后终端显示: 步骤 8 安装 Pillow 库:在终端中输入:
如果已经安装,终端显示:
步骤9安装OpenCV:在终端中输入:
如果已经安装,终端显示:
步骤 10 安装 Hugging Face 库:在终端中输入:
步骤11 安装Hugging Face Hub库:在终端中输入:
3.快速入门:运行原生 YOLOv10步骤1从GitHub下载项目:YOLOv10项目网址:https://github.com/THU-MIG/yolov10 在终端中输入:
下载 YOLOv10 项目。然后在终端中输入以下内容进入目录:
步骤2 准备所需文件:重量文件: [yolov10n.pt]步骤3创建Python文件:快速启动.py 示例代码:
步骤4 确认YOLO环境已激活:在终端中输入:
确认终端显示: 步骤 5 运行你编写的 Python 脚本:在终端中输入:
终端显示:
自动下载了我们为 YOLO 推理准备的图像“bus.jpg”,如下所示: 最终模型推理结果存储为“result_bus.jpg”: 4. 优化:转换为 ONNX 格式运行原生的YOLOv10n的时候速度比较慢,所以我们需要将其转换为ONNX格式,以加快其运行速度。 本节介绍如何将yolov10n.pt转换为ONNX格式,以加速其运行。以下是详细步骤: 步骤1 移动到上一节创建的YOLO目录:在终端中输入: 步骤2 创建一个名为export_onnx.py的Python文件,内容如下:
步骤3确认YOLO环境已激活:在终端中输入:
确认终端显示: 步骤 4 运行你编写的 Python 脚本:在终端中输入:
终端显示:
步骤5 编写文件来运行ONNX模型:创建一个名为predict_onnx.py的文件,并写入以下代码:
步骤6 运行推理代码:在终端中输入:
终端显示: 可以看到使用ONNX模型进行物体检测大概需要6.5秒,比原生模型快了0.5秒。 5.进一步优化:减小输入图像尺寸显然,目前的推理速度仍然很慢。 如果想要提升推理速度,可以减小输入图片大小。在导出 ONNX 模型时,我们可以设置 imgsz 参数来指定输入图片大小。如果输入图片大小不确定,我们也可以设置 dynamic 参数为 True,让导出的 ONNX 可以接受任意大小的图片输入进行推理。具体步骤如下: 步骤1 移动到上一节创建的YOLO目录:在终端中输入:
步骤2 创建一个名为export_onnx.py的Python文件,内容如下:这一步我们将动态参数设置为True。
步骤3确认YOLO环境已激活:在终端中输入:
确认终端显示: 步骤 4 运行你编写的 Python 脚本:在终端中输入:
终端显示: 步骤5 编写文件来运行ONNX模型:创建一个名为predict_onnx.py的文件,并写入以下代码:
本代码中我们分别测试了原始尺寸图像、256尺寸图像、128尺寸图像、64尺寸图像的运行情况。 步骤6 运行推理代码:在终端中输入:
终端显示: 总结:注意:性能基于 bus.jpg 图像。如果您有自己的数据集,可能需要进一步测试。 本次测试准确率判断标准为: 6.与YOLOv8n的比较使用官方代码,图像大小与运行时间对比如下: 注意:准确度是使用 bus.jpg 测试的。如果您有自己的数据集,可能需要进一步测试。 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上的运行,敬请期待。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed