
YOLOv8中INT8量化的概率压平——为什么Softmax后的分布被熨斗烫过了一、前置知识需要知道对应文档Softmax 的作用Softmax在YOLOv8中只做一件事Softmax 为什么不适合 INT8为什么概率输出天然不适合INT8量化对称量化的 scale 计算对称量化与非对称量化二、什么是概率压平Softmax 的输出是一个概率分布每个 bin 有一个概率值。正常情况下这些概率有高有低——峰值高、尾部低形成一个有起伏的分布。量化后这个分布变得更均匀高低之间的差距缩小尾部多个 bin 的概率变得完全一样。就像拿熨斗烫过——凹凸不平的地方被熨平了。三、为什么量化会导致概率压平3.1 量化前的数据假设有 16 个 bin 的原始分数Softmax 的输入bin_0: 3.00 ← 最大值 bin_1: 2.80 bin_2: 0.10 bin_3: 0.05 bin_4: 0.02 bin_5: 0.01 bin_6~15: 0.003.2 量化 scale 的计算对称量化scale max(|x|) / 127 3.0 / 127 ≈ 0.02363.3 量化发生了什么量化公式q round(x / scale)反量化x q × scalebin_0: 3.00 / 0.0236 127.0 → INT8 127 → 反量化 3.0000 ✓ 没变 bin_1: 2.80 / 0.0236 118.6 → INT8 119 → 反量化 2.8110 ✗ 变了 bin_2: 0.10 / 0.0236 4.2 → INT8 4 → 反量化 0.0945 ✗ 变了 bin_3: 0.05 / 0.0236 2.1 → INT8 2 → 反量化 0.0472 ✗ 变了 bin_4: 0.02 / 0.0236 0.8 → INT8 1 → 反量化 0.0236 ✗ 变了 bin_5: 0.01 / 0.0236 0.4 → INT8 0 → 反量化 0.0000 ✗ 归零 bin_6: 0.00 / 0.0236 0.0 → INT8 0 → 反量化 0.0000 ✓ ... bin_15: 0.00 / 0.0236 0.0 → INT8 0 → 反量化 0.0000 ✓关键点bin_5 的 0.01 小于 scale0.0236量化后直接归零。bin_5~bin_15 全部变成 0。3.4 量化后的 Softmax量化后的输入进入 Softmaxbin_0: 3.0000 → exp(3.0000) 20.086 → 概率 39.5% bin_1: 2.8110 → exp(2.8110) 16.627 → 概率 32.7% bin_2: 0.0945 → exp(0.0945) 1.099 → 概率 2.2% bin_3: 0.0472 → exp(0.0472) 1.048 → 概率 2.1% bin_4: 0.0236 → exp(0.0236) 1.024 → 概率 2.0% bin_5: 0.0000 → exp(0.0000) 1.000 → 概率 2.0% bin_6: 0.0000 → exp(0.0000) 1.000 → 概率 2.0% ... ... bin_15: 0.0000 → exp(0.0000) 1.000 → 概率 2.0%bin_5 到 bin_15 的输入全是 0exp(0)全是 1所以它们的概率完全相等。四、压平的三个表现4.1 头部削峰bin_0: 39.60% → 39.47% ↓ 被压低 0.13% bin_1: 32.42% → 32.68% ↑ 被抬高 0.25%原因bin_0 和 bin_1 的原始差距从3.0 vs 2.8缩小为3.0 vs 2.811两个峰值更接近了。4.2 尾部抹平FP32 尾部bin_5~bin_15: bin_5: 1.99% bin_6: 1.97% bin_7: 1.97% ← 有细微差异 bin_8: 1.97% ... INT8 尾部bin_5~bin_15: bin_5: 1.97% bin_6: 1.97% bin_7: 1.97% ← 全部相同 bin_8: 1.97% ...FP32 时尾部有 2 种不同概率值INT8 后只剩 1 种。4.3 集中度下降指标FP32INT8变化前两名概率之和72.0%72.1%峰值下降 0.13%bin₀ 从 39.60%→39.47%不同概率值个数76多样性下降五、为什么会造成影响5.1 定位精度受损DFL 的加权求和公式偏移量 Σ(概率_i × 权重_i)FP32: 0.3960×0 0.3242×1 0.0218×2 0.0207×3 ... 精确值 INT8: 0.3947×0 0.3268×1 0.0216×2 0.0206×3 ... 偏移了bin_0 被压低、bin_1 被抬高 → 加权求和结果向右偏移 → 检测框位置不准。5.2 精细位置信息丢失bin_5~bin_15 在 FP32 里还有细微差别模型能表达我倾向于 bin_5 而不是 bin_6。量化后这 11 个 bin 概率完全相同模型无法区分——精细位置信息被抹掉了。六、为什么压平是一个不可忽视的问题场景影响大目标检测影响小bin_0/bin_1 主导定位主要靠头部的几个 bin小目标检测影响大小目标本身信号弱概率分布更均匀压平后信号被淹没边缘 case影响大目标刚好在 bin 边界时尾部 bin 的区分度至关重要多目标密集场景影响大NMS 需要精确的置信度排序概率偏差导致排序错误七、根源总结原始分数 → 量化小值被归零/变形 → Softmax指数放大差异 ↓ 概率分布被压平 ↓ 加权求和偏移 → 定位不准核心矛盾Softmax 的指数运算对输入非常敏感但量化已经把输入改了。改动的输入经过指数放大输出的概率分布就变了。小值被归零后exp(0) 全部相等尾部分布直接熨平。八、自测什么是概率压平用一句话描述。为什么 bin_5 的量化误差比 bin_0 大尾部 11 个 bin 概率全部相同会带来什么影响为什么大目标检测受压平的影响较小参考答案量化改动了 Softmax 的输入导致输出的概率分布从有高有低变成更均匀。bin_5 的值 0.01 小于 quantization scale0.0236量化后直接归零bin_0 的值 3.0 远大于 scale量化后基本不变。尾部的精细位置信息丢失模型无法区分这 11 个 bin加权求和时细节被抹掉。大目标的信号强bin_0/bin_1 的概率占比高~72%尾部的微小变化对加权求和结果影响小。