【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

这篇具有很好参考价值的文章主要介绍了【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

‍‍🏡博客主页: virobotics的CSDN博客:LabVIEW深度学习、人工智能博主
🎄所属专栏:『LabVIEW深度学习实战』
🍻上期文章: LabVIEW+OpenCV快速搭建人脸识别系统(附源码))
📰如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀! 欢迎大家✌关注、👍点赞、✌收藏、👍订阅专栏

前言

从2015 年首次发布以来,You Only Look Once (YOLO) 系列计算机视觉模型一直是该领域最受欢迎的模型之一。其中,YOLO 架构的核心创新是将目标检测任务视为回归问题,从而使模型同时对所有目标边界框和类别概率生成预测。在过去的八年中,这种架构创新催生了一系列 YOLO 模型。之前也给大家介绍了一些YOLO 模型在LabVIEW上的部署。感兴趣的话可以查看专栏【深度学习:物体识别(目标检测)】本文主要想和各位读者分享YOLOv8在LabVIEW中的部署。


一、YOLOv8简介

YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。

YOLOv8是一种尖端的、最先进的 (SOTA) 模型,它建立在以前成功的 YOLO 版本的基础上,并引入了新的功能和改进,以进一步提高性能和灵活性。YOLOv8 旨在快速、准确且易于使用,这也使其成为对象检测、图像分割和图像分类任务的绝佳选择。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,还支持YOLO以往版本,方便不同版本切换和性能对比。

YOLOv8 有 5 个不同模型大小的预训练模型:n、s、m、l 和 x。关注下面的参数个数和COCO mAP(准确率),可以看到准确率比YOLOv5有了很大的提升。特别是 l 和 x,它们是大模型尺寸,在减少参数数量的同时提高了精度。
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
每个模型的准确率如下
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

YOLOv8官方开源地址:https://github.com/ultralytics/ultralytics


二、环境搭建

2.1 部署本项目时所用环境

  • 操作系统:Windows10
  • python:3.6及以上
  • LabVIEW:2018及以上 64位版本
  • AI视觉工具包:techforce_lib_opencv_cpu-1.0.0.98.vip
  • onnx工具包:virobotics_lib_onnx_cuda_tensorrt-1.0.0.16.vip【1.0.0.16及以上版本】或virobotics_lib_onnx_cpu-1.13.1.2.vip

2.2 LabVIEW工具包下载及安装

  • AI视觉工具包下载与安装参考:
    https://blog.csdn.net/virobotics/article/details/123656523
  • onnx工具包下载与安装参考:
    https://blog.csdn.net/virobotics/article/details/124998746

三、yolov8导出onnx

注意:本教程已经为大家提供了YOLOv8的onnx模型,可跳过本步骤,直接进行步骤四-项目实战。若是想要了解YOLOv8的onnx模型如何导出,则可继续阅读本部分内容。

下面我们来介绍onnx模型的导出(以yolov8s为例,想要导出其他模型的方式也一样,只需要修改名字即可)

3.1 安装YOLOv8

YOLOv8的安装有两种方式,pip安装和GitHub安装。

  • pip安装
pip install ultralytics -i https://pypi.douban.com/simple/
  • GitHub安装
git clone https://github.com/ultralytics/ultralytics

cd ultralytics

pip install -e '.[dev]'

安装完成后就可以通过yolo命令在命令行进行使用了。

3.2 下载模型权重文件

在官方网站中下载我们所需要的权重文件
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

注意:这一步其实可以不做,我们在第三步导出模型为onnx的时候如果权重文件不存在,会自动帮我们下载一个权重文件,但速度会较慢,所以个人还是建议先在官网中下载权重文件,再导出为onnx模型

3.3 导出模型为onnx

新建一个文件夹名字为“yolov8_onnx”,将刚刚下载的权重文件“yolov8s.pt”放到该文件夹下的models文件夹里
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
在models文件夹下打开cmd,在cmd中输入以下命令将模型直接导出为onnx模型:

yolo export model=yolov8s.pt format=onnx opset=12 

【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
YOLOv8的3个检测头一共有80x80+40x40+20x20=8400个输出单元格,每个单元格包含x,y,w,h这4项再加80个类别的置信度总共84列内容,所以通过上面命令导出的onnx模型的输出维度为1x84x8400。
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
如果觉得上面方式不方便,那我们也可以写一个python脚本,快速导出yolov8的onnx模型,程序如下:

