【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)

前言

前面我们给大家介绍了基于LabVIEW+YOLOv3/YOLOv4的物体识别(对象检测),今天接着上次的内容再来看看YOLOv5。本次主要是和大家分享使用LabVIEW快速实现yolov5的物体识别,本博客中使用的智能工具包可到主页置顶博客LabVIEW AI视觉工具包(非NI Vision)下载与安装教程中下载。若配置运行过程中遇到困难,欢迎大家评论区留言,博主将尽力解决。

一、关于YOLOv5

YOLOv5是在 COCO 数据集上预训练的一系列对象检测架构和模型。表现要优于谷歌开源的目标检测框架 EfficientDet,在检测精度和速度上相比yolov4都有较大的提高。目前YOLOv5官方代码中,最新版本是YOLOv5 v6.1,一共给出了5个版本的模型,分别是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五个模型(如下图所示)。这些不同的变体模型使得YOLOv5能很好的在精度和速度中权衡,方便用户选择。其中五个模型性能依次增强。比如YOLOv5n模型参数量最小,速度最快,AP精度最低;YOLOv5x模型参数量最大,速度最慢,AP精度最高。本博客,我们以YOLOv5最新版本来介绍相关的部署开发。

在这里插入图片描述YOLOv5相比于前面yolo模型的主要特点是:

1、小目标的检测精度上有明显的提高;

2、能自适应锚框计算

3、具有数据增强功能,随机缩放,裁剪,拼接等功能

4、灵活性极高、速度超快,模型超小、在模型的快速部署上具有极强优势

关于YOLOv5的网络结构解释网上有很多,这里就不再赘述了,大家可以看其他大神对于YOLOv5网络结构的解析。

二、YOLOv5模型的获取

为方便使用,博主已经将yolov5模型转化为onnx格式,可在百度网盘下载 链接:百度网盘 请输入提取码 提取码:yiku

1.下载源码

将Ultralytics开源的YOLOv5代码Clone或下载到本地,可以直接点击Download ZIP进行下载,

下载地址:https://github.com/ultralytics/yolov5

在这里插入图片描述

2.安装模块

解压刚刚下载的zip文件,然后安装yolov5需要的模块,记住cmd的工作路径要在yolov5文件夹下:

在这里插入图片描述

打开cmd切换路径到yolov5文件夹下,并输入如下指令,安装yolov5需要的模块

pip install -r requirements.txt

3.下载预训练模型

打开cmd,进入python环境,使用如下指令下载预训练模型:

import torch
​
# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5n - yolov5x6, custom
​

成功下载后如下图所示:

在这里插入图片描述

4.转换为onnx模型

在yolov5之前的yolov3和yolov4的官方代码都是基于darknet框架实现的,因此opencv的dnn模块做目标检测时,读取的是.cfg和.weight文件,非常方便。但是yolov5的官方代码是基于pytorch框架实现的。需要先把pytorch的训练模型.pt文件转换到.onnx文件,然后才能载入到opencv的dnn模块里。

将.pt文件转化为.onnx文件,主要是参考了nihate大佬的博客:用opencv的dnn模块做yolov5目标检测_nihate的博客-CSDN博客_opencv yolov5

将export.py做如下修改,将def export_onnx()中的第二个try注释掉,即如下部分注释:

 1 '''try:
 2         check_requirements(('onnx',))
 3         import onnx
 4 ​
 5         LOGGER.info(f'\n{prefix} starting export with onnx {onnx.__version__}...')
 6         f = file.with_suffix('.onnx')
 7         print(f)
 8 ​
 9         torch.onnx.export(
10             model,
11             im,
12             f,
13             verbose=False,
14             opset_version=opset,
15             training=torch.onnx.TrainingMode.TRAINING if train else torch.onnx.TrainingMode.EVAL,
16             do_constant_folding=not train,
17             input_names=['images'],
18             output_names=['output'],
19             dynamic_axes={
20                 'images': {
21                     0: 'batch',
22                     2: 'height',
23                     3: 'width'},  # shape(1,3,640,640)
24                 'output': {
25                     0: 'batch',
26                     1: 'anchors'}  # shape(1,25200,85)
27             } if dynamic else None)
28 ​
29         # Checks
30         model_onnx = onnx.load(f)  # load onnx model
31         onnx.checker.check_model(model_onnx)  # check onnx model
32 ​
33         # Metadata
34         d = {'stride': int(max(model.stride)), 'names': model.names}
35         for k, v in d.items():
36             meta = model_onnx.metadata_props.add()
37             meta.key, meta.value = k, str(v)
38         onnx.save(model_onnx, f)'''

 

