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

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、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,方便我们进行不同模型的测试。

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.rhkb.cn/news/393969.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 异步编程:Asyncio 实现原理

常见的并发模型 多进程/多线程异步ActorPub/Sub Python 异步的基石:协程 协程简介 概念:协作式多任务的子程序,用户态线程或微线程(Coroutine)。 特点:子程序执行可以中断,恢复后不会丢失之…

生物反应器对Organoids培养有啥帮助?有几种?快来看看!

Bioreactor Technologies for Enhanced Organoid Culture是《INTERNATIONAL JOURNAL OF MOLECULAR SCIENCES》上的一篇文章,介绍了用于类器官培养的生物反应器,包括搅拌式、微流体、旋转壁容器和电刺激四类。搅拌式生物反应器通过改善氧合和实现适当的谱…

【iOS多线程(二)】GCD其他方法详解

GCD其他方法 dispatch_semaphore (信号量)什么是dispatch_semaphore(信号量)?dispatch_semaphore主要的三个方法dispatch_semaphore主要作用线程安全线程同步 dispatch_afterdispatch_time_t 两种形式 GCD 一次性代码(只执行一次&#xff09…

面向 RAG 应用开发者的实用指南和建议

向量搜索并非轻而易举! 向量搜索,也称为向量相似性搜索或最近邻搜索,是一种常见于 RAG 应用和信息检索系统中的数据检索技术,用于查找与给定查询向量相似或密切相关的数据。业内通常会宣传该技术在处理大型数据集时非常直观且简单…

【C语言】C语言期末突击/考研--结构体与C++引用

一、结构体--结构体对齐--结构体数组 1.1.结构体的定义、初始化、结构体数组 有时候需要将不同类型的数据组合为一一个整体,以便于引用。 例如,一名学生有学号、姓 名、性别、年龄、地址等属性,如果针对学生的学号、姓名、年龄等都单独定义一…

【MYSQL】表操作

目录 查看当前数据库含有表查看表结构创建表插入(新增create)查询(retrieve)全列查询指定列查询查询列是表达式别名查询(as)去重查询(distinct)排序查询(order by)条件查询(where)比较/逻辑运算符使用 分页查询(limit) 一条语句各…

【若依项目-RuoYi】掌握若依前端的基本流程

搞毕设项目,使用前后端分离技术,后端springBoot,前端vue3element plus。自己已经写好前端与后端代码,但想换一个前端界面所以使用到了若依,前前后后遇到许多坑,记录一下,方便之后能够快速回忆。…

尚硅谷谷粒商城项目笔记——八、安装node.js【电脑CPU:AMD】

八、安装node.js 注: [!NOTE] 查看本机系统 官网选择node.js版本 1傻瓜式安装,注意选择路径 图一 图二 至此,nodejs安装完成! 2环境配置 找到安装nodejs的路径新增 node_global 和node_cache文件夹 创建完两个空文件夹&#x…

如何快速入门 PyTorch ?

PyTorch是一个机器学习框架,主要依靠深度神经网络,目前已迅速成为机器学习领域中最可靠的框架之一。 PyTorch 的大部分基础代码源于 Ronan Collobert 等人 在 2007 年发起的 Torch7 项目,该项目源于 Yann LeCun 和 Leon Bottou 首创的编程语…

0207、创建场景状态的三个子类

VS使用的是3.5框架,会自带Linq这一行,Unity不支持,需要删除 一、创建三个场景 二、创建三个子类

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——5Webscoket节点的使用

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——5Webscoket节点的使用 ​ 有了前面几篇文章的铺垫,现在已经可以实现我到手测试那一步的 1.解读usb_websocket_display.launch.py ​ 首先进入这个目录/root/dev_ws/src/origincar/originca…

Java语言程序设计——篇十二

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

ChatGPT能代替网络作家吗?

最强AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 当然可以!只要你玩写作AI玩得6,甚至可以达到某些大神的水平! 看看大神、小白、AI输出内容的区…

【枚举 图论】2242. 节点序列的最大得分

本文涉及知识点 枚举 图论知识汇总 LeetCode 2242. 节点序列的最大得分 给你一个 n 个节点的 无向图 ,节点编号为 0 到 n - 1 。 给你一个下标从 0 开始的整数数组 scores ,其中 scores[i] 是第 i 个节点的分数。同时给你一个二维整数数组 edges &…

logging日志实操入门

一、代码 import logging from logging.handlers import RotatingFileHandler # 配置日志 log_file_path ./logs/test.log file_handler RotatingFileHandler(log_file_path, maxBytes10, backupCount5)# 设置格式化器,以使日志更易读 formatter logging.Format…

Webstorm的下载与安装

Webstorm的下载 1 在浏览器的地址栏输入https://www.jetbrains.com/webstorm/,进入主页面 2 点击右上角的Download按钮,进入下载页面,如图所示 Webstorm的安装 按步骤逐步安装即可

SwiftUI 如何定制 Picker 视图当前选中行的背景颜色?

功能需求 有时我们希望可以定制 SwiftUI 中 Picker 视图当前选中行的背景色,这可以做到吗? 在上面的演示图中,我们随心所欲地变换着 SwiftUI 中 Picker 视图当前选中行的背景色。这是怎么做到的呢? 在本篇博文中,您将学到以下内容 功能需求1. 钩深极奥:修改 SwiftUI 原…

嵌入式学习之路 13(C语言基础学习——预处理命令)

编程流程 在进行程序开发时,通常遵循编辑源代码、编译、运行和调试这几个主要步骤。 编辑源代码:使用文本编辑器创建或修改程序的源代码,这是整个编程过程的起点。编译:将源代码转换为可执行文件的关键步骤。 预处理&#xff1a…

C#重要知识归纳总结

C#教程 C# 结构体(Struct) | 菜鸟教程C# 结构体(Struct) 在 C# 中,结构体(struct)是一种值类型(value type),用于组织和存储相关数据。 在 C# 中&#xff0c…