目标检测笔记2

文章目录

训练好的检测模型 best.pt

模型压缩 / 加速

剪枝 / 量化 / 蒸馏

导出部署格式

ONNX / TensorRT

实际设备上推理

模型剪枝:删除冗余结构,让模型变小变快

非结构化剪枝

删掉单个权重:

复制代码
某些 weight 变成 0

优点:压缩率高。

缺点:普通硬件上不一定明显加速,因为矩阵结构变得稀疏,不好直接利用。

结构化剪枝

删掉整个通道、卷积核、层:

复制代码
删除某些 channel
删除某些 filter

优点:真实推理更容易加速。

目标检测部署里更常关注结构化剪枝。

模型量化:用低精度数值计算

目标检测推理时,每张图会经过:

复制代码
预处理
模型前向推理
后处理 NMS
输出 bbox / score / class

量化主要加速的是:

复制代码
模型前向推理

例如原来 YOLO 用 FP32 推理,量化后用 FP16 或 INT8 推理:

复制代码
FP32 YOLO → FP16 YOLO → INT8 YOLO

速度可能提升,模型更小,但检测精度可能下降。

两种常见量化

PTQ:Post-Training Quantization(训练后量化)

核心思想

模型训练完成后,不改变权重值本身 ,只是改变权重的数值表示方式------从高精度浮点数(FP32)压缩为低精度整数(INT8)或半精度浮点(FP16)。

在已经训练好的模型基础上,把模型计算过程中的连续浮点数近似成低精度的离散数值,然后用这些低精度数值继续完成目标检测推理。

原来:

FP32 权重 + FP32 激活值 → 特征提取 → 分类 + 框回归

PTQ 后:

INT8/FP16 权重 + INT8/FP16 激活值 → 特征提取 → 分类 + 框回归

为什么要量化?
指标 FP32 INT8 压缩比
每个数占用字节 4 bytes 1 byte 4x
内存占用 基准 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、模型大小

QAT:Quantization-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

所以要导出成部署格式。

ONNX

ONNX 可以理解成:

复制代码
模型交换格式

它的作用是:

复制代码
把 PyTorch 训练出来的模型,转换成其他推理框架也能读取的通用格式。

例如:

复制代码
best.pt → best.onnx

ONNX 本身不是专门给目标检测设计的,它是通用模型格式。

best.pt 适合在 PyTorch 里继续训练、验证、推理,但如果你要部署到其他环境,比如:

复制代码
C++ 程序
NVIDIA TensorRT
ONNX Runtime
OpenCV DNN
边缘设备
工业检测系统

直接拿 .pt 不一定方便。

所以需要一个中间格式。

这个中间格式就是 ONNX。

ONNX 官方对它的定位是开放的机器学习模型格式,它定义了通用的计算图、内置算子和标准数据类型,用于不同框架、工具、运行时之间的模型互操作。

TensorRT

TensorRT 是 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
    ↓
导出成 ONNX:best.onnx
    ↓
TensorRT 读取 ONNX
    ↓
构建 TensorRT engine:best.engine
    ↓
在 NVIDIA GPU 上部署推理

所以你可以这样理解:

复制代码
PyTorch:训练和研究方便
ONNX:模型迁移和交换方便
TensorRT:NVIDIA GPU 部署推理快

部署流程

如果你要部署,比如放到服务器、NVIDIA GPU、Jetson 上实时检测船只,那么 PyTorch 可能不是最高效选择。

部署流程可以是:

复制代码
YOLO11n + SSDD 训练
    ↓
得到 best.pt
    ↓
导出 ONNX
    ↓
得到 best.onnx
    ↓
用 TensorRT 构建 engine
    ↓
得到 best.engine
    ↓
在 NVIDIA GPU 上做高速推理

注意:

复制代码
ONNX / TensorRT 不改变 YOLO 的检测任务。
它们改变的是模型的表示方式和推理执行方式。

也就是说,模型还是做目标检测,只是从:

复制代码
PyTorch 推理

变成:

复制代码
TensorRT 高性能推理
相关推荐
桓峰基因5 小时前
IF 7.5/Q2 空间转录组和单细胞结合机器学习识别预后和治疗靶点
人工智能·机器学习
传说故事5 小时前
【论文阅读】MEM: Multi-Scale Embodied Memory for Vision Language Action Models
论文阅读·人工智能·具身智能·vla
li-xun5 小时前
2026年5月22日博客精选
人工智能·ai·ai编程
晚烛5 小时前
CANN 数据流水线优化:从数据加载到模型输入的端到端加速
开发语言·网络·人工智能·python·深度学习
AI街潜水的八角5 小时前
PyTorch框架——基于深度学习PmrNet神经网络AI去噪图像增强系统(含训练代码、数据集和GUI交互界面)
人工智能·pytorch·深度学习
wuxinyan1235 小时前
工业级大模型学习之路023:LangChain零基础入门教程(第六篇):重排序与高级检索策略
人工智能·python·学习·langchain
vanuan5 小时前
读不懂10万行代码?用GitNexus一键生成知识图谱,AI编程再也不瞎改
人工智能
nkwshuyi5 小时前
如何用 AI 帮你自动构建卡片笔记盒?
人工智能·笔记
L、2185 小时前
CANN ops-audio 仓库详解:昇腾NPU上的音频处理算子与语音识别优化
人工智能·音视频·语音识别