PP-YOLOE是百度在PP-YOLOv2基础上升级的一款单阶段Anchor-free模型,性能上已经超越了市面上多种主流YOLO变体。官方文档虽然详细介绍了Python端的部署方法,但关于如何在LabVIEW中落地这件事,目前能找到的资料确实不多。本文就分享一下在LabVIEW中完成PP-YOLOE ONNX模型推理的全过程,希望能给有同样需求的朋友一些参考。
一、什么是PP-YOLOE
- PP-YOLOE官方代码地址:https://github.com/PaddlePaddle/PaddleDetection
- PP-YOLOE论文地址:https://arxiv.org/pdf/2203.16250.pdf

PP-YOLOE采用Anchor-free架构,搭配强大的Backbone和Neck,引入了CSPRepResStage、ET-head以及动态标签分配算法TAL。针对不同应用场景,提供了s/m/l/x四个尺寸的模型,通过调整宽度和深度系数即可灵活配置。值得一提的是,它刻意避开了Deformable Convolution或Matrix NMS这类特殊算子,因此可以在各种硬件上更顺畅地部署。

以PP-YOLOE-l为例,在COCO test-dev2017上达到了51.6 mAP,而在Tesla V100上推理速度可达78.1 FPS。PP-YOLOE还支持一键导出ONNX格式,直接对接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. 工具包下载与安装
- AI视觉工具包下载与安装可参考相关教程(这里不再列举具体URL)
- ONNX工具包下载与安装同理
三、模型获取与转化
注意:本文已为大家准备了PP-YOLOE的ONNX模型,可直接进入第四步进行推理。如果想了解如何自行导出ONNX模型,可继续阅读本节。
PP-YOLOE官方未直接提供ONNX权重,但可以利用paddle2onnx工具进行转换。
1. 安装Paddle
打开百度飞桨官网(https://www.paddlepaddle.org.cn/),在快速安装区域选择适合自己环境的版本。在cmd中执行安装命令,例如:
python -m pip install paddlepaddle-gpu==2.3.1.post112 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/a vx/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
如果遇到编译错误,可以尝试:
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 --sa ve_file ppyoloe_crn_l_300e_coco.onnx
至此就成功导出了PP-YOLOE的ONNX模型。
注意:ONNX模型目前只支持 batch_size=1。
四、LabVIEW中实现PP-YOLOE推理
项目的整体文件结构如下图所示(省略具体文件夹截图),完整源码可从文末获取。如果对LabVIEW+AI技术感兴趣,欢迎交流讨论。

1. 图像目标检测:pp-yolox_main.vi
利用LabVIEW ONNX工具包中的Create_Session.vi加载模型,可选择CPU或CUDA进行推理加速。
(1)查看模型结构
使用Netron(https://netron.app/)打开ppyoloe_crn_s_300e_coco.onnx,可以看到网络结构:

模型的输入输出如下:

模型有两个输入和两个输出,因此推理时需要利用多输入处理模块。图片输入尺寸为640×640,第一个输出维度为8400×6(6对应类别ID、置信度、边界框坐标)。
(2)实现过程
- 读取图片并进行预处理(归一化到-1~1)

- 初始化Vector_Value,新增两个输入tensor(图片及scale_factor)

- 加载模型并选择加速类型(CPU/CUDA/TensorRT)

- 执行多输入推理

- 获取第一层输出

- 后处理

- 绘制检测框及置信度

(3)运行演示
配置好环境后,将ONNX模型放入model文件夹(本文已提供ppyoloe_crn_s_300e_coco.onnx),打开pp_yolo_main.vi,修改模型路径和图片路径,运行即可得到检测结果。
- 主程序源码:

- 检测效果:

可以更换其他图片测试。
2. 实时目标检测:ppyolo_camera.vi
实时检测推荐使用CUDA加速,整体流程与图像检测基本一致。
(1)实时检测源码

(2)实时检测效果

以上就是LabVIEW中调用PP-YOLOE ONNX模型实现目标检测的全部内容,涵盖了模型准备、环境搭建到具体代码实现。整个过程的关键在于处理好模型的多个输入输出以及正确的预处理/后处理逻辑
如果有问题欢迎留言讨论。
