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.

[参考译文] TDA4VH-Q1:[关于#1547196]在 TDA4VH 上加载多个子图形模型的后续操作 (SDK 11.00.00.06)

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1551701/tda4vh-q1-follow-up-to-1547196-loading-multi-subgraph-models-on-tda4vh-sdk-11-00-00-06

器件型号:TDA4VH-Q1
Thread 中讨论的其他器件:TDA4VH

工具/软件:

尊敬的团队:

参考原始 TT:
这是我们之前 关于模型转换的讨论 (1547196) 的后续内容。 我们使用 edgeai-tidl-tools (https://github.com/TexasInstruments/edgeai-tidl-tools/tree/11_00_06_00) 平台成功地将我们的 Face Landmark 模型(在 ONNX 中)转换为与 TIDL 兼容的.bin 文件。在转换过程中、由于层不受支持、该模型分为 4 个子图、具有以下结构:

subgraph_0_tidl_net.bin   
subgraph_1_tidl_net.bin  
subgraph_2_tidl_net.bin   
subgraph_3_tidl_net.bin  

我们想知道:

  1. 在 Vision Apps 中、建议使用什么程序来配置多个 TIDL 子图并将其链接到单个应用图中?

  2. 是否有示例应用程序或参考配置展示了.bin子图的多个文件加载?

  3. 在同一图形中使用多个子图时、是否有任何限制或额外的存储器/性能注意事项?

请告诉我是否需要我们的任何细节

期待您的指导。

谢谢。此致、

Rupali Jadhav

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

    尊敬的 Rupali:

    1. 在 Vision Apps 中、建议使用什么程序来配置多个 TIDL 子图并将其链接到单个应用图中?

    这由 OSRT 自动完成。  只需设置模型工件的位置即可。

    1. 是否有示例应用程序或参考配置展示了 .bin 子图的多个文件加载?

    请参阅: https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j784s4/09_02_00_05/exports/docs/c7x-mma-tidl/ti_dl/docs/user_guide_html/md_tidl_osr_onnxrt_tidl.html。 这有命令行 Jupyter 笔记本说明。  

    1. 在同一图形中使用多个子图时、是否有任何限制或额外的存储器/性能注意事项?

    在 ARM 内核上运行的层比在 DSP 上运行的层慢~30 倍、因此、需要通过重构模型来尽可能减少 ARM 层执行次数。  这是因为 C7x/MMA 比 ARM 内核快得多。  根据 FPS 要求、ARM 上的几层不会对模型性能产生太大影响。  

    还有一个点、即图形末尾的层对性能的影响小于中间的层。   

    此致、

    Chris

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

    您好、Chris、

    感谢您的答复。

    关于这一点:  

    1. 在 Vision Apps 中、建议使用什么程序来配置多个 TIDL 子图并将其链接到单个应用图中?

    这由 OSRT 自动完成。  只需设置模型工件的位置即可。

    我们如何在 Vision Apps (SDK 11、J784S4) 中将“模型工件“路径传递到 TIDL 节点?

    我们使用 OSRT 转换了 ONNX 模型;我在目标路径上复制的工件文件夹中生成的.bin 文件如下所示:

    /opt/vision_apps/test_data/psdkra/tidl_models
     subgraph_0_tidl_net.bin
     subgraph_0_tidl_io_1.bin
     subgraph_1_tidl_net.bin
     subgraph_1_tidl_io_1.bin
     subgraph_2_tidl_net.bin
     subgraph_2_tidl_io_1.bin
     subgraph_3_tidl_net.bin
     subgraph_3_tidl_io_1.bin
     onnxrtMetaData.txt
     allowedNode.txt

    根据您的说明、如果我们“设置模型工件的位置“、OSRT 将自动加载多个子图。 在 Vision Apps(使用 app_tidl_module.c / tivxTIDLNode)中、我们应该将哪个字段设置为此目录?

      tidlObj->network_file_path 是否应该是工件目录、tidlObj->config_file_path 是否指向 subgraph_0_tidl_io_1.bin(对于 ioBufDesc)?

      或者、是否有特定的 create/params 字段(例如,createParams->artifactes_folder/“model base path“等字段)、在从 subgraph_0_tidl_io_1.bin 读取 ioBufDesc 时、我们应该填写 artifacts 目录?

    一个微小的代码片段可以准确显示在 Vision Apps 中设置构件路径的位置、这将是完美之选。 谢谢!

    2.

    我们有一个 ONNX 模型在转换期间被划分为 4 个子图 (subgraph_0 到_3)。 请提供:

      Vision Apps 示例演示了如何在多个 C7x/DSP 内核之间分发这些子图?

      是否有显示每个子图核心分配的配置文件示例?

    谢谢你

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

    尊敬的 Rupali:

    OpenVX 框架不在我的领域、我已将该线程重新分配给一位 OpenVX 专家。

    此致、

    Chris

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

    尊敬的 Rupali:

    由于 vision_apps tidl-node 使用 tidl-RT、因此针对基于 osrt 的执行流程编译的模型将不在 tidl-RT 中工作。

    您必须使用 osrt onnx 运行时运行这些模型。   有关运行 onnx 型号的信息、请参阅此链接。

    并且在 tidl-RT 级别不支持拆分模型执行、仅在 osrt 级别支持。

    此致、
    Gokul

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

    尊敬的 Rupali:

    我将重新指派给 Chris、他将帮助您完成 tidl-RT 的模型编译。

    此致、
    Gokul

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

    您好、Chris、

    我跟进我们之前关于在 TDA4VH (J784S4) EVM 上部署 Face 地标模型的讨论。

    当前情况概要:

    我们将原始的.tflite 模型 (MediaPipe Face\_Landmarit.tflite) 转换为 ONNX、然后使用 edgeai-tidl-tools (11\_00\_06\_00) 编译为.bin 工件。
    在编译过程中,由于图层不受支持,模型被分成 4 个子图。
    OSRT 处理多个子图的同时、我们需要将该模型集成到使用 TIDLP-RT 的 Vision 应用中、在该应用中、无法直接加载多个子图、如 Gokul 所阐明的那样
    尝试使用 tidl_model_import.out 直接编译 TIDL-RT 会导致校准/量化期间出现分段故障、从而使伪影不可用、我已经介绍了我在上面的消息中遵循的步骤。

    我们的关键问题:

    1、为 TIDLP-RT (Vision Apps) 编译模型以避免校准期间出现分段故障的正确分步过程是什么?
    2.由于 OSRT 允许执行子图形、但 TIDLP-RT 不:

      是否有将多个子图合并/平坦成单个 TIDLP-RT 兼容.bin 的正式方法?
      如果不是、对于像 Face\_Landmark 这样当前拆分为多个子图的模型、建议的工作流程是什么?

    这是我们项目的关键拦截器、因为我们必须将模型集成到 J784S4 上的 Vision Apps 流水线中。 非常希望为 TIDLP-RT 编译提供任何即时的指导、参考或示例配置。

    期待您的紧急支持。

    谢谢你。

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

    尊敬的 Rupali:

    如果模型由于不受支持的图层而被分割成子图、您可以执行以下两项操作:

    1.寻找可能支持这些层的 TIDL 的最新版本

    2.修改模型并移除不支持的图层(图形外科医生,模型优化器等)

    这不是“宿命“的问题、这些层在 TIDL 的特定版本中不起作用不支持这些层、而是在 ARM 内核中进行处理。  我正在与 TIOVX 工程师再次检查是否可以在 TIOVX 中运行多个图形。

    此致、

    Chris

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

    感谢您的答复 Chris、

    我还有几个问题、希望您对这些问题有深入的了解:  

    1) 在 TIDL-RT 编译之前、建议使用什么流程/工具(图形外科医生/模型优化器)来移除或重构不受支持的层?

    您能否分享在 TDA4VH 工作流程中应用此优化器的分步指南或示例?

    2) 应用优化器后、该模型是否会编译到单个 TIDL-RT 兼容图中、而不是多个子图?

    3) 是否有 SDK 11.x TIDL 不受支持的 ONNX/TFLite 层列表?

    4) 对于每个不受支持的层(例如我们日志中的 Pad 或 PreLU)、TI 建议的替代方法或权变措施是什么?


    谢谢你

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

    尊敬的 Rupali:

    1) 在 TIDL-RT 编译之前、建议使用什么流程/工具(图形外科医生/模型优化器)来移除或重构不受支持的层?

    我不能对此发表评论、因为这是一项最终用户工程任务。  我可以向您指出工具(还有其他工具)。

    2) 应用优化器后、该模型是否会编译到单个 TIDL-RT 兼容图中、而不是多个子图?

    同样、这取决于模型和应用程序。  我不能肯定这将 100%解决问题

    3) 是否有 SDK 11.x TIDL 不受支持的 ONNX/TFLite 层列表?

    ONNX 等中定期出现新的层。  缺少图层将是一项不可能完成的任务。  TIDL 具有一组受支持的层、列于 https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/supported_ops_rts_versions.md 中 

    4) 对于每个不受支持的层(例如我们日志中的 Pad 或 PreLU)、TI 建议的替代方法或权变措施是什么?

    11.x 中支持 PreLU 和 Pad 层、但存在某些限制。  例如、PReLU 图层具有以下限制。

    • 非单胎变量输入尺寸的数量必须小于<= 6
    • PRelu 不支持可变斜率

    此致、

    Chris

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

    尊敬的 Rupali:

    您没有编译所需的其他工具的路径。

    tidlStatsTool =./PC_DSP_TEST_dl_algo.out
    perfSimTool =./ti_cnperfsim.out
    GraphVizTool =./tidl_graphVisualizer.out

    这些应设置为安装中.out 文件的位置。   这将生成工件、但我有点担心 PReLU 层警告。  这表明存在模型问题。

    此致、

    Chris

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

    尊敬的 Rupali:

    1. 是否有任何方法可以使该模型与当前的 TIDL 配合使用?

    我可以导入和运行模型、但这并不意味着它是正确的。  我能够使用 OSRT 导入它、但存在不受支持的层、因此我认为它不会在 TIDLRT 下编译。   有 3 个不受支持的焊盘层(请参阅图像)彩色框外的灰色框是将在 ARM 核心上运行的不受支持的层。  这不是问题、只是这些层的运行速度会变慢。  

    e2e.ti.com/.../face_5F00_landmark_5F00_inference.loge2e.ti.com/.../face_5F00_landmark_5F00_compile.log

    另一个要做的点是正常的输入张量是批次、通道、高度、宽度。  此模型的输入为批量、高度、宽度、通道、然后是转置。  大多数输入图像都是通道、高度、 宽度、因此从 Get Go 来看、这看起来很奇怪。   

    2.您是否有任何您知道与 TIDL 合作的人脸标志模型?

    这个时候,她的阴道已经开始湿润了。

    3.将来的版本是否支持通道填充?

    是的、它现在受支持、但有以下限制:

    • 支持的最大输入尺寸为 6
    • 仅支持恒定焊盘模式
    • 仅宽度/高度轴支持填充

    模型中的焊盘 看起来具有 8 的尺寸、但仅使用 1 个尺寸(其余为 0)

    4. 我应该尝试修改这个模型来删除通道填充吗?

    或者将焊盘尺寸减小到 6 或更小。

    此致。

    Chris