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 上的 YOLOv8 问题:不支持子层、推理置信度=0

Guru**** 2535250 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1555366/tda4vm-issue-with-yolov8s-on-tidl-sub-layer-unsupported-inference-confidence-0

器件型号:TDA4VM


工具/软件:

当我onnxrt_ep.py在 YOLOv8s ONNX 上运行时,我会收到不支持的运算符消息。
使用-o(优化)、可以自动处理 MaxPool、但不转换子节点。
如果我手动重写 Sub(以满足 TIDL 约束)、则模型会编译、但在目标板上、所有假设都变为 0(类 ID 崩溃)、因此检测毫无用处。

[编译我的原始(未修改)模型时显示日志]

我的环境

  • SoC / SDK:适用于 EdgeAI 的处理器 SDK Linux 10_00_00_08

  • edgeai-tidl-tools:10_00_08_00

  • 型号:YOLOv8、自定义 3 类

  • 导出:ONNX OPSET 12、输入形状[1,3,800,800]

  • OnnxRuntime(主机和目标):1.14

  • 命令:python3 examples/osrt_python/ort/onnxrt_ep.py(带/不带) -o

我尝试过的

  1. -o优化onnxrt_ep.py

    • MaxPool已转换(正常)

    • Sub保持不变 (NG)

  2. 我实施了一项手动图形手术、Sub(x, const)用代替Add(x, neg_const)并尝试折叠形状以符合“数字或 1D 矢量(只有一个 DIM > 1)“规则。

    • 在此之后、 编译成功

    • 但在目标上、 所有的知心都是零 (即使框在图像顶部绘制)。

  3. 使用 ONNX 形状推理验证形状、删除重复初始化程序、并使用主机上的 ORT 验证 CPU 推理。

    • 主机 ORT 运行后不会发生崩溃、但 得分在目标上保持为 0

我的问题

  1. edgeai-tidl-tools 或 edgeai-tensorlab 中是否有官方/已知安全的变换(脚本/标志)、用于将有问题的子节点转换为 TIDL 友好形式(例如,添加+负常数或其他标准化)、专门用于 YOLOv8 标头/后处理?

  2. TI 是否提供参考通道来在 Sub/Div 上强制实施 TIDL 约束(“const 必须是数字或 1D 向量;只有一个 DIM > 1“、“no variable-variable Sub“)?

    • 如果是、它在哪里(模块/功能名称以及如何使用启用它)onnxrt_ep.py -o

  3. 在 YOLOv8 磁头中更改子模块会中断预期的 FSG OD 元架构对齐,从而在运行时消除置信度的已知缺陷吗?

    • 是否有检查清单来验证 HEAD 输出(订单/比例/激活、如 Sigmoid)仍然是 TIDL 的预期格式?

  4. 对于该 SDK/工具链 (10_00_00_08/10_00_08_00)、OLPET 12 是 YOLOv8 的建议导出选项、还是应该使用不同的选项进行导出以避免 TIDL 无法重写的子模式?

  5. 如果没有自动通过、您能否分享一个不会破坏 YOLO 分数的合法 Sub→ADD (MUL) 重写的最小示例(前后节点模式,允许的形状)?

  6. 另外、您能否让我知道如何正确修改或创建prototxt与我的自定义 YOLOv8s(3 类)模型匹配的文件?

我附上了一个 zip 文件、其中包含我的.onnx模型供您参考。

e2e.ti.com/.../12best.zip

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

    您好;

    感谢提问并上传模型。  

    我们将在我们这边运行它、并为您提供最新信息。

    此致

    Wen Li

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

    谢谢您、Wen Li。

    下面是一个更新(我希望这有助于找到解决方案)。
    在最新的 TI edgeai-tidl-tools 代码中、我发现中有一些子相关代码/edgeai-tidl-tools/scripts/osrt_model_tools/onnx_tools/tidl_onnx_model_optimizer/src/eltwise.py。 我仅将该部分复制到了 edgeai-tidl-tools (ver:10_00_08_00) 中、正在使用并运行优化。 (我不确定这样做是否正确...)  

    在那之后,当我跑python3 onnxrt_ep.py -m model_debug_max_sub_surgery -dpython3 onnxrt_ep.py -m model_debug_max_sub_surgery -o -c,一切顺利. 但当我在电路板上运行推理时、置信度值再次相同。

    我随附了一个压缩文件、其中包括经过编译的具有 maxpool 和子层优化的模型文件、推理结果、ops.py 选项映像以及编译期间使用的 model_config 值。

    如果您能告诉我需要做些什么才能让模型在电路板上正确运行推理、我会非常感激。

    e2e.ti.com/.../0821.zip

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

    您好;

    感谢您提供的所有信息。

    您可以尝试更新的 edgeAI 工具和 RTOS-SDK 吗?

    由于您已自定义 YOLO 型号、因此可能存在一些兼容性问题。 是否可以调整 opset=9? 这对于使您的新操作员兼容至关重要。  

    此致

    Wen Li