并新增一个函数def my_export_onnx():

 1 def my_export_onnx(model, im, file, opset, train, dynamic, simplify, prefix=colorstr('ONNX:')):
 2     print('anchors:', model.yaml['anchors'])
 3     wtxt = open('class.names', 'w')
 4     for name in model.names:
 5         wtxt.write(name+'\n')
 6     wtxt.close()
 7     # YOLOv5 ONNX export
 8     print(im.shape)
 9     if not dynamic:
10         f = os.path.splitext(file)[0] + '.onnx'
11         torch.onnx.export(model, im, f, verbose=False, opset_version=12, input_names=['images'], output_names=['output'])
12     else:
13         f = os.path.splitext(file)[0] + '_dynamic.onnx'
14         torch.onnx.export(model, im, f, verbose=False, opset_version=12, input_names=['images'],
15                           output_names=['output'], dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'},  # shape(1,3,640,640)
16                                         'output': {0: 'batch', 1: 'anchors'}  # shape(1,25200,85)
17                                         })
18     return f

在cmd中输入转onnx的命令(记得将export.py和pt模型放在同一路径下):

python export.py --weights yolov5s.pt --include onnx

如下图所示为转化成功界面

在这里插入图片描述

其中yolov5s可替换为yolov5m\yolov5m\yolov5l\yolov5x

在这里插入图片描述

三、LabVIEW调用YOLOv5模型实现实时物体识别(yolov5_new_opencv.vi)

本例中使用LabvVIEW工具包中opencv的dnn模块readNetFromONNX()载入onnx模型,可选择使用cuda进行推理加速。

1.查看模型

我们可以使用netron 查看yolov5m.onnx的网络结构,浏览器中输入链接:Netron,点击Open Model,打开相应的网络模型文件即可。

在这里插入图片描述

如下图所示是转换之后的yolov5m.onnx的属性:

在这里插入图片描述

2.参数及输出

blobFromImage参数: size:640*640 Scale=1/255 Means=[0,0,0]

Net.forward()输出: 单数组 25200*85

3.LabVIEW调用YOLOv5源码

如下图所示,调用摄像头实现实时物体识别

在这里插入图片描述

4.LabVIEW调用YOLOv5实时物体识别结果

本次我们是以yolov5m.onnx为例来测试识别结果和速度的; 不使用GPU加速,仅在CPU模式下,实时检测推理用时在300ms/frame左右

在这里插入图片描述

使用GPU加速,实时检测推理用时为30~40ms/frame,是cpu速度的十倍多

在这里插入图片描述

总结

