文章目录

  • 前言
  • 一、关于YOLOv5
  • 二、YOLOv5模型的获取
    • 1.下载源码
    • 2.安装模块
    • 3.下载预训练模型
    • 4.转换为onnx模型
  • 三、LabVIEW调用YOLOv5模型实现实时物体识别(yolov5_new_opencv.vi)
    • 1.查看模型
    • 2.参数及输出
    • 3.LabVIEW调用YOLOv5源码
    • 4.LabVIEW调用YOLOv5实时物体识别结果
  • 总结

前言

前面我们给大家介绍了基于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 onnxLOGGER.info(f'\n{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)# Checksmodel_onnx = onnx.load(f)  # load onnx modelonnx.checker.check_model(model_onnx)  # check onnx model# Metadatad = {'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+'\n')wtxt.close()# YOLOv5 ONNX exportprint(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可替换为yolov5m\yolov5m\yolov5l\yolov5x

三、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速度的十倍多

总结

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

如需源码,请在评论区留下您的邮箱。

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

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

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

  1. 人脸识别3:C/C++ InsightFace实现人脸识别Face Recognition(含源码)

    人脸识别3:C/C++ InsightFace实现人脸识别Face Recognition(含源码) 目录 1. 前言 2. 项目安装 (1)项目结构 (2)配置开发环境(OpenCV+OpenCL+ ...

  2. 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)

    人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognit ...

  3. 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载)

    人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 目录 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 1. ...

  4. 手把手教你使用LabVIEW人工智能视觉工具包快速实现传统Opencv算子的调用(含源码)

    文章目录 前言 一.图像滤波与增强 二.图像灰度处理 三.阈值处理与设定 四.二值化处理 五.边缘提取 六.角点检测 1.使用cornerMinEigenVal算子 2.使用cornerHarris算 ...

  5. Opencv用hsv识别车牌(含源码)

    最近入门Opencv,分配到的任务是识别车牌.作为刚入门的小白,我查阅了大量相关代码,但在学习过程中发现了一些不足(emmm自己垃圾还嫌别人的不好-),例如我搜到的大多是直接用边缘检测加形态学处理来定 ...

  6. Flutter教程之使用 Flutter Flame 快速轻松地创建 2D 游戏(教程含源码)

    Flutter 使您能够从单个代码库开发适用于 Android.iOS.桌面和 Web 等平台的应用程序.作为一个多平台的 UI 工具包,Flutter 团队致力于让各类开发者能够快速构建和发布应用. ...

  7. 【YOLOv5】手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,实现YOLOv5实时物体识别(含源码)

    文章目录 前言 一.TensorRT简介 二.准备工作 三.YOLOv5模型的获取 1.下载源码 2.安装模块 3.下载预训练模型 4.转换为onnx模型 四.LabVIEW使用TensorRT加速Y ...

  8. 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)

    跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 目录 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 1. 前言 2. 跌倒检测数据集说明 3. 基于Y ...

  9. 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测)

    Android实现戴眼镜检测和识别(含源码,可实时检测) 目录 Android实现戴眼镜检测和识别(含源码,可实时检测) 1.戴眼镜检测和识别方法 2.戴眼镜人脸检测 3.戴眼镜识别模型训练 4.戴眼 ...

最新文章

  1. php函数在哪个文件夹下,php删除文件夹及其文件夹下所有文件的函数代码
  2. 先入为主与刚刚好(自省)
  3. php intl make 错误,无法在Debian上为php安装’intl’扩展名
  4. 使用 ZwUnmapViewOfSection 卸载并替换内存镜像
  5. mysql自带命令使用教程_自用mysql自带命令实现数据库备份还原
  6. MongoDB 增量备份方案
  7. 在Editplus中搭建Ruby开发环境
  8. Cent os常见操作命令
  9. unity 坐标系转换_Unity的几种坐标系及相互转换
  10. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...
  11. 电影海报的字体如何设计?——黎乙丙
  12. 从0到1:如何创建YouTube频道(手把手设置指南)
  13. win10系统怎么查看电脑配置?
  14. iPad所有平板型号屏幕尺寸
  15. 工作清单软件哪个好用?桌面计划待办清单便签
  16. js图片加载 完成之前显示loading中的图片
  17. 环境变量配置文件的作用-L63
  18. python自学多久能精通-python多久可以精通
  19. 绿色便携版谷歌浏览器制作流程
  20. CSS让行内元素撑满整个视口

热门文章

  1. DSS 決策支援系統
  2. 一文看懂大功率(PD3.1 240W)线缆的过温保护解决方案
  3. M.2、PCIe、mSATA接口的SSD 速度性能如何?哪一个是装机首选
  4. python对seo有什么用_seo学习python有什么益处
  5. SQL Server 2016详细安装步骤,后附链接
  6. 使用RT-Thread Studio DIY 迷你桌面时钟(五)| 使用内置 Git 插件管理项目
  7. 51单片机农历转换公历c语言算法,C51写的51单片机用公历转农历和星期程序
  8. python基础练习之打飞机
  9. iOS 控制系统的音量改变
  10. 吃饱没事做之——爬楼梯题复杂化