This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] J784S4XEVM:TDA4VH-Q1:[TIDL] SDK 10_01:数据转换层未派生适当的张量标度

Guru**** 2826855 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1605358/j784s4xevm-tda4vh-q1-tidl-sdk-10_01-data-convert-layer-not-deriving-proper-tensor-scales

器件型号: J784S4XEVM

TI_DCL_TICKET.zip 

 

您好、

为具有多个输入和不同数据类型的子网启用数据转换层时、对于少数张量、数据转换层所衍生的量化张量比例不正确。

附加的 (TI_DCL_Ticket.zip)、

CDCNet_model.onnx
qcalibdata.bin
tidl_import_quant_model.txt
tidl_net_onnx_model_simple_8_突出 显示的.bin.svg
tidl_net_onnx_model_simple_8_ongraded_no_DCL.bin.svg(未启用数据转换层)

例如   

输入张量、  

LAT_VEL_0(数据类型:有符号短整型)、  

如果没有数据转换层、

全球最小值:–1.389146

Global Max: 0.2484222.

所以 quant 应该是 23588.21875

使用数据转换层、

全球最小值:–0.035631    

全球最大值:0.007217

被数据转换层衍生的 quant 为 754823.0000

附加了 2 个 SVG 以供参考。

  1. tidl_net_onnx_model_simple_8_ongraded_DCL.bin.svg(带数据转换层)  

   2. tidl_net_onnx_model_simple_8_ongraded_no_DCL.bin.svg(无数据转换层)   

我们需要了解启用数据转换层时、为什么少数张量的动态范围不同。

谢谢。

 

Rgds、

    Milind   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、请您仔细研究一下这个问题、因为这是我们开发工作的阻碍因素。  

    谢谢。

    Rgds、

          Milind

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我们正在研究这个问题。 我将在这里随着我们的进展而更新。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Milind ,我在理解问题上有一些问题。 您能为我回答几个问题吗
    1. qcalibdata.bin :包含 50 个输入数据的样本,以数据类型写入: 2 3 3 3 3. 3 2 而 ONNx 模型具有用于大多数输入的浮点数据。 您是否已经量化为 16 位或其他值? 你是怎么做的?
    2.你能解释一下'quant 应该是 23588.21875 ',为什么这应该是根据你?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Vaibhav、感谢您的答复。

    用例 1:

    在 SVG tidl_net_onnx_model_simple_8_ngraded_no_DCL.bin.svg 中、数据转换层未启用。 大多数输入具有浮点数据类型、并通过专门使用 C 代码将量化完成到 16 位。

    对于 TIDL 生成器中的输入、我们可对数据转换层进行处理的方式如下。

    inElementType = 2 3 3 3 3 3 3 2.
    addDataConvertToNet = 1
    NetInElementType = 2 3 3 3 3 3 2.

    我们希望数据转换层能够进行量化。 我们的 C 代码将绕过量化。

    但对于少数张量,外尺度和数据转换层尺度不匹配。

    用例 2:

    全球最小值的绝对最大值 为–1.389146、全球最大值为 0.2484222  1.389146.

    因此、对于  signed short、quant 标度为 32,767/1.389146 = 23,587(近似值)

    谢谢。

    Milind

      
       

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我观察到 dataConvert 的 tensorScale 也有类似的不匹配。 TIDL 校准逻辑会更改张量的最小/最大范围。
    你是否可以尝试使用校准选项= 128 在进口和看看如果事情是工作出来? 我为一些简单的模型尝试了此方法、针对您的模型检查此方法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的答复。 这是设置方法吗?

    校准选项= 128  

    在 tidl_import_quant.Tmpl 文件中

    如何验证在 tidlgen 的  校准选项是生效?

    谢谢。

    Milind

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    将“tidl_import_quant_model.txt"中“中的校准选项更改为 128、您之前已经分享过。 “你说什么? 一般而言、要进行验证、首先要检查张量范围是否符合您的预期、模型性能是否足以进行实验、输出是否正确(与 ONNx 输出等黄金输出相比)。 您能否澄清一下 tidlgen、以及您到底在尝试验证什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Vaibhav。

    默认情况 下、校准选项 设为 0。 折叠翼是 tensorScales 我得到如果我运行与默认的 校准选项  = 0

    信息:[TIDLGen]:********************************************************************************************************
    信息:[TIDLGen]:在推理期间按以下顺序读取 TIDL 模型的输入:
    信息:[TIDLGen]:
    信息:[TIDLGen]:[“0",“,'uint16'、'uint16'、'1.000000'、'0'、'0'、 'NUM_BV_0']
    信息:[TIDLGen]:['1'、'Int16'、'24749.101562'、'0'、'0'、 '/model/AFNet_0/model/sector_finalizer/Asin_output_0 '
    信息:[TIDLGen]:[“2",“,"int16"、"int16",“,"1.000000"“"1.000000",、,"0"“"0",“,"0"、"0",“,</s>“ 、““、“Sensor_POLARITY_0"]</s>“
    信息:[TIDLGen]:['3'、'Int16'、'15507.072266'、'0'、 “Sensor_angle_0"]</s>“
    信息:[TIDLGen]:['4'、'Int16'、'1602.066895'、'0'、'0'、 'Lon_vel_0']
    信息:[TIDLGen]:['5'、'Int16'、'23588.218750'、'0'、'0'、 'LAT_VEL_0']
    信息:[TIDLGen]:['6'、'Int16'、'1415.836792'、'0'、'0'、 'D_metric_0']
    信息:[TIDLGen]:['7'、'uint16'、'1774.438477'、'0'、'0'、 'vua_0']
    信息:[TIDLGen]:********************************************************************************************************

    现在   ,如果我有改变校准选项到 128,我怎么做这?

    我看到以下选项。

    #校准选项。 0:简单校准(默认设置)
    # 1:基于直方图的激活范围收集-(可选)百分位 ActRangeShrink。 例如、percententileRangeShrink = 1 从激活分布的边缘丢弃 1/100 元素。
    #7:高级偏置校准
    第 64 章:我的朋友
    # 1024:通过禁用最大饱和检查进行简单校准(SDK 7.3 仿真)
    # 1088:禁用最大饱和检查的高级偏置校准(SDK 7.3 仿真)

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    在您的导入文件中、即“tidl_import_quant_model.txt",“,现在、现在校准选项设为 0、将其更改为 128。
    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。

    我尝试改变 校准选项到 128, 1024,等.. 但我完全看不到张量刻度有任何变化。

    这对于任何 校准选项值都是相同的。

    信息:[TIDLGen]:********************************************************************************************************
    信息:[TIDLGen]:在推理期间按以下顺序读取 TIDL 模型的输入:
    信息:[TIDLGen]:
    信息:[TIDLGen]:[“0",“,'uint16'、'uint16'、'1.000000'、'0'、'0'、 'NUM_BV_0']
    信息:[TIDLGen]:['1'、'Int16'、'24749.101562'、'0'、'0'、 '/model/AFNet_0/model/sector_finalizer/Asin_output_0 '
    信息:[TIDLGen]:[“2",“,"int16"、"int16",“,"1.000000"“"1.000000",、,"0"“"0",“,"0"、"0",“,</s>“ 、““、“Sensor_POLARITY_0"]</s>“
    信息:[TIDLGen]:['3'、'Int16'、'15507.072266'、'0'、 “Sensor_angle_0"]</s>“
    信息:[TIDLGen]:['4'、'Int16'、'1602.066895'、'0'、'0'、 'Lon_vel_0']
    信息:[TIDLGen]:['5'、'Int16'、'23588.218750'、'0'、'0'、 'LAT_VEL_0']
    信息:[TIDLGen]:['6'、'Int16'、'1415.836792'、'0'、'0'、 'D_metric_0']
    信息:[TIDLGen]:['7'、'uint16'、'1774.438477'、'0'、'0'、 'vua_0']
    信息:[TIDLGen]:********************************************************************************************************

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    我在这里有点困惑。 我们取 lat_vel_0、您说它的量应该是 23588.21875、而从您的日志来看、它应该是 23588.21875。 之前、您说数据转换层派生了错误的 tensorscale、例如 lat_vel_0 中的 754823。 我现在在您的日志中看不到该值。 我们尝试了和没有校准选项=128 几天回来,我们确实看到了差异在 tensorscales。 请问现在的问题是什么? 此外、您是否可以分别使用校准选项=0 和 128 共享 SVG?
    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    借助雷达网络、我们正在尝试启用数据转换层、以避免对输入和输出张量进行量/量操作。  

    例如、对于  lat_vel_0、也就是 int16 数据类型、由 TIDL 确定的张量标度就是这样  23588.218750。我们的 校准选项是 0 在这里这是默认的。 现在、如果启用了数据转换层、我会看到 张量标度为  lat_vel_0_netFormat 16384.00000、它是 2 刻度的幂。 这里需要注意的一点是、对于 w/o 和数据转换层 tidl、变量的动态范围都是相同的。  

    对于其他输入张量、张量标度始终是 2 标度的幂。 对于网络中的所有中间层、张量标度不是 2 的幂。  

    我们想了解为什么张量尺度是初始层 2 的幂? 是否可以强制其为 2 的非幂?

    谢谢。

    Milind

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能否回复我的最新问题?  

    谢谢

    Milind

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,您使用的是什么量子样式?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它的 量化 Style = 2

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在这个 e2e 的最初版本中,你得到了 754823 作为 tensorValue 这不是 2 的幂。 在此之后、您在编译过程中做了哪些更改? 这一新问题是否与以前的问题有所不同、以前的问题是使用不同的 tensorScales 和不使用数据转换? 您是否能够共享 SVG w 和 w/o dataConvert 以解决此 2 的幂问题? 还共享编译文件、数据和模型(如果可能)。

    根据 https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j721s2/08_05_00_11/exports/docs/tidl_j721s2_08_05_00_16/ti_dl/docs/user_guide_html/itidl__ti_8h.html ,量子化 Style = 2 是 NP2(非 2 的幂)所以我现在不知道为什么你看到这个问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果我造成任何混淆、我很抱歉。 我们一直在分析这个复杂的问题,并试图 通过做很多不同的实验来解决。  

    我正在 尝试简化下面的过程。

    我们有一个简单的 CDC 子网、其中有 2 个编译。  

    1. 启用数据转换层

    2.无数据转换层

      在两种情况下、量化 Style = 2 和校准选项= 0。

    我们要理解的第一件事是,当数据转换图层被启用时,为什么所有张 量的张量尺度都是 2 的幂,即使量子 style = 2 是 NP2(非 2 的幂)?

    附件中、我有 2 个带 DCL 的 CDC 和不带 DCL 的 CDC 文件夹。 各自的文件夹中有 onnx 模型、tidl_import_quant_model.txt 和 SVG。

    谢谢  e2e.ti.com/.../2055.TI_5F00_DCL_5F00_TICKET.zip

       

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Milind:

    我们可以将其移至 Aptiv 论坛吗?

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们正在与开发团队核实这一点。 同时,我们想知道什么是广泛的问题? 您是否获得了较低的准确性或性能下降或其他方面?

    此致