以上就是今天要给大家分享的内容,本次分享内容实验环境说明:操作系统为Windows10,python版本为3.6及以上,LabVIEW为2018及以上 64位版本,视觉工具包为博客开头提到的工具包。

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: LabVIEW是一个图形化编程软件,用于数据采集、数据分析和控制系统开发。要调用Yolov5模型,需要使用LabVIEW Vision模块,该模块提供了图像处理和计算机视觉的功能和工具。 首先,需要将Yolov5模型加载到LabVIEW中。可以使用Python节点,在其中调用Yolov5模型并提供图像输入。Python节点是LabVIEW中的一个工具,用于在LabVIEW环境中运行Python脚本。可以在Python节点中安装Yolov5依赖库,并编写代码来调用Yolov5模型。 在LabVIEW中创建一个Python节点,并在节点中安装Yolov5依赖库,如torch、cv2等。然后,编写Python代码,在其中使用torch加载训练好的Yolov5模型,并调用该模型对输入图像进行目标检测。 接下来,在LabVIEW中需要将图像传递给Python节点。可以使用图像采集模块来获取图像,如Vision Acquisition Software或Vision Development Module。获取到图像后,可以将其传递给Python节点的输入。 在Python节点中,接收LabVIEW传递的图像并调用Yolov5模型进行目标检测。检测到目标后,可以将结果返回给LabVIEW进行进一步处理或显示。 最后,可以在LabVIEW界面上显示检测到的目标和相关信息。可以使用LabVIEW的图形化工具来创建用户界面,如图像显示控件或文本框。将Yolov5模型的输出结果传递给这些LabVIEW控件,即可在界面上实时显示目标检测结果。 总的来说,LabVIEW可以通过使用Python节点和LabVIEW Vision模块来调用Yolov5模型。这种集成可以实现图像采集、目标检测和结果显示等功能,使LabVIEW具备了人工智能方面的能力。 ### 回答2: LabVIEW是一种图形化编程语言,可以进行数据获取、处理、分析和可视化等工作。要调用Yolov5模型,我们可以通过以下步骤来实现: 1. 安装Yolov5模型:在LabVIEW中,我们需要将Yolov5模型安装到电脑上。可以从官方网站或第三方代码库下载并按照相应的安装步骤进行安装。 2. 导入Yolov5模型:在LabVIEW的图形化编程界面中,我们可以使用相应的节点来导入Yolov5模型。可以使用模型导入节点或者读取模型文件的节点,将模型加载到LabVIEW中。 3. 配置输入数据:Yolov5模型需要输入图像进行目标检测,因此我们需要配置输入数据节点。通过配置节点的参数,我们可以将输入数据与模型进行连接,以便进行目标检测。 4. 运行模型:在LabVIEW中,可以通过执行节点的方式来运行已经导入的Yolov5模型。可以使用执行节点的输入参数来传递待检测的图像数据,并通过执行节点的输出参数来获取检测结果。 5. 处理检测结果:通过执行节点,我们可以获得Yolov5模型的输出结果,其中包括检测到的目标的类别、位置信息等。在LabVIEW中,可以使用相应的节点来对检测结果进行处理,如绘制矩形框、添加标签等。 总之,要在LabVIEW中调用Yolov5模型,我们需要安装模型,导入模型,配置输入数据,执行模型并处理结果。这样可以方便地在LabVIEW中进行目标检测任务。 ### 回答3: LabVIEW作为一个图形化编程环境,可以调用深度学习模型来进行图像识别和物体检测。而YOLOv5是一种快速、准确的对象检测算法,可以在实时场景中检测和识别多个对象。 要在LabVIEW中调用YOLOv5模型,首先需要将YOLOv5模型加载到LabVIEW中。可以使用NI Vision模块来加载和处理图像数据。LabVIEW支持C、C++和Python等主要编程语言,因此可以通过外部插件或Python脚本将YOLOv5模型加载到LabVIEW中。 接下来,在LabVIEW中进行图像预处理,将图像转换为YOLOv5模型所需的输入格式。这可能包括图像的大小调整、归一化和通道转换等操作。 然后,使用NI SystemLink软件套件或NI LabVIEW Machine Learning Toolkit等工具,在LabVIEW中集成YOLOv5模型。这些工具提供了与深度学习模型的接口,可以与YOLOv5模型进行交互,输入待检测的图像,然后获取输出的目标检测结果。 最后,根据YOLOv5模型的输出结果,在LabVIEW中进行后续处理,例如绘制边界框、标记对象、计算对象的位置和尺寸等。 总之,要在LabVIEW中调用YOLOv5模型,需要将模型加载到LabVIEW中,进行图像预处理,然后使用相关工具集成模型,并进行后续处理来获取对象检测结果。这样就可以在LabVIEW实现YOLOv5模型的调用和物体检测功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧安全方案

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值