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.

[参考译文] CCS:TDA4x:&quot 中的跟踪转储问题;app_tidl_od"

Guru**** 2522770 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/906855/ccs-tda4x-trace-dumps-issues-in-app_tidl_od

工具/软件:Code Composer Studio

尊敬的先生:

我正在使用

PSDK_RTOS_auto_J7_06_02_00_21

PSDKRA_6_2_DL_PATCH_01.tar.xz

当我尝试通过在"app_tidl_module.c"中进行更改来转储"app_tidl_od"应用程序中每一层的 float.bin 跟踪时

PRMs->traceWriteLevel         = 3;

它只能转储前10层浮点转储、然后抛出 Segmentation 故障。

运行应用程序时、我将会看到它

PRMs->traceWriteLevel         = 1;

它能够为所有图层生成".y"转储、而不会出现分割故障。

当我完全禁用跟踪时、还会成功运行模型、而不会出现任何问题。

注意:已尝试不同的型号、该应用仅限于转储10条浮点布线。

我已连接控制台以供您参考 e2e.ti.com/.../dummy_5F00_console.txt

请帮助我们解决此问题。

谢谢、此致、

Vyom Mishra

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

    尊敬的 Vyom:

    跟踪数据缓冲区大小在 app_tild_module.c 中定义

    #define TIVX_TIDL_TRACE_DATA_SIZE  (128 * 1024 * 1024)
    您可以尝试增大此大小、但如果尝试将其加倍、则可能会遇到链接器问题。  
    您能告诉我您的网络有多少层吗? 如果它大约有100层、那么我们可能没有足够的空间来转储所有层。
    您是否尝试使用 traceWriteLevel ="2"? 它是否为您提供所需的信息?
    此致、
    Shyam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的先生:

    我的模型总共有127层、我需要层转储  

    109、120、127层用于后处理。

    我需要 float.bin 中的图层转储。

    您能不能根据型号要求帮助我解决这个问题。

    谢谢、此致、

    Vyom Mishra

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

    尊敬的先生:

    我对进行了更改

    #define TIVX_TIDL_TRACE_DATA_SIZE  (128 * 1024 * 1024 * 13)

    我在 PC_Emulation 构建上没有遇到链接器问题。

    现在、所有127条布线都已转储。

    我需要您的帮助来禁用".y"转储。

    如果可以,请帮助我。

    为供您参考、

    我叫/home/sithara/ti/j8/psdk_rtos_auto_j7_06_02_00_21/vision_apps/app_tidl_od_out/0000000001_0000_00003_00608x00608.y |||||||||||||||||| 我的姓名:
    /home/sithara/ti/j8/psdk_rtos_auto_j7_06_02_00_21/vision_apps/app_tidl_od_out/0000000001_0000_00003_00608x00608_float.bin |||||||||||||||||| 我的姓名:4435968
    我的姓名:/home/sithara/ti/j8/psdk_rtos_auto_j7_06_02_00_21/vision_apps/app_tidl_od_out/0000000001_0001_00003_00602x00602.y |||||||||||||||| 我的姓名:
    /home/sithara/ti/j8/psdk_rtos_auto_j7_06_02_00_21/vision_apps/app_tidl_od_out/0000000001_0001_00003_00602x00602_float.bin |||||||||||||||||| 我的姓名:
    /home/sithara/ti/j8/psdk_rtos_auto_j7_06_02_00_21/vision_apps/app_tidl_od_out/0000000001_0002_00016_00602x00602.y |||||||||||||||||| 我的姓名:5798464
    :/home/sithara/ti/j8/psdk_rtos_auto_j7_06_02_00_21/vision_apps/app_tidl_od_out/0000000001_0002_00016_00602x00602_float.bin ||||||||||||||| 我的大小:23193856
    

    谢谢、此致、

    Vyom Mishra

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

    尊敬的 Vyom:

     为什么后处理需要层转储? 这些层不是网络的输出吗?

    此致、

    安州

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

    尊敬的先生:

    我们正在使用的模型没有启用后处理。

    因此、我们需要从图层(109、120、127)转储功能、以便使用我们的后处理脚本来处理这些图层。

    对于 app_tidl_od、

    我需要访问这些缓冲器、这些缓冲器保存每个帧的这三个功能转储、以将其处理到我们编写的后处理内核。

    对于此提取、我计划启用跟踪、并从缓冲器获取每个所需功能转储的浮点值。

    如果您可以帮助我们从其他代码源中提取这些特定的功能转储、请告诉我代码的一部分。

    我要感谢这一点。

    谢谢、此致、

    Vyom Mishra

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

    尊敬的 Vyom:

      您应该将这些层 (后处理所需的层)声明为网络的输出、在这种情况下、TIDL 将返回这些层作为输出。 跟踪转储应用于调试目的、而不是用于从网络获取输出。 如果您的模型不是基于咖啡因的模型、则可以使用 outDataNamesList 列出网络的所有输出。 请参阅以下链接、了解有关此视频的更多详细信息

    http://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/tidl_j7_01_01_00_10/ti_dl/docs/user_guide_html/md_tidl_model_import.html

    此致、

    安州

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

    尊敬的先生:

    感谢您的回复。

    我已使用此参数" outDataNamesList "导入模型并将图层的所有三个名称提供给列表。

     "在本例中、TIDL 将这些层返回为输出"

    根据上述语句、您意味着所有三层输出都将存储在"output.bin"中、即存储在二进制文件中的模型输出。

    如果是这种情况、它会将层的输出(即浮点值)以传染性形式写入二进制文件(layer109、layer120、layer127).bin。    请根据对模型输出转储的理解对我进行更正。

    2.请在应用程序中引用代码的一部分,我可以在其中获取此 tidl 模型输出

    按照我的理解、在应用中

    app_create_graph_draw_detections(obj->graph,&obj->drawDetectionsObj、obj->tidlObj.output_tenser_arr[0]、obj->scalerObj.output2.arr[0]);

    此处 "obj->tidlObj.output_tenser_arr[0]具有帧的标签(如果启用了后处理)。 是否可以使用应用程序中的“outnamelist”(如果禁用后处理)中指定的功能转储来访问 tidl 模型输出,以便我可以处理它们。

    请在应用程序后处理标签之前引用我可以从中获取模型输出的部分。

    谢谢、此致、

    Vyom Mishra

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

    请查找我的答案:

    我已使用此参数" outDataNamesList "导入模型并将图层的所有三个名称提供给列表。

     "在本例中、TIDL 将这些层返回为输出"

    根据上述语句、您意味着所有三层输出都将存储在"output.bin"中、即存储在二进制文件中的模型输出。

    常熟>>output.bin 是一个测试台代码,用于写入内存中每一层的最终输出。 对于后处理、应直接使用 TIDL 生成的缓冲区。这些缓冲区的属性可从 TIDL_IOBufDesc_t 结构中找到、该结构是 TIDLimport 工具的输出。 请参阅以下文档以了解它:

    http://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/tidl_j7_01_01_00_10/ti_dl/docs/user_guide_html/md_tidl_fsg_io_tensors_format.html

    如果是这种情况、它会将层的输出(即浮点值)以传染性形式写入二进制文件(layer109、layer120、layer127).bin。    请根据对模型输出转储的理解对我进行更正。

    常熟>>输出根据输出数据类型进行写入。 如果某个层的输出是定点输出、则它将作为定点输出、并具有与其关联的相应比例、该比例将作为 TIDL_outArgs 的一部分提供。 如果您需要浮点输出、则必须将定点输出除以相应的标度。

    2.请在应用程序中引用代码的一部分,我可以在其中获取此 tidl 模型输出

    请参阅 tidl_tb.c 文件中的 tidl_WriteNetOutputMem 函数。

    按照我的理解、在应用中

    app_create_graph_draw_detections(obj->graph,&obj->drawDetectionsObj、 obj->tidlObj.output_tenser_arr[0]、obj->scalerObj.output2.arr[0]);

    此处 "obj->tidlObj.output_tenser_arr[0]具有帧的标签(如果启用了后处理)。 是否可以使用应用程序中的“outnamelist”(如果禁用后处理)中指定的功能转储来访问 tidl 模型输出,以便我可以处理它们。

    《常熟>>是》。 我将请 Shyam 告诉您在 VISION 应用程序中准确点击这些输出的位置。

    请在应用程序后处理标签之前引用我可以从中获取模型输出的部分。

    常熟>>对于后处理、您可以在 tidl_TB_utils.c 中引用 run_postProc 函数


    此致、

    安州

    我已使用此参数" outDataNamesList "导入模型并将图层的所有三个名称提供给列表。

     "在本例中、TIDL 将这些层返回为输出"

    根据上述语句、您意味着所有三层输出都将存储在"output.bin"中、即存储在二进制文件中的模型输出。

    如果是这种情况、它会将层的输出(即浮点值)以传染性形式写入二进制文件(layer109、layer120、layer127).bin。    请根据对模型输出转储的理解对我进行更正。

    2.请在应用程序中引用代码的一部分,我可以在其中获取此 tidl 模型输出

    按照我的理解、在应用中

    app_create_graph_draw_detections(obj->graph,&obj->drawDetectionsObj、 obj->tidlObj.output_tenser_arr[0]、obj->scalerObj.output2.arr[0]);

    此处 "obj->tidlObj.output_tenser_arr[0]具有帧的标签(如果启用了后处理)。 是否可以使用应用程序中的“outnamelist”(如果禁用后处理)中指定的功能转储来访问 tidl 模型输出,以便我可以处理它们。

    请在应用程序后处理标签之前引用我可以从中获取模型输出的部分。

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

    尊敬的先生:

    感谢您的详细答复。

    我觉得我让您混淆了 testBench 和"app_tidl_od"。

    先生、我仅在"app_tidl_od"中寻求支持。

    如需了解相关信息、请访问:

    1)后处理不是模型的一部分

    2) 2)模型有三个来自第 X 层、第 Y 层、第 Z 层的输出

    3) 3)单独的后处理将用作内核、用于处理模型的输出(三层输出)以进行预测。

    要求:

    1) 1)我们需要 浮点格式的 layer-X、layer-Y、layer-Z 输出、以便在后处理脚本中处理

    在"app_tidl_od"中从您的角度寻求帮助:

    1) 1)导入时、是否可以在视觉应用中获取我们在"名称列表"中提到的图层的浮点格式输出?

    2) 2)我需要知道代码中可以点击哪些部分来访问视觉应用中的这些层输出(浮点格式)?

    请做必要的事。

    注意:我们已使用跟踪转储使用后处理脚本测试台输出、现在我们希望仅将后处理脚本与"app_tidl_od"集成。 在应用中寻求支持。  

    谢谢、此致、

    Vyom Mishra

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

    尊敬的 Vyom:
       我将向 Shyam 发出命令,回答你的一些问题。 但要在以下方面添加注释:

    1) 1)导入时、是否可以在视觉应用中获取我们在"名称列表"中提到的图层的浮点格式输出?

    常熟>> TIDL 不会将定点输出转换为浮点输出。 它将为每个输出提供与定点输出相关联的标度。 如果后处理是浮点处理、则应将这些输出转换为浮点输出、作为后处理的一部分。 使用跟踪转储获取单个层的浮点输出只是一个调试功能、不应用于在最终应用中获取单个层输出。


    此致、

    安州

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

    尊敬的先生:

    感谢您的回复。

    是的、我们以前在 TDA2x 上工作时也做过同样的事情。 将定点转换为浮点输出以实现逐层匹配。

    如果 Shyam 先生能尽快答复,那就应该是你的了。

    温柔的提醒!

    谢谢、此致、

    Vyom Mishra

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

    Vyom、

    如果 TIDL 为您提供这些中间输出、那么我想知道导入模型报告的输出密度器的数量。

    app_tidl_od 应用程序将创建导入的二进制文件指示的任意数量的输出 tensors。

    在 app_tidl_module.c 文件中的 app_tidl_init 下、您可以在此处找到它、

        createOutputTensors (context、tidlObj->config、output_tensors);

        for (i = 0;i < num_output_tensors;i++)
        {
            tidlObj->output_tenser_arr[i] = vxCreateObjectArray (context、(vx_reference) output_tensors[i]、NUM_CH);
            vxReleaseTensor (&output_tensors[i]);
        }

    此外、要访问输出 tensors、必须如函数中所示映射输出

    vx_status writeTIDLOutput (char * file_name、TIDLObj * tidlObj)位于同一文件中。

    您能否提供有关您的用例的详细信息? 您打算如何使用这些信息以及您计划如何在 EVM 上运行这些信息?

    此致、
    Shyam

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

    尊敬的先生:

    感谢您的回复。

    "如果 TIDL 为您提供这些中间输出、那么我想知道导入模型报告的输出密度器数量"

    Vyom>>我们有一个模型、它有三个输出、具体在"outnamelist"参数的导入配置文件中有提及

    "app_tidl_od 应用程序将创建导入的二进制文件指示的任意数量的输出 tensors。"

    Vyom>>我已经过交叉检查、发现它与我们期望的模型输出数量相同、即3

    "您还能提供有关您的用例的详细信息吗? 您打算如何使用这些信息以及您计划如何在 EVM 上运行这些信息"

    从 TIDL 提取的三个输出将解析为后处理脚本[单独用 C 代码编写:此代码将在 DSP 上运行]

    我对同一问题还有一些疑问:

    1) 1)在启用后处理的模型中、模型的输出存储在"&output_tensors[i]"中

    查询:如果在模型中启用了后处理、此输出传感器是否保存模型的图层特征转储或后处理输出?

    2) 2)在禁用后处理的模型中、模型的输出存储在"&output_tensors[i]"中

    查询:如果禁用后处理,此输出传感器是否可以保存图层图元转储?

    请做必要的事。

    谢谢、此致、

    Vyom Mishra

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

    Vyom、

    我们是否可以在离线讨论时关闭此主题?

    此致、
    Shyam

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

    尊敬的先生:

    我们有几个观察结果、我们需要继续这条线程。

    如离线呼叫中所述。

    我们直接从 tensor 中提取了 TIDL 输出、并为自定义后处理内核提供了相同的输出。 我们观察到检测到的箱子数量为50个、因此我们计划进行一项练习、以了解是否 将来自 TIDL 的正确输出馈送到后处理。

    因此、我们交叉检查了 TIDL 输出传感器和模型生成的布线、以确定模型的特定输出层、这些布线是匹配的。

    另外一个练习是使用独立的后处理脚本完成的、该脚本如下所示:

    正如您所知、在我们的模型中禁用了"PostProcType"、并且我们正在使用 app_tidl_od 中的自定义后处理。

    具有相同的输入映像(与 app_tidl_od 的格式不同、期望.yUV 格式和.bmp 提供给 PC 仿真(独立)))

    当我们尝试通过我们的独立后处理脚本处理从 app_tidl_od 生成的跟踪转储时、未观察到检测、而相同的导入模型生成了来自 PC-Emulation (独立)的跟踪。

    当我尝试匹配 APP_TIdl_od 和 PC-Emulation (独立)的跟踪转储(float.bin)时、它不匹配。

    查询:

    1) 1)为什么在 PC 仿真(独立)和 APP_TIdl_od 的迹线之间观察到这种不匹配?

    2) 2)独立 PC 仿真和 app_tidl_od 是否存在布线格式差异(即、NCHW/NHWC)?

       (根据我们对独立 PC 仿真/目标上 TIDL 输出的理解、NCHW 格式)

    请做必要的事。

    谢谢、此致、

    Vyom Mishra

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

    尊敬的 Vyom:

    此主题似乎已开放一段时间、上述问题是否有任何进展? 您是否需要有关某些查询的任何帮助? 我强烈建议您根据需要打开多个线程、而不是在各种问题上使一个线程保持活动状态。

    此致、
    Shyam