工具/软件:
您好:
我将 J784s4 与 RTOS SDK 10_01_00_04 和 TIDL 版本 10_01_00_01 配合使用。 我的 ONNX 版本是 1.15.0。 我有一个包含 TopK 节点和 ADD 节点的微型模型。
ADD 节点将 TopK 的索引输出作为输入并使用 int64 类型的常量。
该模型有 3 个输出: TopK 的值和指数输出,以及 ADD 的输出。
当我对仿真器运行推理时、TopK 输出正确、但 ADD 输出错误。
在 DSP 上、TopK 输出也是正确的、但 ADD 输出变为全零。
对于 TopK、我在 DSP 和参考实现中使用了 TIDL_refTopK。
在为索引添加切片节点后、我添加了一个整形节点以将元素类型更改为浮动、然后添加一个与身份节点类似的切片节点、因为 DSP 不支持将不同类型的整形作为 TopK 的最后一个节点。
经过一些调试后、我发现 ADD 节点始终将其输入作为 int16(浮点)、并生成 int16 输出。 即使将其输入作为浮点、它仍会生成 int16 输出。 这会导致错误的结果、因为输入范围(32 位)和输出范围(16 位)不匹配。 这似乎是我在 DSP 上看到零并在仿真器上看到错误结果的原因。

您能否确认这是否为预期行为?
对于一种解决方法、您是否有任何建议 、该解决方法将允许节点正确地使用 int32 或 int64 格式的输入、并在 int32 或 int64(而不是 int16)中生成其输出? 目标是在不降低精度的情况下保留索引值、因为将它们减少到 int16 会导致截断/溢出、并导致仿真器和 DSP 上出现错误结果。
如何 处理要 在 TIDL 支持的更高宽度整数类型中执行的索引?
解决此问题的建议解决方法是什么?
您可以在此处找到模型:e2e.ti.com/.../add_5F00_topk.zip
在这里您可以找到模型工件(在仿真器的编译和推理中): e2e.ti.com/.../add_5F00_topk_5F00_artifacts.zip
提前感谢。