16512浏览
查看: 16512|回复: 0

[M10教程] 如何在行空板运行yolov8n?

[复制链接]
本帖最后由 zoey不种土豆 于 2024-9-5 14:18 编辑

一、yolov8介绍
随着物体检测技术在各个领域的广泛应用,越来越多的工业和商业用户开始使用YOLO进行实时检测、物体追踪等应用。2023年,Ultralytics公司推出的YOLOv8更是备受关注。YOLOv8具有更高的检测精度和速度,但其对计算资源的要求较高,这使得在轻量级计算设备上运行时可能会出现卡顿现象。高性能计算机虽然能满足YOLO的需求,但通常体积较大,不便于携带和部署。
YOLOv8(You Only Look Once version 8)是Ultralytics公司推出的最新版本的YOLO物体检测模型。YOLOv8具有以下特点:
  • 高精度和高速度:YOLOv8在保持高检测精度的同时,进一步提升了检测速度,适合实时应用。
  • 多任务支持:除了物体检测,YOLOv8还支持物体分类、语义分割等任务。
  • 轻量化设计:虽然对计算资源有一定要求,但通过优化和加速技术,可以在嵌入式设备上实现高效运行。
YOLOv8广泛应用于智能安防、自动驾驶、工业检测、医疗影像分析等多个领域,能够显著提升这些领域的自动化和智能化水平。
行空板硬件介绍
行空板是一款专为Python学习和使用设计的新一代国产开源硬件,采用单板计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和Python环境,还预装了常用的Python库,让广大师生只需两步就能进行Python教学。
如何在行空板运行yolov8n?图1
行空板是一款基于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金手指,支持多种通信协议和功能。
如何在行空板运行yolov8n?图2
在行空板上运行yolov8的物体检测功能
在这篇文章中,我们将使用DFRobot公司研发的行空板来运行YOLOv8,并尝试通过转换onnx格式进行加速。
将YOLOv8部署在行空板上具有重要的实用和学习意义:
  • 便携性和部署灵活性:行空板体积小巧,便于嵌入到空间受限的设备中,实现物体检测的便携式部署。相比于大型计算机,行空板更适合在现场和移动场景中使用。
  • 成本效益:行空板相对成本较低,适合预算有限的项目和教育用途。通过在行空板上运行YOLOv8,可以进行低成本的物体检测应用开发和实验。
  • 学习和实验平台:行空板提供了丰富的接口和板载元件,适合作为学习和实验平台。通过在行空板上运行YOLOv8,学生和开发者可以深入理解嵌入式系统和人工智能的结合,学习优化和加速算法在资源受限环境中的应用。
  • 技术挑战和创新:在资源有限的行空板上运行YOLOv8需要克服计算性能和内存限制的挑战。这为开发者提供了一个探索和创新的机会,可以尝试各种优化技术,如模型压缩、量化和硬件加速。
二、准备:运行yolov8的环境配置
为了在行空板上成功运行YOLOv8,我们将使用Ultralytics官方提供的库进行部署。首先,我们需要确保行空板上的Python环境满足YOLOv8的要求,即Python版本需升级到3.8以上。为此,我们推荐使用MiniConda进行版本管理,这样可以轻松切换和管理不同版本的Python环境。步骤大致如下:
  • 安装MiniConda:首先,在行空板上下载并安装MiniConda。MiniConda是一个轻量级的Python发行版,专门用于简化Python环境的管理和包的安装。
  • 创建新环境:使用MiniConda创建一个新的Python 3.8或更高版本的虚拟环境。这可以确保我们在部署YOLOv8时,不会受到系统默认Python环境的影响,从而避免兼容性问题。
  • 激活环境:激活新创建的虚拟环境,使之成为当前的工作环境。
  • 安装Ultralytics库:在激活的虚拟环境中,通过pip命令安装Ultralytics官方提供的YOLO库。这将下载并安装所有必要的依赖项和组件,使我们能够顺利运行YOLOv8。
通过上述步骤,我们可以在行空板上成功部署YOLOv8,充分利用其强大的物体检测能力。这种方法不仅能确保YOLOv8的高效运行,还能方便地进行环境管理和版本控制,为后续的开发和实验提供了稳定的基础。同时,通过使用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/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
==> For changes to take effect, close and re-open your current shell. <==
Thank you for installing Miniforge3!
如何在行空板运行yolov8n?图3
在终端输入:source ~/.bashrc
安装完成,在终端输入:conda
终端显示:
如何在行空板运行yolov8n?图4
Step 4 激活conda
在终端输入:conda activate
可以看到终端的显示由
如何在行空板运行yolov8n?图5
变成
如何在行空板运行yolov8n?图6
说明已经成功激活了conda
Step 5 在conda中建立YOLO环境
名字叫yolo,python版本选择3.11。在终端输入:
conda create -n yolo python==3.11
过程中显示:
如何在行空板运行yolov8n?图7
输入y
环境建立完终端显示:
如何在行空板运行yolov8n?图8
Step 6 激活yolo环境
在终端中输入:
conda activate yolo
可以看到终端显示由
变成如何在行空板运行yolov8n?图9
说明激活yolo环境成功
Step 7 安装utralytics
在终端输入:
pip install ultralytics
完成后终端显示:
如何在行空板运行yolov8n?图10
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)
三、快速开始:原生yolov8的运行
yolov8物体检测模型共有5个,均在coco数据集上进行训练,模型后缀含义以及模型性能如下
  • n: Nano(超轻量级)
  • s: Small(小型)
  • m: Medium(中型)
  • l: Large(大型)
  • x: Extra Large(超大型)
