人工智能深度学习计算机视觉【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址https://gitcode.com/gh_mirrors/pa/PaddleDetection点击查看免费下载本篇技术指南聚焦 PaddleDetection 仓库中deploy/end2end_ppyoloe目录提供的完整部署链路从 PP-YOLOE 预训练权重出发先导出 Paddle 静态图推理模型再借助end2end.py将模型后处理NMS以EfficientNMS_TRT插件形式端到端地写入 ONNX 图最后用trtexec生成 TensorRT Engine 并用 CUDA Python / CuPy 脚本完成推理验证。读完本文你将掌握一套可直接复制运行的 PP-YOLOE TensorRT 部署流程并理解其中去除 NMS → 图编辑 → 插件化 NMS的核心原理。一、端到端部署方案概览为什么要把 NMS 装进 ONNX常规的 Paddle 推理模型在导出后会保留模型头部的 NMS 后处理算子这套后处理逻辑在跨框架Paddle → ONNX → TensorRT转换时往往难以被 TensorRT 完整识别为高效插件导致推理时需要回落到 CPU 执行 NMS成为整条链路的性能瓶颈。deploy/end2end_ppyoloe提供的端到端方案思路是导出 Paddle 模型时直接去掉 NMS然后在 ONNX 图层面使用 NVIDIA 的EfficientNMS_TRT插件节点替换原始后处理使 NMS 在 GPU 上以 TensorRT 插件形式运行最终 ONNX 模型只保留 4 个输出num_dets、det_boxes、det_scores、det_classes推理结果一步到位无需再写外部后处理代码。该目录包含 3 个核心脚本end2end.pyPaddle 推理模型 → 端到端 ONNX 模型核心转换脚本cuda-python.py基于cuda-pythoncudart 异步接口的 TensorRT Engine 推理验证脚本cupy-python.py基于 CuPy 的 TensorRT Engine 推理验证脚本。二、前置准备下载 PP-YOLOE 预训练权重端到端转换的第一步是从预训练权重开始。原文档中列出了 5 个 COCO 预训练模型的下载入口位于 PaddleDetection 官方模型库paddledet.bj.bcebos.com/models/下ppyoloe_crn_s_300e_coco.pdparamsppyoloe_crn_m_300e_coco.pdparamsppyoloe_crn_l_300e_coco.pdparamsppyoloe_crn_x_300e_coco.pdparamsppyoloe_crn_s_400e_coco.pdparamsS 规模、400 epoch 版本下载后将.pdparams权重文件放置于当前工作目录即可。它们对应的训练配置分别为 configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml 与 configs/ppyoloe/ppyoloe_crn_s_400e_coco.yml两个配置文件均继承自 configs/ppyoloe/base/ppyoloe_crn.yml网络结构为 CSPResNet CustomCSPPAN PPYOLOEHead400e 版本额外将static_assigner_epoch调整为 133 并换用 400 epoch 优化器。三、第一步导出 Paddle 推理模型去掉 NMS端到端转换要求导出的 Paddle 静态图模型不包含 NMS 后处理因此需要在tools/export_model.py的命令行中同时指定trtTrue与exclude_nmsTrue并固定输入尺寸python ./tools/export_model.py \ -c configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml \ -o weightsppyoloe_crn_s_300e_coco.pdparams \ trtTrue \ exclude_nmsTrue \ TestReader.inputs_def.image_shape[3,640,640] \ --output_dir ./ # 若使用 ppyoloe-s-400e 模型 python ./tools/export_model.py \ -c configs/ppyoloe/ppyoloe_crn_s_400e_coco.yml \ -o weightsppyoloe_crn_s_400e_coco.pdparams \ trtTrue \ exclude_nmsTrue \ TestReader.inputs_def.image_shape[3,640,640] \ --output_dir ./命令中的关键参数说明-c模型配置文件路径-o weights...指定要加载的预训练权重-o后的trtTrue、exclude_nmsTrue等均属于对配置的覆盖项merge_config机制见 tools/export_model.py 的parse_args/mainTestReader.inputs_def.image_shape[3,640,640]固定测试输入为 3×640×640。该参数取自 configs/ppyoloe/base/ppyoloe_reader.yml 中TestReader.inputs_def.image_shape: [3, 640, 640]YOLO 系列模型导出 ONNX 时必须显式固定 shape否则无法转换成功--output_dir ./导出目录产物会写入./ppyoloe_crn_s_300e_coco/。从源码结构看exclude_nms最终会传入 PPYOLOEHead 的post_process。在 ppdet/modeling/heads/ppyoloe_head.py 中可以看到当exclude_nmsTrue时post_process直接返回未经 NMS 的原始pred_bboxes与pred_scores源码注释标明exclude_nmsTrue仅用于 benchmark 场景这正为后续在 ONNX 图中插入 TensorRT NMS 插件留出了空间。导出成功后会得到目录ppyoloe_crn_s_300e_coco/ ├── infer_cfg.yml # 推理配置预处理、类别列表等 ├── model.pdiparams # 静态图参数 ├── model.pdiparams.info # 参数额外信息 └── model.pdmodel # 静态图模型文件四、第二步安装 ONNX 转换所需依赖在运行端到端转换脚本之前需要准备如下 Python 依赖pip install onnx1.10.0 pip install paddle2onnx pip install onnx-simplifier # onnx_graphsurgeon 为 NVIDIA 提供的 ONNX 图编辑工具 # 需从 NVIDIA 的 PyPI 源安装TensorRT 版本需不低于 8.0.0 python3 -m pip install onnx_graphsurgeon --index-url https://pypi.ngc.nvidia.com # 若使用 cuda-python 推理脚本请安装 pip install cuda-python # 若使用 cupy 推理脚本请安装cuda110-cuda117 版本均可用请按本机 CUDA 版本选择 pip install cupy-cuda117各依赖在转换链路中的职责paddle2onnx负责将 Paddle 静态图model.pdmodel/model.pdiparams转换为 ONNX 模型onnx与onnx-simplifier前者用于模型加载与合法性校验后者用于对转换结果做图简化简化失败时脚本会打印警告但不会中断onnx_graphsurgeon核心图编辑工具负责寻找解码分支、重排 scores 张量、插入 EfficientNMS_TRT 插件cuda-python/cupy-cudaXXX为两个 TensorRT 推理验证脚本提供设备端数组操作能力。五、第三步生成端到端 ONNX 模型依赖就绪后即可运行 deploy/end2end_ppyoloe/end2end.py 生成端到端 ONNXpython ./deploy/end2end_ppyoloe/end2end.py \ --model-dir ppyoloe_crn_s_300e_coco \ --save-file ppyoloe_crn_s_300e_coco.onnx \ --opset 11 \ --batch-size 1 \ --topk-all 100 \ --iou-thres 0.6 \ --conf-thres 0.4 # 若使用 ppyoloe-s-400e 模型 python ./deploy/end2end_ppyoloe/end2end.py \ --model-dir ppyoloe_crn_s_400e_coco \ --save-file ppyoloe_crn_s_400e_coco.onnx \ --opset 11 \ --batch-size 1 \ --topk-all 100 \ --iou-thres 0.6 \ --conf-thres 0.45.1 全部参数说明以下参数表完整覆盖 end2end.py 中parse_opt定义的命令行参数含源码中的默认值参数作用默认值--model-dirPaddle 推理模型导出目录路径必填无默认值--save-file生成的 ONNX 模型保存路径必填无默认值--opsetONNX opset 版本11--img-size导出模型的输入图像尺寸[640, 640]可传单个值脚本会自动补齐为正方形--batch-size导出模型的 batch 大小1--topk-all每张图像保留的 TopK 目标数量100--iou-thresNMS 的 IoU 阈值0.45--conf-thresNMS 的置信度阈值0.25注意示例命令中使用了--iou-thres 0.6 --conf-thres 0.4与源码默认值不同实际使用时请按场景自行权衡详见第八节。另外--save-file若指向一个目录脚本会自动保存为目录/model-dir名称.onnx若给出的是不带.onnx后缀的文件名脚本会自动补全后缀。5.2 转换流程与源码原理end2end.py的main函数完整执行了以下 6 个阶段对应 end2end.pyPaddle 静态图转 ONNX通过paddle2onnx.legacy.command.program2onnx将model.pdmodel/model.pdiparams转换为 ONNX并显式声明输入image: [batch, 3, H, W]与scale_factor: [batch, 2]ONNX 简化与校验用onnxsim.simplify简化模型再用onnx.checker.check_model校验合法性简化失败会打印Simplifier failure提示但不中断流程图常量折叠通过onnx_graphsurgeon导入 ONNX 后执行fold_constants()与cleanup().toposort()自动识别解码分支遍历图中节点找出Div其输入为Mul对应的 anchor 解码节点以及Concat → Reshape → ReduceSum结构对应的类别数节点并断言mul.outputs[0].shape[1] concat.outputs[0].shape[2]即 anchor 数量与类别张量维度匹配。由此自动获得 anchor 总数与 COCO 80 类无需手工指定重排 scores 并裁剪输入新增Transposeperm[0, 2, 1]将分类分数张量重排为[batch, anchors, classes]并将模型输入裁剪为仅保留image一项插入 EfficientNMS_TRT 插件以graph.layer(opEfficientNMS_TRT)注入 NMS 插件属性包括background_class-1、max_output_boxestopk_all、score_threshold、iou_threshold、score_activationFalse、box_coding0并声明 4 个输出张量num_dets[batch, 1]每张图检测框数量det_boxes[batch, topk_all, 4]检测框坐标det_scores[batch, topk_all]检测框置信度det_classes[batch, topk_all]检测框类别。最终导出的 ONNX 模型输入为原始图像输出即为可直接消费的检测结果这正是端到端的含义。六、第四步使用 trtexec 导出 TensorRT Engine得到端到端 ONNX 后使用 TensorRT 自带的trtexec工具将其构建为 Engine要求 TensorRT 版本 ≥ 8.0.0因为EfficientNMS_TRT插件依赖该版本及以上/path/to/trtexec \ --onnxppyoloe_crn_s_300e_coco.onnx \ --saveEngineppyoloe_crn_s_300e_coco.engine \ --fp16 # 如需导出 TensorRT fp16 模型保留该参数 # 若使用 ppyoloe-s-400e 模型 /path/to/trtexec \ --onnxppyoloe_crn_s_400e_coco.onnx \ --saveEngineppyoloe_crn_s_400e_coco.engine \ --fp16其中--fp16为可选参数启用后 Engine 将以 FP16 精度运行通常能带来显著的吞吐提升请根据目标硬件对 FP16 的支持情况决定是否启用。七、第五步TensorRT Engine 推理验证仓库提供了两个等价的推理验证脚本均以 Engine 文件路径作为唯一命令行参数# cuda-python 推理脚本 python ./deploy/end2end_ppyoloe/cuda-python.py ppyoloe_crn_s_300e_coco.engine # cupy 推理脚本 python ./deploy/end2end_ppyoloe/cupy-python.py ppyoloe_crn_s_300e_coco.engine # 若使用 ppyoloe-s-400e 模型将 engine 路径替换为对应文件即可两个脚本的推理流程见 cuda-python.py 与 cupy-python.py完全一致仅设备端数组操作分别使用 cudart / CuPy下载测试图片脚本运行时会自动拉取一张示例图片网络请求随后用letterbox预处理等比缩放并填充至 640×640autoFalse即强制填充到目标尺寸这一步与训练/评估时的Resize(keep_ratioFalse)语义保持一致归一化BGR→RGB 转置为 CHW 后按mean[0.485, 0.456, 0.406]、std[0.229, 0.224, 0.225]做归一化先除以 255 再减均值除标准差与 ppyoloe_reader.yml 中NormalizeImage的配置一致加载 Engine 与绑定管理通过 TensorRT Python API 反序列化 Engine遍历所有 binding 创建对应的设备内存自动识别 FP16 输入预热与计时先以随机数据执行 10 次 warmup再正式推理并打印单次耗时毫秒结果回传与可视化推理完成后将num_dets、det_boxes、det_scores、det_classes四个输出回传主机端按num_dets截取有效框使用脚本内置的 COCO 80 类名列表绘制矩形框与类别标签最终通过cv2.imshow展示结果。八、参数调优与注意事项NMS 阈值选择--conf-thres越高保留的检测框越少、越精确但可能漏检小目标--iou-thres越高重叠框合并越少。文档示例使用0.6 / 0.4源码默认值为0.45 / 0.25实际部署时应结合精度mAP与召回要求调试topk-all 上限--topk-all决定每张图最多输出的检测框数量同时决定det_boxes、det_scores、det_classes输出的第二维大小过小会截断检测结果过大会增加显存与后处理开销固定输入尺寸YOLO 系列导出 ONNX 必须通过TestReader.inputs_def.image_shape固定 shape--img-size需与之保持一致否则无法完成转换当前链路仅针对 batch1 场景验证opset 版本--opset推荐保持 11这是该目录脚本的默认值也是 Paddle2ONNX 针对 YOLO 系列模型验证过的版本精度模式使用--fp16构建 Engine 前建议先以 FP32 验证结果正确性再对比 FP16 的精度损失是否可接受运行环境TensorRT ≥ 8.0.0CuPy 版本需与本机 CUDA 匹配cupy-cuda110至cupy-cuda117均可用cuda-python与cupy二选一即可无需同时安装。九、相关文件与延伸阅读转换主脚本deploy/end2end_ppyoloe/end2end.py推理验证脚本deploy/end2end_ppyoloe/cuda-python.py、deploy/end2end_ppyoloe/cupy-python.py模型导出入口tools/export_model.pyPP-YOLOE 配置与模型结构configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml、configs/ppyoloe/base/ppyoloe_crn.yml、configs/ppyoloe/base/ppyoloe_reader.ymlexclude_nms分支实现ppdet/modeling/heads/ppyoloe_head.py通用 ONNX 导出说明含各模型支持矩阵deploy/EXPORT_ONNX_MODEL.md如需深入了解 Paddle 推理模型导出含目录结构、infer_cfg.yml等可继续阅读 deploy/EXPORT_MODEL.md 与 deploy/TENSOR_RT.md。赞分享人工智能深度学习计算机视觉【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址https://gitcode.com/gh_mirrors/pa/PaddleDetection点击查看免费下载相关推荐PaddleDetection PP-YOLOE 转 ONNX-TensorRT 部署教程模型导出、EfficientNMS_TRT 定制与推理实战PaddleDetection PP YOLOE 转 ONNX TensorRT 部署教程模型导出、EfficientNMS_TRT 定制与推理实战 本教程完人工智能深度学习计算机视觉TensorRT Python 入门实战用 ONNX Parser 导入 ResNet-50 模型并完成端到端推理TensorRT Python 入门实战用 ONNX Parser 导入 ResNet 50 模型并完成端到端推理 本文基于 NVIDIA TensorRT人工智能推理引擎深度学习本地部署模型优化PaddleDetection PP-YOLOE 全面指南Anchor-free 目标检测模型库、源码解读与端到端部署实战PaddleDetection PP YOLOE 全面指南Anchor free 目标检测模型库、源码解读与端到端部署实战 PP YOLOE 是 Paddl人工智能深度学习计算机视觉创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
华为的标志最佳实践:3步搞定从源码到落地的避坑指南 华为的标志最佳实践:3步搞定从源码到落地的避坑指南 看了一堆教程还是不会写项目?别慌,这就是你缺的 最佳实践 。很多应届生入职第一周,面对公司内部的图形渲染库或品牌资产管理系统,代码看不懂,需求对不上,心里慌得一批。其实问题不在智商,在于没… · 2026/9/23 3:45:22
活动策划案面试避坑指南:3个核心原理让你不再答非所问 活动策划案面试避坑指南:3个核心原理让你不再答非所问 面试被问原理答不上来,是职场晋升中最尴尬的时刻。很多开发者在准备“活动策划案”相关技术实现时,往往只关注前端页面怎么画,后端接口怎么调,却忽略了底层的数据流转与并发控制机制。这份避坑指南… · 2026/9/23 3:45:16
Mac本地部署Qwen Coder实战:从选型到优化全攻略 过去这一两年,AI Coder 这个词几乎被玩成了“人均标配”。GitHub Copilot、Cursor 这些名字铺天盖地,但真到了自己做技术选型的时候,我反而越来越警惕——云端工具确实方便,代码补全也快,可代码仓库传到人家服务器上这… · 2026/9/23 3:45:16
手写JDBC的JavaWeb课设:Servlet+JSP+MySQL宿舍管理系统实战解析 简介:这是一份完整的学生宿舍管理系统开发项目,基于 Java Web 经典技术组合 Servlet、JSP 和 MySQL 实现,适合正在学习 Java 服务端开发的学生,也适用于课程设计、毕业设计或新手练习。系统覆盖宿舍管理日常业务,包括管… · 2026/9/23 4:32:51
VGAM实现Tobit模型:处理删失数据与零堆积的R实战指南 数据分析做到一定阶段,一定会撞上一类特别烦人的数据形态:因变量在某个边界值上大量堆积。最典型的就是“0”——比如研究家庭消费,很多家庭当期就是没花钱;研究产品销量,非促销期大多数门店就是零销量;研究… · 2026/9/23 4:32:51
从0到1搭建AI Agent平台:架构设计与工程实践 最近一年,"AI Agent"这个词几乎被聊烂了。我身边不少开发者分成了两拨:一拨觉得Agent无非就是"大模型加一个循环调用",另一拨正在认真琢磨怎么把Agent变成公司里真正能上岗、能交付成果的"数字同事"。我属于后… · 2026/9/23 4:32:51
前端Leader转型AI Agent开发:LangChain+FastAPI实战路线 1. 从 Vue3 到 LangChain:一个前端 Leader 的转型路线图DAY57,这个数字本身就说明了很多问题。一个在职前端 Leader,每天挤出时间学 AI Agent,能坚持到第 57 天,说明这不是一时兴起,而是有明确目标的系统性… · 2026/9/23 4:32:45
FreeRTOS内核12大机制深度解析:从STM32实操到调度抖动根治 1. 这不是背概念,是拆解RTOS的“操作系统级肌肉记忆”你翻过《FreeRTOS手册》第37页,抄过任务创建函数xTaskCreate()的参数表,用HAL库在STM32上跑通了两个LED闪烁任务——但当老板突然问:“为什么这个高优先级任务响应延迟超了200… · 2026/9/23 4:32:45
DeepAgent实战:SSE流式输出与Agent长期记忆体系设计拆解 DeepAgent 的 SSE 流式输出上线跑了一阵子,整体链路算是通了,但长期记忆这块我评估下来仍然是个半成品。这篇文章把这次实战的完整过程拆开讲清楚:SSE 怎么接、Abort 怎么处理、记忆体系怎么设计、以及为什么说长期记忆还差得远。内容偏工程落… · 2026/9/23 4:32:45
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29