树莓派5进行YOLOv8部署的4种不同部署方式检测速度对比:pytorch、onnx、ncnn、tflite

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。

更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~

👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、【100个深度学习实战项目】【链接】,持续更新~~

二、机器学习实战专栏【链接】 ,已更新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转换分别转换成onnxncnntflite格式模型,供后续使用不同模型部署使用,进行速度对比测试。转换代码如下:

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会占用一定的硬件资源。


关注文末名片G-Z-H:【阿旭算法与机器学习】,发送【开源】可获取更多学习资源

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

相关推荐
XiaoMu_0018 分钟前
基于Django+Vue3+YOLO的智能气象检测系统
python·yolo·django
SEO_juper10 分钟前
大型语言模型SEO(LLM SEO)完全手册:驾驭搜索新范式
人工智能·语言模型·自然语言处理·chatgpt·llm·seo·数字营销
攻城狮7号1 小时前
腾讯混元翻译模型Hunyuan-MT-7B开源,先前拿了30个冠军
人工智能·hunyuan-mt-7b·腾讯混元翻译模型·30个冠军
zezexihaha1 小时前
从“帮写文案”到“管生活”:个人AI工具的边界在哪?
人工智能
算家云1 小时前
nano banana官方最强Prompt模板来了!六大场景模板详解
人工智能·谷歌·ai大模型·算家云·ai生图·租算力,到算家云·nano banana 提示词
暴躁的大熊1 小时前
AI助力决策:告别生活与工作中的纠结,明析抉择引领明智选择
人工智能
Gyoku Mint1 小时前
提示词工程(Prompt Engineering)的崛起——为什么“会写Prompt”成了新技能?
人工智能·pytorch·深度学习·神经网络·语言模型·自然语言处理·nlp
梁小憨憨1 小时前
zotero扩容
人工智能·笔记
大数据张老师1 小时前
AI架构师的思维方式与架构设计原则
人工智能·架构师·ai架构·后端架构
AKAMAI2 小时前
Entity Digital Sports 降低成本并快速扩展
人工智能·云计算