4. 校准数据基础

在模型量化流程中,校准数据(Calibration Data)是连接浮点模型与定点模型的关键桥梁。它不参与权重更新,也不改变网络结构,却直接决定了激活值量化参数(scale / zero-point)的取值质量。换句话说,校准数据是量化器“观察”真实输入分布的窗口,窗口选得准,量化误差就小;窗口选偏了,再精细的量化算法也难以挽回精度损失。

校准数据的本质作用:用一小批具有代表性的真实输入,统计每一层激活张量的动态范围,从而为 INT8/INT16 等低比特表示确定合适的缩放因子与零点偏移。

一、校准数据到底在做什么

以地平线(Horizon)工具链中常见的 PTQ(Post-Training Quantization)流程为例,校准阶段会逐层执行前向推理,并收集激活值的统计量。常见统计方式包括 Min-Max、KL 散度、百分位截断(Percentile)等。校准数据的作用可以归纳为三点:

  • 确定动态范围:为每层激活找到合适的 min/max 或截断阈值,避免离群值把有效数值区间“撑爆”。
  • 降低量化误差:让量化后的整数网格尽可能覆盖真实数据密集区,减少舍入误差与饱和误差。
  • 稳定部署表现:校准分布与真实推理分布越接近,板端精度越可预期,避免“仿真精度高、上板掉点”的落差。

需要强调的是,校准数据不是训练数据,也不是验证数据。它通常从训练集或真实业务数据中抽取,规模远小于训练集,但必须覆盖模型在部署时可能遇到的输入模式。

二、数据分布要求:贴近真实推理分布

校准数据的核心要求是“分布匹配”。如果校准集与部署时的输入分布存在明显偏移,量化参数就会偏向错误区间。例如,一个车载感知模型在白天数据上校准,却部署到夜间场景,激活值整体偏低,量化 scale 偏大,暗部细节就会被量化噪声淹没。

因此,校准数据应满足以下分布要求:

  1. 同源同域:校准数据应来自与部署场景相同的传感器、相同的前处理流程、相同的分辨率与色彩空间。
  2. 覆盖长尾:不能只挑“干净好样本”,要包含低照度、逆光、雨雾、遮挡等边缘场景,否则离群值统计失真。
  3. 避免极端偏斜:若某类样本占比过高,激活分布会被该类主导,其他类别精度下降。
  4. 前处理一致:归一化、减均值、缩放等操作必须与部署时完全一致,否则统计量无意义。
实践建议:先用 50~100 张图快速跑一遍校准,观察各层激活的直方图与 KL 散度曲线;若发现某些层分布异常尖锐或异常平坦,再回头检查数据是否偏斜。

三、数据量与多样性原则

校准数据量并非越多越好。数量过多会显著拉长校准时间,而收益很快趋于饱和;数量过少则统计不稳定,量化参数抖动大。经验上,分类模型常用 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。

五、误区与复盘

常见误区一:用训练集全量做校准。全量数据耗时长,且训练集分布可能包含大量增强样本,反而偏离真实部署分布。
常见误区二:校准数据与验证数据混用。验证集应保持独立,否则精度评估会过于乐观。
常见误区三:忽略前处理一致性。校准阶段与部署阶段的归一化参数不一致,是“仿真好、上板差”的高频原因。

复盘时,建议建立一份校准数据检查清单:数据来源是否与部署一致、场景是否覆盖长尾、前处理是否对齐、样本量是否在推荐区间、是否保留了真实难例。只有把这几点做扎实,后续的精度评估与部署验证才有可靠基础。

校准数据在量化流程中的作用与要求 校准数据来源 真实业务数据 训练集抽样 多场景覆盖 前处理对齐 保留真实难例 校准过程 逐层前向推理 收集激活张量统计量 统计方法选择 MinMax / KL / Percentile 计算 scale / zero-point 每层独立量化参数 误差评估 饱和比例 / KL 散度 输出与验证 量化模型 INT8 / INT16 仿真精度评估 与浮点模型对比 板端部署验证 真实推理一致性 精度回退排查 分布偏移 / 前处理 核心原则:分布匹配 > 数量堆砌 | 多样性覆盖长尾 | 前处理严格对齐 | 保留真实难例

总结来看,校准数据是量化精度的“第一道闸门”。理解它的作用、分布要求、数据量与多样性原则,并在实践中建立检查清单,才能让后续的精度评估与部署验证建立在可靠的基础之上。