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-AM62A-LP:如何转换使用自定义数据集训练的模型

Guru**** 2473260 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1457061/sk-am62a-lp-how-to-convert-a-model-trained-with-a-custom-dataset

器件型号:SK-AM62A-LP

工具与软件:

您好!

我联系你是因为我想转换一个模型从动物园与我自己的数据库。 我的数据集是一个多类数据集、即每个图像有多个标签(超过3个标签)。 我有一个检查点、使用热电筒模型(resnet50)获得。 我可以直接使用这些权重吗?

我成功运行了 GitHub https://github.com/TexasInstruments/edgeai-tensorlab/tree/main?tab=readme-ov-file 中给出的示例

但是、在所有示例中、每个图像只有一个标签、我不知道如何以及在哪里可以更改它。 您有什么建议吗?

我将使用 GitHub 的分支 r9.1。

谢谢!

Anaïs μ A

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

    您好、 Anaïs

    问得好。 我把这解释为你有一个图像、你需要3个 单独的标签、这样你就可以在同一个输入上有效地运行3个分类器。 是这样吗? 这意味着您的模型将具有多个输出。

    我们的 Model Zoo 中的主要 RESNET 模型将有1x1000 (或1x1001)用于对1000个不同的类进行分类。 当然、您可以修改类似这样的模型来具有多个输出、并且您可以从同一组预先训练的权重(PTH 文件)开始。 这将需要您深入研究一些培训代码

     

    [报价用户 id="594417" url="~/support/processors-group/processors/f/processors-forum/1457061/sk-am62a-lp-how-to-convert-a-model-trained-with-a-custom-dataset "]

    我成功运行了 GitHub https://github.com/TexasInstruments/edgeai-tensorlab/tree/main?tab=readme-ov-file 中给出的示例

    [报价]

    具体是哪一个示例? edgeai-tensorlab 将我们的几个转储组织成一个转储、用于解决版本控制和依赖关系方面的一些难题。 通常 edgeai-modelmaker 用作训练的顶级工具、但它支持的模型有限(遗憾的是不包括 resnet50)

    您的任务如下所示:

    进行总结时、您需要更改模型和数据集处理以允许3个输出。

    编辑:我最近在我们的 Model Zoo 和支持工具上发布了一个常见问题解答。 您的案例是注释3的扩展、其中您正在使用 TI 尚未实际修改的 model-zoo 模型。  

    BR、
    Reese

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

    Reese、您好!

    感谢您的答复。 我目前在了解如何编译 ONNX 模型以生成模型工件文件夹时遇到问题。 我听从了您的建议、现在正在使用 GitHub 存储库

    https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/custom_model_evaluation.md。

    我成功地为 edgeai-tidl-tools 安装了 Docker。

    根据我的理解、编译步骤如下:

    "[...]

    • 更新推理脚本、通过传递所需的编译选项来使用 TIDL 加速来编译模型。 有关所有必需参数和可选参数的详细文档、请参阅此处。
    • 使用用于模型编译和校准的代表性输入数据样本运行带有编译选项的 python 代码。
      • 默认选项要求最少20个输入数据样本(calibration_frames)用于校准。 对于快速模型编译、用户也可以将最小值设置为1 (这可能会影响定点推理的准确性)。
    • 在模型编译步骤结束时、将在用户指定的路径中生成用于推理的模型工件。
    • 使用 TIDL 加速选项创建 OSRT 推理会话、以使用上述步骤中生成的模型工件运行推理。
      • 用户可以更新为编译编写的现有 python 代码、或将编译代码复制到新文件并使用加速推理选项进行更新。
    • 有关使用编译和加速推理选项创建 OSRT 会话的信息、请参阅下表。

    "

    但是、我不确定编译步骤需要运行哪个脚本。 第一点对我来说不是很清楚。 是 /home/root/examples/osrt_python/ort/onnrt_ep.py 吗? 如果是、我在尝试运行此脚本时遇到错误:"AttributeError:'InferenceSession'对象没有属性"get_TI_benchmark_data""。

    您能否确认我使用的是正确的 Python 脚本?

    此致、

    Anaïs μ A

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

    您好、 Anaïs

    然而、我不确定编译步骤需要运行哪个脚本。 第一点对我来说不是很清楚。 是 /home/root/examples/osrt_python/ort/onnrt_ep.py 吗? 如果是这样、我在尝试运行此脚本时遇到错误:"AttributeError:'InferenceSession'对象没有属性'get_TI_benchmark_data'"。[/QUOT]

    是的、您走对了。 这是在 edgeai-tidl-tools 中使用的正确脚本。 您可以使用-c 选项来运行此脚本以进行编译、使用-d 选项在 CPU 上运行(因此任何形式都不会有 TIDL)或者两者都不使用 TIDL 运行(如果您在 x86 PC 上、则包括 C7x 仿真)。

    'InferenceSession'对象没有属性'get_TI_benchmark_data'"[/报价]

    与另一个激活的线程一样、您可能会遇到一些类似的问题: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1458023/processor-sdk-am62a-edgeai-tidl-tool-compile-error

    get_TI_benchmark_data 函数仅在 TIDL 版本的 onxruntime 中提供。 也许您也安装了 onnxruntime 的主要上游版本。 您能向我显示以下命令的输出吗?

    pip3 freeze | grep -i "onnx"

    例如、适用于 TIDL 9.2的 python3.10虚拟环境如下所示

    caffe2onnx==1.0.2
    onnx==1.13.0
    onnx_graphsurgeon @ git+github.com/.../TensorRT@68b5072fdb9df6b6edab1392b02a705394b2e906
    onnxruntime-tidl @ file:///home/reese/1-edgeai/1-ti-tools/1-tidl-tools/10.0-tidl-tools/onnxruntime_tidl-1.14.0%2B10000000-cp310-cp310-linux_x86_64.whl#sha256=5efb894e39d3ca988e0644a1d0e9e34eab34c1a1f374d0085b9900febbb9724d
    onnxsim==0.4.35
    -e git+github.com/.../edgeai-tidl-tools@b7b07738bcd9afc7f74580217e81c307668a84ed

    你应该只有 onnxruntime-tidl、而不是普通的 onxruntime。 我建议使用一个虚拟环境来保持我们的 onnxruntime 版本独立。 否则、我认为默认导入会在运行时选择上游。  

    BR、
    Reese

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

    Reese、您好!

    很高兴听到我走在正轨上、谢谢!
    我正在使用 Docker 运行脚本、并且已成功安装 onnxruntime-tidl:

    但是、运行 onnxrt_ep.py 脚本时仍然会遇到问题。

    我已导出 TIDL_TOOLS_PATH、当我检查目录时、我可以看到 libtidl_onnxrt_ep.so 文件。 此外、当我使用 OS.ENVIRON 打印所有环境变量时、会显示 TIDL 的正确路径:


    你有什么建议吗?
    谢谢!

    Anaïs μ A

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

    我找到了解决方案、需要导出 LD_LIBRARY_PATH

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

    之所以联系我、是因为推理代码在我的数据集和自定义模型上完美运行。 但是、当我添加编译参数时、会遇到分段错误。

    你知道这可能是什么原因造成的吗?

    谢谢!

    Anaïs μ A

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

    您好、Anaïs

    很高兴您能够解决上述一些路径问题--您找到了正确的解决方案。

    但是、当我添加编译参数时、我遇到了分段错误。

    嗯、很难说基于这些日志。 我不能告诉你在哪里失败了

    就像当您在没有任何选项的情况下运行时、当尝试使用 TIDL 进行推理时、它会找不到正确的文件、以至于整个网络都在 CPU 上运行。 编译命令之前行中的一些输出看起来有些奇怪、例如 模型中有32687子图(理想情况下为1、但由于软件限制器、最多为16)。 也许你曾尝试过编译,但它失败了,但仍然生成了一些中间文件... 否则、我希望您的初始推理会由于缺少伪影而立即失败。

    我需要编译命令的更多日志来建议解决方案。 请使用以下设置运行编译、并共享日志--理想情况下、还应共享工件、特别是工件/tempDir 下的 SVG。

    • Export TIDL_RT_DEBUG=1在 Linux env 中#
    • "Debug_level":2 #在 model_config 中的"optional_options"中或通过在 common_utils.py 中设置全局变量

    通过 gdb 运行编译命令、并共享调用栈/回扫(gdb shell 中的'bt')以查看我们遇到此 seg 错误的位置、可能也很有用。

    BR、
    Reese

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

    Reese、您好!

    感谢您的答复。 感谢您的建议、我发现我在保存工件的文件夹路径中犯了一个错误。 但是、我仍然遇到分段故障、以下是日志:

    e2e.ti.com/.../error_5F00_compile_5F00_tidl.txt

    它来自 libvx_tidl_rt.so (文件存在于我的 tidl-tools 路径中)。 但当我查看输出路径(工件文件夹)时、已经创建了多个文件/文件夹:

    这是否意味着编译仍在完成、并且我可以在 AM62A 板上使用此模型?

    谢谢!

    Anaïs μ A

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

    在我之前的消息中、我忘记提及我已在日志文件中隐藏了架构详细信息。 我用[...]替换了架构细节。

    此致、

    Anaïs μ A

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

    您好!

    感谢您提供的信息和屏幕截图、非常有用。 反向跟踪尤其告诉我、这在 TIDL 导入工具中发生的相当深入。

    这是否意味着编译仍在完成、我可以在 AM62A 电路板上使用此模型?
    [报价]

    否、看起来编译未完成。 这些 tempDir 文件是一个工作目录、一旦编译完成、一些文件将被复制回工件/目录。 有时这些中间二进制文件就足够了、但我怀疑此处的情况是否属实。

    根据日志、TIDL 在尝试运行 InnerProduct (或类似矩阵乘法)层的浮点实现时在编译期间出错。 这是校准和量化过程的一部分。 很难马上解释为什么这样做失败了

    Core 0 Alg Process for Layer # [...]

    这是最后一层、即第0层吗? 它可能有助于在浏览器中打开... tidl_net.bin.svg 并发送最后一层的屏幕截图与打印"层#ALG 过程". 您可以将鼠标悬停在节点上--这将仅提供有关该图层的更多信息。 我要从这个链接中寻找像这样的图片: https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/tidl_osr_debug.md#example-visualization-1。 您可以随意编辑任何可能会暴露更多细节的内容、而不必担心。

    我将借此机会指出、10.0 SDK 和 TIDL 工具在编译和推理期间对稳健性和日志记录进行了许多改进。 如果可以、我建议升级。 您看到的问题很可能已在较新版本中得到解决。

    BR、
    Reese

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

    Reese、您好!

    感谢您的回答。 我已经隐藏了架构、但最后一层是:Core 0 Alg Process Layer #- 77。
    这是一个密集的层,文件中的信息... tidl_net.bin.svg 为该层:

    e2e.ti.com/.../last_5F00_layer_5F00_executed.txt

    但是、我注意到形状的尺寸太多。 我不确定原因、但由于输入、尺寸为[1、1、1、3224]。 前两个维度通常不存在。 您是否认为该误差可能与此有关?

    关于 SDK 10.0、我们无法使用。 我们已经尝试过它、但与 Python 或某些库存在一些不兼容问题。


    此致、

    Anaïs μ A

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

    您好、 Anaïs

    Reese 本周即将结束、下周才能回复。

    此致、

    建中

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

    您好、 Anaïs

    感谢您在我外出时的耐心等待。

    这是网络的最后一层吗? 我注意到这称为"output_netFormat"、我知道 TIDL 有时会添加到名称中。  

    • 同样、该层是模型的输出吗? 该输出是否也用作另一层的输入?

    我看到数据类型是 weightdElementSizeInBits=32、输出数据类型与 TIDL_SinglePrecFloat 类似、因此我们 在此阶段处于浮点状态。 通常、模型的权重应为8或16、输出类型应为 Char 或 short、具体取决于量化模式。 这支持我的理论、即模型导入过程在初始校准阶段失败、在初始校准阶段、模型以32位模式运行。

    当存在需要在 Arm 上运行(未加速)的层时、6个维度有时会导致问题、随后需要在带 TIDL 的 C7x 上运行更多层以进行加速时。 我们使用6-D 表示法(以及间距等其他几个变量)对加速器数据移动机制进行编程、该机制本身就支持6D。 但我认为这不是问题。

    忽略前两个[1、1、...]、其他尺寸是否与您的模型一致? 我已经看到中间张量形状错误(在 SVG 中可见)的错误模式、这会导致以后出现问题。 在原始模型中输出应该为[2048、1、6]。

    我还建议尝试拒绝列出该层以验证它是否是犯罪者。 在此处查看文档:  

    如果您愿意、也可以分享您的模型的一个版本。 随机权重是可以的。 您还可以通过直接消息与我共享以保护 IP。 或者、共享该故障层77的配置+张量输入/输出形状的屏幕截图。

    BR、

    Reese

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

    Reese、您好!

    感谢您的回答。 我可以直接向您发送一个 ONNX 模型。 我认为我们向前迈进会更容易。
    谢谢!

    Anaïs μ A

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

    明白了、我已经给您发送了一条消息、让您开始这个过程。 请分享您的模型以及与之关联的 model_config python 代码。 谢谢!