如何在行空板上运行 YOLOv10n?

news2024/9/22 7:20:26

YOLOv10介绍

YOLO(You Only Look Once)系列是当前最主流的端侧目标检测算法,由Joseph Redmon等人首次提出,并随着时间发展,已经推出了多个版本,每个版本“似乎”都在性能和速度上有所提升。

本文为大家介绍的是 YOLOv10在行空板的运行。YOLOv10是由清华大学研究团队最新提出的,同样遵循 YOLO 系列设计原则,致力于打造实时端到端的高性能目标检测器。

YOLOv10解决了以往版本YOLO系列目标检测算法在后处理和模型架构方面的不足。通过消除非极大值抑制(NMS)操作和优化模型架构,YOLOv10在显著降低计算开销的同时还实现了最先进的性能。在标准目标检测基准上进行的广泛实验表明,YOLOv10在各种模型规模下,在计算-准确度权衡方面显著优于先前的最先进模型。

如下图所示,在类似性能下,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实现了相似的AP。

yolov10性能参数对比图

行空板硬件介绍

行空板是一款专为Python学习和使用设计的新一代国产开源硬件,采用单板计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和Python环境,还预装了常用的Python库,让广大师生只需两步就能进行Python教学。

在这里插入图片描述

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

行空板拥有多种板载元件,包括Home按键、A/B按键,2.8英寸可触控彩色屏幕,分辨率为240x320。设备还配备了电容式硅麦克风、PT0603光敏三极管光线传感器、无源蜂鸣器和蓝色LED。此外,它还内置了ICM20689六轴传感器,包括三轴加速度和三轴陀螺仪。

在接口方面,行空板提供了多种连接选项。具有USB Type-C接口,用于将CPU与PC连接进行编程或为主板供电。还有USB TYPE-A接口,用于连接外部USB设备。此外,板上还有microSD卡接口用于扩展存储空间,3Pin I/O支持3路10位PWM和2路12位ADC,独立的4Pin I2C接口,以及与micro:bit兼容的19路独立I/O金手指,支持多种通信协议和功能。

在这里插入图片描述

在行空板上运行YOLOv10的物体检测功能

在这篇文章中,我们将使用DFRobot公司研发的行空板来运行YOLOv10,并尝试通过转换onnx格式进行加速。

将YOLOv10部署在行空板上具有重要的实用和学习意义:

  1. 便携性和部署灵活性:行空板体积小巧,便于嵌入到空间受限的设备中,实现物体检测的便携式部署。相比于大型计算机,行空板更适合在现场和移动场景中使用。
  2. 成本效益:行空板相对成本较低,适合预算有限的项目和教育用途。通过在行空板上运行YOLOv10,可以进行低成本的物体检测应用开发和实验。
  3. 学习和实验平台:行空板提供了丰富的接口和板载元件,适合作为学习和实验平台。通过在行空板上运行YOLOv10,学生和开发者可以深入理解嵌入式系统和人工智能的结合,学习优化和加速算法在资源受限环境中的应用。
  4. 技术挑战和创新:在资源有限的行空板上运行yolov10需要克服计算性能和内存限制的挑战。这为开发者提供了一个探索和创新的机会,可以尝试各种优化技术,如模型压缩、量化和硬件加速。

准备:运行yolov10的环境配置

为了在行空板上成功运行YOLOv10,我们将使用Ultralytics官方提供的库进行部署。首先,我们需要确保行空板上的Python环境满足YOLOv10的要求,即Python版本需升级到3.8以上。为此,我们推荐使用MiniConda进行版本管理,这样可以轻松切换和管理不同版本的Python环境。

