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.

[参考译文] TDA4AL-Q1:请求如何使 TIDL 深度学习模型的输入悬空

Guru**** 2393725 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1457031/tda4al-q1-request-how-to-float-the-input-of-the-tidl-deep-learning-model

器件型号:TDA4AL-Q1

工具与软件:

我开发了一个不使用图像作为输入的序列模型。
因此、网络输入采用浮点格式。
但是、TI 的默认深度学习架构是专为基于图像的模型设计的。

要在此环境中将浮点值输入到模型中、我使用了以下方法:
我检查了输入值范围并将其归一化、以适应0至255的范围。
例如、如果输入浮点值的范围是0到1、我会将std转换设置中的设置为1/255
然后、在 C 代码中、我在将输入浮点值馈入网络之前将其乘以255。
这可以正常工作、因为std1/255应用于配置cfg()中。

但是、8位表示法不符合浮点输入的范围要求、因为使用可表达式的最大值1/255是有限的。

如果有什么办法、请告诉我。

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

    嗨、Minwoo;

    假设您想首先自己进行某种量化。 然后、您应该知道自己的数据范围(即使它们是浮点数)、假设您的范围是[0、Xmax]。 然后、您应该将此范围映射到[0255]。  

    假设 Q 是[0255]中的量化数据、x 是要转换的当前浮点数字、则 Q =(x/Xmax)*255

    我希望我正确理解您的问题并回答了您的问题。  

    此外、如果您想详细了解 TIDL 的量化选项、请访问以下链接。

    https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/tidl_fsg_quantization.md

     

    如果您有任何其他问题、请随时提交新的工单。  

    谢谢。此致

    文立  

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

    您好!

    感谢您的答复。
    我想提供更详细的信息并请您提供反馈。

    例如、我想输入1D 值、其输入分布范围为0至255。 但是、我需要更高的精度、例如0.1、0.2或0.6。 使用uint8似乎对我的要求太有限。

    问题1.

    是否可以用于uint16输入而不是uint8? 具体而言、我可以使用输入0到65535范围内的值uint16吗?

    问题2.

    如果可以、我可以在 PTQ 期间输入16位数据吗?
    即使在将数据存储为原始16位时、也好像 PTQ 过程不会正确地将其识别为16位输入。 您能否说明一下这是否受支持?

    问题3.

    这是一个单独的问题。 我使用 QAT (量化感知培训)训练了一个模型、并使用以下设置对其进行了配置:

    https://github.com/TexasInstruments/edgeai-tensorlab/blob/main/edgeai-modelzoo/models/vision/classification/imagenet1k/edgeai-tv2/mobilenet_v2_lite_wt-v2_qat-v2-wc8-at8_20231120_model_config.yaml
    input_mean:
    - 123.675
    - 116.28
    - 103.53
    input_scale:
    - 0.017125
    - 0.017507
    - 0.017429
    runtime_options:
    tensor_bits: 8
    accuracy_level: 0
    advanced_options:high_resolution_optimization: 0
    advanced_options:pre_batchnorm_fold: 1
    advanced_options:calibration_frames: 1
    advanced_options:calibration_iterations: 1
    advanced_options:quantization_scale_type: 4
    advanced_options:activation_clipping: 1
    advanced_options:weight_clipping: 1
    advanced_options:bias_calibration: 1
    advanced_options:output_feature_16bit_names_list: ''
    advanced_options:params_16bit_names_list: ''
    advanced_options:add_data_convert_ops: 3
    advanced_options:prequantized_model: 1
    info:
    prequantized_model_type: 2

    以这种方式配置时、模型似乎接受float输入、如附加图像所示。

    在 TI 的 C 代码中、是否可以输入float数据? 如果是、您能否就如何实现这一点提供指导?

    感谢您的支持、我期待您的答复。

    此致、







    我认为有3种方法可以更改模型
    github.com/.../edgeai-tidl-tools
    TIDL-RT、OSRT
    1) TIDL-RT 更改为 tidl_model_import.out
    2) 2) OSRT 更改为 onnxrt_ep.py

    github.com/.../edgeai-tensorlab
    3)这里的 edgeai-benchmark
    我还没有试过

    我在这里可以用什么来解决上述问题?
    -我不认为 tidl_model_import.out 是 QAT 转换本身。 对吗?
    -我转换了 QAT 样本模型,输入是浮点的。
    (tda4al 板)是否可以在 tidl qnxc 代码中将浮点作为输入?

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

    嗨、Minwoo;

    是的、您可以使用 uint16数据。 请注意 uint16和 uint8之间的性能和精度权衡。

    也感谢您回答许多其他问题。  但为了快速解答您的问题、请勿在一个 TT 中提出多个问题。 请在单独的 TT 中提交不同的问题。 因为问题可能会由不同的专家来回答。  

    现在我来结束本次演示。 请随时在新 TT 中提交问题。  

    此致

    文立  

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

    你好 Minwoo、

    您可以直接使用浮点输入、内部支持将浮点数据转换为定点数据。 请参阅我在此处对如何正确设置数据类型的回答、

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1460809/tda4al-q1-how-to-port-a-deep-learning-model-with-multiple-inputs-multiple-inputs-float-vector-and-uint8-image

    如果您有任何其他问题、请告诉我。

    谢谢!

    SAI