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.

[参考译文] SK-TDA4VM:使用 edgeai-tidl-tools 10_00_08_00 编译自定义 YOLOv8 模型时遇到问题

Guru**** 2489685 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1550151/sk-tda4vm-issue-compiling-custom-yolov8-model-with-edgeai-tidl-tools-10_00_08_00

器件型号:SK-TDA4VM


工具/软件:

我正在使用的器件 edgeai-tidl-tools 标签 10_00_08_00 并尝试编译基于 YOLOv8 的定制模型。
我准备了 20 张校准图像。 我的.pt模型已转换为具有以下参数的 ONNX:

  • dynamic = False

  • opset = 12

  • simplify = True

以下是我添加的模型配置:

“Od-custom_yolov8n_608":“:create_model_config (
Source=dict(
model_url=“",“,</s>、
meta_arch_url=“{path}/edgeai-tidl-tools/examples/models/prototxt/yolo/yolov8_small_lite_640x640_20231117_model.prototxt、
推断形状=假、
)、
preproception=dict(
调整大小=608、
作物=608、
data_layout=“NCHW",“,</s>、
REVERSE_CHANNES=True、  
resize_with_pad=[True、“Cornor"],“,</s>、
PAD_COLOR=[114,114,114]、
)、
Session=dict(
session_name=“onnxrt",“,</s>、
model_path='{model_path}/best.onnx'、
meta_layers_names_list=“{path}/edgeai-tidl-tools/examples/models/prototxt/yolo/yolov8_small_lite_640x640_20231117_model.prototxt、
META_ARCH_TYPE=6、# YOLO 系列
input_mean=[0.0、0.0、0.0]、
INPUT_SCALE=[0.003921568627、0.003921568627、0.003921568627]、  
Input_optimization=True、
INPUT_SHAPE=[1、3,608,608]、
)、
postprocess = dict (
格式化板=“DetectionBoxSL2BoxLS",“,</s>、
resize_with_pad=True、
关键点=False、
object6dpose=False、
归一化检测=错误、
shuffle_indices=None、
挤压轴=无、
rempe_list=[(–1、5)、(–1、1)]、
IGNORE_INDEX=None、
)、
task_type=“detection",“,</s>、
extra_info=dict (
OD_TYPE=“Yolov8",“,</s>、
framework=“Ultralytics",“,</s>、
num_images=20、#校准图像
NUM_CLASS=2、
label_offset_type=“default",“,</s>、
LABEL_OFFSET=0、
),)

问题:

使用以下器件运行编译时:

python3 onnxrt_ep.py -c -m od-custom_yolov8n_608x608

我在量化和校准过程中得到以下误差:

2025年08月06日 17:08:12.435674125 [E:onnxruntime:、SEQUENCE_executor.cc:494 ExecuteKernel]
运行 ReorderInput 节点时返回非零状态代码。
名称:“ReorderInput"</s>“
状态消息:/root/onnxruntime/onnxruntime/contrib_ops/cpu/nchwc_ops.cc:17
虚拟 onnxruntime::common::Status onnxruntime::contrib::ReorderInput::Compute (
onnxruntime::OpKernelContext*) const
x_rank == 4 为 false。

流程回溯结束于:

onnxruntime_pybind11_state.RuntimeException :[ONNXRuntimeError]: 6 : runtime_exception
运行 ReorderInput 节点时返回非零状态代码。

我看到:

MEM:Deinit ...完成了!!!

此时、该进程未完全退出—它将挂起。

观察结果:

如果使用-d以下选项禁用卸载:

python3 onnxrt_ep.py -c -m od-custom_free_smoke_yolov8n_608x608 -d

在 CPU 回退时成功运行:

Completed_Model:1、名称:od-custom_freeSmoy_yolov8n_608x608.
总时间:157.87,卸载时间:0.00, DDR RW MB:0
输出图像文件:py_out_od-custom_yolov8n_608x_...
输出 Bin 文件:py_out_od-custom_yolov8n_608x_...

问题:

  • ReorderInput启用卸载时、为什么编译会因秩错误而失败?

  • 我的 ONNX 导出、模型配置或校准设置是否有问题?

  • 我是否需要调整输入形状 (608x608) 或删除meta_arch_url条目,因为 YOLOv8 通常不需要 prototxt?

  • 另外、我目前正在使用中的 prototxt 文件edgeai-tidl-tools/examples/models/prototxt/yolo/yolov8_small_lite_640x640_20231117_model.prototxt。 是否可以按原样使用此协议?