步骤大致如下:

  1. 安装MiniConda:首先,在行空板上下载并安装MiniConda。MiniConda是一个轻量级的Python发行版,专门用于简化Python环境的管理和包的安装。
  2. 创建新环境:使用MiniConda创建一个新的Python 3.8或更高版本的虚拟环境。这可以确保我们在部署yolov10时,不会受到系统默认Python环境的影响,从而避免兼容性问题。
  3. 激活环境:激活新创建的虚拟环境,使之成为当前的工作环境。
  4. 安装Ultralytics库:在激活的虚拟环境中,通过pip命令安装Ultralytics官方提供的YOLO库。这将下载并安装所有必要的依赖项和组件,使我们能够顺利运行YOLOv10。

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

下面是详细步骤。

step 1 查看当前python版本:

在终端输入:

python --version

终端显示:

Python 3.7.3

ultralytics不支持低版本python,需简要将python升级。选择使用mini conda进行版本管理和升级。

  • 注意,不要使用anaconda,行空板运行易报错。

step 2 下载mini conda

在终端输入:

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

下载完后终端显示:

已保存 “Miniforge3-Linux-aarch64.sh” [74300552/74300552])

step 3 安装mini conda

在终端输入:

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!

在这里插入图片描述

在终端输入:

source ~/.bashrc

安装完成,在终端输入:

conda

终端显示:

在这里插入图片描述

Step 4 激活conda

在终端输入:

conda activate

可以看到终端的显示由

在这里插入图片描述

变成

在这里插入图片描述

说明已经成功激活了conda。

Step 5 在conda中建立YOLO环境

名字叫yolo,python版本选择3.11。在终端输入:

conda create -n yolo python==3.11

过程中显示:

在这里插入图片描述

输入y,

环境建立完终端显示:

在这里插入图片描述

Step 6 激活yolo环境

在终端中输入:

conda activate yolo

可以看到终端显示由

在这里插入图片描述

变成

在这里插入图片描述

说明激活yolo环境成功。

Step 7 安装utralytics

在终端输入:

pip install ultralytics

完成后终端显示:

在这里插入图片描述

Step 8 安装Pillow库

在终端输入:

pip install pillow

如果已安装,终端显示:

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

Step 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)

Step 10 安装huggingface库

终端输入:

pip install huggingface

在这里插入图片描述

Step 11 安装huggingface_hub库

终端输入:

pip install huggingface_hub

在这里插入图片描述

快速开始:原生yolov10的运行

Step 1 github上下载项目

Yolov10项目地址:https://github.com/THU-MIG/yolov10

终端输入:

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

下载yolov10的项目。然后进入目录,终端输入:

cd yolov10

Step 2 需要准备的文件

权重文件(可以在文末下载):

Step 3 创建python文件

quick_start.py 样例代码:

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")

Step 4 确认开启yolo环境:

在终端输入:

conda activate yolo

确认终端显示:

在这里插入图片描述

Step 5 运行编写的python脚本

在终端输入:

python quick_start.py

可以看到终端中显示:

在这里插入图片描述

可以看到,使用原生yolov10n的模型进行单张图片的推理需要大约7秒。

自动下载了图片bus.jpg,这是我们准备的让yolo推理的图片,如下所示:

在这里插入图片描述

最后模型推理,将结果储存为了result_bus.jpg:

在这里插入图片描述

优化:转换onnx格式

在使用原生yolov10n运行的时候,速度是很慢的,所以我们需要对其进行格式转换以加速其运行。

本节介绍如何将yolov10n.pt转换成onnx格式以加快运行速度。下面是详细步骤:

Step 1 移动到上一节中创建的yolo目录

在终端中输入:

cd yolov10

Step 2 建立python文件,名为:export_onnx.py,代码如下:

from ultralytics import YOLO

# Load a model
model = YOLO("yolov10n.pt")  # load an official model

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

Step 3 确认开启yolo环境:

在终端输入:

conda activate yolo

确认终端显示:

在这里插入图片描述

Step 4 运行编写的python脚本

在终端输入:

python export_onnx.py

终端中显示:

在这里插入图片描述

可以看到,最终自动保存了转换好的文件yolov10n.onnx

Step 5 编写运行onnx模型的文件

建立predict_onnx.py文件,并编写如下代码:

from ultralytics import YOLO

# Load the exported NCNN model
onnx_model = YOLO("yolov10n.onnx", task = 'detect')

# Run inference
results = onnx_model("https://ultralytics.com/images/bus.jpg")

# Save results to disk
results[0].save(filename=f"result_bus_onnx.jpg")

Step 6 运行推理代码

在终端输入:

python predict_onnx.py

终端显示:
在这里插入图片描述

目录中产生预测结果:

在这里插入图片描述

可以看到,使用onnx模型进行目标检测大约耗时6.5秒,比原生模型快了0.5秒。

进一步优化:减小输入图片的尺寸

可以看出,目前的推理速度仍然较慢。

如果想提高推理速度,可以减少输入图片的尺寸。导出onnx模型的时候,我们可以设置参数imgsz来规定输入图片的尺寸,如果输入图片的尺寸不确定,我们也可以将dynamic参数设置为True,这时候导出的onnx可以接受任意尺寸的图片输入进行推理。具体步骤如下:

Step 1 移动到上一节中创建的yolo目录

在终端中输入:

cd yolov10

Step 2 建立python文件,名为:export_onnx.py,代码如下:

from ultralytics import YOLO

# Load a model
model = YOLO("yolov10n.pt")  # load an official model

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

Step 3 确认开启yolo环境:

在终端输入:

conda activate yolo

确认终端显示:

在这里插入图片描述

Step 4 运行编写的python脚本

在终端输入:

python export_onnx.py

终端中显示:

在这里插入图片描述

可以看到,自动保存了转换好的文件yolov10n.onnx

Step 5 编写运行onnx模型的文件

建立predict_onnx.py文件,并编写如下代码:

from ultralytics import YOLO
import cv2

# Load the exported NCNN model
onnx_model = YOLO("yolov10n.onnx", task = 'detect')

image = cv2.imread('bus.jpg')
print(image.shape)

