Phase 3:部署深挖(你的护城河,贯穿全程)

用大白话说:这一页帮你搞懂「模型怎么跑得更快,又不会看漏东西」。

打个比方。模型是工人,GPU(说人话:专门跑 AI 计算的显卡)是工厂。 这一页要教你两件事:怎么让工人干活更利索,怎么让工厂同时接好几条流水线。

你要吃透三块:量化(说人话:把模型「减肥」,好让显卡跑更快)的道理、TensorRT(说人话:英伟达出的「模型加速器」,把模型改装成显卡最爱吃的形状)的内部、还有多路视频一起跑。 这是你已经有手感、市场上又最缺人的方向。Phase 0 的系统解剖,加上这一页,就凑齐了「视觉部署工程师」的核心本事。

一、量化理论(你前面 INT8 漏检的底层)

先说人话。量化就像把一张高清图压成小图:文件变小、加载变快,但细节会糊。 模型也一样——数字位数用少了,跑得快,可小目标就容易看丢。下面这几个词,就是压缩时的不同玩法。

回顾一下你踩过的坑:你校准时用的是训练集,这一步没做错。可 VisDrone 的小目标还是漏检。 为什么?因为 INT8 能表示的数值范围就那么窄,装不下那些很微弱的信号。 这是它天生的毛病,不是你选错了校准集。换校准集救不回来。 你只有三条路:混合精度、QAT,或者干脆退回 FP16

🔧 混合精度(保召回的关键)

说人话:不用全身减肥,只给不重要的部位减。

具体做法是:backbone 和 neck(模型前半段,负责「看」)走 INT8检测 head(最后下判断那一段)留 FP16。 Ultralytics 里那一行 int8=True 是整个网络一起压,它没给你逐层开关。 你要精细控制,就得自己写 TensorRT 的 build 流程,在 ONNX 阶段用 precision_constraints=obey 把敏感的层标出来。 对 VisDrone 这类小目标任务,这是我们能找到的最稳的折中办法。

二、TensorRT 内部(从「会 export」到「懂 builder」)

大白话:以前你只会喊一句「帮我转成 engine」,现在要搞懂它转的时候到底在干嘛。 你可以把 TensorRT 想成一个改装车间——你把模型开进去,它按你给的要求改装成最适合这块显卡的样子。

这条特别容易翻车:engine 是跟 GPU 型号 + TensorRT 版本绑死的。 所以你必须在真正要跑的那台机器上重新 build 一遍。 别在自己电脑上转好,拷到服务器就想用——跑不起来。

三、三格式实测(用你 model-TensorRT.py)

光讲道理没用,你得自己跑一遍,用数字说话。下面这张表是你要填的答卷。

用哪种格式跑一帧要多久准不准(mAP你要注意什么
.pt FP16基线基线你现在的默认
FP16.engine~2× 快≈ 基线必做,几乎无损
INT8.engine再 2–4×小目标掉需同域校准 + 回测

顺序你别搞反了。 先上 FP16,确认一点不掉; 再试 INT8,用同一个场景的数据做校准,然后回头测一遍准确率; 一旦发现掉点,就上混合精度,或者老老实实退回 FP16

四、多路并发(你系统的真瓶颈)

这一节是你系统现在最堵的地方。 一路视频跑得动,好几路一起上就卡——问题多半不在模型,而在「谁在干活、谁在排队」。

一个常见误会:开了多线程 ≠ GPU 就并行了。 你在 CPU 那边分了好几条线,到了 GPU 上活儿还是一个个排队做。 想让显卡真并行,得靠 CUDA streams 或者多 context。

五、🔧 Phase 3 验收

做完下面三件事,这一页才算真过了。

下一步:Phase 4 Agent 机制