4. 校准数据基础
在模型量化流程中,校准数据(Calibration Data)是连接浮点模型与定点模型的关键桥梁。它不参与权重更新,也不改变网络结构,却直接决定了激活值量化参数(scale / zero-point)的取值质量。换句话说,校准数据是量化器“观察”真实输入分布的窗口,窗口选得准,量化误差就小;窗口选偏了,再精细的量化算法也难以挽回精度损失。
一、校准数据到底在做什么
以地平线(Horizon)工具链中常见的 PTQ(Post-Training Quantization)流程为例,校准阶段会逐层执行前向推理,并收集激活值的统计量。常见统计方式包括 Min-Max、KL 散度、百分位截断(Percentile)等。校准数据的作用可以归纳为三点:
- 确定动态范围:为每层激活找到合适的 min/max 或截断阈值,避免离群值把有效数值区间“撑爆”。
- 降低量化误差:让量化后的整数网格尽可能覆盖真实数据密集区,减少舍入误差与饱和误差。
- 稳定部署表现:校准分布与真实推理分布越接近,板端精度越可预期,避免“仿真精度高、上板掉点”的落差。
需要强调的是,校准数据不是训练数据,也不是验证数据。它通常从训练集或真实业务数据中抽取,规模远小于训练集,但必须覆盖模型在部署时可能遇到的输入模式。
二、数据分布要求:贴近真实推理分布
校准数据的核心要求是“分布匹配”。如果校准集与部署时的输入分布存在明显偏移,量化参数就会偏向错误区间。例如,一个车载感知模型在白天数据上校准,却部署到夜间场景,激活值整体偏低,量化 scale 偏大,暗部细节就会被量化噪声淹没。
因此,校准数据应满足以下分布要求:
- 同源同域:校准数据应来自与部署场景相同的传感器、相同的前处理流程、相同的分辨率与色彩空间。
- 覆盖长尾:不能只挑“干净好样本”,要包含低照度、逆光、雨雾、遮挡等边缘场景,否则离群值统计失真。
- 避免极端偏斜:若某类样本占比过高,激活分布会被该类主导,其他类别精度下降。
- 前处理一致:归一化、减均值、缩放等操作必须与部署时完全一致,否则统计量无意义。
三、数据量与多样性原则
校准数据量并非越多越好。数量过多会显著拉长校准时间,而收益很快趋于饱和;数量过少则统计不稳定,量化参数抖动大。经验上,分类模型常用 100~500 张,检测模型常用 200~1000 张,具体取决于模型深度与激活分布复杂度。
多样性比绝对数量更重要。一个 200 张但覆盖多场景、多光照、多类别的校准集,往往优于 1000 张同质化样本。多样性应体现在:场景多样性、目标尺度多样性、光照与天气多样性、以及数据增强后的分布多样性。
| 维度 | 推荐做法 | 常见问题 |
|---|---|---|
| 数据量 | 分类 100~500,检测 200~1000 | 过少导致 scale 抖动,过多收益饱和 |
| 场景覆盖 | 白天/夜间、城市/高速、近景/远景 | 只采白天,夜间掉点严重 |
| 前处理 | 与部署完全一致 | 校准用 RGB,部署用 BGR |
| 离群值 | 保留少量真实极端样本 | 人为剔除所有难例,分布失真 |
| 标注 | 无需标签,只需输入 | 误用带标签数据导致流程复杂 |
四、典型场景与配置示例
以地平线工具链的校准配置为例,通常需要指定校准数据列表、校准方法、迭代次数等参数。下面是一个简化的配置片段:
calibration:
data_path: ./calib_list.txt # 每行一个样本路径
batch_size: 1
num_samples: 300 # 建议 200~500
method: kl_divergence # 可选 minmax / percentile / kl
percentile: 99.99 # percentile 方法使用
input_layout: NCHW
mean: [123.675, 116.28, 103.53]
std: [58.395, 57.12, 57.375]
运行校准后,工具链会输出每层的量化参数与误差统计。建议重点关注激活饱和比例(saturation ratio)与 KL 散度值,若某层饱和比例长期高于 1%,说明截断阈值偏小,可尝试 percentile 或放宽 min/max。
五、误区与复盘
常见误区二:校准数据与验证数据混用。验证集应保持独立,否则精度评估会过于乐观。
常见误区三:忽略前处理一致性。校准阶段与部署阶段的归一化参数不一致,是“仿真好、上板差”的高频原因。
复盘时,建议建立一份校准数据检查清单:数据来源是否与部署一致、场景是否覆盖长尾、前处理是否对齐、样本量是否在推荐区间、是否保留了真实难例。只有把这几点做扎实,后续的精度评估与部署验证才有可靠基础。
总结来看,校准数据是量化精度的“第一道闸门”。理解它的作用、分布要求、数据量与多样性原则,并在实践中建立检查清单,才能让后续的精度评估与部署验证建立在可靠的基础之上。