0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

LabVIEW深度学习实战 来源: LabVIEW深度学习实战 作者: LabVIEW深度学习实 2023-03-13 16:01 次阅读

前言

前面我们给大家介绍了基于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格式 ,可在百度网盘下载**链接:https://pan.baidu.com/s/15dwoBM4W-5_nlRj4G9EhRg?pwd=yiku

提取码: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大佬的博客:https://blog.csdn.net/nihate/article/details/112731327

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

'''
    try:
        check_requirements(('onnx',))
        import onnx

        LOGGER.info(f'
{prefix} starting export with onnx {onnx.__version__}...')
        f = file.with_suffix('.onnx')
        print(f)

        torch.onnx.export(
            model,
            im,
            f,
            verbose=False,
            opset_version=opset,
            training=torch.onnx.TrainingMode.TRAINING if train else torch.onnx.TrainingMode.EVAL,
            do_constant_folding=not train,
            input_names=['images'],
            output_names=['output'],
            dynamic_axes={
                'images': {
                    0: 'batch',
                    2: 'height',
                    3: 'width'},  # shape(1,3,640,640)
                'output': {
                    0: 'batch',
                    1: 'anchors'}  # shape(1,25200,85)
            } if dynamic else None)

        # Checks
        model_onnx = onnx.load(f)  # load onnx model
        onnx.checker.check_model(model_onnx)  # check onnx model

        # Metadata
        d = {'stride': int(max(model.stride)), 'names': model.names}
        for k, v in d.items():
            meta = model_onnx.metadata_props.add()
            meta.key, meta.value = k, str(v)
        onnx.save(model_onnx, f)'''

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

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

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

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

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

在这里插入图片描述

其中yolov5s可替换为yolov5myolov5myolov5lyolov5x

在这里插入图片描述

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

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

1.查看模型

我们可以使用netron 查看yolov5m.onnx的网络结构,浏览器中输入链接: https://netron.app/,点击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速度的十倍多**

如需源码,请关注微信公众号:VIRobotics。回复关键字“yolov5”。

**在这里插入图片描述

审核编辑 黄宇

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

如果文章对你有帮助,欢迎关注、点赞、收藏

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LabVIEW
    +关注

    关注

    1977

    文章

    3658

    浏览量

    326232
  • 目标检测
    +关注

    关注

    0

    文章

    211

    浏览量

    15680
  • 物体识别
    +关注

    关注

    0

    文章

    16

    浏览量

    7537
