【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)含源码
文章目录
- 前言
- 一、关于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)含源码相关推荐
- 人脸识别3:C/C++ InsightFace实现人脸识别Face Recognition(含源码)
人脸识别3:C/C++ InsightFace实现人脸识别Face Recognition(含源码) 目录 1. 前言 2. 项目安装 (1)项目结构 (2)配置开发环境(OpenCV+OpenCL+ ...
- 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)
人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognit ...
- 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载)
人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 目录 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 1. ...
- 手把手教你使用LabVIEW人工智能视觉工具包快速实现传统Opencv算子的调用(含源码)
文章目录 前言 一.图像滤波与增强 二.图像灰度处理 三.阈值处理与设定 四.二值化处理 五.边缘提取 六.角点检测 1.使用cornerMinEigenVal算子 2.使用cornerHarris算 ...
- Opencv用hsv识别车牌(含源码)
最近入门Opencv,分配到的任务是识别车牌.作为刚入门的小白,我查阅了大量相关代码,但在学习过程中发现了一些不足(emmm自己垃圾还嫌别人的不好-),例如我搜到的大多是直接用边缘检测加形态学处理来定 ...
- Flutter教程之使用 Flutter Flame 快速轻松地创建 2D 游戏(教程含源码)
Flutter 使您能够从单个代码库开发适用于 Android.iOS.桌面和 Web 等平台的应用程序.作为一个多平台的 UI 工具包,Flutter 团队致力于让各类开发者能够快速构建和发布应用. ...
- 【YOLOv5】手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,实现YOLOv5实时物体识别(含源码)
文章目录 前言 一.TensorRT简介 二.准备工作 三.YOLOv5模型的获取 1.下载源码 2.安装模块 3.下载预训练模型 4.转换为onnx模型 四.LabVIEW使用TensorRT加速Y ...
- 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)
跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 目录 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测) 1. 前言 2. 跌倒检测数据集说明 3. 基于Y ...
- 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测)
Android实现戴眼镜检测和识别(含源码,可实时检测) 目录 Android实现戴眼镜检测和识别(含源码,可实时检测) 1.戴眼镜检测和识别方法 2.戴眼镜人脸检测 3.戴眼镜识别模型训练 4.戴眼 ...
最新文章
- php函数在哪个文件夹下,php删除文件夹及其文件夹下所有文件的函数代码
- 先入为主与刚刚好(自省)
- php intl make 错误,无法在Debian上为php安装’intl’扩展名
- 使用 ZwUnmapViewOfSection 卸载并替换内存镜像
- mysql自带命令使用教程_自用mysql自带命令实现数据库备份还原
- MongoDB 增量备份方案
- 在Editplus中搭建Ruby开发环境
- Cent os常见操作命令
- unity 坐标系转换_Unity的几种坐标系及相互转换
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...
- 电影海报的字体如何设计?——黎乙丙
- 从0到1:如何创建YouTube频道(手把手设置指南)
- win10系统怎么查看电脑配置?
- iPad所有平板型号屏幕尺寸
- 工作清单软件哪个好用?桌面计划待办清单便签
- js图片加载 完成之前显示loading中的图片
- 环境变量配置文件的作用-L63
- python自学多久能精通-python多久可以精通
- 绿色便携版谷歌浏览器制作流程
- CSS让行内元素撑满整个视口
热门文章
- DSS 決策支援系統
- 一文看懂大功率(PD3.1 240W)线缆的过温保护解决方案
- M.2、PCIe、mSATA接口的SSD 速度性能如何?哪一个是装机首选
- python对seo有什么用_seo学习python有什么益处
- SQL Server 2016详细安装步骤,后附链接
- 使用RT-Thread Studio DIY 迷你桌面时钟(五)| 使用内置 Git 插件管理项目
- 51单片机农历转换公历c语言算法,C51写的51单片机用公历转农历和星期程序
- python基础练习之打飞机
- iOS 控制系统的音量改变
- 吃饱没事做之——爬楼梯题复杂化