精度对比工具 ------------------------------------------------------------ 精度对比工具用于比较Lyngor和第三方框架模型的结果误差。 精度对比工具支持2种模式: - 单层对比:基于多层对比工具逐层推理结果,逐数进行误差比对。 - 多层对比:基于模型中1个或多个层次,进行误差比对。 .. note:: - 如需比对结果误差,推荐先使用多层对比工具定位到出错的层; - 如需定位问题原因,推荐使用单层对比进行逐数定位。 单层对比 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **命令** :: compare single **参数说明** +------------------+--------------------------------------------------------+ | 参数 | 含义 | +==================+========================================================+ | -l | 基于多层对比工具输出用于比较精度的结果文件 | | | (numpy的导出格式)。 | | 或 | | | | 【数据类型】STR | | \-\-left | | | | 【是否必选】是 | +------------------+--------------------------------------------------------+ | -r | 基于多层对比工具输出用于比较精度的结果文件 | | | (numpy的导出格式)。 | | 或 | | | | 【数据类型】STR | | \-\-right | | | | 【是否必选】是 | +------------------+--------------------------------------------------------+ | -o | 用于指定输出文件(csv)的保存路径。 | | | | | 或 | 【数据类型】STR | | | | | \-\-output_file | 【是否必选】否 | | | | | | 【默认取值】当前目录 *./compare_single_result.csv* | +------------------+--------------------------------------------------------+ **输入示例** :: compare single -l ./compare_result/apu_resnet_v1_50_logits_BiasAdd:0.npy -r ./compare_result/resnet_v1_50_logits_BiasAdd:0.npy **输出示例** *compare_single_result.csv* +----------+-----------+------------+------------+------------+------------+ | Index | Position | Left | Right | Absolute | Relative | | | | Result | Result | | | +==========+===========+============+============+============+============+ | 0 | 0000 | 0.1 | 0.2 | 0 | 0 | +----------+-----------+------------+------------+------------+------------+ | 1 | 0001 | 0.1 | 0.2 | 0 | 0 | +----------+-----------+------------+------------+------------+------------+ | 2 | 0002 | 0.1 | 0.2 | 0 | 0 | +----------+-----------+------------+------------+------------+------------+ | 3 | 0010 | 0.1 | 0.2 | 0 | 0 | +----------+-----------+------------+------------+------------+------------+ **输出说明** +----------------+-----------------------------------------------------+ | 选项 | 说明 | +================+=====================================================+ | Index | 序号。 | +----------------+-----------------------------------------------------+ | Position | 数据位置。 | +----------------+-----------------------------------------------------+ | Left Result | ``-l`` 中对应位置数据。 | +----------------+-----------------------------------------------------+ | Right Result | ``-r`` 中对应位置数据。 | +----------------+-----------------------------------------------------+ | Absolute | 绝对值误差。 | +----------------+-----------------------------------------------------+ | Relative | 相对误差。 | +----------------+-----------------------------------------------------+ 多层对比 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **命令** :: compare multi **参数说明** +------------------+-----------------------------------------------------+ | 参数 | 含义 | +==================+=====================================================+ | -f | 用于指定模型的框架类型。 | | | | | 或 | 【数据类型】ENUM | | | | | \-\-framework | 【取值范围】 | | | | | | - Tensorflow | | | - Keras_tf | | | - Onnx | | | - ONNX | | | - Caffe | | | - Mxnet | | | - PaddlePaddle:直接编译。 | | | - PaddleONNX:Paddle模型转换为ONNX模型后再进行编译 | | | (仅支持Python 3.6) | | | | | | 【是否必选】否 | | | | | | 【默认取值】Tensorflow | +------------------+-----------------------------------------------------+ | -n | 用于设置输出node的名称,可指定任意层。 | | | | | 或 | 【数值类型】STR | | | | | \-\-output_nodes | 【取值范围】一个或多个模型中实际存在的层的名字 | | | | | | 【是否必选】否 | | | | | | 【默认取值】None | | | | | | 【配置说明】 | | | | | | - 当 ``-f`` 参数设置为 ``Tensorflow`` / ``Onnx`` / | | | ``ONNX`` / ``Caffe`` / ``MNXet`` 时,可选设置本 | | | 参数。 | | | | | | - 当 ``-f`` 参数设置为 ``Caffe`` 时,需指定 | | | ``node`` 的 ``top`` 参数,而非 ``name`` 。 | | | | | | - 当 ``node`` 为 ``all`` 时,代表所有可输出的层, | | | 目前只支持ONNX/Caffe。 | +------------------+-----------------------------------------------------+ | -o | 用于指定输出文件路径。 | | | | | 或 | 【数据类型】STR | | | | | \-\-output | 【取值范围】文件存储的路径 | | | | | | 【是否必选】否 | | | | | | 【默认取值】 *compare_result* 文件夹 | +------------------+-----------------------------------------------------+ | -i | 模型的输入配置,默认为None。 | | | | | 或 | 【数据类型】STR | | | | | \-\-input | 【取值范围】JSON格式的参数或JSON文件路径 | | | | | | 【JSON参数格式】 | | | | | | :: | | | | | | {'input':(1,224,224,3), 'input1':[(1,224,224,3), | | | 'float16']} | | | | | | 【JSON文件格式】 | | | | | | :: | | | | | | { | | | 'input1':{ | | | "shape":[1,2,3], | | | "data":[1,2,3,4,5,6], | | | "dtype":'int32' | | | }, | | | 'input2':{ | | | "shape":[1,2,3], | | | "data":[1,2,3,4,5,6], | | | "dtype":'int32' | | | } | | | } | | | | | | 【是否必选】是 | | | | | | .. note:: inputs可以为JSON格式的输入描述信息也 | | | 可以是具体的JSON文件。 | | | | +------------------+-----------------------------------------------------+ | -m | 用于指定待编译的模型。 | | | | | 或 | 【数据类型】STR | | | | | \-\-model | 【取值范围】实际存在的相对路径或绝对路径 | | | | | | 【是否必选】否 | | | | | | 【默认值】None | +------------------+-----------------------------------------------------+ | -w | 用于指定权重路径。 | | | | | 或 | 【数据类型】STR | | | | | \-\-weight | 【取值范围】支持相对路径和绝对路径 | | | | | | 【是否必选】否 | | | | | | 【配置说明】 | | | | | | - 当-f参数设置为MXNet时,须设置本参数。 | | | - 当-f参数设置为Caffe时,可选设置本参数。 | | | | | | 【默认取值】None | +------------------+-----------------------------------------------------+ | -a | 用于设置是否分析结果。 | | | | | 或 | 【数据类型】BOOL | | | | | \-\-is_analysis | 【是否必选】否 | | | | | | 【默认取值】False | +------------------+-----------------------------------------------------+ **输入示例** :: compare multi -m lyngor_sample/models/tensorflow/resnet_v1_50.pb -i lyngor_sample/data/resnet/resnet50_data.json -n resnet_v1_50/predictionsresnet_v1_50/logits/BiasAdd -a -o ./compare_result compare multi -m lyngor_sample/models/tensorflow/resnet_v1_50.pb -i "{'input':[(1,224,224,3),'float32']}" -n resnet_v1_50/predictions resnet_v1_50/logits/BiasAdd -a -o ./compare_result **结果文件** 结果文件主要包含3类文件:框架结果数据、Lyngor结果数据和结果分析表格(可选)。 - 框架Golden输出: ``output\_${name}.npy`` - APU模拟库或芯片输出: ``apu_output\_${name}.npy`` - 其中name为节点名称, ``name`` 中有 ``/`` 的话会替换成 ``_`` 。 - 结果一般以欧式距离小于等于0.02为主要指标,其它为辅助参考。 **输出示例** *all_result.csv* +----------+-------------+------------+----------+------------+------------+ | Name | euclidean | cosine | max | standard | T distance | | | distance | similarity | absolute | deviation | | +==========+=============+============+==========+============+============+ | output1 | 0.2 | 0.2 | 0.2 | (0.1,0.2) | 0.2 | +----------+-------------+------------+----------+------------+------------+ | output2 | 0.2 | 0.2 | 0.2 | (0.1,0.2) | 0.2 | +----------+-------------+------------+----------+------------+------------+ **输出说明** +--------------------+--------------------------------------------------------------------+ | 选项 | 说明 | +====================+====================================================================+ | Name | 模型输出名字,每一行代表一个模型输出。 | +--------------------+--------------------------------------------------------------------+ | euclidean_distance | 欧式距离计算结果。 | | | | | | 结果分布在 :math:`\mathbf{\lbrack 0, +}\mathbf{\infty}\mathbf{)}` | | | 范围内,越接近0误差越小。 | +--------------------+--------------------------------------------------------------------+ | cosine_similarity | 余弦相似度计算结果。 | | | | | | 结果分布在 :math:`\mathbf{\lbrack}\mathbf{-}\mathbf{1,1)}` | | | 范围内,越接近1误差越小。 | +--------------------+--------------------------------------------------------------------+ | max_absolute | 最大绝对误差计算结果。 | | | | | | 结果分布在 :math:`\mathbf{\lbrack 0, +}\mathbf{\infty}\mathbf{)}` | | | 范围内,越接近0误差越小。 | +--------------------+--------------------------------------------------------------------+ | standard_deviation | 标准差计算结果。 | | | | | | 结果分布在 :math:`\mathbf{\lbrack 0, +}\mathbf{\infty}\mathbf{)}` | | | 范围内,越接近0误差越小。 | +--------------------+--------------------------------------------------------------------+ | T_distance | Lyngor内部定义计算结果。 | | | | | | 结果分布在 :math:`\mathbf{\lbrack 0, +}\mathbf{\infty}\mathbf{)}` | | | 范围内,越接近0误差越小。 | +--------------------+--------------------------------------------------------------------+