1. 课程导学与环境准备
各位同学,欢迎来到《YOLO模型导出部署与TensorRT实战》的第一章。我是这门课的主讲,一个在AI部署坑里摸爬滚打了好几年的工程师。今天咱们不急着敲代码,先把地基打牢。
你可能会问:为什么第一节课不讲YOLO结构,反而花时间搞环境?
嗯,我见过太多同学在环境配置上卡了两三天,最后心态崩了。说白了,部署这活儿,环境配不好,后面全是白搭。咱们先把路铺平,后面才能跑得快。
1.1 YOLO系列发展史:从v1到v11
YOLO(You Only Look Once)系列,可以说是目标检测领域的一匹黑马。从2016年Joseph Redmon提出YOLOv1开始,它就打破了“两阶段检测器”的垄断。
我个人习惯把YOLO的发展分成三个阶段:
| 阶段 | 代表版本 | 核心特点 | 我的评价 |
|---|---|---|---|
| 奠基期 | v1 ~ v3 | 端到端检测、多尺度预测 | 开创性,但精度和速度还有提升空间 |
| 成熟期 | v4 ~ v5 | CSPDarknet、Mosaic增强、自适应锚框 | 工程落地首选,稳定可靠 |
| 进化期 | v6 ~ v11 | 解耦头、无锚框、注意力机制、OTA标签分配 | 精度越来越高,但部署复杂度也上来了 |
我记得刚开始做部署时,YOLOv3还是主流。那时候导出模型全靠手写Caffe或Darknet的转换脚本,一个BatchNorm层对不齐就得调半天。现在回头看,那时候真是“刀耕火种”的年代。
核心观点:YOLO的演进本质上是“精度-速度-部署友好度”三者之间的平衡。v5之所以成为工业界常青树,不是因为它精度最高,而是因为它对TensorRT、ONNX的导出支持最成熟。
1.2 TensorRT核心概念:为什么我们需要它?
TensorRT是NVIDIA推出的推理优化引擎。说白了,它能把你的模型“编译”成GPU最喜欢的样子。
我经常跟团队说:训练好的模型就像一本英文原著,PyTorch是逐字逐句读,TensorRT则是把它翻译成母语,还帮你划了重点。
TensorRT的核心优化手段包括:
- 层融合(Layer Fusion):把Conv+BN+ReLU合并成一个算子,减少Kernel Launch开销
- 精度校准(INT8/FP16):用更少的数据位宽,换来2-4倍的推理加速
- 内存优化:复用张量内存,减少显存碎片
- 动态张量(Dynamic Shapes):支持可变输入尺寸,不用为每种分辨率都建一个引擎
一个小建议:刚开始接触TensorRT时,别一上来就搞INT8量化。先跑通FP32,再降FP16,最后才碰INT8。我曾经在一个项目中跳过这个步骤,结果模型精度从0.85掉到0.3,排查了两天才发现是校准集没选对。
1.3 课程目标与学习路径
这门课的目标很明确:让你从零开始,掌握YOLO模型从训练到TensorRT部署的全流程。
咱们的路径是这样设计的:
- 基础篇(第1-5章):环境搭建、模型导出、ONNX中间表示
- 进阶篇(第6-15章):TensorRT API详解、动态形状、INT8量化
- 实战篇(第16-25章):YOLOv5/v8/v10/v11全系列部署
- 优化篇(第26-30章):多流推理、DLA加速、边缘端部署
你想想看,30章走下来,你不仅能跑通Demo,还能自己排查部署中的各种坑。这才是真正的“实战”。
1.4 Ubuntu/Docker开发环境搭建
环境搭建这块,我强烈推荐用Docker。为什么?
- 隔离性好:不会把宿主机搞乱
- 可复现:换台机器也能秒级恢复环境
- 版本管理:CUDA、cuDNN、TensorRT版本随意切换
下面是我个人常用的Dockerfile片段,基于Ubuntu 22.04:
FROM nvidia/cuda:12.1.0-devel-ubuntu22.04
# 安装基础依赖
RUN apt-get update && apt-get install -y \
python3-pip \
git \
wget \
libgl1-mesa-glx \
libglib2.0-0
# 安装PyTorch
RUN pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu121
# 安装TensorRT(这里假设你已经下载了deb包)
COPY nv-tensorrt-local-repo-ubuntu2204-8.6.1-cuda-12.0_1.0-1_amd64.deb /tmp/
RUN dpkg -i /tmp/nv-tensorrt-local-repo-*.deb && \
apt-get update && \
apt-get install -y tensorrt
注意:TensorRT的版本必须和CUDA版本匹配。比如TensorRT 8.6对应CUDA 11.x/12.x,但8.5就不支持CUDA 12。我建议你直接去NVIDIA官网查兼容性矩阵,别凭感觉选版本。
1.5 CUDA/cuDNN/TensorRT安装验证
装完环境后,一定要做验证。我见过太多人装完就跑,结果推理时才发现TensorRT根本没装上。
验证步骤很简单:
- 检查CUDA版本:
nvcc --version,确认输出中有你的CUDA版本号 - 检查cuDNN版本:
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR - 检查TensorRT:
dpkg -l | grep TensorRT或python3 -c "import tensorrt; print(tensorrt.__version__)"
下面是我画的一张环境验证流程图,帮你理清思路:
避坑指南:我曾经在Ubuntu 20.04上装TensorRT 8.5,结果发现系统自带的GCC版本太高,编译时一堆警告。后来换成Ubuntu 22.04 + GCC 11才搞定。所以,如果你遇到编译错误,先看看GCC版本是不是在TensorRT支持的范围内。