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:TIDL + TIOVX:YOLOv7n 编译覆盖和放大器;ARM 上不支持的层执行

Guru**** 2797575 points

Other Parts Discussed in Thread: AM69A

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1620370/tda4vh-q1-tidl-tiovx-yolov7n-compile-coverage-unsupported-layer-execution-on-arm

器件型号: TDA4VH-Q1
主题中讨论的其他器件: AM69A

环境:

型号:YOLOv7n(自定义数据集)、导出到 ONNX
TIDL 流程:编译为 TIDL 工件的模型
平台:AM69A

ONNX opset /出口商版本: 17

目标:更大限度地卸载到 C7x/MMA;在同一 TIOVX 流水线内的 ARM 上运行任何不受支持的器件。

Q1) 如何在 TIDL 编译 YOLOv7n 期间最大限度地提高层/运算符支持?
我想减少/避免 ARM 回退。 您能否提出建议的步骤和标志、以最大限度地扩大操作员的覆盖范围?

Q2) 对于仍然不受支持的层、在 TIOVX 图形中、在 ARM 上运行它们的正确方法是什么?

TIDL 是否会自动对图进行分区并公开 DSP 和 ARM 的子图、或者我是否需要手动拆分模型并为 ARM 器件插入自定义 OpenVX 内核?

一个受支持子图的 tivxTIDLNode 和不受支持层的自定义 OpenVX 内核?

是否有任何示例显示单个 TIOVX 流水线中的 DSP→ARM 执行?

对于类似 YOLO 的流水线、TIOVX 中的推荐节点链是什么? 例如:

tivxDLPreProc→tivxTIDLNode→ARM post-proc (NMS/Decode) 作为自定义内核→图形的其余部分。
是否有用于后处理(解码/NMS)的内置节点、或者 Post-proc 是否应该作为自定义内核保留在 ARM 上?

 

此致

Jayachandran

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

    尊敬的 Jayachandran:

    q1) 在 TIDL 编译 YOLOv7n 期间、如何最大限度地提高层/运算符支持?

    模型中的所有图层都必须由 tidl 运算符支持。

    默认情况下、如果您 edgeai-tidl-tools、则在模型编译过程中、它将尝试优化模型、以在 tidl 上尽可能支持。 但可能有一些临界情况、它们可能无法完全支持 tidl。
    在这种情况下、您可能需要在编译前手动修改模型。

    为避免这种 情况、您可以使用 edgeai-modelzoo 中提供的模型、tidl 中开箱即用支持的模型列表。 您可以从那里选择一个模型并使用它。 我想 yolov7 也可以在 modelzoo 中使用。

    q2) 对于仍然不受支持的层、在 TIOVX 图形中的 ARM 上运行它们的正确方法是什么?

    您可以在基于 osrt 的运行时(如 tflite 或 onnx)中执行此 ARM 委派、这些运行时将负责将不受支持的层卸载到 ARM、并将受支持的层卸载到 c7x DSP。

    但 tivxTIDLNode 不支持此特性。 仅当 c7x 支持所有层时、才可以使用基于 tiovx 的应用程序。

    对于类似 YOLO 的流水线、TIOVX 中的推荐节点链是什么? 例如:

    您可以参考 vision_apps 中的 app_tidl_od、app_tidl_fron_cam 演示。  https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/11_01_00_04/exports/docs/vision_apps/docs/user_guide/group_apps_dl_demos_app_tidl_od.html

    tivxDLPreProc→tivxTIDLNode→arm post-proc (NMS/Decode) 作为自定义内核→图的其余部分。
    是否有用于后处理(解码/NMS)的内置节点、或者 Post-proc 是否应该作为自定义内核保留在 ARM 上?

    有关更多详细信息、请参阅以下链接: https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/od_meta_arch.md

    此致、
    Gokul

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

    嗨、Gokul

    感谢您的支持

    我们回滚了 YOLOv3 、因为已知此型号与完全兼容 模型 。 在对自定义数据集重新训练 YOLOv3 后、我们尝试生成 TIDL 工件。 但是、报告了模型转换过程 不受支持的图层 这对于标准 YOLOv3 体系结构来说是意料之外的。

    请帮助我们了解以下内容:

    1. 可能出错的地方 在模型重新训练或导出过程中?
    2. ‑的训练配置、自定义层或导出设置是否会导致 YOLOv3 偏离 TIDL 支持的层集?
    3. 如果存在特定约束或所需版本(例如 ONNX opset,激活类型,图层参数)、我们需要遵循以确保完全兼容?

    我们非常希望提供有关诊断或解析这些不受支持层的任何指导、因为这将有助于我们继续进行 TIDL 部署。

    此致

    Jayachandran

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

    尊敬的 Jayachandran:

    但是、报告了模型转换过程 不受支持的图层 、这是标准 YOLOv3 体系结构的意外情况。

    我认为您应该在模型的后处理部分中看到不受支持的层。

    如果可能、您可以共享日志和模型。

    请参考 https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/od_meta_arch.md

    按照此操作,为 yolov3 创建元体系结构文件,并尝试再次编译。 在 TIDL 中,有一些后处理块的优化,如果您不指定元体系结构,它会将所有层视为主干,在这种情况下,可能不支持层。

    通过指定正确的元文件 tidl 将尝试将所有后处理部分放入单个层,如下所示,

    示例输出:

    此致、
    Gokul