模型尺寸
(像素)
mAPval
50-95
速度
CPUONNX
(ms)
速度
A100 TensorRT
(毫秒)
params
(M)
FLOPs
(B)
YOLOv8n64037.380.40.993.28.7
YOLOv8s64044.9128.41.211.228.6
YOLOv8m64050.2234.71.8325.978.9
YOLOv8l64052.9375.22.3943.7165.2
YOLOv8x64053.9479.13.5368.2257.8

参数解释
尺寸 (像素)
输入图像的分辨率
mAP姿态 50-95
模型在多种IoU阈值(从0.50到0.95)上的平均准确率,用于评估模型在姿态估计任务上的总体性能
mAP姿态 50
在IoU为0.50的阈值上的模型准确率,通常更容易达成,用于评估模型对较大误差的容忍度
CPU ONNX 速度 (毫秒)
在CPU上使用ONNX格式运行时的推理速度
A100 TensorRT 速度 (毫秒)
在NVIDIA A100 GPU上使用TensorRT优化时的推理速度
参数 (M)
模型中的参数数量,以百万为单位。参数越多,模型通常越复杂
浮点数运算 (B)
执行一次前向传播所需的浮点运算次数,以十亿为单位。这反映了模型的计算复杂度
由于行空板性能有限,我们仅使用原生yolov8n进行图片的物体检测任务。YOLOv8n是YOLOv8系列中最轻量级的模型,能够在保证精度的同时,以较低的计算资源和更快的速度完成物体检测任务,非常适合资源受限的应用场景。下面是具体步骤:
Step 1 创建并进入目录yolo
在终端输入:mkdir yolo
cd yolo
Step 2 创建python文件
quick_start.py
样例代码:
  1. from ultralytics import YOLO
  2. # Load a pretrained YOLO model (recommended for training)
  3. model = YOLO("yolov8n.pt")
  4. # Perform object detection on an image using the model
  5. results = model("https://ultralytics.com/images/bus.jpg")
  6. # Save results to disk
  7. results[0].save(filename=f"result_bus.jpg")
复制代码
Step 3 确认开启yolo环境:
在终端输入:
conda activate yolo
确认终端显示:
如何在行空板运行yolov8n?图26
Step 4 运行编写的python脚本
在终端输入:
python quick_start.py
可以看到终端中显示:
如何在行空板运行yolov8n?图12
可以看到,使用原生yolov8n的模型进行单张图片的推理需要大约27秒,这个速度是比较慢的。
这时我们的目录下多了几个文件:
如何在行空板运行yolov8n?图13
可以看到ultralystics自动下载了yolov8n.pt,这个文件是yolo v8 n版本的权重。
自动下载了图片bus.jpg,这是我们准备的让yolo推理的图片,如下所示:
如何在行空板运行yolov8n?图14
最后模型推理,将结果储存为了result_bus.jpg:
如何在行空板运行yolov8n?图15
四、优化:转换onnx格式
在使用原生yolov8n运行的时候,速度是很慢的,所以我们需要对其进行格式转换以加速其运行。
本节介绍如何将yolov8n.pt转换成onnx格式以加快运行速度。下面是详细步骤:
Step 1 移动到上一节中创建的yolo目录
在终端中输入:
cd yolo
Step 2 建立python文件,名为:export_onnx.py,代码如下:
  1. from ultralytics import YOLO
  2. # Load a model
  3. model = YOLO("yolov8n.pt")  # load an official model
  4. # Export the model
  5. model.export(format="onnx")
复制代码
Step 3 确认开启yolo环境:
在终端输入:
conda activate yolo
确认终端显示:
如何在行空板运行yolov8n?图11
Step 4 运行编写的python脚本
在终端输入:
python export_onnx.py
终端中显示:
如何在行空板运行yolov8n?图16
可以看到,想要转换格式,需要安装onnx库,ultralytics进行了自动安装。
最终自动保存了转换好的文件yolov8n.onnx:
如何在行空板运行yolov8n?图17
Step 5 编写运行onnx模型的文件
建立predict_onnx.py文件,并编写如下代码:
  1. from ultralytics import YOLO
  2. # Load the exported NCNN model
  3. onnx_model = YOLO("yolov8n.onnx", task = 'detect')
  4. # Run inference
  5. results = onnx_model("https://ultralytics.com/images/bus.jpg")
  6. # Save results to disk
  7. results[0].save(filename=f"result_bus_onnx.jpg")
