推理网络精度不达标,5个方法轻松搞定
摘要:推理时精度错误或不达标,怎么办?模型推理时,模型推理功能调测OK,但推理精度错误,或推理精度与标杆数据存在少量差距,这时该怎么做呢?
本文分享自华为云社区《【CANN文档速递10期】推理网络精度调优》,作者: 昇腾CANN 。
一、推理时精度错误或不达标,怎么办?
模型推理时,模型推理功能调测OK,但推理精度错误,或推理精度与标杆数据存在少量差距,这时该怎么做呢?我们可以从以下两种导致精度问题的原因入手,建议先检查配置问题、再检查算子精度问题。
![](https://pic1.zhimg.com/80/v2-009ec060cf25db43858df1f244428960_720w.jpg)
二、推理前,哪些配置可能影响精度?
1、JPEGD解码后的输出图片可能存在补边的无效数据,可能影响推理精度。
建议:JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽stride*高stride有128*16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以VPC在处理图片前,应首先对JPEGD对齐后的输出图片进行原分辨率裁剪,目的是去除无效数据对图像精度的影响。
![](https://pic4.zhimg.com/80/v2-4e0f930f5e4944a99ccbb41f64c91133_720w.jpg)
2、VPC输出图片格式与AIPP输入图片格式不一致,可能影响推理精度。
建议:AIPP色域转换配置中的源图片格式要与VPC的输出图片格式保持一致,如果不一致,例如,VPC的输出格式是YUV420SP(NV12),而AIPP色域转换的配置是YUV420SP(NV21)-->RGB888,则UV分量的顺序不同会影响模型推理的精度。
三、模型中算子精度不达标,怎么定位呢?
模型中算子精度不达标导致整网推理精度不达标时,可以借助精度比对工具、一键Dump比对工具,根据下文中具体的问题定位流程获取各类数据后,再进行比对、分析,逐一解决问题。
![](https://pic4.zhimg.com/80/v2-b23b9e445be69766128ad1e7cfb0bdf3_720w.jpg)
在定位问题前,我们先需要获取相关辅助工具:
• 精度比对工具:用于比对昇腾算子与业界标准算子的运算结果,也可用于比对昇腾算子多次运算结果,但需用户自行准备昇腾算子或业界标准算子的运算结果数据(即Dump数据)。该工具的获取及用法请参见配套版本的《精度比对工具使用指南》。
• 一键Dump比对工具:仅用于比对昇腾算子与TensorFlow/ONNX标准算子的运算结果,无需用户准备昇腾算子和TensorFlow/ONNX标准算子的运算结果数据,只需指定昇腾模型和TensorFlow/ONNX 模型的路径即可。该工具的获取及用法请参见https://gitee.com/ascend/tools/tree/master/msquickcmp
通过工具比对数据时,我们还需要修改或检查以下配置:
1、配置模型高精度模式
• 原因分析:
当前默认采用fp16(float16)数据类型进行计算。配置模型高精度模式后推理,可提升精度,但可能会影响推理性能,如果在精度达标的同时,需要保持性能,则可以配置部分算子保持原始网络中的数据类型。
• 配置方法:
模型高精度模式:模型转换时增加--precision_mode=allow_fp32_to_fp16
部分算子保持原始网络中的数据类型:模型转换时增加--keep_dtype参数以及--precision_mode=force_fp16
2、关闭数据缓存优化
• 原因分析:
当前默认开启数据缓存优化,开启数据缓存优化可提高计算效率、提升性能,但由于部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭数据缓存优化。如果关闭数据缓存优化功能后,精度达标,则还是需要识别出问题算子,反馈给华为工程师进一步分析、解决算子问题,解决算子问题后,建议保持开启数据缓存优化。
• 配置方法:
模型转换时增加--buffer_optimize=off_optimize
3、关闭融合规则
• 原因分析:
当前默认开启融合规则,开启融合规则可提高计算效率、提升性能,但算子之间可能会融合,融合后的部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭融合规则。如果关闭融合规则功能后,精度达标,则还是需要识别出问题算子,反馈给华为工程师进一步分析、解决算子问题,解决算子问题后,建议保持开启融合规则功能。
• 配置方法:
模型转换时增加--fusion_switch_file参数,指定融合规则配置文件,一键式关闭融合规则。融合规则配置文件内容如下:
![](https://pic3.zhimg.com/80/v2-9bb0680076c1a6586033b5cfe7244832_720w.jpg)
4、检查数据处理或配置
推理精度不达标可能是由于数据集预处理或推理结果后处理方式与标杆不一致导致,也有可能是由于AIPP配置不正确导致,需一一检查、修改后,重新推理。
5、与标杆计算数据比对
上面的配置、检查都完成后,如果推理精度还是不达标,最后,我们可以使用一键Dump比对工具比对昇腾算子与TensorFlow/ONNX标准算子的运算结果的差异,然后联系华为工程师,进一步定位算子问题并解决。
四、更多介绍
了解更详细的内容,登录昇腾社区,在开发者文档中心:https://www.hiascend.com/document?tag=community-developer
相关文章
- ASP.new GridView获取隐藏列值的几种方法
- 提pr,push 的时候网络超时配置方法
- 有什么高效备考网络工程师的方法?
- 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V4 -- 远程方法调用 整合 Spring 自动注册
- 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V3 -- 远程方法调用 整合 Spring
- 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V1 -- 本地方法调用
- C#序列化与反序列化以及深拷贝浅拷贝方法
- pytorch学习: 构建网络模型的几种方法
- SQL Server 索引维护常用方法总结
- 图像增强:多尺度的图像细节提升(multi-scale detail boosting)实现方法
- 网络爬虫数据存储MySQL和Mongodb方法汇总
- Vuex--mutations属性--方法,---响应式添加 vue.set(对象,属性)删除vue.delete数据
- android 中使用回调方法(适用于自定义view传值到activity、adapter传值到activity)
- mysql limit的使用方法
- 《计算机网络:自顶向下方法(原书第6版)》一1.2 网络边缘
- CF MVC3此操作要求连接到 'master' 数据库。无法创建与 'master' 数据库之间的连接,这是因为已打开原始数据库连接,并且已从连接字符串中删除凭据。请提供未打开的连接 解决方法
- javascript 100个 实用方法
- windows下nginx的安装及使用方法入门
- HTML页面跳转的5种方法
- Shiro(八):shiro 通过实例工厂方法的方式封装filterChainDefinitionMap
- Unity 基础之 实现动态加载网络端、PC端和 Android 端指定路径下的图片的简单方法
- windows上zend server安装 报The server encountered an internal error or misconfiguration and was unable to complete your request -解决方法 摘自网络
- c程序代码优化的一些方法
- 学习笔记(17):Python网络编程&并发编程-Process对象的其他属性或方法
- C# Lookup和ToLookup方法的浅析
- 工具及方法 - Windows中出现网络访问问题的解决方法
- 机房消防报警系统及气体灭火防护的设计方法
- [Python] 字符串操作及方法总结