前言
上一篇博客给大家介绍了LabVIEW凋谢神经网络交互工具包【ONNX】,明天咱们就一起来看一下如何应用LabVIEW凋谢神经网络交互工具包实现TensorRT减速YOLOv5。
以下是YOLOv5的相干笔记总结,心愿对大家有所帮忙。
内容 | 地址链接 |
---|---|
【YOLOv5】LabVIEW+OpenVINO让你的YOLOv5在CPU上飞起来 | https://blog.csdn.net/virobotics/article/details/124951862 |
【YOLOv5】LabVIEW OpenCV dnn疾速实现实时物体辨认(Object Detection) | https://blog.csdn.net/virobotics/article/details/124929483 |
一、TensorRT简介
TensorRT是一个高性能的深度学习推理(Inference)优化器,能够为深度学习利用提供低提早、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或主动驾驶平台进行推理减速。TensorRT现已能反对TensorFlow、Caffe、Mxnet、Pytorch等简直所有的深度学习框架,将TensorRT和NVIDIA的GPU联合起来,能在简直所有的框架中进行疾速和高效的部署推理。次要用来针对 NVIDIA GPU进行 高性能推理(Inference)减速。
通常咱们做我的项目,在部署过程中想要减速,无非就那么几种方法,如果咱们的设施是CPU,那么能够用openvion,如果咱们心愿可能应用GPU,那么就能够尝试TensorRT了。那么为什么要抉择TensorRT呢?因为咱们目前次要应用的还是Nvidia的计算设施,TensorRT自身就是Nvidia自家的货色,那么在Nvidia端的话必定要用Nvidia亲儿子了。
不过因为TensorRT的入门门槛稍微有些高,间接劝退了想要入坑的玩家。其中一部分起因是官网文档比拟芜杂;另一部分起因就是TensorRT比拟底层,须要一点点C++和硬件方面的常识,学习难度会更高一点。咱们做的凋谢神经网络交互工具包GPU版本,在GPU上做推理时,ONNXRuntime可采纳CUDA作为后端进行减速,要更疾速能够切换到TensorRT,尽管和纯TensorRT推理速度比还有些差距,但也非常快了。如此能够大大降低开发难度,可能更快更好的进行推理。。
二、筹备工作
依照 LabVIEW凋谢神经网络交互工具包(ONNX)下载与超具体装置教程 装置所需软件,因本篇博客次要给大家介绍如何应用TensorRT减速YOLOv5,所以倡议大家装置GPU版本的onnx工具包,否则无奈实现TensorRT的减速。
三、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应用TensorRT减速YOLOv5,实现实时物体辨认(yolov5_new_onnx.vi)
1.LabVIEW调用YOLOv5源码
2.辨认后果
抉择减速形式为:TensorRT
应用TensorRT减速,实时检测推理用时为20~30ms/frame,比单纯应用cuda减速快了30%,同时没有失落任何的精度。博主应用的电脑显卡为1060显卡,各位如果应用30系列的显卡,速度应该会更快。
五、纯CPU下opencv dnn和onnx工具包加载YOLOv5实现实时物体辨认推理用时比照
1、opencv dnn cpu下YOLOv5推理速度为:300ms左右/frame
2、onnx工具包cpu下YOLOv5推理速度为:200ms左右/frame
比照咱们发现,同样应用cpu进行推理,onnx工具包推理速度要比opencv dnn推理速度快30%左右。
六、源码及模型下载
可关注微信公众号:VIRobotics ,回复关键词:yolov5_onnx ,进行源码下载
附加阐明:计算机环境
- 操作系统:Windows10
- python:3.6及以上
- LabVIEW:2018及以上 64位版本
- 视觉工具包:virobotics_lib_onnx_cuda_tensorrt-1.0.0.11以上版本
总结
以上就是明天要给大家分享的内容。大家可依据链接下载相干源码与模型。
如果有问题能够在评论区里探讨,发问前请先点赞反对一下博主哦,如您想要探讨更多对于LabVIEW与人工智能技术,欢送退出咱们的技术交换群:705637299,进群请备注暗号:LabVIEW机器学习
如果文章对你有帮忙,欢送关注、点赞、珍藏