嵌入式AI量化为何掉点?校准怎么取样?
精度在桌面验证良好,移到板端却掉点,常说明量化边界没有被真实数据喂饱。嵌入式AI的 INT8 部署如果只追求模型变小,误差会先从分布尾部进入决策。
量化掉点的第一条路径是尺度被少数离群值牵走。浮点模型里的激活分布可能长尾很重,若用单一 scale 覆盖全部范围,大部分常见值会被压到很粗的量化台阶里;若为了保住分辨率而截掉尾部,又可能让高亮、强噪声或极端姿态样本直接饱和。卷积权重还存在通道间幅值差异,逐张量量化会让小幅值通道被大幅值通道拖累,最后表现为某些类别突然混淆,而不是整体均匀下降。
这类误差不能只靠提高位宽解决,因为许多边缘芯片最快路径只支持固定 INT8 或混合精度子集。更现实的取舍,是先区分权重误差和激活误差:权重侧优先尝试逐通道 scale,激活侧则要看校准统计是否被异常帧污染。对少数敏感层保留更高精度有时有效,但它会插入重定标和类型转换,若转换落到 CPU 上,精度收益可能换来时延抖动。
校准取样的难点,是它必须覆盖部署现场的输入分布,而不是覆盖训练集里看起来平均的样本。嵌入式AI校准集若只来自实验室清晰图像,到了逆光、低照、振动模糊或传感器老化场景,激活范围就会被重新拉开。音频模型同样如此,静音底噪、风噪和近场爆音都会改变中间层幅值。校准样本数量并非越多越好,关键是让会触发饱和和低置信度的边界条件进入统计窗口。
取样还要锁定前处理链路。训练端使用的归一化、裁剪、色彩空间和板端 ISP 如果存在细小差异,量化统计看到的就不是模型实际会接收的数据。比较稳妥的流程,是直接从目标硬件采集校准输入,经过同一套 resize、归一化和颜色转换后再跑统计,并把最大最小值、百分位截断和饱和比例记录下来。若某层在少数场景下长期饱和,就应回到模型结构或量化策略,而不是继续扩大校准集碰运气。
校准策略还要避免被平均指标误导。KL 散度、均方误差和百分位截断各自偏向不同的误差形态,前者可能保住主体分布,后者可能更照顾极端样本。若某个安全相关类别只在暗光或强反射下出现,统一选择全局最优截断点会牺牲它的可分性。工程上应把敏感类别单独拉出复测,再决定是否给局部层保留更宽动态范围。
验收时不能只看总准确率。应把浮点模型、量化仿真和板端输出逐层比对,找出误差从哪一层开始放大;再用混淆矩阵检查掉点是否集中在某些光照、距离或类别边界。板端还要复测真实帧率下的输入,因为缓存、ISP 和压缩链路会改变像素统计,批量离线图片未必能复现这种真实路径。只有误差来源能被定位到尺度、截断或前处理差异,量化结果才算可控。
所以,量化不是最后一步压缩,而是对现场分布的再建模。把尺度、离群值和取样边界管住,嵌入式AI才不会用低位宽换来错误判断。





