树莓派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:【阿旭算法与机器学习】,发送【开源】可获取更多学习资源

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

相关推荐
泰迪智能科技011 小时前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Eric.Lee20212 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
cd_farsight2 小时前
nlp初学者怎么入门?需要学习哪些?
人工智能·自然语言处理
AI明说2 小时前
评估大语言模型在药物基因组学问答任务中的表现:PGxQA
人工智能·语言模型·自然语言处理·数智药师·数智药学
Focus_Liu2 小时前
NLP-UIE(Universal Information Extraction)
人工智能·自然语言处理
PowerBI学谦2 小时前
使用copilot轻松将电子邮件转为高效会议
人工智能·copilot
audyxiao0013 小时前
AI一周重要会议和活动概览
人工智能·计算机视觉·数据挖掘·多模态
Jeremy_lf3 小时前
【生成模型之三】ControlNet & Latent Diffusion Models论文详解
人工智能·深度学习·stable diffusion·aigc·扩散模型