【人工智能】YOLOv10实时目标检测模型在香橙派AIPro上的首次体验!
一、本文概述
随着AI技术在计算机视觉领域应用的流行,YOLO系列模型已成为实时目标检测的主流范式。2024年5月23日,清华大学发布了YOLOv10实时端到端目标检测模型,该模型创下了目标检测各个数据集上的模型准确度和推理延迟的全新记录,成为了目前性能最先进(state-of-the-art)的目标检测模型。本文将介绍实时目标检测的全新组合——香橙派AIPro硬件+YOLOv10模型。香橙派AIPro搭载了华为昇腾310芯片,具有4核64位处理器+AI处理器。在清华大学最先进模型和华为昇腾310硬件的双重加持之下,纯CPU运行目标检测任务也可以取得令人印象深刻的表现,具体性能数据参见本文内容。
二、香橙派AIPro硬件简介
拆开快递盒,里面还有一个包装盒、一个电源适配器、一根数据线:
打开包装盒,就可以看到防静电袋包装的香橙派AIPro开发板了:
防静电袋是热封的,需要用剪刀剪开。
拆开防静电袋,就可以看到开发板正面了:
开发板正面可以看到主要元件有:
- 一个巨大的散热器,散热器下方覆盖的是Ascend310芯片,型号Hi1910;
- 两个美光的内存颗粒,单个4GB容量,两个一共8GB,位于散热器边缘;
- 一个FnLink的WiFi模组,里面封装的是RealTek的WiFi、蓝牙芯片RTL8211F;
- 一个千兆以太网口,位于图中开发板右下角;
- 两个HDMI接口,位于图中开发板下边缘和靠近左下角位置;
- 两个USB Type-A接口,位于以太网口旁边;
- 两个USB Type-C接口,其中靠边缘的是电源接口,靠近USB Type-A的是可以通信的;
- 一个3.5 mm耳机麦克风接口,位于两个HDMI接口中间;
翻过来,可以看到开发板背面:
背面有非常多电容电阻,初次之外,比较重要的是:
- TF卡槽,位于图中开发板左上角;
- M.2 SSD接口,位于图中开发板左侧;
- eMMC接口,位于图中天线下方;
- BOOT0和BOOT1拨码开关,位于开发板右上角,和开发板上方中间位置;
三、上手Ubuntu系统
开箱之后,需要先下载开发板手册: https://pan.baidu.com/s/1clOIklNzsHSigsrZzeWWMA?pwd=va56
3.1 选择启动设备
阅读开发板手册,我们知道香橙派AIPro支持三种启动介质,分别为:
- 固态硬盘SSD
- eMMC
- TF卡
通过BOOT0/BOOT1拨码,进行启动介质的切换。
将BOOT0和BOOT1都拨到右边,即为TF卡启动。
3.2 下载系统镜像
香橙派官网上提供了两种香橙派AIPro系统镜像,下载链接分别是:
- Ubuntu镜像:https://pan.baidu.com/s/1csbugZiKsuL_NHCOmyi1BA?pwd=ma6z
- openEuler镜像:https://pan.baidu.com/s/1m932mWh82ShJnSaVuh1ipA?pwd=is63
3.3 烧写镜像到TF卡
这里以Ubuntu镜像为例,镜像下载完成后,解压即可得到如下img文件:
该文件有接近18GB,因此官方建议使用64GB及以上TF卡。
接下来,将该.img文件烧写到TF卡即可,官方推荐使用balenaEtcher,我个人更推荐使用Rufus。
因为Rufus非常小巧,当前最新版4.5便携版仅有1.4M:
便携版和标准版均只有一个.exe,无需安装,区别在于配置文件保存位置不同。便携版会将配置文件保存在.exe所在目录,可以将其放在U盘上,因此得名。
作为对比,balenaEtcher最新版1.19.21安装文件大小为174MB,免安装版是179MB,大了100多倍,仅仅是界面好看一点:
Rufus写入镜像到TF卡,操作非常简单,仅需要点“选择”选中前面解压开的.img文件,再点“开始”即可:
PS:写入速度和TF卡读写速度以及读卡器USB接口速度有关。
3.4 进入Ubuntu系统
TF卡写入成功后,将读卡器从PC弹出,再将TF卡插入香橙派AIPro开发板,就可以上电开机了。
有多种方式可以登录Ubuntu系统,这里使用的是USB串口登录方式,使用Micro USB线连接到标有UART的口上:
打开MobaXterm,串口波特率设置为115200:
Micro-USB数据线连接上之后,就可以差点开机了,此时可以看到启动日志:
默认登录用户名和密码是:
- 用户名: HwHiAiUser
- 密码: Mind@123
登录后可以看到欢迎信息:
3.5 连接Wi-Fi热点
香橙派AIPro开发板上搭载了WiFi模组和天线,因此可以非常方便的连接无线热点。
这里主要使用nmcli命令行工具,使用方法可以通过nmcli --help查看:
nmcli实现Wi-Fi相关操作的主要是:
几个命令的具体使用说明,也可以通过命令查看:
扫描热点需要sudo权限:
查看热点扫描结果:
这里信号最强的是我的无线路由器,显示两个因为香橙派AIPro开发板和无线路由器都是同时支持2.4G和5G的。
连接WiFi热点:
看到命令行输出successfully即为连接成功。
连接成功后,执行nmcli命令可以看到IP地址:
3.6 使用SSH登录
香橙派AIPro的Ubuntu镜像默认带有ssh服务,并且开机自启动了,通过service ssh status命令可以查看SSH服务状态:
知道IP地址后,就可以使用ssh协议登录了。使用MobaXterm创建连接:
SSH登录成功:
也可以看到欢迎信息输出。
3.7 设置http代理
由于后续下载YOLOv10代码仓需要访问github.com,下载YOLOv10模型需要访问huggingface.com,为了能够顺利访问这两个网站,可能需要设置代理。
这里提供一个方便设置代理的脚本:
#!/bin/bash
HOST=192.168.3.6 # 代理服务IP
PORT=7890 # 代理服务端口
export http_proxy=http://$HOST:$PORT
export https_proxy=http://$HOST:$PORT
将以上代码保存为 ~/.proxy.sh 文件,文件内容根据自己实际需要修改。
需要代理时执行如下命令即可:
source ~/.proxy.sh
四、体验YOLOv10模型
4.1 YOLOv10简介
今年5月23日,清华大学发布了YOLOv10实时端到端目标检测模型,该模型创下了目标检测各个数据集上的模型准确度和推理延迟的全新记录,成为了目前当之无愧的性能最先进的目标检测模型。
论文的摘要部分,简单翻译一下:
在过去的几年里,由于在计算成本和检测性能之间实现了有效的平衡,YOLO系列已经成为实时目标检测领域的主要范式。研究人员探索了YOLOs的架构设计、优化目标、数据增强策略等,取得了显著进展。然而,依赖非极大值抑制(NMS)进行后处理阻碍了YOLOs的端到端部署,并负面影响了推理延迟。此外,YOLOs中各个组件的设计缺乏全面和彻底的检查,导致明显的计算冗余并限制了模型的能力。这导致了次优的效率,并且有很大的性能改进潜力。在这项工作中,我们旨在从后处理和模型架构两个方面进一步推进YOLOs的性能效率边界。为此,我们首先提出了一致的双重分配,用于无需NMS的YOLOs训练,这同时带来了竞争性的性能和低推理延迟。此外,我们引入了针对YOLOs的整体效率-准确性驱动的模型设计策略。我们从效率和准确性两个角度全面优化了YOLOs的各个组件,大大减少了计算开销并增强了能力。我们的努力成果是新一代的YOLO系列,用于实时端到端目标检测,称为YOLOv10。广泛的实验表明,YOLOv10在各种模型规模上实现了最先进的性能和效率。例如,我们的YOLOv10-S在COCO上与RT-DETR-R18相似的AP下,速度是其1.8倍,同时参数数量和FLOPs减少了2.8倍。与YOLOv9-C相比,YOLOv10-B在相同性能下延迟减少了46%,参数减少了25%。
从摘要中,我们可以了解到YOLOv10的亮点在于:
- 后处理无需非极大值抑制(NMS)操作;
- 优化了模型架构,大大降低了计算开销;
这两方面的工作在不降低模型精度的情况下,带来了更高的推理性能,以及更少的模型参数。
【一句话总结】YOLOv10速度更快、精度更高、模型更小。
论文开头给出的两幅对比图,非常直观:
左图中 横轴是延迟,纵轴是精度;右图中 横轴是参数数量,纵轴是精度,非常只管了吧!
模型的具体实现细节,感兴趣的读者可以下载论文原文阅读,这里不做过多解读。
4.2 YOLOv10模型架构
YOLOv10模型架构如下图所示:
模型具体结构,可以下载模型文件,使用Neuron查看,模型介绍先到这里。
本文的重点在于实操上手体验YOLOv10在AIPro开发上的运行速度和性能。
4.3 准备YOLOv10环境
前面的shell中可以看到一个(base)的提示,这是因为默认用户HwHiAiUser的.bashrc中激活了一个conda环境。用户HwHiAiUser的.bashrc文件中,激活conda环境的具体代码片段如下:
安装YOLOv10环境之前,需要先推出之前的conda环境,具体需要执行的命令是:
conda deactivate
该命令执行后,shell提示符就恢复正常了(没有前面的base提示):
为了避免映像系统默认环境,这里推荐使用 virtualenv 创建一个环境,首选安装 virtualenv:
pip install virtualenv
该命令执行过程输出如下:
接下来使用 virtualenv 创建一个新环境:
virtualenv -p python3 y10env
该命令执行过程输出如下:
接下来,激活刚刚创建的python环境:
source y10env/bin/activate
执行该命令后,shell提示符前方出现了当前python环境名称y10env。
4.4 安装YOLOv10环境
接下来,克隆YOLOv10代码仓:
git clone https://github.com/THU-MIG/yolov10.git
接着,进入该目录内,并执行如下命令,安装依赖:
pip install -r requirements.txt
直接执行会遇到如下报错:
原因是onnexruntime-gpu目前没有arm64的pip包,在香橙派AIPro上无法安装。
解决方法:将requirements.txt中的这一行删掉即可。
这个 pip install -r requirements.txt 的执行过程非常耗时,执行的最后,会输出成功安装了哪些包(Successfully installed):
接下来,执行如下命令安装YOLOv10所需的环境:
pip install ~/yolov10
该命令执行后输出如下:
PS:最后有一些红色的报错,提示有一些包冲突,实测对后续的操作没有什么映像,可以暂不关心。
4.5 运行YOLOv10模型
从YOLOv10的GitHub仓中,可以了解到YOLOv10模型有几个不同参数规模的版本,分别为:
Model | Test Size | #Params | FLOPs | APval | Latency |
---|---|---|---|---|---|
YOLOv10-N | 640 | 2.3M | 6.7G | 38.5% | 1.84ms |
YOLOv10-S | 640 | 7.2M | 21.6G | 46.3% | 2.49ms |
YOLOv10-M | 640 | 15.4M | 59.1G | 51.1% | 4.74ms |
YOLOv10-B | 640 | 19.1M | 92.0G | 52.5% | 5.74ms |
YOLOv10-L | 640 | 24.4M | 120.3G | 53.2% | 7.28ms |
YOLOv10-X | 640 | 29.5M | 160.4G | 54.4% | 10.70ms |
接下来,我们尝试运行YOLOv10-N模型。
首先,使用python命令,进入交互式python读取打印解释循环(REPL)。
然后,依次输入如下代码,即可下载YOLOv10、测试图片,并运行YOLOv10模型推理:
from ultralytics import YOLOv10
model = YOLOv10.from_pretrained('jameslahm/yolov10n')
source = 'http://images.cocodataset.org/val2017/000000039769.jpg'
model.predict(source=source, save=True)
具体运行过程的输出如下图:
可以看到,推理耗时747.1ms,后处理仅需4.6ms。
原始测试图片如下图所示:
推理结果输出如下图:
识别到了两只猫和遥控器。
换一张图:
推理结果:
五、体验总结
这几天尝试在香橙派AIPro上运行YOLOv10,经过一番折腾,遇到了一些问题,最终还是成功运行起来了。在此之前,我也体验过很多嵌入式开发板、单板电脑,包括树莓派3B、树莓派4B、RockPi 5B等等。接下来我将从正反两方面来说说,我对这块开发板的硬件和软件的使用体验和感受(仅代表个人观点)。
5.1 香橙派AIPro的优点
先说说香橙派AIPro的优点:
- 板载CH343 USB转串口芯片,通过Micro-USB接口即可进行串口调试,非常方便;
- 板载WiFi模组,结合WiFi天线,可以通过WiFi联网,可以少接一根网线,体验很好;
- 支持三种系统存储方案——eMMC、SSD、TF卡,实现了对便捷性、高性能、大容量的不同存储需求的全覆盖;
- 用户手册从开发板接口介绍,到系统安装、外设控制、AI样例具有覆盖,内容丰富,对新手、老手均有参考价值;
5.2 香橙派AIPro的不足
再说说香橙派AIPro的不足(或者遇到的问题):
- 出场自带的32GB卡上的openEuler系统发热严重(版本信息没看),使用一段时间非常烫手!
- Ubuntu系统镜像(20240604版)默认的conda装在系统目录,不方便HwHiAiUser用户更新;
六、参考链接
- 香橙派AIPro产品介绍页面:http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html
- 香橙派AIPro资料下载页面:http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-AIpro.html
- 香橙派AIPro Ubuntu镜像:https://pan.baidu.com/s/1csbugZiKsuL_NHCOmyi1BA?pwd=ma6z
- 香橙派AIPro openEuler镜像:https://pan.baidu.com/s/1m932mWh82ShJnSaVuh1ipA?pwd=is63
- 香橙派AIPro 用户手册: https://pan.baidu.com/s/1clOIklNzsHSigsrZzeWWMA?pwd=va56
- Rufus烧写工具官网: https://rufus.ie/zh/
- balenaEtcher烧写工具下载: https://github.com/balena-io/etcher/releases/tag/v1.19.21
- MobaXterm终端工具官网:https://mobaxterm.mobatek.net/
- YOLOv10论文:2405.14458] YOLOv10: Real-Time End-to-End Object Detection (arxiv.org)
- YOLOv10n模型:https://huggingface.co/jameslahm/yolov10n
- COCO数据集官网: https://cocodataset.org/