收藏 人收藏

    评论

    相关推荐

    手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,实现YOLOv5实时物体识别

    今天我们就一起来看一下如何使用LabVIEW开放神经网络交互工具包实现TensorRT加速YOLOv5
    的头像 发表于 03-20 16:36 2832次阅读
    手把手教你使用<b class='flag-5'>LabVIEW</b> ONNX Runtime部署 TensorRT加速,<b class='flag-5'>实现</b><b class='flag-5'>YOLOv5</b><b class='flag-5'>实时</b><b class='flag-5'>物体</b><b class='flag-5'>识别</b>

    Yolov5算法解读

    yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不断进行升级迭代。 Yolov5YOLOv5s、YOLOv5
    的头像 发表于 05-17 16:38 9888次阅读
    <b class='flag-5'>Yolov5</b>算法解读

    YOLOv5LabVIEW+TensorRT的yolov5部署实战(源码

    今天主要和大家分享在LabVIEW中使用纯TensoRT工具包快速部署并实现yolov5物体识别
    的头像 发表于 08-21 22:20 1402次阅读
    【<b class='flag-5'>YOLOv5</b>】<b class='flag-5'>LabVIEW</b>+TensorRT的<b class='flag-5'>yolov5</b>部署实战(<b class='flag-5'>含</b><b class='flag-5'>源码</b>)

    基于迅为RK3588【RKNPU2项目实战1】:YOLOV5实时目标分类

    [/url] 【RKNPU2 人工智能开发】 【AI深度学习推理加速器】——RKNPU2 从入门到实践(基于RK3588和RK3568) 【RKNPU2项目实战1】:YOLOV5实时目标分类 【RKNPU2项目实战2】:SORT目标追踪 【RKNPU2项目实战3】车牌
    发表于 08-15 10:51

    在RK3568教学实验箱上实现基于YOLOV5的算法物体识别案例详解

    一、实验目的 本节视频的目的是了解YOLOv5模型的用途及流程,并掌握基于YOLOV5算法实现物体识别的方法。 二、实验原理 YOLO(Yo
    发表于 12-03 14:56

    龙哥手把手教你学视觉-深度学习YOLOV5

    vi7.Labview调用yolov5模型进行摄像头实时检测学习本课程后,你可以获得:1. 快速掌握yolov5
    发表于 09-03 09:39

    怎样使用PyTorch Hub去加载YOLOv5模型

    在Python>=3.7.0环境中安装requirements.txt,包括PyTorch>=1.7。模型和数据集从最新的 YOLOv5版本自动下载。简单示例此示例从
    发表于 07-22 16:02

    如何YOLOv5测试代码?

    使用文档“使用 YOLOv5 进行对象检测”我试图从文档第 10 页访问以下链接(在 i.MX8MP 上部署 yolov5s 的步骤 - NXP 社区) ...但是这样做时会被拒绝访问。该文档没有说明需要特殊许可才能下载 test.zip 文件。NXP 的人可以提供有关如
    发表于 05-18 06:08

    yolov5模型onnx转bmodel无法识别出结果如何解决?

    问题描述: 1. yolov5模型pt转bmodel可以识别出结果。(转化成功,结果正确) 2. yolov5模型pt转onnx转bmodel可以无法识别出结果。(转化成功,结果没有)
    发表于 09-15 07:30

    基于YOLOv5的目标检测文档进行的时候出错如何解决?

    你好: 按Milk-V Duo开发板实战——基于YOLOv5的目标检测 安装好yolov5环境,在执行main.py的时候会出错,能否帮忙看下 main.py: import torch
    发表于 09-18 07:47

    在C++中使用OpenVINO工具包部署YOLOv5模型

    下载并转换YOLOv5预训练模型的详细步骤,请参考:《基于OpenVINO™2022.2和蝰蛇峡谷优化并部署YOLOv5模型》,本文所使用的OpenVINO是2022.3 LTS版。
    的头像 发表于 02-15 16:53 5473次阅读

    使用旭日X3派的BPU部署Yolov5

    本次主要介绍在旭日x3的BPU中部署yolov5。首先在ubuntu20.04安装yolov5,并运行yolov5并使用pytoch的pt模型文件转ONNX。
    的头像 发表于 04-26 14:20 985次阅读
    使用旭日X3派的BPU部署<b class='flag-5'>Yolov5</b>

    浅析基于改进YOLOv5的输电线路走廊滑坡灾害识别

    本文以YOLOv5网络模型为基础,提出一种改进YOLOv5YOLOv5-BC)深度学习滑坡灾害识别方法,将原有的PANet层替换为BiFPN结构,提高网络多层特征融合能力
    的头像 发表于 05-17 17:50 1230次阅读
    浅析基于改进<b class='flag-5'>YOLOv5</b>的输电线路走廊滑坡灾害<b class='flag-5'>识别</b>

    yolov5和YOLOX正负样本分配策略

    整体上在正负样本分配中,yolov7的策略算是yolov5和YOLOX的结合。因此本文先从yolov5和YOLOX正负样本分配策略分析入手,后引入到YOLOv7的解析中。
    发表于 08-14 11:45 2382次阅读
    <b class='flag-5'>yolov5</b>和YOLOX正负样本分配策略

    什么是YOLO?RK3568+YOLOv5是如何实现物体识别的?一起来了解一下!

    、掌握基于YOLOV5算法实现物体识别的方法。三、实验原理YOLOYOLO(YouOnlyLookOnce)v5是一种非常流行的
    的头像 发表于 12-19 19:04 406次阅读
    什么是YOLO?RK3568+<b class='flag-5'>YOLOv5</b>是如何<b class='flag-5'>实现</b><b class='flag-5'>物体</b><b class='flag-5'>识别</b>的?一起来了解一下!