复制代码
Step 6 运行推理代码
在终端输入:
python predict_onnx.py
终端显示:
如何在行空板运行yolov8n?图18
目录中产生预测结果:
如何在行空板运行yolov8n?图19
可以看到,使用onnx模型进行目标检测大约耗时20秒,比原生模型快了7秒。
五、进一步优化:减小输入图片的尺寸
可以看出,目前的推理速度仍然较慢。
如果想提高推理速度,可以减少输入图片的尺寸。导出onnx模型的时候,我们可以设置参数imgsz来规定输入图片的尺寸,如果输入图片的尺寸不确定,我们也可以将dynamic参数设置为True,这时候导出的onnx可以接受任意尺寸的图片输入进行推理。具体步骤如下:
Step 1 移动到上一节中创建的yolo目录
在终端中输入:
cd yolo
Step 2 建立python文件
名为:export_onnx.py,代码如下:
  1. from ultralytics import YOLO
  2. # Load a model
  3. model = YOLO("yolov8n.pt")  # load an official model
  4. # Export the model
  5. model.export(format="onnx", dynamic = True)
复制代码
在这里我们将
Step 3 确认开启yolo环境:
在终端输入:conda activate yolo
确认终端显示:如何在行空板运行yolov8n?图30
Step 4 运行编写的python脚本
在终端输入:
python export_onnx.py
终端中显示:
如何在行空板运行yolov8n?图27
可以看到,想要转换格式,需要安装onnx库,ultralytics进行了自动安装。
最终自动保存了转换好的文件yolov8n.onnx:
如何在行空板运行yolov8n?图29
Step 5 编写运行onnx模型的文件
建立predict_onnx.py文件,并编写如下代码:
  1. from ultralytics import YOLO
  2. import cv2
  3. # Load the exported NCNN model
  4. onnx_model = YOLO("yolov8n.onnx", task = 'detect')
  5. image = cv2.imread('bus.jpg')
  6. print(image.shape)
  7. # Run inference
  8. print('original')
  9. results = onnx_model("bus.jpg")
  10. results[0].save(filename='bus_640.jpg')
  11. print(448)
  12. results = onnx_model("bus.jpg", imgsz = 448)
  13. results[0].save(filename='bus_448.jpg')
  14. print(320)
  15. results = onnx_model("bus.jpg", imgsz = 320)
  16. results[0].save(filename='bus_320.jpg')
  17. print(256)
  18. results = onnx_model("bus.jpg", imgsz = 256)
  19. results[0].save(filename='bus_256.jpg')
  20. print(128)
  21. results = onnx_model("bus.jpg", imgsz = 128)
  22. results[0].save(filename='bus_128.jpg')
  23. print(64)
  24. results = onnx_model("bus.jpg", imgsz = 64)
  25. results[0].save(filename='bus_64.jpg')
复制代码
在这段代码中,我们分别测试原始尺寸的图片、256尺寸的图片、128尺寸的图片和64尺寸的图片的运行情况。
Step 6 运行推理代码
在终端输入:
python predict_onnx.py
终端显示:
如何在行空板运行yolov8n?图20
原图片尺寸是1080*810,原始yolov8n的最大预测尺寸是640,此时耗时大约22秒。结果如下:
如何在行空板运行yolov8n?图21
输入尺寸为448时,耗时大约为3.5秒。结果如下:
如何在行空板运行yolov8n?图22
输入尺寸为320时,耗时大约为2.2秒。结果如下:
如何在行空板运行yolov8n?图23
输入尺寸为256时,耗时大约为0.8秒。结果如下:
如何在行空板运行yolov8n?图28
输入尺寸为128时,耗时大约为0.4秒。
如何在行空板运行yolov8n?图24
输入尺寸为64时,耗时大约为0.1秒。
如何在行空板运行yolov8n?图25
总结如下:*注意事项:性能以bus.jpg测试。如果您有自己的数据集,可能需要更多的测试。
尺寸
耗时
准确性
640
22s
很好
448
3.5s
很好
320
2.2s
较好
256
0.8s
较好
128
0.4s
较好
64
0.1s

六、结论
可以看出,使用行空板可以用简单的代码运行yolov8n。
如果使用行空板用于图片的目标检测,可以考虑使用448分辨率的输入,此种情况下一张图片的处理时间大约为3.5秒,同时准确性很好。
如果使用行空板用于视频的目标检测,限于行空板的算力,推荐使用128分辨率的输入,此种情况下一张图片的处理时间大约为0.4秒左右。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail