下载
中文
注册

案例介绍

案例描述

Fastrcnn网络,模型转换时,保持默认高性能模式、force_fp16精度模式,推理出来的精度错误,MAP结果为0。

然后,在模型转换时,设置模型的高精度模式(precision_mode=allow_fp32_to_fp16),推理出来的精度正确。

案例分析

  1. 模型转换时保持默认高性能模式、force_fp16精度模式,进行推理,获取该模式下的Dump数据文件。
  2. 再次模型转换,设置模型的高精度模式(precision_mode=allow_fp32_to_fp16),再次进行推理,获取该模式下的Dump数据文件。
  3. 使用精度比对工具,比对12中的Dump数据。

    比对结果示例如下:

  4. 从图中可以看CosineSimilarity这一列,余弦相似度算法比对出来的结果,范围是[-1,1],比对的结果如果越接近1,表示两者的值越相近,越接近-1意味着两者的值越相反。对于大部分算子,值低于0.95就说明存在精度问题。

    上图中AddN算子第0个输出的余弦相似度只有0.72,说明这个算子可能存在精度问题,因此需要进一步分析该算子在高精度模式下的第0个输出的Dump数据文件(2中获取的Dump数据文件)。

  5. 由于Dump数据文件无法通过文本工具直接查阅,因此在分析该Dump数据文件前,请参考精度比对工具使用指南的“附录>如何查看dump数据文件”章节,先将dump数据文件转换为numpy格式,再将numpy格式文件为txt格式文件。

    在将numpy格式文件为txt格式文件的过程中,可以获取AddN算子第0个输出的最大值、最小值,命令示例如下(****.npy表示numpy格式文件的路径):

    $ python3
    Python 3 (default, Mar  5 2020, 16:07:54)[GCC 5.4.0 20160609] on linuxType "help", "copyright", "credits" or "license" for more information.
    >>> import numpy as np
    >>> a = np.load("****.npy")
    >>> a.max()
    >>> 109508.0
    >>> a.min()
    >>> 70683.0
  6. 5获取到的AddN算子第0个输出的最大值、最小值,可以看出高精度模式下AddN算子输出tensor的最大值为109508.0,而高性能模式(fp16)下,输出tensor的最大值为65504.0(FP16能表达的最大值域范围为(-65505~65504),由此可以得出高精度模式下AddN算子的输出值大于fp16类型域表达范围,因此需要配置该算子走高精度模式,参见配置部分算子保持原始网络中的数据类型