YOLOV5 TensorRT部署 BatchedNMS(engine模型推理)(下)

本文档介绍如何在王新宇代码基础上改进YOLOV5的TensorRT部署,专注于BatchedNMS的实现。通过修改yolov5.cpp的全局变量和内存管理,以及在yololayer.h中调整模型尺寸和类别数,以提高推理速度并避免坐标越界问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要是在王新宇代码的基础上改进,引入对BatchedNMS的解码

1. 修改yolov5.cpp

首先增加全局变量,名字根据转onnx时修改的节点名字来,查看onnx文件可以看到,顺序不要弄错。
在这里插入图片描述

const char *INPUT_NAME = “images”;
const char *OUTPUT_KTOP_NAME = “Ktop”;
const char *OUTPUT_BOXEX_NAME = “nmsBoxes”;
const char *OUTPUT_SCORE_NAME = “nmsScore”;
const char *OUTPUT_CLS_NAME = “nmsCls”;

在这里插入图片描述修改cuda推理时的内存节点,采用指针引用的方式,减少内存拷贝过程,加快推理。

### YOLOv11 TensorRT 部署 分割模型教程 使用TensorRT部署YOLOv11的分割模型涉及多个步骤,主要包括模型转换、优化以及最终的推理过程。以下是详细的说明: #### 1. 安装TensorRT 为了能够利用TensorRT的功能来加速模型推断速度,首先需要安装TensorRT库[^1]。确保所使用的版本兼容目标硬件平台。 #### 2. 转换模型至ONNX格式 在实际应用之前,通常会先将原始框架中的模型文件(如`.pt`)导出为中间表示形式—ONNX (Open Neural Network Exchange)[^2]。对于YOLO系列模型来说也不例外;因此第一步就是把预训练完成后的PyTorch权重保存成对应的.onnx文件。 ```python import torch from models.experimental import attempt_load def convert_to_onnx(weights_path, output_name='model'): device = 'cuda' if torch.cuda.is_available() else 'cpu' model = attempt_load(weights_path, map_location=device) # 加载pytorch模型 model.eval() input_size = (3, 640, 640) # 输入尺寸调整为你自己的需求 dummy_input = torch.randn(1, *input_size).to(device) dynamic_axes = {'images': {0: 'batch', 2: 'height', 3: 'width'}} torch.onnx.export( model, dummy_input, f"{output_name}.onnx", opset_version=12, do_constant_folding=True, verbose=False, input_names=['images'], output_names=['outputs'], dynamic_axes=dynamic_axes ) ``` 此脚本展示了如何从.pth格式转到.onnx格式的过程。 #### 3. 构建Engine File 一旦获得了ONNX文件之后,则可以进一步将其编译成为专用于特定GPU架构上的执行引擎(engine file),从而实现更高效的运行性能提升效果显著[^3]。 ```cpp #include "NvInfer.h" // ...其他必要的头文件... int main(int argc, char **argv){ // 创建builder对象并设置参数... IBuilder* builder = createInferBuilder(gLogger); INetworkDefinition* network = builder->createNetworkV2(0U); OnnxParser parser(network,&gLogger); bool success = parser.parseFromFile(onnxFilePath.c_str(), static_cast<int>(ILogger::Severity::kINFO)); assert(success && "Failed to parse ONNX file"); IBuilderConfig* config = builder->createBuilderConfig(); config->setMaxWorkspaceSize(1 << 30); // 设置最大工作空间大小 ICudaEngine* engine = builder->buildEngineWithConfig(*network,*config); serializeAndSaveEngine(engine,"yolov11.engine"); } ``` 上述C++代码片段演示了怎样基于先前得到的那个.ONNX文档创建TRT Engine实例的方法之一。 #### 4. 推理阶段 最后一步就是在应用程序里加载这个序列化的engine来进行预测操作啦! --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值