《博主简介》
小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!
《------往期经典推荐------》
二、机器学习实战专栏【链接】 ,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】,持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~
《------正文------》
目录
- 1.引言
- 2.模型转换
- [3. 模型部署测试](#3. 模型部署测试)
-
- [3.1 pytorch 部署方式](#3.1 pytorch 部署方式)
- [3.2 onnx部署方式](#3.2 onnx部署方式)
- [3.3 ncnn部署方式](#3.3 ncnn部署方式)
- [3.4 tflite部署方式](#3.4 tflite部署方式)
- [4. 模型检测速度对比](#4. 模型检测速度对比)
- [5. 进一步优化提速方法](#5. 进一步优化提速方法)
-
- 1.模型量化
- [2. 使用更小的输入大小训练模型](#2. 使用更小的输入大小训练模型)
- [3. 使用Coral USB加速棒](#3. 使用Coral USB加速棒)
1.引言
本文主要介绍在树莓派5上部署YOLOv8n模型的4种不同部署方式的检测速度对比
。使用的是官方提供的yolob8n.pt
模型,首先进行模型转换,然后进行视频检测速度测试,供小伙伴们参考。
其他YOLO模型如:YOLOv5、v9、v10等都可以使用类似的方式进行部署测试。
2.模型转换
首先,我们将yolov8n.pt
转换分别转换成onnx
、ncnn
、tflite
格式模型,供后续使用不同模型部署使用,进行速度对比测试。转换代码如下:
python
# 转onnx
yolo export model=yolov8n.pt format=onnx
# 转ncnn
yolo export model=yolov8n.pt format=ncnn
# 转tflite
yolo export model=yolov8n.pt format=tflite
3. 模型部署测试
首先,写一个可以测试摄像头与视频的测试脚本VideoTest.py
,方便我们进行不同模型的测试。
3.1 pytorch 部署方式
基于pytorch框架的原生yolov8.pt
部署测试,测试结果如下,检测视频的速度约为2帧/s
。命令如下:
python VideoTest.py --model=yolov8n.pt --source=1.mp4 --show=True
3.2 onnx部署方式
使用onnx方式
进行yolov8n
的部署测试,模型为yolov8n.onnx
,测试结果如下,检测视频的速度约为2-4帧/s
,平均3帧/s左右
。命令如下:
python VideoTest.py --model=yolov8n.onnx --source=1.mp4 --show=True
3.3 ncnn部署方式
使用ncnn方式
进行yolov8n
的部署测试,模型为yolov8n_ncnn_model
,测试结果如下,检测视频的速度约为4-8.5帧/s
,平均8帧/s左右
。命令如下:
python VideoTest.py --model=yolov8n_ncnn_model --source=1.mp4 --show=True
3.4 tflite部署方式
使用tflite方式
进行yolov8n
的部署测试,模型为yolov8n_float16.tflite
。测试结果如下,检测视频的速度约为2.5帧/s
。命令如下:
python VideoTest.py --model=yolov8n_saved_model/yolov8n_float16.tflite --source=1.mp4 --show=True
4. 模型检测速度对比
树莓派5上使用这pytorch、onnx、ncnn、tflite
这4种方式进行yolov8n
模型部署后,综合对比如下:
模型格式 | 检测速度(帧/s) |
---|---|
PyTorch | 2 |
ONNX | 3 |
NCNN | 8 |
TFLite | 2.5 |
绘制装对比图:
python
import matplotlib.pyplot as plt
# 数据
models = ["PyTorch", "ONNX", "NCNN", "TFLite"]
speeds = [2, 3, 8, 2.5]
# 创建柱状图
plt.figure(figsize=(8, 6))
bars = plt.bar(models, speeds, color=['blue', 'green', 'red', 'purple'])
# 在每个柱子上显示具体数字
for bar in bars:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, yval + 0.2, round(yval, 2), ha='center', va='bottom')
# 添加标题和标签
plt.title('不同模型的检测速度对比')
plt.xlabel('模型名称')
plt.ylabel('检测速度 (帧/s)')
# 显示图表
plt.show()
如上图所示,可以发现,ncnn
方式进行部署,检测速度最佳。还有一定的速度提升优化空间。
5. 进一步优化提速方法
1.模型量化
半精度或者Int8等,后续会进行进一步测试。
2. 使用更小的输入大小训练模型
yolov8默认640X640,可以使用320X320,精度可能会稍有影响,但是可以提高推理速度。
3. 使用Coral USB加速棒
Coral USB accelerator USB加速棒,提高模型计算推理速度,有其他小伙伴测试使用之后帧率可以达到20-30。具体还没试过,不是特别清楚速度提升效果。
注:测试时,如果不显示每一帧的frame图片,检测速度会稍微快一点,因为显示frame会占用一定的硬件资源。
好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!