# Run inference
print('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尺寸的图片的运行情况。

Step 6 运行推理代码

在终端输入:

python predict_onnx.py

终端显示:

在这里插入图片描述

原图片尺寸是1080*810,原始yolov10n的最大预测尺寸是640,此时耗时大约6秒。结果如下:

在这里插入图片描述

输入尺寸为320时,耗时大约为1.2秒。结果如下:

在这里插入图片描述

输入尺寸为256时,耗时大约为0.8秒。

在这里插入图片描述

输入尺寸为128时,耗时大约为0.4秒。

在这里插入图片描述

总结如下:

  • 注意事项:性能以公交车图片为准。如果您有自己的数据集,可能需要更多的测试。
  • 本测试中准确性的判断标准为:
准确性很好较好一般很差
与gt识别物体的个数差异0123>3

尺寸、耗时、准确性如下:

尺寸耗时准确性
6406s很好
4482.5s很好
3201.2s较好
2560.7s较好
1280.28s一般
64不支持不支持

与yolov8n的对比

使用官方代码,图片尺寸与运行耗时的对比如下:

  • 注意事项:准确性用bus.jpg测试。如果您有自己的数据集,可能需要更多的测试。

结论

  • 行空板可以运行yolov10n

使用行空板可以用简单的代码运行yolov10n,并且速度比yolov8n略快。

  • 本文介绍了如何完成进行yolov10在行空板的部署

虽然yolov10是基于ultralytics开发,但是只安装ultralytics库不能直接运行yolov10,仍需要clone官方仓库。

  • 分辨率配置推荐

如果使用行空板用于图片的目标检测,可以考虑使用448分辨率的输入,此种情况下一张图片的处理时间大约为2.5秒,同时准确性很好。如果使用行空板用于视频的目标检测,限于行空板的算力,推荐使用128分辨率的输入,此种情况下一张图片的处理时间大约为0.28秒左右,但是此时效果表现一般。更值得考虑的是使用yolov8n的128分辨率输入,此时准确性表现较好。再次强调:准确性表现以bus.jpg测试。如果您有自己的数据集,可能需要更多的测试。

  • 持续优化,欢迎关注

我们将持续对yolov10n在行空板上的运行进行优化,欢迎关注。

首发于:DF创客社区

转载请注明来源信息,权重文件可以去社区下载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1972410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端编程小白】的HTML从零入门到实战

之前有高中毕业生读了博客&#xff0c;想让我帮他找一些前端入门的内容&#xff0c;他们报的计算机专业&#xff0c;想利用开学前夕学习一下&#xff0c;我给他推荐了一些菜鸟教程呀什么的。后来想&#xff0c;看来还是很多人需要一些更加入门的可成的&#xff0c;而且很多教程…

24年电赛——自动行驶小车(H题)基于 CCS Theia -陀螺仪 JY60 代码移植到 MSPM0G3507(附代码)

前言 只要搞懂 M0 的代码结构和 CCS 的图形化配置方法&#xff0c;代码移植就会变的很简单。因为本次电赛的需要&#xff0c;正好陀螺仪部分代码的移植是我完成的。&#xff08;末尾附全部代码&#xff09; 一、JY60 陀螺仪 JY60特点 1.模块集成高精度的陀螺仪、加速度计&…

APACHE安装与应用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

24澳中博览会|2025非洲水协年会暨展览|2025山西水展

2024澳中博览会 2025非洲水协年会暨展览 2025年山西国际水展暨水利工程设计与施工、水处理技术设备、泵管阀、智慧水务及环保展 承办单位&#xff1a;山西泽嘉国际展览有限公司 上海泽嘉展览服务有限公司 战略合作伙伴 &#xff1a; 美国迈阿密水展 欧 洲 海 水 脱 盐 淡 化…

SD原班人马发布FLUX.1:打开AI绘画新世界

​ Black Forest Labs 旗下产品 AI 绘画工具如雨后春笋般涌现&#xff0c;让我们对创作的理解不断刷新。就在大家以为已经见识了 AI 绘画的天花板时&#xff0c;FLUX.1 出现了&#xff01;这款由 Black Forest Labs 推出的 AI 绘画工具&#xff0c;不仅在性能上远超竞品&#x…

不好用你打我!2024你必须要会的AI神器

这篇文章&#xff0c;除了干货就是干货~ 今天给大家介绍一款2024年你必须要掌握的AI神器。 我可以肯定的说他是目前市面上第一款在这个领域出现的AI工具。 现在的AI工具&#xff0c;可以用来生成文字、图片、视频甚至音乐&#xff0c; 但是你听说过直接用AI生成APP的吗&…

【Spring】Spring框架的概念,以及Spring框架的简单使用。

目录 1. 概念 2. Spring的体系结构介绍&#xff08;了解&#xff09; 3. Spring框架的使用 3.1 环境准备 3.2 代码编写 1. 概念 总的来说就是一句话&#xff0c;Spring框架是一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;编程的容…

Spring Boot+MyBatis+MySQL如何实现读写分离

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 背景 读写分离是数据库架构中的一种优化策略&#xff0c;它将读操作&#xff08;查询&#xff09;和写操作&#xff08;更新、插入、删除&#xff09;分开处理&#xff0c;通常通过将读请求和写请求分别发送…

2024年全国青少年信息素养大赛总决赛日赛程表

2024全国青少年信息素养大赛赛程表分赛场&#xff08;浙江传媒学院桐乡校区、桐乡技师学院&#xff09;日期地点时间赛项16日传媒学院8:00-9:00检录 9:00-10:30开赛图形化编程挑战赛&#xff08;小学1-3年级&#xff09;A组12:00-13:00检录 13:00-14:30开赛图形化编程挑战赛&am…

最新版Baby Audio Bundle,win和mac,持续更新,长期有效

一。Baby Audio Bundle.2024.07.WiN&MAC Baby Audio让您的混音听起来比以往任何时候都更大&#xff0c;更好&#xff0c;更有活力。这个捆绑包有七个独特的插件&#xff0c;涵盖了从延迟和混响效果&#xff08;Spaced Out&#xff09;到低保真声音&#xff08;Super VHS&am…

MySQL(8.0)数据库安装和初始化以及管理

1.MySQL下载安装和初始化 1.下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 2.解压…

手把手使用 SVG + CSS 实现渐变进度环效果

效果 轨道 使用 svg 画个轨道 <svg viewBox"0 0 100 100"><circle cx"50" cy"50" r"40" fill"none" stroke-width"10" stroke"#333"></circle></svg>简单的说&#xff0c;就是…

shell脚本(自动化安装各种服务)

1、自动化配置DNS服务 [rootelemestatic ~]# vim dns.sh [rootelemestatic ~]# bash dns.sh 客户端测试&#xff1a; yum -y install bind-utils echo "nameserevr 192.168.8.161" > /etc/resolv.conf nslookup www.a.com 2、自动化配置rsync服务 [rootele…

如何用Python删除电脑中的重复文件?

在生活中&#xff0c;我们经常会遇到电脑中文件重复的情况。 在文件较少的情况下&#xff0c;这类情况还比较容易处理&#xff0c;最不济就是一个个手动对比删除&#xff1b; 而在重复文件很多的时候&#xff0c;我们很难保证把重复文件全部删完。 这里给大家带来了一个便捷…

《计算机组成原理》(第3版)第2章 计算机的发展及应用 复习笔记

第2章 计算机的发展及应用 一、计算机的产生和发展 &#xff08;一&#xff09;第一代电子管计算机 1943年&#xff0c;美国国防部批准了建造一台用电子管组成的电子数字积分机和计算机&#xff08;Electronic Numerica1 Integrator And Computer&#xff0c;ENIAC&#xff…

2024年06月 Scratch 图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共10题,共30分) 第1题 运行下列程序,输入单词“PLAY”,最后角色说?( ) A:LY4AP B:AP4LY C:YA4PL D:PL4AY 答案:B 根据程序分析可知,首先获取单词字符数,然后奇数位的字母放在字符数左侧,偶数位…

基于STM32的嵌入式深度学习系统教程

目录 引言环境准备嵌入式深度学习系统基础代码实现&#xff1a;实现嵌入式深度学习系统 数据采集与预处理深度学习模型训练与优化模型部署与推理实时数据处理与反馈应用场景&#xff1a;智能物联网设备常见问题与解决方案收尾与总结 引言 随着深度学习在各种应用中的广泛采用…

HBuilder在uni-admin实现unicloud-map中poi管理

文章目录 新建uni-admin项目下载并导入插件申请地图key并配置&#xff08;本人使用的腾讯地图&#xff09;配置WebServiceAPI配置HBuilder中Web配置 启动项目进行菜单管理 新建uni-admin项目 新建项目时选择uni-admin模板 下载并导入插件 在unicloud介绍页面https://doc.dc…

GraphGNSSLib的RTKLIB——gnss_preprocessor.node的理解

gnss_preprocessor部分的理解&#xff0c;这是简单的几张流程图截图&#xff0c;自己的分析总结pdf在资源里&#xff0c;免费的&#xff0c;如果不占用大家资源可以下载&#xff0c;交流 整体的逻辑详见资源 &#xff0c;我承诺这是自己系统分析RTKLIB后&#xff0c;进行的…

苹果iOS开发中的网络数据任务API:URLSession入门实战

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 URLSession 是 iOS 开发中的一个 API&#xff0c;用于执行网络数据任务&#xff0c;如 HTTP 请求、文件下载和上传等。URLSession 提供了一种高…