首页 > 编程语言 >百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)

百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)

时间:2023-07-17 12:24:03浏览次数:50  
标签:PP ONNX 模型 YOLOE LabVIEW 源码 https onnx

目录


前言

PP-YOLOE是百度基于其之前的PP-YOLOv2所改进的卓越的单阶段Anchor-free模型,超越了多种流行的YOLO模型。如何使用python进行该模型的部署,官网已经介绍的很清楚了,但是对于如何在LabVIEW中实现该模型的部署,笔者目前还没有看到相关介绍文章,所以笔者在实现PP-YOLOE ONNX 在LabVIEW中的部署推理后,决定和各位读者分享一下如何使用LabVIEW实现PP-YOLOE的目标检测。


一、什么是PP-YOLO

在这里插入图片描述
PP-YOLOE是百度基于其之前的PP-YOLOv2所改进的卓越的单阶段Anchor-free模型,超越了多种流行的YOLO模型。PP-YOLOE,有更高的检测精度且部署友好。
PP-YOLOE基于anchor-free的架构,使用强大的backbone和neck,引入了CSPRepResStage,ET-head 和动态标签分配算法TAL。针对不同应用场景,提供了不同大小的模型。即s/m/l/x,可以通过width multiplier和depth multiplier配置。PP-YOLOE避免了使用诸如Deformable Convolution或者Matrix NMS之类的特殊算子,以使其能轻松地部署在多种多样的硬件上。
在这里插入图片描述
PP-YOLOE-l在COCO test-dev2017达到了51.6的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。
PP-YOLOE提供了一键转出 ONNX 格式,可顺畅对接 ONNX 生态。本文主要实现百度PP-YOLOE ONNX 在LabVIEW上的部署推理。


二、环境搭建

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工具包下载及安装


三、模型的获取与转化

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

PP-YOLOE并没有直接提供onnx模型,但是我们可以通过paddle2onnx实现onnx模型的导出。

1、安装paddle

  • PPYOLO需要使用百度paddle框架,我们打开百度飞桨官网:https://www.paddlepaddle.org.cn/,在下方的快速安装选择适合自己版本的paddlepaddle

在这里插入图片描述

  • cmd中执行以下命令安装:
python -m pip install paddlepaddle-gpu==2.3.1.post112 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html

2、安装依赖的库

  • 从github上下载PaddleDetection并解压到目录,下载地址:https://github.com/PaddlePaddle/PaddleDetection ,将paddledetection根目录添加到环境变量。
  • 在PaddleDetection-release-2.4文件夹中打开cmd,输入以下指令安装需要的库
pip3 install -U pip && pip3 install -r requirements.txt

3、安装pycocotools

pip install pycocotools

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

pip install pycocotools-windows

4、导出onnx模型

(1)导出推理模型

python tools/export_model.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml --output_dir=output_inference -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams

(2) 安装paddle2onnx

pip install paddle2onnx

(3) 转换成onnx格式

paddle2onnx --model_dir output_inference/ppyoloe_crn_l_300e_coco --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 11 --save_file ppyoloe_crn_l_300e_coco.onnx

至此已成功导出PP-YOLOE ONNX模型

注意: ONNX模型目前只支持batch_size=1


四、在LabVIEW实现PP-YOLOE的部署推理

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

1、LabVIEW调用PP-YOLOE实现目标检测pp-yolox_main.vi

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

(1)查看模型

我们可以使用netron 查看ppyoloe_crn_s_300e_coco.onnx的网络结构,浏览器中输入链接:https://netron.app/,点击Open Model,打开相应的网络模型文件即可。
在这里插入图片描述
查看模型属性,可看到模型的输入输出如下图所示:
在这里插入图片描述
我们发现,该模型有两个输入和两个输出,所以推理时候需要有两个输入,需要用到我们的多输入处理vi,run.vi

  • 可以看到图片输入大小为640x640
  • 第一个输出为8400x6[6分别为classese_id,cofidence,框]

(2)实现过程

  • 读取图片并进行图像预处理(-1到1的归一化)
    在这里插入图片描述

  • 初始化一个Vector_Value,新增两个输入tensor(图片及scal_factor)
    在这里插入图片描述

  • 加载模型并选择加速类型(cpu、CUDA、tensorRt)
    在这里插入图片描述

  • 实现多输入推理
    在这里插入图片描述

  • 获取第一层的输出
    在这里插入图片描述

  • 进行后处理
    在这里插入图片描述

  • 绘制检测出的目标及及置信度
    在这里插入图片描述

(3)项目运行

配置本项目所需环境。在文章末尾链接处下载整个项目源码,将我们已经转化好的onnx模型放置到model文件夹中,打开pp_yolo_main.vi,在前面板中修改程序中加载的模型路径为实际模型路径,本项目中已经将PP-YOLOE onnx模型【ppyoloe_crn_s_300e_coco.onnx】放置到了model文件夹中,如需其他模型,读者也可自行放置到model文件及下,实现模型的加载。修改检测图片的路径为实际图片路径,运行程序,可得到目标检测的结果。

  • 主程序源码如下:
    在这里插入图片描述

  • 运行结果如下:

在这里插入图片描述
大家也可以检测其他图片来测试检测效果。

2、LabVIEW调用PP-YOLOE实现实时目标检测ppyolo_camera.vi

实时检测过程,我们可以选择使用CUDA实现推理加速,整个程序的实现过程和加载图片进行检测基本一致。

(1)LabVIEW调用PP-YOLOE实时目标检测源码

在这里插入图片描述

(2)LabVIEW调用PP-YOLOE实现实时目标检测结果

在这里插入图片描述

可以看到使用CUDA进行推理加速,速度还是很快的。


五、完整项目下载链接

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

总结

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

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

**如果文章对你有帮助,欢迎✌关注、

标签:PP,ONNX,模型,YOLOE,LabVIEW,源码,https,onnx
From: https://www.cnblogs.com/virobotics/p/17434540.html

相关文章

  • 手机直播app源码部署搭建:带货潮流,商城功能!
     随着互联网时代的迅猛发展,手机直播app源码平台早已成为了人们获取资讯、娱乐放松等方式的主要载体,手机直播app源码平台的日益火爆,也让商人们有了一个新兴的想法出现:直播app平台如此火爆,平台的用户也如此庞大,可不可以将自己家的产品在直播app平台直播进行宣传?所以很多商人陆续开......
  • uniapp H5 解决跨域
    1、请求地址:http://192.168.1.216:8080/renren-api/api/getUserInfo2、修改 manifest.json "h5":{"devServer":{"port":5173,//端口号"disableHostCheck":true,"proxy":{&quo......
  • 读 Go 源码,可以试试这个工具
    编程发展至今,从面向过程到面向对象,再到现在的面向框架。写代码变成了一件越来越容易的事情。学习基础语法,看看框架文档,几天时间搞出一个小项目并不是一件很难的事情。但时间长了就会发现,一直这样飘在表面是不行的,技术永远得不到提升。想要技术水平有一个质的飞跃,有一个很好的方......
  • uni-app http.js 请求封装(构造函数版本)
    import{getToken,removeToken}from"./auth.js"importconfigfrom'./config.js'//默认配置constDEFAULT_CONFIG={baseUrl:process.env.NODE_ENV==='development'?config.url_qa_api:config.url_online_api,//这里是自定......
  • spdlog日志库源码:CMake构建项目
    目录spdlog项目构成CMake构建根目录CMakeLists.txtcmake版本要求include专用cmake文件设置默认build类型编译器配置判断当前项目是否为spdlog选项开关spdlog项目构成Github源码:https://github.com/gabime/spdlogspdlog项目采用CMake构建,其一级目录结构如下$tree-L1.├─......
  • 利于puppeteer获取网络资源的直链
    背景比如我想使用curl或者页面按钮点击直接下载个网盘资源,那就会出现问题。因为目前各大网盘给的分享链接都是一个页面,而且大部分还都做了防盗机制,你无法简单的获取真实下载连接!但是我们可以利用puppeteer来做到!蓝奏云lanzou-helper.jsimport{sleep}from'./index.js'......
  • mongodb从库无法启动一例(replication_recovery.cpp)
    环境:OS:centos7mongodb:4.4.22背景:1主1从1仲裁的环境,修改从库的集群ip后,执行如下操作后发现无法启动myrepl:PRIMARY>rs.remove("192.168.1.104:29001")myrepl:PRIMARY>conf=rs.conf()myrepl:PRIMARY>conf.members[1].host="192.168.1.107:29001"myrepl:PRIMARY>rs.r......
  • .net core使用Dapper
    一、记录一下.NETcoreAPI下使用dapper的方法。1.引入两个Nuget包:Dapper这个是dapper的主要引用包System.Data.SqlClient这个包主要是用来使用SQLServer的时候使用的,如果是使用MySQL,就不能使用这个。2.添加配置文件:"ConnectionStrings":{"DefaultConnection":"Se......
  • A014 《太阳系的秘密》编程 源码
    一、课程介绍在本节课中,将会了解太阳系的基本情况,绘制出一个太阳系。在这个过程中,理解for循环结合列表的使用方法,掌握使用random.randint(a,b)产生随机整数的方法。二、知识重难点解析利用列表实现for循环将for循环后边的range()替换成列表后,for循环会按顺序依次提取列......
  • redis publish Unsupported protocol version 123
    实现“redispublishUnsupportedprotocolversion123”1.概述首先,让我们解释一下"redispublishUnsupportedprotocolversion123"的含义。这是一个错误消息,意味着Redis客户端使用了不支持的协议版本号。要解决这个问题,我们需要做一些步骤。2.解决步骤下面是解决该问题......