前言
后面咱们给大家介绍了基于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# Modelmodel = 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/...
将export.py做如下批改,将def export_onnx()中的第二个try正文掉,即如下局部正文:
''' try: check_requirements(('onnx',)) import onnx LOGGER.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) # 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+'\n') 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可替换为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位版本,视觉工具包为博客结尾提到的工具包。
如需源码,如需源码,请关注微信公众号:VIRobotics。回复关键字“yolov5”。
如您想要探讨更多对于LabVIEW与人工智能技术,欢送退出咱们的技术交换群:705637299。进群请备注暗号:LabVIEW深度学习
如果文章对你有帮忙,欢送关注、点赞、珍藏