当前位置: 首页 > news >正文

从零到部署:在Ubuntu 20.04上为YOLOv5模型加速,TensorRT安装与模型转换全流程

从零到部署:在Ubuntu 20.04上为YOLOv5模型加速,TensorRT安装与模型转换全流程

当你的YOLOv5模型在PyTorch环境下运行流畅时,是否思考过如何让它飞得更快?在工业质检、安防监控等实时性要求高的场景中,每毫秒的延迟都可能影响整个系统效能。本文将带你深入TensorRT的世界,从环境配置到模型转换,实现推理速度的质的飞跃。

1. 环境准备与版本匹配

在开始TensorRT之旅前,确保你的Ubuntu 20.04系统已经完成以下基础配置:

  • CUDA工具包:推荐11.3版本(与后续TensorRT 8.2完美兼容)
  • cuDNN:8.2.x系列(需与CUDA版本严格对应)
  • PyTorch:1.12.0+(带GPU支持版本)

验证环境完整性的黄金命令组合:

nvidia-smi # 查看GPU驱动状态 nvcc --version # 确认CUDA编译器版本 python -c "import torch; print(torch.__version__, torch.cuda.is_available())" # 检查PyTorch GPU支持

注意:版本不匹配是90%安装失败的根源。建议通过NVIDIA官方文档交叉验证各组件兼容性矩阵。

2. TensorRT的精准安装

2.1 官方包获取与解压

从NVIDIA开发者网站下载对应版本的TensorRT本地安装包(.tar格式),例如:

tar xzvf TensorRT-8.2.5.1.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz -C /opt

2.2 环境变量配置

在~/.bashrc中添加以下路径(根据实际安装目录调整):

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/TensorRT-8.2.5.1/lib export PATH=$PATH:/opt/TensorRT-8.2.5.1/bin

2.3 Python接口安装

进入解压目录的python文件夹,选择匹配的whl包:

cd /opt/TensorRT-8.2.5.1/python pip install tensorrt-8.2.5.1-cp38-none-linux_x86_64.whl

验证安装成功的终极测试:

import tensorrt as trt print(trt.__version__) # 应输出8.2.5.1

3. YOLOv5模型转换全流程

3.1 权重格式转换(.pt → .wts)

使用tensorrtx项目中的转换脚本:

# 在yolov5项目目录下执行 python gen_wts.py -w yolov5s.pt -o yolov5s.wts

关键参数说明:

  • -w:输入的PyTorch权重文件
  • -o:输出的权重文本文件
  • --img-size:可指定模型输入尺寸(需与训练时一致)

3.2 模型结构适配

修改tensorrtx/yolov5中的配置文件:

  1. 调整yololayer.h中的类别数:
static constexpr int CLASS_NUM = 80; // 改为你的实际类别数
  1. 更新config.h中的输入尺寸:
const static int kInputH = 640; // 高度 const static int kInputW = 640; // 宽度

3.3 引擎文件生成

编译转换项目:

mkdir build && cd build cmake .. -DTRT_LIBPATH=/opt/TensorRT-8.2.5.1/lib make -j$(nproc)

生成最终引擎文件:

./yolov5 -s yolov5s.wts yolov5s.engine s # 末尾's'对应yolov5s模型

4. 性能对比与优化技巧

4.1 基准测试对比

使用相同测试图像进行推理耗时对比:

框架类型平均推理时延(ms)显存占用(MB)FPS
PyTorch15.2124565
TensorRT4.7873212

4.2 高级优化策略

  1. 精度校准
from tensorrt import CalibrationAlgoType config.set_flag(trt.BuilderFlag.INT8) config.int8_calibrator = EntropyCalibrator2( data_dir=calib_data_dir, cache_file="yolov5s.calib")
  1. 动态形状支持
profile = builder.createOptimizationProfile(); profile->setDimensions( "images", OptProfileSelector::kMIN, Dims4(1,3,320,320)); profile->setDimensions( "images", OptProfileSelector::kOPT, Dims4(1,3,640,640));
  1. 层融合优化
