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

server/2024/10/20 6:32:18/

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

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

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

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

  • 1.引言
  • 2.模型转换
  • 3. 模型部署测试
    • 3.1 pytorch 部署方式
    • 3.2 onnx部署方式
    • 3.3 ncnn部署方式
    • 3.4 tflite部署方式
  • 4. 模型检测速度对比
  • 5. 进一步优化提速方法
    • 1.模型量化
    • 2. 使用更小的输入大小训练模型
    • 3. 使用Coral USB加速棒

1.引言

本文主要介绍在树莓派5上部署YOLOv8n模型的4种不同部署方式的检测速度对比。使用的是官方提供的yolob8n.pt模型,首先进行模型转换,然后进行视频检测速度测试,供小伙伴们参考。
其他YOLO模型如:YOLOv5、v9、v10等都可以使用类似的方式进行部署测试。

2.模型转换

首先,我们将yolov8n.pt转换分别转换成onnxncnntflite格式模型,供后续使用不同模型部署使用,进行速度对比测试。转换代码如下:

# 转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,方便我们进行不同模型的测试。

pytorch__44">3.1 pytorch 部署方式

基于pytorch框架的原生yolov8.pt部署测试,测试结果如下,检测视频的速度约为2帧/s。命令如下:

python VideoTest.py --model=yolov8n.pt --source=1.mp4 --show=True

在这里插入图片描述
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)
PyTorch2
ONNX3
NCNN8
TFLite2.5

绘制装对比图:

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

在这里插入图片描述

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


http://www.ppmy.cn/server/95446.html

相关文章

Function Call ReACT,Agent应用落地的加速器--function calling和react有什么不同

探索智能体Agent的未来之路:Function Call与ReACT框架的较量,谁能引领未来? 引言 各大平台出现智能体应用创建,智能体逐渐落地,背后的使用哪种框架?随着各大平台,例如百度千帆APPbuilder、阿里…

匿名内部类在Java编程中的应用与局限

匿名内部类在Java编程中的应用与局限 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论一下Java编程中的匿名内部类。匿名内部类是一种特殊的内部类,它在Java编程中有许多应用…

《被讨厌的勇气》

courage 客观的世界是极其简单,是你把它看复杂了。人活在自己营造的主观世界里,当我们认知思维发生改变,我们所认识的世界也随之改变。 【阿德勒主张的目的论和弗洛伊德主张的原因论】人现在的行为,是现在的目的选择,…

Spring统一返回类型中关于String的问题

文章目录 1. 问题铺垫2. 解决方法3. 问题分析4 解决方法解释 1. 问题铺垫 首先设置了以下代码统一处理返回类型 ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {Overridepublic boolean supports(MethodParameter returnType, Class converte…

实战内测-某内测项目站点FUZZ到Sql注入

0x1 前言 下面给师傅们分享的案例呢是前段时间实战的一个站点,也是我朋友前段时间让我测的一个站点。整体的测试流程也还算ok,然后里面有些细节要是对师傅们有帮助可以收藏下,后面主要是利用FUZZ打了一个sql注入漏洞上去。 0x2 fuzz和sql结…

Kubernetes 学习记录

https://note.youdao.com/ynoteshare/index.html?idbc7bee305611b52d6900ba209a92bd4d&typenote&_time1694072007342 概览 K8S官网文档:https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称,源于希腊语,意为“舵手”或“…

深度学习环境安装

环境安装 conda环境安装 访问网址:Download Anaconda Distribution,填写邮箱,点击提交,复制下载链接。在Linux上输入wget https://xxxx.sh,进行下载下载过后,输入bash Anaconda3_xxx.sh会有个命令行界面提…

高级java每日一道面试题-2024年8月03日-web篇-session和cookie有什么区别?

如果有遗漏,评论区告诉我进行补充 面试官: session和cookie有什么区别? 我回答: 在Java Web开发中,session和cookie是两种常用的状态管理技术,它们主要用于跟踪用户的会话状态,但它们在存储位置、安全性、数据量和生命周期等方面存在显著…