欢迎提供有关如何解决此错误的任何指导。

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

    尊敬的 Yura:

    您能和我们分享您的模型吗? 我需要在结束时运行它并在评论之前查看。  

    此致、

    Christina

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

    e2e.ti.com/.../yolov8_5F00_custom_5F00_model.zip

    您好 Christina、

    我附上了一个.zip 文件、其中包含:
    1.定制 YOLOv8 模型 (.onnx)
    2.我使用的 protottxt 文件(来自 edgeai-tidl-tools/examples/models/prototxt/Yolo/yolov8_small_lite_640x640_20231117_model.prototxt)

    作为参考、我使用脚本编译了模型:
    /edgeai-tidl-tools/examples/osrt_python/ort/onnxrt_ep.py

    如果您需要任何其他信息、敬请告知。

    此致、

    Yura

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

    谢谢 Yura、

    我会仔细研究一下、并希望下周初给您一个答案。

    此致、

    Christina

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

    谢谢您、Christina。
    感谢您的帮助、我将等待您的更新。

    此致、
    Yura

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

    尊敬的 Yura:

    对延误表示歉意、只是想让大家了解一下、我正在处理这件事、但只是有一些延误。

    在此期间、我将尝试回答您的问题/要求澄清

    •  ReorderInput 启用卸载时、为什么编译会因秩错误而失败?

    您使用的输入格式是什么? 输入是否作为.bin 文件? 如果是映像文件以外的任何内容、则需要更改我们的 onnxrt_ep.py 才能正常运行。  

    • 我的 ONNX 导出、模型配置或校准设置是否有问题?

    由此、我看不到您的 ONNX 文件或模型配置中有任何问题。 如果您不使用 Docker 设置、我建议您尝试它并查看是否有任何改进(始终建议使用 Docker 设置)

    • 我是否需要调整输入形状 (608x608) 或删除 meta_arch_url 条目,因为 YOLOv8 通常不需要 prototxt?

    • 另外、我目前正在使用中的 prototxt 文件 edgeai-tidl-tools/examples/models/prototxt/yolo/yolov8_small_lite_640x640_20231117_model.prototxt。 是否可以按原样使用此协议?

     我仍然在检查 prototxt 文件,并将在我完成测试后给你这个问题的答案。  

    如果您可以共享您的文件(input、model_configs 等)、这也将有助于重新创建。 此外、如果您能够、我建议升级到 10_01_03_00 版本、该版本向后兼容您的 SDK 版本、并可能有一些其他错误修复、从而影响您的模型。 修复的错误可在以下位置找到: github.com/.../10_01_03_00

    此致、

    Christina

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

    e2e.ti.com/.../ti_5F00_yr.zip

    您好  Christina

    感谢您的反馈。

    我想分享我的一些更新:

    • ReorderInput rank错误发生之前、我检查了 Generatedgraphvizinfo.txt(生成)并找到了一个标记为UNSUPPORTED的部分。 这是否是问题的根本原因?

    • 为了方便您查看、我附上了一个 zip 文件、其中包括:

      • tempDir编译期间生成的

      • model_config.txt其中包含我在中使用的模型配置 model_configs.py

      • 我的训练模型 (best.pt)

      • .yaml训练期间使用的数据集文件

    另外、我想澄清您有关输入格式的问题。 您指的是:

    1. 推理输入 在测试期间使用(例如,A.bin 或图像文件)、

    2. 校准数据集 在编译期间使用?

    在本例中、为了进行校准、我使用了 20 张大小的图像 608x608. 。 如果这是您的意思、还是您提到的是其他方面、请告诉我。

    如果需要任何其他信息、请告诉我。

    再次感谢您的支持!

    此致、
    Yura

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

    您好 Yura

    是的、当模型运行时、这些层不兼容、正在 CPU 上运行。 此链接显示有关这些运算符的约束的详细信息:https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/supported_ops_rts_versions.md

     对于 MaxPool、不支持 5x5 的内核形状、而对于子图层、其中一个错误是只有一个维度可以大于 1、而它是一个数字或一维向量、另一个错误是两个输入都不能是变量。

    一旦修复了这些不兼容问题、就应该能够运行此错误。  

    就输入格式而言、我指的是校准数据集、但是、由于您也有推理数据集、也可以发送此数据集。 我能够使用示例数据集在我的最终重新创建您的问题。 有些模块将在使用 TIDL 进行初始测试期间具有相同的校准和推理数据集、但也可以使用两个不同的数据集。  

    您收到的错误与图层中的不兼容有关。 我只是想确保您的输入数据集也不会与此不兼容。  

    希望这对您有所帮助、如果您有任何其他问题、请告诉我。

    此致、

    Christina

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

    e2e.ti.com/.../surgery_5F00_model_5F00_custom.zip

    尊敬的 Christina:

    我理解你的解释。 根据您的指导、我修改了从转换的模型best.pt。 。 编译成功 、但在电路板上进行推理期间 置信评分和类别 ID 始终为零
    我怀疑在应用自定义手术代码的过程中、该模型与 TIDL 预期的 YOLO 头部/后处理语义不同。

    以下是我确认的其他一些要点以及我想问的问题:


    1.使用 TI 代码/实用程序调整层的可能性

    • TI 提供的代码或实用程序是否可以提供这些代码或实用程序 转换/调整图层(尤其是检测头) 这意味着什么?

    • 例如、在edgeai-tidl-tools/中edgeai-tensorlab、是否有参考脚本可以帮助替换不受支持的操作或将 YOLO 头与预期的元架构对齐? 如果是、我将感谢您介绍如何使用它们。

    • 还能分享一下 建议的 meta-arch/protottxt 配置 以便正确映射框/分数/类?


    2. onnxrt_ep.py-o 选项生成并处理子层

    • 我发现指导建议onnxrt_ep.py使用该-o选项运行、因此我尝试了它。 这似乎可以处理 5×5 MaxPool 替换、但 子相关约束不会自动解析

    • 应如何操作 子层 是否可以修改/替换、以便与 TIDL 兼容? (具体的准则会很有帮助。)


    3.使用-d选项时出现 BBOX 问题

    • 当我best.onnx使用onnxrt_ep.py-d选项运行原稿时、我看到了 仅沿图像顶部绘制边界框

    • 这是否是的常见症状 坐标取消规范化/信标框取消填充错误 跨度/锚定错位 元架构不匹配 后处理假设 ? 非常感谢有关 TI 预期的框映射规则(缩放,偏移,输入到原始分辨率映射)的任何指导。

    • 此外、是否还有 建议的操作值 导出到 ONNX 时?


    附件 :我包括了一个包含我的的 zip 文件 手术代码 手术修改的 ONNX 模型 。 如果需要、我还可以共享编译日志、显示全零输出的推理日志以及校准和推理数据集。

    感谢您的支持。

    此致、
    Yura

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

    尊敬的 Yura:

    1. TIDL 模型优化器是您可以用于此目的的工具: https://github.com/TexasInstruments/edgeai-tidl-tools/tree/master/osrt-model-tools/osrt_model_tools/onnx_tools/tidl_onnx_model_optimizer

    就元架构而言、此文档显示其配置的详细信息 https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/tidl_fsg_od_meta_arch.md#usage

    2.-o 允许 ONNX 优化器,但对于其中一个子层,有两个输入作为变量传入。 这需要对层进行一些更改才能兼容。 另一个子层问题是需要更改常量张量、使其成为向量。 我看到您已尝试替换调整 onnx 中的子层。 您在运行此模型时是否遇到相同的错误?  

    3.-d  禁止在 x86 仿真器中卸载到 C7x、因此一切都在 ARM 上运行、因此不涉及 TIDL。 关于您询问的边界框问题、我需要对此进行更多调查、因为我不确定是否有任何推荐的 opset 值或框映射规则。  

    此致、

    Christina

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

    感谢您发送编修。

    1. 在您分享的链接中、我发现似乎有一些用于优化子层的代码。 但是、我当前的 SDK 版本是 10_00_00_08 、而链接中的代码看起来属于最新版本 (11_00_xx)。 我想知道使用模型优化器时 SDK 版本是否很重要。

    2. 我使用自己的实现替换了子层、然后编译了模型。 但当我在电路板上运行推理时、所有边界框都会出现 置信度= 0

    3. 我还检查了您共享的元架构/配置链接。 我的模型是什么 YOLOv8 、但在中examples/models/prototxt/yolo、我只看到的 prototxt 文件 YOLOv8s/n-Lite 模型。 我应该只是通过更改in_widthin_heightnum_classes来修改该文件以匹配我的模型、还是还有其他需要调整的地方?

    再次感谢您的支持。

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

    尊敬的 Yura:

    1.是的,这适用于任何 SDK 版本  

    2.我会看看我是否可以运行你新编辑的模型,并看到相同的。 仍在对此进行调查。  

    3.是的,这个 prototxt 将是你需要使用的一个,与你提到的更改。 如果您的模型没有任何其他更改、这应该没问题。 每当显示为-lite 时、都意味着该模型已经过优化、可在 TIDL 固件上运行、因此可能会略有变化、但功能相同。

    此致、

    Christina