16971| 0
|
[M10教程] 如何在行空板运行yolov8n? |
本帖最后由 zoey不种土豆 于 2024-10-16 15:05 编辑 一、yolov8介绍 随着物体检测技术在各个领域的广泛应用,越来越多的工业和商业用户开始使用YOLO进行实时检测、物体追踪等应用。2023年,Ultralytics公司推出的YOLOv8更是备受关注。YOLOv8具有更高的检测精度和速度,但其对计算资源的要求较高,这使得在轻量级计算设备上运行时可能会出现卡顿现象。高性能计算机虽然能满足YOLO的需求,但通常体积较大,不便于携带和部署。 YOLOv8(You Only Look Once version 8)是Ultralytics公司推出的最新版本的YOLO物体检测模型。YOLOv8具有以下特点:
行空板硬件介绍 行空板是一款专为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金手指,支持多种通信协议和功能。 在行空板上运行yolov8的物体检测功能 在这篇文章中,我们将使用DFRobot公司研发的行空板来运行YOLOv8,并尝试通过转换onnx格式进行加速。 将YOLOv8部署在行空板上具有重要的实用和学习意义:
为了在行空板上成功运行YOLOv8,我们将使用Ultralytics官方提供的库进行部署。首先,我们需要确保行空板上的Python环境满足YOLOv8的要求,即Python版本需升级到3.8以上。为此,我们推荐使用MiniConda进行版本管理,这样可以轻松切换和管理不同版本的Python环境。步骤大致如下:
step 1 查看当前python版本: 在终端输入: python --version终端显示: Python 3.7.3ultralytics不支持低版本python,需简要将python升级。选择使用mini conda进行版本管理和升级。*注意,不要使用anaconda,行空板运行易报错。 step 2 下载mini conda 在终端输入: wget https://github.com/conda-forge/m ... e3-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 在终端输入: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)三、快速开始:原生yolov8的运行 yolov8物体检测模型共有5个,均在coco数据集上进行训练,模型后缀含义以及模型性能如下
Step 1 创建并进入目录yolo 在终端输入:mkdir yolo cd yoloStep 2 创建python文件 quick_start.py 样例代码: Step 3 确认开启yolo环境:在终端输入: conda activate yolo 确认终端显示: Step 4 运行编写的python脚本 在终端输入: python quick_start.py可以看到终端中显示: 可以看到,使用原生yolov8n的模型进行单张图片的推理需要大约27秒,这个速度是比较慢的。 这时我们的目录下多了几个文件: 可以看到ultralystics自动下载了yolov8n.pt,这个文件是yolo v8 n版本的权重。 自动下载了图片bus.jpg,这是我们准备的让yolo推理的图片,如下所示: 最后模型推理,将结果储存为了result_bus.jpg: 四、优化:转换onnx格式 在使用原生yolov8n运行的时候,速度是很慢的,所以我们需要对其进行格式转换以加速其运行。 本节介绍如何将yolov8n.pt转换成onnx格式以加快运行速度。下面是详细步骤: Step 1 移动到上一节中创建的yolo目录 在终端中输入: cd yoloStep 2 建立python文件,名为:export_onnx.py,代码如下: Step 3 确认开启yolo环境:在终端输入: conda activate yolo确认终端显示: Step 4 运行编写的python脚本 在终端输入: python export_onnx.py终端中显示: 可以看到,想要转换格式,需要安装onnx库,ultralytics进行了自动安装。 最终自动保存了转换好的文件yolov8n.onnx: Step 5 编写运行onnx模型的文件 建立predict_onnx.py文件,并编写如下代码: Step 6 运行推理代码在终端输入: python predict_onnx.py终端显示: 目录中产生预测结果: 可以看到,使用onnx模型进行目标检测大约耗时20秒,比原生模型快了7秒。 五、进一步优化:减小输入图片的尺寸 可以看出,目前的推理速度仍然较慢。 如果想提高推理速度,可以减少输入图片的尺寸。导出onnx模型的时候,我们可以设置参数imgsz来规定输入图片的尺寸,如果输入图片的尺寸不确定,我们也可以将dynamic参数设置为True,这时候导出的onnx可以接受任意尺寸的图片输入进行推理。具体步骤如下: Step 1 移动到上一节中创建的yolo目录 在终端中输入: cd yoloStep 2 建立python文件 名为:export_onnx.py,代码如下: 在这里我们将Step 3 确认开启yolo环境: 在终端输入:conda activate yolo 确认终端显示: Step 4 运行编写的python脚本 在终端输入: python export_onnx.py终端中显示: 可以看到,想要转换格式,需要安装onnx库,ultralytics进行了自动安装。 最终自动保存了转换好的文件yolov8n.onnx: Step 5 编写运行onnx模型的文件 建立predict_onnx.py文件,并编写如下代码: 在这段代码中,我们分别测试原始尺寸的图片、256尺寸的图片、128尺寸的图片和64尺寸的图片的运行情况。Step 6 运行推理代码 在终端输入: python predict_onnx.py终端显示: 原图片尺寸是1080*810,原始yolov8n的最大预测尺寸是640,此时耗时大约22秒。结果如下: 输入尺寸为448时,耗时大约为3.5秒。结果如下: 输入尺寸为320时,耗时大约为2.2秒。结果如下: 输入尺寸为256时,耗时大约为0.8秒。结果如下: 输入尺寸为128时,耗时大约为0.4秒。 输入尺寸为64时,耗时大约为0.1秒。 总结如下:*注意事项:性能以bus.jpg测试。如果您有自己的数据集,可能需要更多的测试。
可以看出,使用行空板可以用简单的代码运行yolov8n。 如果使用行空板用于图片的目标检测,可以考虑使用448分辨率的输入,此种情况下一张图片的处理时间大约为3.5秒,同时准确性很好。 如果使用行空板用于视频的目标检测,限于行空板的算力,推荐使用128分辨率的输入,此种情况下一张图片的处理时间大约为0.4秒左右。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed