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.

[参考译文] TDA4VM:TIDL Model Zoo 张量解析信息

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1509577/tda4vm-tidl-model-zoo-tensor-parsing-information

器件型号:TDA4VM

工具/软件:

您好:

我在其模型 zoo 中使用 TI 分布的以下网络:OD-8220_onnxrt_coco_edgeai-mmdet_yolox_s_lite_640x640_20220221_model_onnx。

我能够执行推理并成功地解析结果,但我不清楚在哪里可以找到有关解析输出张量的信息。

以随 zip 软件包分发的 onnx 文件为例 、我可以看到我们有一个1x3x640x640输入张量和两个输出张量:一个 float32的 dets 矩阵和一个 int64的标签数组。 然而,我发现我需要将所有输出张量解析为 float32以获得有意义的结果。

此外,我需要对 DETS 矩阵的列顺序进行逆向工程,以了解哪一个是分数,哪些是边界框的坐标。

问题是我是否缺少一些文档或了解如何从数据类型和数据内容的角度正确解析输入和输出张量的正确方法。 可以帮我解决这个问题吗?

谢谢

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

    您好 Ugo:

    您能否附上 您正在使用的模型?\

    此致、

    Chris

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

    当然、这里是从您的 Model Zoo 下载的软件包。

    e2e.ti.com/.../od_2D00_8220_5F00_onnxrt_5F00_coco_5F00_edgeai_2D00_mmdet_5F00_yolox_5F00_s_5F00_lite_5F00_640x640_5F00_20220221_5F00_model_5F00_onnx.tar.gz

    如前所述、如果您打开

    OD-8220_onnxrt_coco_edgeai-mmdet_yolox_s_lite_640x640_20220221_model_onnx.tar/model\/yolox_s_lite_640x640_20220221_model.onnx

    您将获得以下信息:

    然而我需要将标签输出张量解析为浮点数组以获得有意义的结果。

    是否符合预期? 一般而言、检索有关输入和输出张量数据类型的所有信息的建议方法是什么?

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

    您好 Ugo:

    您的模型有两个输出"DETs"和"labels"、它们都是1、3640、  640. 然后进行配置、您将将这些列为输出(TIDLRT 示例)。  在您的 import.cfg 文件中、您将有一行显示输出。  您的输出类型将与您 在 import.cfg 文件中设置 numParamBits  的方式相同(有关导入信息、请参阅 software-dl.ti.com/.../md_tidl_model_import.html)。

    outDataNamesList     ="默认、标签"

    在相应的 inference.cfg 文件中、您将有一条类似于的行(  有关推理参数、请参阅 software-dl.ti.com/.../md_tidl_sample_test.html):

    outData ="out/tidl_out.bin"

    此 BIN 文件将同时包含 DETS 和标签。  每个的大小为1x3x640x640 (1228800)。  假设您以8位运行推理、那么前1228800字节将是 dets 张量、后1228800字节将是标签张量。  

     运行推理后、out/tidl_out.bin 将包含这些数据。

    您可以将原始数据读取为:

    将 NumPy 导入为 NP
    导入 CV2
    导入 json

    bin_file_name ="out/tidl_out.bin"


    #data_type = np.int16
    data_type = np.int8


    将 open (bin_file_name、'rb')设置为 f:
    RAW_DATA = np.frombuffer(f.read ()、dtype=data_type)

    打印(raw_data.shape)

    在此处对原始输出数据执行一些操作(请记住、大小是每个输出的总张量大小)

    :  

    此致、

    Chris

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

    感谢您的回答。

    实际上、我不需要观察 ONNX 文件、但 我发现在我的情况下更有效的方法是推动解析 sTIDL_IOBufDESC_t 结构、并从那里了解矩阵大小、数据类型和数据名称以及结构成员 outWidth、 outHeight 、outNumChannels、outElementType 和 outDataName。

    一般来说,我发现非常有用的这个链接:

    https://github.com/TexasInstruments/edgeai-tidl-tools/tree/master/examples

    但是、我没有在任何文档链接中找到有关参数 outDataId 的任何信息。 您有什么要联系的吗?

    谢谢。此致

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

    您好 Ugo:

    outDataId 是 C 实现中每个输出缓冲区的每网结构。  一般来说、这可能对您没有用处、我认为它对应于每个子网的 outDataNamesList。   对于你所问的 outDataNamesList 是它。  解析输出缓冲区是关键所在。

    此致、

    Chris