./trtexec --onnx=yolov5s.onnx \ --saveEngine=yolov5s_fp16.engine \ --fp16 \ --workspace=2048

5. 实战中的避坑指南

  1. 版本冲突解决方案: 当遇到undefined symbol错误时,尝试:
patchelf --set-rpath /opt/TensorRT-8.2.5.1/lib libmyplugin.so
  1. 内存不足处理: 在CMakeLists.txt中增加编译选项:
add_definitions(-DUSE_DYNAMIC_CUDA_MEMORY)
  1. 自定义插件开发: 对于特殊算子,需实现IPluginV2接口:
class MyPlugin : public IPluginV2 { const char* getPluginType() const override { return "MyPlugin"; } // 实现其他必要接口... };

在模型部署过程中,发现最耗时的环节往往是预处理和后处理而非模型推理本身。通过将图像归一化和NMS操作移植到GPU端执行,整体流水线速度可再提升30%。

http://www.jsqmd.com/news/679792/

相关文章:

  • 如何优化SQL存储过程计算逻辑_减少循环内复杂运算
  • 告别弹窗全家桶:用Geek Uninstaller和SoftCnKiller彻底清理电脑垃圾软件(保姆级教程)
  • 不止于定位:用Python+麦克风阵列实现智能家居的‘声音感知’(附避坑指南)
  • 风暴统计平台上线广义线性模型--负二项回归、泊松回归等8种回归,快速形成三线表
  • 不止是监控:用IPMI在OpenBMC里玩点新花样,比如自定义主机-BMC消息通道
  • 终极塞尔达旷野之息存档修改器:5分钟掌握免费图形化编辑技巧
  • 保姆级教程:在Ubuntu上为AM5728开发板交叉编译GPSD 3.18(附依赖库完整打包)
  • BES恒玄耳机充电盒单线通讯实战:从原理图到代码,手把手教你实现开盖配对与电量读取
  • 用Python和NumPy手把手教你实现SVD图像压缩:从原理到实战(附完整代码)
  • 从“找茬”到“共建”:我是如何通过改变代码评审话术,让团队新人快速融入并减少冲突的
  • 从SPS/PPS到NALU:手把手解析H264码流中的关键帧结构
  • 用74HC4051扩展你的单片机ADC通道:一个低成本、高性价比的硬件方案
  • 大学生校园兼职微信小程序pf(文档+源码)_kaic
  • AIOps探索:被AIOps折腾了多半年后,我终于明白知识图谱有多重要
  • 避坑指南:RK3588 USB DTS配置中那些容易搞混的`dr_mode`、`maximum-speed`和PHY引用
  • 别再死记硬背反向传播公式了!用NumPy手搓一个MLP,5分钟搞懂梯度怎么‘流’
  • 考研数学二:3个月零基础速成295分,我的极限、积分与微分方程实战笔记(附避坑指南)
  • 从DES被攻破说起:用Python模拟线性密码分析,理解Matsui的破译思路
  • C#对接Bartender打印踩坑实录:从COM引用到多线程打印的避坑指南
  • 配置:从零搭建Python、PyCharm、PyTorch与Anaconda的AI开发环境
  • 嵌入式开发踩坑记:为什么我申请的0x1000内存,实际只有4KB?
  • 别再乱改FortiGate的DNS设置了!一个配置错误,可能让你的防火墙‘失联’
  • AUTOSAR E2E协议解析:CANFD信号矩阵中的CRC-8校验避坑指南
  • 告别静态地图:用FAR Planner在Gazebo仿真中体验实时动态路径规划
  • DownKyi完整教程:5分钟掌握B站视频下载终极技巧
  • 突破AI上下文限制!Claude Code四层压缩策略让对话“无限”延续
  • 大学生心理健康测评管理系统小程序pf(文档+源码)_kaic
  • 荔枝派Zero上16MB NOR Flash从零到启动:全志V3s SPI Flash完整配置与烧录避坑指南
  • Allegro 17.4布线完成后,这5个DRC之外的检查项千万别漏了(附丝印调整参数)
  • STC8单片机驱动ESP-01S联网实战:从AT指令调试到获取苏宁时间(含完整代码)