前言前面我们给大家介绍了基于LabVIEW+YOLOv3/YOLOv4的物体识别(对象检测) , 今天接着上次的内容再来看看YOLOv5 。本次主要是和大家分享使用LabVIEW快速实现yolov5的物体识别,本博客中使用的智能工具包可到主页置顶博客LabVIEW AI视觉工具包(非NI Vision)下载与安装教程中下载 。若配置运行过程中遇到困难,欢迎大家评论区留言 , 博主将尽力解决 。
一、关于YOLOv5YOLOv5是在 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.txt3.下载预训练模型打开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/article/details/112731327
将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)'''
推荐阅读
- 不会游泳的人如何自学游泳(一般人如何学习游泳)
- 怎样在大海中游泳(在大海中怎么游泳)
- Java一次返回中国所有省市区三级树形级联+前端vue展示【200ms内】
- 翻转吧剧情大战牛魔王怎么过
- 奶茶店的冰块怎么做(奶茶店的碎冰怎么做)
- Go_gin权限验证
- 【软件学习】怎么在Word里面设置MathType分隔符,使公式按照章节自动编号
- 穿越火线怎么调烟雾头(win10cf烟雾保护头怎么调)
- 照片怎么p图(手机怎样p图换人头)
- 【高并发】ScheduledThreadPoolExecutor与Timer的区别和简单示例