yolov5 + tensorRT + windows GPU C++部署

1. 环境介绍

yolov5在win10上的部署,yolov5原始版本为pytorch,libtorch在windows下的部署折腾了半天放弃,转而拥抱tensorRT。在此记录一下整个部署过程。
pytorch的inference环境

  • win10
  • cuda10.2
  • pytorch1.8
  • python3.8
  • cudnn7.6.5
  • yolov5 v3.1
    tensorRT推理环境
  • tensorRT 7.0:
  •  TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.2.cudnn7.6(与上面的cuda和cudnn软件版本一致)
    
  • VS2017
  • OpenCV 3.4.0

2. 软件安装

安装好pytorch的gpu的环境,这部分属于python环境部署,这里不做详细介绍。
cuda和cudnn的安装网上资料很多,我就不截图了。

2.1 yolov5安装:

链接地址:yolov5 v3.1

  1. 下载yolo源码
  • git clone https://github.com/ultralytics/yolov5.git
  1. 安装依赖包
  • pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
  1. 下载训练权重文件,并并放置在weights文件夹下
    yolov5s.pt:权重下载

2.2 TensorRT安装:

  1. 英伟达官网下载与cuda和cudnn一致的TensorRT
    我这里的版本如下
    TensorRT版本
  2. 新建文件夹TensorRT-7.0.0.11_cuda102_cudnn7_6(个人自定义的,下文均称为TensorRT目录
  3. 将压缩包解压,解压后文件放入文件夹TensorRT-7.0.0.11_cuda102_cudnn7_6如下:
    在这里插入图片描述
  4. 将**TensorRT目录**\include下中所有头文件(*.h),复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include
  5. 将**TensorRT目录**\lib下所有 .lib文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64
  6. 将**TensorRT目录**\lib下中所有dll文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin
  7. 完成TensorRT的安装

2.3 验证TensorRT安装:

1 . 用VS2017打开TensorRT目录\samples\sampleMNIST
在这里插入图片描述
这里如果出现找不到 Windows SDK 版本10.0.17134.0,vs目标平台版本不一致问题,按照提示下载了一个对应版本安装,问题就解决了。参考链接

  1. 用python 进入TensorRT目录\data\mnist目录,运行
python download_pgms.py

下载完后会出现.pgm文件。
在这里插入图片描述

  1. 配置VS中的运行环境。
  • 在项目属性中配置可执行文件目录:将*TensorRT目录/lib目录添加进入可执行文件目录在这里插入图片描述
    在这里插入图片描述
  1. 点击C/C++ -> 常规 -> 附加包含目录添加路径:TensorRT目录
<think>好的,用户想了解如何将YOLOv5TensorRT集成或优化。首先,我需要回忆相关的步骤和引用内容。根据提供的引用,特别是引用[1]和[3],用户需要导出ONNX模型,然后使用TensorRT的转换工具生成优化后的引擎文件。 首先,YOLOv5的模型需要导出为ONNX格式。这一步可能需要注意模型的输出层,特别是NMS部分,因为TensorRT可能不支持原生的PyTorch NMS操作。引用[3]提到可能需要引入自定义插件来处理NMS,这可能会比较复杂,用户需要检查是否有现成的插件或者需要自己实现。 接下来是使用TensorRT的builder工具,比如build.py脚本,将ONNX模型转换为TensorRT引擎。引用[1]中的命令示例是`python build.py --weights yolov5s.pt --batch-size 1`,这里可能需要确认build.py是否来自YOLOv5的官方仓库或者第三方实现,用户可能需要克隆特定的仓库来获取这个脚本。 优化方面,TensorRT会进行层融合、精度校准(比如FP16或INT8量化),这些都能提升推理速度。引用[2]提到TensorRT通过优化模型提高推理速度,对实时应用很重要。用户可能需要指导他们如何开启这些优化选项,例如在转换时添加`--fp16`参数。 部署阶段,用户可能需要C++Python的接口。引用[4]提到了C++部署所需的头文件和库文件的位置,以及示例程序。用户如果使用C++,需要链接TensorRT的库,并调用相应的API加载引擎文件进行推理。 此外,用户可能关心性能测试,比如使用trtexec工具来评估优化后的模型速度。还需要注意不同硬件上的兼容性问题,比如不同版本的TensorRT或CUDA可能影响部署。 可能遇到的问题包括ONNX导出时的错误,比如不支持的算子,这时候需要查看文档或社区解决方案。另外,INT8量化需要校准数据集,用户可能需要准备一些数据用于校准过程。 最后,应该提醒用户参考官方文档和社区资源,确保步骤正确,并在遇到问题时进行调试。可能需要分步骤详细说明,确保用户能够逐步完成集成和优化。</think>### YOLOv5TensorRT集成及优化教程 #### 1. **模型导出为ONNX格式** - **步骤**: 1. 使用YOLOv5官方脚本导出ONNX模型: ```bash python export.py --weights yolov5s.pt --include onnx --dynamic ``` 2. 检查ONNX输出层是否符合TensorRT要求。若需自定义NMS插件(如BatchedNMS),需修改模型结构或引入插件[^3]。 - **注意**:若出现不支持的操作符(如切片操作),需调整模型结构或通过TensorRT插件实现。 --- #### 2. **生成TensorRT引擎** - **使用官方转换脚本**: ```bash python build.py --weights yolov5s.pt --batch-size 1 --fp16 # 启用FP16优化[^1] ``` - **参数说明**: - `--batch-size`: 指定推理时的批次大小。 - `--fp16`: 启用FP16精度加速(需GPU支持)。 - 若需INT8量化,需提供校准数据集并添加`--int8`参数[^2]。 --- #### 3. **TensorRT优化技术** 1. **层融合(Layer Fusion)**: - TensorRT自动合并卷积、BN、激活函数等层,减少计算量[^2]。 2. **动态形状支持**: - 导出时添加`--dynamic`参数,适配不同输入分辨率。 3. **精度校准**: - FP16:适合大多数GPU(如NVIDIA Tesla系列),速度提升显著。 - INT8:需校准数据集,精度损失可控时速度翻倍[^2]。 --- #### 4. **部署与推理** - **Python部署示例**: ```python import tensorrt as trt # 加载TensorRT引擎 with open("yolov5s.engine", "rb") as f: runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING)) engine = runtime.deserialize_cuda_engine(f.read()) # 创建执行上下文 context = engine.create_execution_context() ``` - **C++部署**: - 引用头文件`NvInfer.h`和库文件`nvinfer_plugin.so`[^4]。 - 使用TensorRT C++ API加载引擎并执行推理。 --- #### 5. **性能测试与调优** - **工具**: - 使用`trtexec`测试引擎速度: ```bash trtexec --loadEngine=yolov5s.engine --shapes=input:1x3x640x640 ``` - **调优方向**: - 调整输入分辨率(如640x640→320x320)。 - 尝试不同精度模式(FP32/FP16/INT8)。 --- #### 6. **常见问题** 1. **ONNX导出失败**: - 确保PyTorch和ONNX版本兼容,禁用不支持的操作(如`Focus`层需替换为卷积)。 2. **NMS插件缺失**: - 从[TensorRT插件库](https://github.com/NVIDIA/TensorRT)编译并注册BatchedNMS插件。 3. **推理结果错误**: - 检查输入预处理(归一化、通道顺序)是否与训练一致。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值