TensorRTX部署yolov5

本文介绍了如何从命令行选择YOLOv5子模型,生成权重文件,构建TensorRT版本的YOLOv5,进行目标检测、分类和实例分割任务,以及进行INT8量化校准的过程。
摘要由CSDN通过智能技术生成

Config

  • Choose the YOLOv5 sub-model n/s/m/l/x/n6/s6/m6/l6/x6 from command line arguments.
  • Other configs please check src/config.h

Build and Run

Detection

  1. generate .wts from pytorch with .pt, or download .wts from model zoo
git clone -b v7.0 https://github.com/ultralytics/yolov5.git
git clone -b yolov5-v7.0 https://github.com/wang-xinyu/tensorrtx.git
cd yolov5/
wget https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
cp [PATH-TO-TENSORRTX]/yolov5/gen_wts.py .
python gen_wts.py -w yolov5s.pt -o yolov5s.wts
# A file 'yolov5s.wts' will be generated.
  1. build tensorrtx/yolov5 and run
cd [PATH-TO-TENSORRTX]/yolov5/
# Update kNumClass in src/config.h if your model is trained on custom dataset
mkdir build
cd build
cp 
### 如何使用 TensorRT 部署 YOLOv8 模型 #### 准备工作 为了能够顺利部署YOLOv8模型到TensorRT,需先完成一系列准备工作。这包括但不限于安装必要的开发工具和库文件。对于Windows平台而言,确保已安装Visual Studio 2017、CUDA 11.1以及cuDNN 8.0.5等组件[^3]。 #### 安装TensorRT 接着要安装TensorRT来支持后续操作。考虑到兼容性和性能优化的需求,在此推荐按照官方指南进行安装,并确认所选版本能良好适配现有的CUDA与cuDNN配置[^2]。 #### 转换ONNX格式 由于YOLOv8原生并不直接提供对TensorRT的支持,通常做法是先将PyTorch训练得到的.pth权重文件转换成通用中间表示形式——ONNX(Open Neural Network Exchange)。这一过程可以通过调用`torch.onnx.export()`函数实现: ```python import torch from yolov8 import YOLOv8Model model = YOLOv8Model() dummy_input = torch.randn(1, 3, 640, 640) torch.onnx.export(model, dummy_input, "yolov8.onnx", opset_version=11) ``` 上述代码片段展示了如何导出一个名为`yolov8.onnx`的文件,其中包含了经过预处理后的输入张量形状信息及对应的输出结构定义[^1]。 #### 构建并加载TensorRT引擎 一旦拥有了`.onnx`文件之后,则可通过Python API创建TRTEngine对象实例化具体的推理流程。下面给出了一段简单的构建逻辑作为参考: ```cpp #include <NvInfer.h> // ...其他头文件省略... int main() { // 创建Builder和NetworkDefinition... nvinfer1::IBuilder* builder = nvinfer1::createInferBuilder(gLogger); nvinfer1::INetworkDefinition* network = builder->createNetworkV2(0U); // 加载ONNX模型至network中... onnxParser::IParser* parser = onnxParser::createParser(network, gLogger); std::ifstream file("yolov8.onnx", std::ios::binary | std::ios::ate); size_t fileSize = (size_t)file.tellg(); char *buffer = new char[fileSize]; file.seekg(0); file.read(buffer, fileSize); file.close(); bool success = parser->parseFromBuffer((void*)buffer, fileSize); delete[] buffer; parser->destroy(); // 设置INT8量化参数和其他选项... builder->setMaxBatchSize(batch_size); builderConfig->setMaxWorkspaceSize(workspace_size_in_bytes); ICudaEngine* engine = builder->buildEngineWithConfig(*network, *builderConfig); // 序列化engine保存为plan文件以便日后重复利用 IHostMemory* modelStream{nullptr}; assert(engine != nullptr); modelStream = engine->serialize(); std::ofstream p("yolov8.trt"); if (!modelStream || modelStream->size() <= 0) {return false;} p.write(reinterpret_cast<const char*>(modelStream->data()), modelStream->size()); } ``` 这段C++程序负责读取之前准备好的`.onnx`描述符,解析其内部节点关系图谱,最终产出可供实际执行的任务序列即所谓的“计划书”。值得注意的是,这里还涉及到了最大批处理尺寸(`batch_size`)设定等问题,这些都需要依据具体应用场景灵活调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值