无需量化的模块设置了非 None 的 qconfig,例如 前后处理,loss function 等。
正确做法:只对需要量化的模块设置 qconfig。
没有正确设置 march,这样可能导致模型编译失败或部署精度不一致。
正确做法:根据要部署的处理器选择正确的 BPU 架构,如 J6 需要使用 Nash:
模型输出节点没有设置成高精度输出,导致量化精度不符合预期。
错误示例如下:
假设模型定义如下:
正确做法:为了提高模型精度,模型输出节点设置成高精度,示例如下:
Calibration 过程使用多卡。
由于底层限制,Calibration 目前不支持多卡,请使用单卡进行 Calibration 操作。
模型输入图像数据采用数据格式为 RGB 等非 centered YUV444 格式,这样可能导致模型部署精度不一致。
正确做法:由于 Horizon 硬件支持的图像格式为 centered YUV444,因此建议您从模型训练开始就直接使用 YUV444 格式作为网络输入进行训练。
量化感知训练中使用 qat 模型进行模型精测评测和监控,导致不能及时发现部署时精度异常的问题。
正确做法:导致 QAT 与 Quantized 误差的原因是 QAT 阶段不能完全模拟 Quantized 中纯定点计算逻辑,建议使用 quantized 模型进行模型精度评测和监控。
多次调用同一个通过 FloatFunctional()定义的成员。
错误示例如下:
正确做法:禁止在 forward 中多次调用同一个通过 FloatFunctional() 定义的变量。
Quantized 模型中部分算子没有经过前期的 calibration 或 QAT,如某后处理算子想要在 BPU 上加速,但是没有经过量化阶段,这时候会导致量化 Inference 失败或部署时的精度异常。
正确做法:Quantized 阶段并非完全不能直接添加算子,如颜色空间转换算子等,具体添加指南详见文档。但是并非所有算子都可以直接添加,比如 cat,这种算子必须在 calibration 或 QAT 阶段统计获得的真实量化参数才能不影响最终精度,有类似需求需要调整网络结构,可以咨询框架研发。
浮点模型过拟合。
模型过拟合常见判定方法:
正确做法:自行解决浮点模型过拟合问题。