核心结论
校准数据集不必须使用训练集,但必须与推理数据分布一致。使用不同分布的数据集会直接导致量化精度下降。
原理说明
PTQ(Post-Training Quantization)量化的核心步骤:
- 校准阶段:用校准数据集跑一遍模型,统计每层激活值的最大值/最小值/分布
- 确定量化参数:根据统计结果计算每层的
scale和zero_point - 量化权重:将 FP32 权重转换为 INT8
关键点:校准数据集的作用是代表推理时的数据分布。如果校准数据与真实推理数据分布差异大:
- 激活值统计范围不准确
- 量化区间(quantization range)设置错误
- 导致大量有效信息被截断或压缩,精度下降
实践建议
校准数据集选择原则
| 场景 | 推荐方案 |
|---|---|
| 有训练集 | 从训练集中随机抽取 100-500 张代表性图片 |
| 无训练集 | 收集真实推理场景的典型数据(至少 200 张) |
| 多场景应用 | 按场景比例混合采样,覆盖所有 corner case |
校准数据集要求
# 推荐数量
校准图片数量:200-500 张(过多收益递减)
# 数据分布
- 覆盖所有光照条件(白天/夜晚/逆光)
- 覆盖所有目标尺度(近/中/远)
- 覆盖所有角度(正视图/侧视图/俯视)
- 包含典型失败案例(模糊/遮挡/小目标)
S100P 量化命令参考
# hb_mapper 量化示例
hb_mapper quantize \
--model your_model.onnx \
--calib-data /path/to/calib_dataset \
--calib-num 256 \
--output-dir ./quant_output
精度下降排查路径
如果已经出现精度下降,按以下顺序排查:
-
检查校准数据分布
# 对比校准集和推理集的统计特征 - 亮度直方图 - 目标尺寸分布 - 类别比例 -
增加校准数据量
- 从 200 张增加到 500 张
- 确保覆盖所有场景
-
检查量化配置
- 确认敏感层是否设置为 FP16(如有需要)
- 检查是否有算子回退到 CPU
-
对比测试
- 用训练集子集重新校准,对比精度
- 如果训练集校准效果好 → 确认是分布问题
社区资源
建议参考以下帖子获取更多 S100 量化经验:
- RDKS100 量化工具链量化 2300 个算子的一个模型是否可行 - 量化流程问题讨论
- 基于 RDK S100 的 ASAP 优化框架量化方案 - 精华帖,量化优化方案
建议行动
- 优先使用真实场景数据作为校准集(即使不是训练集)
- 确保校准集覆盖所有推理场景
- 如果精度仍不达标,可以:
- 混合训练集 + 真实数据
- 对敏感层使用混合精度(FP16+INT8)
如果问题持续,建议提供:
- 模型类型(检测/分割/分类)
- 校准集数量及来源
- 量化前后精度对比数据
方便社区进一步分析。