前言上一篇博客给大家介绍了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.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)'''并新增一个函数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系列的显卡,速度应该会更快。**
**
可关注微信公众号:virobotics ,回复关键词:yolov5_onnx ,进行源码下载
五、纯cpu下opencv dnn和onnx工具包加载yolov5实现实时物体识别推理用时对比1、opencv dnn cpu下yolov5推理速度为:300ms左右/frame
2、onnx工具包cpu下yolov5推理速度为:200ms左右/frame
对比我们发现,同样使用cpu进行推理,onnx工具包推理速度要比opencv dnn推理速度快30%左右。
附加说明:计算机环境操作系统:windows10python:3.6及以上labview:2018及以上 64位版本视觉工具包:virobotics_lib_onnx_cuda_tensorrt-1.0.0.11以上版本总结以上就是今天要给大家分享的内容。大家可根据链接下载相关源码与模型。
如果文章对你有帮助,欢迎关注、点赞、收藏
制药行业+人工智能将碰撞出什么样的火花
专家解读VR未来发展计划
TDA8361各引脚功能及电压
同一个按键短按与长按有什么区别?源代码详细讲解
工业级远程控制网关ZP3000|PLC远程控制管理编程调试上下载
手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,实现YOLOv5实时物体识别
小米公司已召开上市启动会露,倾向于选择香港上市
5年后合肥百姓家有望照进LED
区块链数据上链的问题探讨
“工业4.0”的时代 中国制造的机会在哪里
欧菲科技银行授信28.5亿元,拟向南昌欧菲生物识别增资2亿元
斯坦福NLP的强大QA数据集
二进制编码和二进制数据
电源传导噪声超标,如何做到EMI滤波器精准调参呢?
美军一种研发智能绷带 可密切跟踪伤口进展并实时刺激愈合过程
IET:手机或高压电线塔的辐射会危害健康吗?
智能魔镜是什么?
大立科技可提供高效专业的红外热成像人体测温解决方案
角度传感器工作原理介绍—慧联科技
蓝牙串/接口静电保护防护专用TVS二极管