前言

YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。如何使用python进行该模型的部署,官网已经介绍的很清楚了,但是对于如何在LabVIEW中实现该模型的部署,笔者目前还没有看到相关介绍文章,所以笔者在实现YOLOv6 ONNX 在LabVIEW中的部署推理后,决定和各位读者分享一下如何使用LabVIEW实现YOLOv6的目标检测。


一、什么是YOLOv6

YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。本框架同时专注于检测的精度和推理效率,在工业界常用的尺寸模型中:YOLOv6-nano 在 COCO 上精度可达 35.0% AP,在 T4 上推理速度可达 1242 FPS;YOLOv6-s 在 COCO 上精度可达 43.1% AP,在 T4 上推理速度可达 520 FPS。在部署方面,YOLOv6 支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署,极大地简化工程部署时的适配工作。

从模型性能对比图来看,YOLOv6的性能也是再创新高。YOLOv6-s在COCO上精度达到了43.1%AP,在T4上推理速度也高达520FPS!

YOLOv6提供了支持 ONNX、TensorRT、NCNN 和 Openvino 的部署版本。今天我们一起来看一下如何在LabVIEW中部署YOLOv6 ONNX。


二、环境搭建

1、部署本项目时所用环境

  • 操作系统:Windows10
  • python:3.6及以上
  • LabVIEW:2018及以上 64位版本
  • AI视觉工具包:techforce_lib_opencv_cpu-1.0.0.73.vip
  • onnx工具包:virobotics_lib_onnx_cuda_tensorrt-1.0.0.16.vip【1.0.0.16及以上版本】

2、LabVIEW工具包下载及安装


三、模型的获取与转化

注意:本教程已经为大家提供了YOLOV6的模型,可跳过本步骤,直接进行步骤四-推理。若是想要了解YOLOV6的onnx模型如何获取,则可继续阅读本部分内容。

下面我们来介绍两种模型获取的方式(以yolov6s为例,想要获取其他模型的方式也一样,只需要修改名字即可)

1、方式一:直接在官网下载yolov6s的onnx模型

具体地址如下:https://github.com/meituan/YOLOv6/tree/main/deploy/ONNX



单击YOLOv6-s,可直接下载yolov6s.onnx

2、方式二:将标准模型pt转化为onnx(较为复杂)

1、下载并安装YOLOv6所依赖的库

https://github.com/meituan/YOLOv6中下载YOLOv6源码并解压



在YOLOv6-main文件夹中打开cmd,输入以下指令安装需要的库:

pip3 install -U pip && pip3 install -r requirements.txt

注意:YOLOv6比V5多了一个addict库,如果之前已经安装过了YOLOv5的相关库,也可以只下载一个addict

2、安装pycocotools

pip install pycocotools

!!!注:若安装pycocotools时遇到ERROR: Could not build wheels for pycocotools ……,则使用以下指令来安装:

pip install pycocotools-windows

3、从基准表下载标准预训练模型

https://github.com/meituan/YOLOv6



将模型放置到如下路径”\YOLOv6-main\”



4、将标准模型pt转化为onnx

切换到YOLOv6-main文件夹路径下,运行以下指令实现模型的转换

python ./deploy/ONNX/export_onnx.py --weights yolov6s.pt --img 640 --batch 1

输出如下,得到yolov6s.onnx

四、在LabVIEW实现YOLOV6的部署推理

本项目整体的文件结构如下图所示,各位读者可在文章末尾链接处下载整个项目源码。

本例中使用LabVIEW ONNX工具包中的Create_Session.vi载入onnx模型,可选择使用cpu,cuda进行推理加速。

1、查看模型

我们可以使用netron 查看ppyoloe_crn_s_300e_coco.onnx的网络结构,浏览器中输入链接:https://netron.app/,点击Open Model,打开相应的网络模型文件即可。



查看模型属性,可看到模型的输入输出如下图所示:

我们发现,该模型输出和YOLOx输出一直,均为1x8400x85

2、项目运行

将我们已经转化好的onnx模型放置到model文件夹中,打开yolov6_onnx_camera.vi,在前面板中修改程序中加载的模型路径为实际模型路径,本项目中已经将YOLOV6 onnx模型【yolov6s.onnx】放置到了model文件夹中,如需其他模型,读者也可自行放置到model文件及下,实现模型的加载。运行程序,可得到目标检测的结果。

  • 主程序源码如下(可以选择使用CUDA或者TensorRT进行推理加速):

  • 运行结果如下:


五、完整项目下载链接

链接:https://blog.csdn.net/virobotics/article/details/126356929?spm=1001.2014.3001.5501

总结

以上就是今天要给大家分享的内容。大家可根据链接下载相关源码与模型。

如果有问题可以在评论区里讨论,提问前请先点赞支持一下博主哦,如您想要探讨更多关于LabVIEW与人工智能技术,欢迎加入我们的技术交流群:705637299。进群请备注:LabVIEW机器学习

**如果文章对你有帮助,欢迎关注、点赞、收藏

