本文为大家先容的是 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支配在行空板上具有主要的实用和学习意义:
便携性和支配灵巧性:行空板体积小巧,便于嵌入到空间受限的设备中,实现物体检测的便携式支配。比较于大型打算机,行空板更适宜在现场和移动场景中利用。本钱效益:行空板相对本钱较低,适宜预算有限的项目和教诲用场。通过在行空板上运行YOLOv10,可以进行低本钱的物体检测运用开拓和实验。学习和实验平台:行空板供应了丰富的接口和板载元件,适宜作为学习和实验平台。通过在行空板上运行YOLOv10,学生和开拓者可以深入理解嵌入式系统和人工智能的结合,学习优化和加速算法在资源受限环境中的运用。技能寻衅和创新:在资源有限的行空板上运行yolov10须要战胜打算性能和内存限定的寻衅。这为开拓者供应了一个探索和创新的机会,可以考试测验各种优化技能,如模型压缩、量化和硬件加速。准备:运行YOLOv10的环境配置为了在行空板上成功运行YOLOv10,我们将利用Ultralytics官方供应的库进行支配。首先,我们须要确保行空板上的Python环境知足YOLOv10的哀求,即Python版本需升级到3.8以上。为此,我们推举利用MiniConda进行版本管理,这样可以轻松切换和管理不同版本的Python环境。
步骤大致如下:
安装MiniConda:首先,在行空板高下载并安装MiniConda。MiniConda是一个轻量级的Python发行版,专门用于简化Python环境的管理和包的安装。创建新环境:利用MiniConda创建一个新的Python 3.8或更高版本的虚拟环境。这可以确保我们在支配yolov10时,不会受到系统默认Python环境的影响,从而避免兼容性问题。激活环境:激活新创建的虚拟环境,使之成为当前的事情环境。安装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
终端输入:
pip install huggingface_hub
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 modelresults = model("https://ultralytics.com/images/bus.jpg")# Save results to diskresults[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 modelmodel = YOLO("yolov10n.pt") # load an official model# Export the modelmodel.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 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")
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 modelmodel = YOLO("yolov10n.pt") # load an official model# Export the modelmodel.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 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尺寸的图片的运行情形。
Step 6 运行推理代码在终端输入:
python predict_onnx.py
终端显示:
原图片尺寸是1080810,原始yolov10n的最大预测尺寸是640,此时耗时大约6秒。结果如下:
输入尺寸为448时,耗时大约为秒。结果如下:
输入尺寸为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创客社区 https://mc.dfrobot.com.cn/thread-319707-1-1.html
转载请注明来源信息