logo资料库

NNIE精度问题定位步骤.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
NNIE 精度问题定位步骤 第2步:确认data层输入一致。 请检查均值[mean_file]、缩放[data_scale]、预处理方式[norm_type], 是否和caffe一致。Mxnet 和Darknet(yolo) 网络训练时,默认是RGB, 所以编译时,cfg里的[RGB_order]也要配置为RGB。 case 1: 如果第一层,即data层的相似度不是0.999,请看第2步。 case 1: 如果相似度明显有提升,所有层都是0.99,则说明是量化误差导致。使用高精 度会使性能下降一倍,如果不能接受,请尝试改为[compile_mode] 2,即自定义高精 度,从首层开始,逐层layer name加后缀"_hp",直到精度和性能平衡(一般只要第一层 卷积加_hp,精度就正常了,性能损失也小)。如果不想使用高精度,还可以使用量化 库重训,请联系海思FAE。 case 2: 如果精度没有明显提升,则把明显下降的那层信息反馈给海思,看第6步。 第1步:确认数据是否正确。 找一张有精度问题的图片,编 译、指令仿真、caffe都用这张 图片。比较仿真和caffe 每层的 相似度。 第3步:确认是否量化误差导致。 修改nnie_mapper的配置项,把[compile_mode] 0 改为 1,即把8bit低 精度改为16bit高精度,再重新编译仿真比较相似度。 case 2: 如果第一层是0.99+,后面逐层下降,最后一层小于0.95,请看第3步。 case 3: 如果最后一层的相似度0.99,中间某些层0.90以下,请看第4步。 case 4: 如果所有层的相似度都是0.99+且绝对误差也很小,则很可能是后处理的问题,请看第5步。 case 3: 如果层匹配,而相似度比较低,请把信息反馈给海思,看第6步。 case 1: 如果正常,则说明是板端后处理问题,请比较板端和caffe的后处理代码。 case 2: 如果不正常,而数据的相似度0.99且绝对误差很小,则说明caffe的后处理代 码对数据很敏感,请检查caffe的后处理代码。(此情况很少) 第5步:确认后处理是否正确。 假设caffe 的结果经过caffe的后处理画框或分类,则把仿真的结果也 使用caffe的后处理,看是否正常画框或分类。 case 1: 是否inplace层。某些层nnie不支持inplace,会拆开,以非inplace的方式处 理。如 concat + relu, fc + scale 等。请修改prototxt,改为非inplace方式,再跑仿真 和caffe比较相似度。 第4步:确认层是否匹配。 nnie_mapper会优化网络结构,以适应硬件执行,所以相似度比较时 有可能层和caffe的不匹配。 case 2: 是否nnie_mapper修改了网络。请查看cnn_net_tree.dot (nnie_mapper 编译时 生成),和原来的prototxt比较,看是否修改了网络结构。如upsample, ROIPooling, PSROIPooling等层会加permute 做转换,所以要和permute 的结果比,或直接看后 面层的相似度。 第6步:反馈问题给海思分析。 请把以下信息发给海思: 1)有问题的那层对应的prototxt、weights、caffe和仿真的输入/输出数据。 2)编译用的cfg、图片、均值文件。 3)编译时打印的nnie_mapper版本号。 Confidential For H U A W EI Internal O nly nnie 精度问题定位步骤: 第 1 步:确认数据是否正确。 找一张有精度问题的图片,量化、指令仿真、caffe 都用这张图片。比较仿真和 caffe 每 层的相似度。 case 1: 如果第一层,即 data 层的相似度不是 0.999,请看第 2 步。 case 2: 如果第一层是 0.99+,后面逐层下降,最后一层小于 0.95,请看第 3 步。 case 3: 如果最后一层的相似度 0.99,中间某些层 0.90 以下,请看第 4 步。 case 4: 如果所有层的相似度都是 0.99+且绝对误差也很小,则很可能是后处理的问题, 请看第 5 步。 第 2 步:确认 data 层输入一致。 请检查均值[mean_file]、缩放[data_scale]、预处理方式[norm_type],是否和 caffe 一致。 Mxnet 和 Darknet(yolo) 网络训练时,默认是 RGB,所以量化时,cfg 里的[RGB_order]也 要配置为 RGB。 第 3 步:确认是否量化误差导致。 修改 nnie_mapper 的配置项,把[compile_mode] 0 改为 1,即把 8bit 低精度改为 16bit 高 精度,再重新量化仿真比较相似度。 case 1: 如果相似度明显有提升,所有层都是 0.99,则说明是量化误差导致。使用高精度 会使性能下降一倍,如果不能接受,请尝试改为[compile_mode] 2, 即自定义高精度,从首层开始,逐层 layer name 加后缀"_hp",直到精度和性能 平衡(一般只要第一层卷积加_hp,精度就正常了,性能损失也小)。 case 2: 如果精度没有明显提升,则把明显下降的那层信息反馈给海思,看第 6 步。 如果不想使用高精度,还可以使用 fine-tuning 量化库重训,请联系海思 FAE。
第 4 步:确认层是否匹配。 nnie_mapper 会优化网络结构,以适应硬件执行,所以相似度比较时有可能层和 caffe 的 不匹配。 case 1: 是否 inplace 层。某些层 nnie 不支持 inplace,会拆开,以非 inplace 的方式处理。 如 concat + relu, fc + scale 等。 请修改 prototxt,改为非 inplace 方式,再跑仿真和 caffe 比较相似度。 case 2: 是否 nnie_mapper 修改了网络。请查看 cnn_net_tree.dot (nnie_mapper 量化时生 成),和原来的 prototxt 比较,看是否修改了网络结构。 如 upsample, ROIPooling, PSROIPooling 等层会加 permute 做转换,所以要和 permute 的结果比,或直接看后面层的相似度。 case 3: 如果层匹配,而相似度比较低,请把信息反馈给海思,看第 6 步。 第 5 步:确认后处理是否正确。 假设 caffe 的结果经过 caffe 的后处理画框或分类,则把仿真的结果也使用 caffe 的后处 理,看是否正常画框或分类。 case 1: 如果正常,则说明是板端后处理问题,请比较板端和 caffe 的后处理代码。 case 2: 如果不正常,而数据的相似度 0.99 且绝对误差很小,则说明 caffe 的后处理代码 对数据很敏感,请检查 caffe 的后处理代码。(此情况很少) 第 6 步:反馈问题给海思分析。 请把以下信息发给海思: 1)有问题的那层对应的 prototxt、weights、caffe 和仿真的输入/输出数据。 2)量化时用的 cfg、图片、均值文件。 3)量化时打印的 nnie_mapper 版本号。 Confidential For H U A W EI Internal O nly
分享到:
收藏