精度比对完成后若存在精度问题,则需要进行问题分析并找出解决方案,图1以Caffe推理应用场景为例提供精度问题分析基本思路参考。
图1 精度问题分析基本思路
以下介绍图1中各步骤的具体操作:
- 确认第一层data层的输入数据是否正确:找一张有精度问题的图片,编译、指令仿真、Caffe都用这张图片。比较仿真和Caffe每层的相似度。而后按照上图中顺序进行判断。
- 确认data层的相似度是否为≥0.999:
- 是:执行下一个判断。
- 否:确认data层输入一致。检查均值[mean_file]、缩放[data_scale]、预处理方式[norm_type],是否和Caffe一致。(Mxnet和Darknet(yolo))网络训练时,默认是RGB,所以转换模型时需要配置[RGB——order]为RGB。
- 确认是否存在data层相似度0.99+,逐层下降,最后一层小于0.95的情况:
- 是:确认是否量化误差导致。
修改ATC的配置项,配置[dump_data]为1,输出校准数据到mapper_quant目录。
配置[forward_quantization_option]为1,即只做数据量化,权重不量化。比较mapper_quant和caffe的相似度,如果相似度达标,说明是权重量化误差导致。
配置[forward_quantization_option]为2,即只做权重量化,数据不量化。比较mapper_quant和caffe的相似度,如果相似度达标,说明是数据量化误差导致。
- 是:使用AMCT工具进行Calibration校准或者重训。
- 否:向技术支持人员反馈问题。
- 否:执行下一个判断。
- 确认是否存在最后一层相似度为0.99,中间某些层相似度<0.90的情况:
- 如果所有层的相似度均为0.99+且绝对误差也很小,则可能是后处理的问题,确认后处理是否正确。
假设Caffe的结果经过Caffe的后处理画框或分类,则把仿真结果也使用Caffe的后处理,观察是否正常画框或分类。
如果正常,则说明是板端后处理问题,请比较板端和Caffe的后处理代码。
如果不正常,而数据的相似度为0.99且绝对误差很小,则说明Caffe的后处理代码对数据很敏感,请检查Caffe的后处理代码。
- 向技术支持人员反馈问题。
请将以下信息反馈给技术支持人员:
- 如果是Caffe则返回prototxt、caffemodel,如果是PyTorch则返回ONNX模型和py定义,pth文件。如果不方便提供模型,请提供问题层对应的prototxt、py、pth、weights和输入/输出数据。
- 编译用的参数、图片、均值文件。
- 编译时打印的ATC版本号,如:Mapper Version 1.0.0.0_B010(PICO_1.0) 2110161033840ed952(CPU)(INST_2.0.9)