文章目录模型剪枝:删除冗余结构让模型变小变快非结构化剪枝结构化剪枝模型量化:用低精度数值计算两种常见量化PTQPost-Training Quantization训练后量化核心思想为什么要量化PTQ 的完整流程QATQuantization-Aware Training量化感知训练QAT 的基本流程知识蒸馏:大模型教小模型模型部署(onnx,TensorRT)ONNXTensorRTTensorRT engine典型流程部署流程训练好的检测模型 best.pt↓模型压缩 / 加速↓剪枝 / 量化 / 蒸馏↓导出部署格式↓ONNX / TensorRT↓实际设备上推理模型剪枝:删除冗余结构让模型变小变快非结构化剪枝删掉单个权重某些 weight 变成 0优点压缩率高。缺点普通硬件上不一定明显加速因为矩阵结构变得稀疏不好直接利用。结构化剪枝删掉整个通道、卷积核、层删除某些 channel 删除某些 filter优点真实推理更容易加速。目标检测部署里更常关注结构化剪枝。模型量化:用低精度数值计算目标检测推理时每张图会经过预处理 模型前向推理 后处理 NMS 输出 bbox / score / class量化主要加速的是模型前向推理例如原来 YOLO 用 FP32 推理量化后用 FP16 或 INT8 推理FP32 YOLO → FP16 YOLO → INT8 YOLO速度可能提升模型更小但检测精度可能下降。两种常见量化PTQPost-Training Quantization训练后量化核心思想模型训练完成后不改变权重值本身只是改变权重的数值表示方式——从高精度浮点数FP32压缩为低精度整数INT8或半精度浮点FP16。在已经训练好的模型基础上把模型计算过程中的连续浮点数近似成低精度的离散数值然后用这些低精度数值继续完成目标检测推理。原来FP32 权重 FP32 激活值 → 特征提取 → 分类 框回归PTQ 后INT8/FP16 权重 INT8/FP16 激活值 → 特征提取 → 分类 框回归为什么要量化指标FP32INT8压缩比每个数占用字节4 bytes1 byte4x内存占用基准1/4↓75%推理速度基准2~4x 更快↑硬件支持通用需 INT8 支持—现代 GPU / NPU 对 INT8 运算有专门加速单元如 NVIDIA 的 Tensor Core所以速度提升显著。PTQ 的完整流程你写的流程可以扩展成这样第一步先正常训练模型 例如用 SSDD 训练 YOLO得到 best.pt 第二步固定模型参数 不再反向传播不再更新权重 第三步准备少量校准数据 通常从训练集或验证集中抽取几十到几百张图 第四步让模型跑一遍校准数据 统计每一层激活值的大致范围 第五步根据数值范围计算量化参数 例如 scale、zero-point 第六步把 FP32 权重和激活映射到 INT8 / FP16 第七步导出部署模型 例如 ONNX、TensorRT engine、OpenVINO IR 等 第八步测试量化后模型精度 重点看 mAP、Precision、Recall、FPS、模型大小QATQuantization-Aware Training量化感知训练在训练过程中就模拟量化带来的误差让模型提前适应 INT8 / 低精度推理环境从而在最终导出量化模型时尽量减少精度下降。普通训练模型一直在 FP32 环境下训练最后突然变成 INT8模型可能不适应QAT训练时就模拟 INT8 的效果模型提前适应量化误差最后真的导出 INT8 时精度更稳QAT 的基本流程你给的流程可以扩展成这样第一步准备一个已经训练好的 FP32 模型 例如 YOLO 的 best.pt 第二步在模型中插入量化模拟模块 例如 Fake Quantization 模块 第三步训练时进行伪量化 前向传播时模拟 INT8 量化误差 第四步反向传播时继续更新 FP32 权重 通过梯度下降让模型适应量化误差 第五步训练若干轮 通常不需要从头训练而是在预训练模型基础上微调 第六步导出真正的量化模型 例如 INT8 ONNX、TensorRT Engine、OpenVINO 模型等 第七步测试量化模型效果 比较 FP32、PTQ INT8、QAT INT8 的 mAP、FPS、模型大小知识蒸馏:大模型教小模型知识蒸馏可以理解为小模型在训练阶段模仿大模型的预测行为但这种模仿是通过损失函数和反向传播来更新小模型参数实现的。小模型的结构和推理流程通常不变但参数会被调整使其输出尽量接近大模型同时保持较低的计算复杂度。原本训练时小模型主要根据真实标签 label 学习知识蒸馏是在这个基础上额外加入大模型提供的监督信息让小模型不仅学标准答案也学习大模型的判断分布、特征表达或检测结果。训练目标变成小模型预测结果 ≈ 真实 label 小模型预测结果 ≈ 大模型预测结果模型部署(onnx,TensorRT)你现在训练得到的是best.pt这是 PyTorch/Ultralytics 权重适合在 Python 环境里跑。但真实部署可能是服务器推理 边缘设备推理 C 工程 NVIDIA GPU 加速 嵌入式平台这些地方不一定直接跑.pt。所以要导出成部署格式。ONNXONNX 可以理解成模型交换格式它的作用是把 PyTorch 训练出来的模型转换成其他推理框架也能读取的通用格式。例如best.pt → best.onnxONNX 本身不是专门给目标检测设计的它是通用模型格式。best.pt适合在 PyTorch 里继续训练、验证、推理但如果你要部署到其他环境比如C 程序 NVIDIA TensorRT ONNX Runtime OpenCV DNN 边缘设备 工业检测系统直接拿.pt不一定方便。所以需要一个中间格式。这个中间格式就是 ONNX。ONNX 官方对它的定位是开放的机器学习模型格式它定义了通用的计算图、内置算子和标准数据类型用于不同框架、工具、运行时之间的模型互操作。TensorRTTensorRT 是 NVIDIA 的高性能深度学习推理优化 SDK。TensorRT 的核心目标不是“交换模型”而是让模型在 NVIDIA GPU 上跑得更快、更省显存、延迟更低。TensorRT engine当你把 ONNX 模型交给 TensorRT 后TensorRT 会分析这个计算图然后生成一个专门优化后的推理文件通常叫TensorRT engine或者.plan 文件 .engine 文件你可以理解成ONNX通用图纸 TensorRT engine针对某台 NVIDIA GPU 编译好的高性能执行版本流程是best.onnx ↓ TensorRT Builder 分析计算图 ↓ 选择合适 CUDA kernel ↓ 做算子融合 ↓ 做精度优化 FP16 / INT8 ↓ 做显存规划 ↓ 生成 best.engine最终推理时不是每次都重新分析 ONNX而是直接加载这个 engine。所以ONNX 偏通用 TensorRT engine 偏专用。典型流程ONNX 是“把模型翻译成大家都能看懂的图纸”TensorRT 是“根据 NVIDIA GPU 把这张图纸重新编译成跑得更快的机器代码”。典型流程是PyTorch 模型 best.pt ↓ 导出成 ONNXbest.onnx ↓ TensorRT 读取 ONNX ↓ 构建 TensorRT enginebest.engine ↓ 在 NVIDIA GPU 上部署推理所以你可以这样理解PyTorch训练和研究方便 ONNX模型迁移和交换方便 TensorRTNVIDIA GPU 部署推理快部署流程如果你要部署比如放到服务器、NVIDIA GPU、Jetson 上实时检测船只那么 PyTorch 可能不是最高效选择。部署流程可以是YOLO11n SSDD 训练 ↓ 得到 best.pt ↓ 导出 ONNX ↓ 得到 best.onnx ↓ 用 TensorRT 构建 engine ↓ 得到 best.engine ↓ 在 NVIDIA GPU 上做高速推理注意ONNX / TensorRT 不改变 YOLO 的检测任务。 它们改变的是模型的表示方式和推理执行方式。也就是说模型还是做目标检测只是从PyTorch 推理变成TensorRT 高性能推理