YOLOv6在LabVIEW中的推理部署(含源码)的更多相关文章

  1. WinForm中使用DDE技术(含源码)

    提起DDE技术,相信很多人不知道是啥东东,尤其是90后的程序员们.不过,有时候这个东西还是有用处的,用一句话可以总结:实现Winform程序间的通信.比如:两个Winform程序A和B需要实现通信,用 ...

  2. WinForm中播放视频示例(含源码)

    1背景 这几天一老友要求我做个小软件,在WinForm播放视频.印象中微软有个WM控件直接可以使用,晚上研究下 2实现方式 2.1微软草根 最简单的方式,是直接使用微软的WM控件,也是通过COM方式集 ...

  3. WinFom中经典小游戏(含源码)

    最近整理了若干经典的小游戏,无聊时可以打发时间.程序本身不大,练手非常不错,主要是GDI编程,主界面地址如下图所示 源码下载方式 1,关注微信公众号:小特工作室(也可直接扫描签名处二维码) 2,发送: ...

  4. c++实现游戏开发中常用的对象池(含源码)

    c++实现游戏开发中常用的对象池(含源码) little_stupid_child2017-01-06上传   对象池的五要素: 1.对象集合 2.未使用对象索引集合 3.已使用对象索引集合 4.当前 ...

  5. Fabric2.2中的Raft共识模块源码分析

    引言 Hyperledger Fabric是当前比较流行的一种联盟链系统,它隶属于Linux基金会在2015年创建的超级账本项目且是这个项目最重要的一个子项目.目前,与Hyperledger的另外几个 ...

  6. C++ JsonCpp 使用(含源码下载)

    C++ JsonCpp 使用(含源码下载) 前言 JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择JSON的全称为:JavaScri ...

  7. 微信公众平台开发-OAuth2.0网页授权(含源码)

    微信公众平台开发-OAuth2.0网页授权接口.网页授权接口详解(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 在微信开发的高级应用中,几乎都会使用到该接口,因为通过该接口,可以获 ...

  8. 微信公众平台开发-access_token获取及应用(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...

  9. 微信公众平台开发-微信服务器IP接口实例(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 学习了access_token的获取及应用后,正式的使用access_token ...

  10. jQuery使用():Deferred有状态的回调列表(含源码)

    deferred的功能及其使用 deferred的实现原理及模拟源码 一.deferred的功能及其使用 deferred的底层是基于callbacks实现的,建议再熟悉callbacks的内部机制前 ...

随机推荐

  1. RTSP Server(LIVE555)源码分析(二)-服务器创建

    一. 设置RTSP服务器配置 步骤1.5:rtspServer_Init--->BasicTaskScheduler::createNew()时序图如下: 1)步骤1.54,BasicTaskS ...

  2. [C++核心编程] 4.2、类和对象-对象的初始化和清理

    文章目录 4.2 对象的初始化和清理 4.2.1 构造函数和析构函数 4.2.2 构造函数的分类及调用 4.2.3 拷贝构造函数调用时机 4.2.4 构造函数调用规则 4.2.5 深拷贝与浅拷贝 4. ...

  3. Python 项目:外星人入侵--第二部分

    外星人入侵 6.驾驶飞船 玩家左右移动飞船,用户按左或右按键时作出响应. 6.1响应按键 当用户在按键时,在python中注册一个事件,事件都是通过方法pygame.event.get()获取的. 在 ...

  4. MySQL之主从复制搭建

    文章目录 主从复制 主从搭建 配置主从复制的命令 测试 总结 主从复制 主从也叫做(AB复制),允许一个服务器从一个服务器数据库(主服务器)的数据复制到一个或者多个MySQL数据库服务器. 主从复制的 ...

  5. 从七个方面聊聊linux到底强在哪

    从事计算机相关行业的同学不难发现,身边总有一些朋友在学习linux,有的开发同学甚至自己的电脑就是它.经常听他们说linux如何好用等等.那么linux到底好在那里,能让大家如此喜欢.这也是我经常问自 ...

  6. 2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值。 如果可以做到,请返回任何 [i, j],其中 i+1 < j

    2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值. 如果可以做到,请返回任何 [i, j],其中 i+1 < ...

  7. 2023-03-09:用golang调用ffmpeg,将流媒体数据(以RTMP为例)保存成本地文件(以flv为例)。

    2023-03-09:用golang调用ffmpeg,将流媒体数据(以RTMP为例)保存成本地文件(以flv为例). 答案2023-03-09: 这是最简单的收流器.本文记录一个最简单的基于FFmpe ...

  8. 2023-01-14:给定一个二维数组map,代表一个餐厅,其中只有0、1两种值 map[i][j] == 0 表示(i,j)位置是空座 map[i][j] == 1 表示(i,j)位置坐了人 根据防

    2023-01-14:给定一个二维数组map,代表一个餐厅,其中只有0.1两种值 map[i][j] == 0 表示(i,j)位置是空座 map[i][j] == 1 表示(i,j)位置坐了人 根据防 ...

  9. Netty自定义协议要素

    魔数:用来判断是否是无效数据包 协议版本号:可以支持协议的升级 序列化算法:消息正文使用哪种序列化方式,可以扩展.例如:protobuf,json,hessian等 指令类型:跟业务相关,例如:登录, ...

  10. Abp Vnext 动态(静态)API客户端源码解析

    根据以往的经验,通过接口远程调用服务的原理大致如下: 服务端:根据接口定义方法的签名生成路由,并暴露Api. 客户端:根据接口定义方法的签名生成请求,通过HTTPClient调用. 这种经验可以用来理 ...