from ultralytics import YOLO
 
# Load a model
model = YOLO("\models\yolov8s.pt")  # load an official model
 
# Export the model
model.export(format="onnx")


四、项目实践

实现效果:LabVIEW中部署yolov8实现图片推理和视频推理

整个项目工程如下,本次项目以yolov8s为例

【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

  • model:yolov8模型文件
  • subvi:子vi
  • export.py:将yolov8的ptd导出为onnx
  • yolov8_camera:yolov8摄像头视频实时推理
  • yolov8_img:yolov8图片推理

准备工作

  1. 放置一张待检测图片和coco.name到yolov8_onnx文件夹下,本项目中放置了一张dog.jpg图片;
  2. 确保models文件中已经放置了yolov8的onnx模型:yolov8s.onnx;

4.1 YOLOv8在LabVIREW中实现图片推理

1.获取待检测图片、模型文件及类别标签文件路径;
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

2.模型初始化:加载onnx模型并读取该模型输入和输出的shape;
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

当然我们也可以在netron中直接查看模型的输入输出并手动创建模型输入输出shape数组
在netron中我们可以看到模型的输入输出如下:
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
所以这部分程序也可以改为如下图所示:
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

3.图像预处理:创建所需Mat并读取图片,对图片进行预处理
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

cvtColor:颜色空间转换把采集的BGR图像转为RGB
letterbox:深度学习模型输入图片的尺寸为正方形,而数据集中的图片一般为长方形,粗暴的resize会使得图片失真,采用letterbox可以较好的解决这个问题。该方法可以保持图片的长宽比例,剩下的部分采用灰色填充。
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

blobFromImage的作用:

  • size:640x640(图像resize为640x640)
  • Scale=1/255,
  • Means=[0,0,0](图像归一化至0~1之间)

最后,要将图片数据HWC转换(transpose)为神经网络容易识别的NCHW格式

  • H:图片的高度:640
  • W:图片的宽度:640
  • C:图片的通道数:3
  • N:图片的数量,通常为1

4.模型推理:推荐使用数据指针作为输入给到Run_one_input.vi,数据的大小为1x3x640x640;

【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

5.获取推理结果:循环外初始化一个84x8400的二维数组,此数组作为Get_Result的输入,另一个输入为index=0,输出为84x8400的二维数组结果,推理之后,将推理结果由84x8400 transpose为8400x84,以便于输入到后处理;

【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

6.后处理

【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

范例中yolov5_post_process 的输入8400x84,84的排列顺序:

  • 第0列代表物体中心x在图中的位置
  • 第1列表示物体中心y在图中的位置
  • 第2列表示物体的宽度
  • 第3列表示物体的高度
  • 第4~83列为基于COCO数据集的80分类的标记权重,最大的为输出分类。

8400的含义是:YOLOv8的3个检测头一共有80x80+40x40+20x20=8400个输出单元格

注:如果用户训练自己的数据集,则列数将根据用户定义的类别数改变。如果用户的数据集中有2类,那么输入数据的大小将为8400x6。前4列意义和之前相同,后2列为每一个分类的标记权重。

7.绘制检测结果

【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

8.完整源码;
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
9.运行效果(运行电脑独显为笔记本RTX 3060)

  • CPU加速:
    【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
  • GPU加速:
    【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

4.2 YOLOv8在LabVIREW中实现视频推理

视频推理和推片推理实现方式基本一致,唯一的不同在于,摄像头实时推理过程中对视频流进行推理且耗时部分包括预处理、推理及后处理三部分。
1.完整程序;
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

2.实现效果(运行电脑独显为笔记本RTX 3060)

  • CPU加速:
    【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
  • GPU加速:
    【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测

五、项目源码

如需源码,请在订阅本专栏后评论区留下邮箱


总结

以上就是今天要给大家分享的内容,希望对大家有用。之后会继续给大家更新使用OpenVINO以及TensorRT来部署加速YOLOv8实现目标检测,我们下篇文章见~

如您想要探讨更多关于LabVIEW与人工智能技术,欢迎加入我们的技术交流群:705637299。进群请备注:CSDN

如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏

推荐阅读

LabVIEW图形化的AI视觉开发平台(非NI Vision),大幅降低人工智能开发门槛
LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介
LabVIEW AI视觉工具包OpenCV Mat基本用法和属性
手把手教你使用LabVIEW人工智能视觉工具包快速实现图像读取与采集
LabVIEW开放神经网络交互工具包(ONNX)下载与超详细安装教程
【YOLOv5】手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,实现YOLOv5实时物体识别(含源码)
👇技术交流 · 一起学习 · 咨询分享,请联系👇文章来源地址https://www.toymoban.com/news/detail-434373.html

到了这里,关于【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pytorch实战7:手把手教你基于pytorch实现VGG16

    前言 ​ 最近在看经典的卷积网络架构,打算自己尝试复现一下,在此系列文章中,会参考很多文章,有些已经忘记了出处,所以就不贴链接了,希望大家理解。 ​ 完整的代码在最后。 本系列必须的基础 ​ python基础知识、CNN原理知识、pytorch基础知识 本系列的目的 ​ 一是

    2023年04月19日
    浏览(40)
  • 【2023-Pytorch-检测教程】手把手教你使用YOLOV5做电线绝缘子缺陷检测

    随着社会和经济的持续发展,电力系统的投资与建设也日益加速。在电力系统中,输电线路作为电能传输的载体,是最为关键的环节之一。而绝缘子作为输电环节中的重要设备,在支撑固定导线,保障绝缘距离的方面有着重要作用。大多数高压输电线路主要架设在非城市内地

    2023年04月11日
    浏览(38)
  • 【图解数据结构】顺序表实战指南:手把手教你详细实现(超详细解析)

    🌈个人主页: 聆风吟 🔥系列专栏: 图解数据结构、算法模板 🔖少年有梦不应止于心动,更要付诸行动。 线性表(linear list):线性表是一种数据结构,由n个具有相同数据类型的元素构成一个有限序列。 线性表可以用数组、链表、栈等方式实现,常见的线性表有数组、链

    2024年01月22日
    浏览(41)
  • 手把手调参 YOLOv8 模型之 训练|验证|推理配置-详解

    YOLO系列模型在目标检测领域有着十分重要的地位,随着版本不停的迭代,模型的性能在不断地提升,源码提供的功能也越来越多,那么如何使用源码就显得十分的重要,接下来通过文章带大家手把手去了解Yolov8(最新版本)的每一个参数的含义,并且通过具体的图片例子让大

    2024年02月05日
    浏览(32)
  • 手把手教程 | YOLOv8-seg训练自己的分割数据集

    🚀🚀🚀手把手教程:教会你如何使用自己的数据集开展分割任务 🚀🚀🚀YOLOv8-seg创新专栏: 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家自研模块助力分割; 番薯破损分割任务,自己手

    2024年02月05日
    浏览(37)
  • 手把手教你实战TDD

    领域驱动设计,测试驱动开发。 我们在《手把手教你落地DDD》一文中介绍了领域驱动设计(DDD)的落地实战,本文将对测试驱动开发(TDD)进行探讨,主要内容有:TDD基本理解、TDD常见误区、TDD技术选型,以及案例实战。希望通过本文,读者能够理解掌握TDD并将其应用于实际

    2024年02月08日
    浏览(31)
  • PyQt5 | 手把手教你YOLOv5添加PyQt页面

    演示视频:YOLOv5/v7添加 PyQT5 页面 我的毕业有救了 !哔哩哔哩

    2024年02月01日
    浏览(40)
  • PyQt5 | 手把手教你YOLOv7添加PyQt页面

    演示视频:YOLOv5/v7添加 PyQT5 页面 我的毕业有救了 !哔哩哔哩

    2023年04月24日
    浏览(43)
  • 如何运用yolov5训练自己的数据(手把手教你学yolo)

    在这篇博文中,我们对YOLOv5模型进行微调,用于自定义目标检测的训练和推理。 深度学习领域在2012年开始快速发展。在那个时候,这个领域还比较独特,编写深度学习程序和软件的人要么是深度学习实践者,要么是在该领域有丰富经验的研究人员,或者是具备优秀编码技能

    2024年02月07日
    浏览(68)
  • YOLOv5入门实践(3)——手把手教你划分自己的数据集

    上一篇我们学习了如何利用labelimg标注自己的数据集,下一步就是该对这些数据集进行划分了。面对繁杂的数据集,如果手动划分的话不仅麻烦而且不能保证随机性。本篇文章就来手把手教你利用代码,自动将自己的数据集划分为训练集、验证集和测试集。一起来学习吧! 前

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包