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:在哪里可以找到最新的导入 Tensorflow 模型用户指南?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1511065/tda4vm-where-can-i-find-the-latest-user-guide-for-importing-tensorflow-models

器件型号:TDA4VM

工具/软件:

如何为 TIDL 导入我自己经过训练的 Tensorflow 模型? 哪一项是有关该问题的最新文档?

我首先找到了 TIDL 用户指南页面、但注意到 SDK 的版本不是最新的。 -> TI 深度学习库用户指南:开始使用 TI 深度学习(TIDL)生态系统

我搜索了最新页面并找到了以下内容、但内容似乎与以前不同。  关于 tidlImporter 的描述似乎缺失。

TI 深度学习产品用户指南:构建说明

我们的 SDK 版本: Processor SDK RTOS J721E 10_01_00

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

    尊敬的 Daigo:

    最简单的方法是使用 OSRT 方法。  请参阅此处:

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

    我建议将您的模型转换为 ONNX、因为它具有更好的支持、但 TFL 应该起作用。

    在这种情况下、您会进入以下目录:

    edgeai-tidl-tools/examples/osrt_python/TFL

    通过复制类似如下的部分、将模型添加到./model_configs.py 中:

    "test_model":create_model_config (
    Source=AttrDict (
    model_url="">git.ti.com/.../resnet18_opset9.tfl"、
    推断形状=真、
    )、
    前进程=AttrDict(
    调整大小=256、
    作物=224、
    data_layout="NCHW"、
    resize_with_pad=False、
    REVERSE_CHANNES=False、
    )、
    Session=AttrDict(
    session_name="onnxrt"、
    model_path=os.path.join ('/home/root/models、"test_model.tfl")、
    Input_Mean=[123.675,116116.28,103.53]、
    INPUT_SCALE=[0.017125、0.017507、0.017429]、
    Input_optimization=True、
    )、
    TASK_TYPE="Classification"、
    Extra_info=AttrDict (num_images=numImages、num_class=1000)、
    可选_options=AttrDict (
    DEBUG_LEVEL= 4、
    )、
    )、

    将"test_model"更改为您的模型名称(可以是任何名称)、更新模型的路径(至少、请参阅上面的链接以了解特定于您的模型的参数)。  完成模型配置后、可 通过以下方式编译模型:

    python3 ./tflrt_delegate.py -c -m

    然后、您可以通过以下方式运行模型:

    python3 ./ tflrt_delegate.py --m

    编译的输出将放入  

     edgeai-tidl-tools/model-artifacts/

    模型的副本将放置在 edgeai-tidl-tools/models/public 中。

    此致、

    Chris

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

    您好、Chris、

    我知道 ONNX 是最推荐的,并且支持 TFL。

    我有3个问题。

    1. RTOS-SDK 中当前是否已弃用工具"c7x-mma-tidl/ti_dl/utils/tidlModelImport"?
    2.我的理解是否正确:"tidlModelImport"支持常规 Tensorflow 不是轻量级版本,但"edgeai-tidl-tools"不支持?
    3.您提供的 Dict 类型的每个参数的描述在哪里?

    此致、

    Daigo

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

    1. RTOS-SDK 中当前是否已弃用工具"c7x-mma-tidl/ti_dl/utils/tidlModelImport"?

    设置后、我在 edgeai-tidl-tools 中使用 tidl_model_import.out。  通常具有最新的 TIDLRT 进口商。

    2.如果您想使用常规 TensorFlow 版本,最好从 TensorFlow 中获取它。

     3. https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/examples/osrt_python/README.md

    如果要导入 TF 模型、使用 edgeai-tidl-tools/examples/osrt_python/tfL 中的导入工具会更容易。实用程序 tflrt_delegate.py 运行 TF 的 OSRT 版本。  这样可以更轻松地导入模型、因为并非所有层都需要 TIDLRT 的支持。

    此致、

    Chris

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

    您好、Chris、

    实际上、我可以在以下位置找到 tidl_model_import.out。
    > /tools/AM68PA/tidl_tools/tidl_model_import.out
    但是、我根本不明白应该使用 tidl_model_import 还是 tflrt_delegate。 如果要编译模型并同时推断、是否应该使用 tflrt_delegate?  您能否更详细地解释一下这两种工具之间的区别以及如何使用它们?

    >   3. https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/examples/osrt_python/README.md
    我已经检查了你显示的链接,但我认为它不能解释所有的参数类型 Dict。 例如、我找不到"resize_with_pad"的说明。

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

    尊敬的 Daigo:

    要获得 tidl_model_import.out、您需要在全新克隆后从 edgeai-tidl-tools 目录运行"source setup.sh"。  如果之前失败的设置有伪影、则不会添加所有内容。  请遵循中的说明:

    https://github.com/TexasInstruments/edgeai-tidl-tools/?tab=readme-ov-file#setup

    必须编译模型;然后才能使用 TIDL 运行推理。 tidl_model_import 将模型导入到 TIDL (量化/编译)、然后运行模型(推理)、运行 PC_dsp_test_dl_algo.out。

    根据版本的不同、可能缺少一些。  查看您的特定版本、因为某些选项可能会被弃用、因此它们不再记录下来、但仍然可以正常工作。  

    此致、

    Chris

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

    您好、Chris、

    > 要获得 tidl_model_import.out、您需要在全新克隆后从 edgeai-tidl-tools 目录运行"source setup.sh"。

    是的、我明白。  运行 setup.sh 后、我能够找到 tidl_model_import.out。

    > 您必须编译模型;然后您可以使用 TIDL 运行推理。 tidl_model_import 将模型导入到 TIDL (量化/编译)、然后运行模型(推理)、运行 PC_dsp_test_dl_algo.out。

    感谢您的解释。 我现在了解用于编译和推断模型的可执行文件。 但是、我仍然不理解的是这些可执行文件与您最初介绍的 tflrt_delegate 之间的用法差异。 您能解释一下它们之间的区别吗?

    此致、

    Daigo

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

    尊敬的 Daigo:

    下面是运行模型的不同方式的详细介绍。   

    OSRT (开源运行时)。   

    这是最容易使用的、允许模型的某些部分在 ARM 上运行、而器件在 DSP 上运行。  对于 TIDL 中不支持层的复杂模型非常有用。  如果您有此选项、请使用此选项。

    • 有一个 osrt_cpp 和 osrt_python
    • 在这些下,有 ONNX 和 TFLite (ort/TFLL)。  两者都有类似的选项(这是 tflrt_delgate 所在的位置)。
    • 可在 edgeai-tidl-tools/examples/osrt_python 或  edgeai-tidl-tools/examples/osrt_cpp 中找到  
    • 通常使用 Python 版本、因为这更容易。
    • 最后、ONNX 比 TFL 更易于使用、因此如果您可以使用 ONNX 模型、您将会更好。
    • 下面是每个工具的帮助、但一般来说、您只需要-c 编译和-m 运行。

    edgeai-tidl-tools/examples/osrt_python/ort# python3 ./onnxrt_ep.py -h
    用法:onnxrt_ep.py [-h][-c][-d][-z][-o][-m 模型][-n ncpus]

    选项:
    -h、--help 显示此帮助消息并退出
    -c、--compile 在模型编译模式下运行
    -d、--disable_offload
    禁止卸载到 TIDL
    -z、--run_model_zoo 运行 model zoo 模型
    -o、--graph_optimize 通过 onnx-graph -外科医生- tidl 运行 ONNX 模型优化
    -m 型号,--models 型号
    要添加到要运行的列表中的模型名称
    -n ncpus、--ncpus ncpus
    要生成的线程数

    edgeai-tidl-tools/examples/osrt_python/TFL# python3 ./tflrt_delegate.py -h
    用法:tflrt_delegate.py [-h][-c][-d][-z][-m 模型][-n ncpus]

    选项:
    -h、--help 显示此帮助消息并退出
    -c、--compile 在模型编译模式下运行
    -d、--disable_offload
    禁止卸载到 TIDL
    -z、--run_model_zoo 运行 model zoo 模型
    -m 型号,--models 型号
    要添加到要运行的列表中的模型名称
    -n ncpus、--ncpus ncpus
    要生成的线程数

    TIDLRT (TI 深度学习运行时)

    • 编译后的 C++驱动程序文件(例如 tidl_modelimport.out 和 PC_dsp_test_dl_algo.out)可以在 tidl_tools 中找到。  
    • 运行这些模型需要导入和推理配置文件。
    • 为了使模型运行、必须在 TIDL 中支持所有模型层。

    此致、

    Chris

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

    您好、Chris、

    非常感谢。 我对这些分歧的理解比以前更清楚。

    我还有一些其他问题。

    我了解 OSRT 或 TIDLRT 将为 TI SoC 生成编译模型(在我的案例中为 TDA4VM J721e)。 (首先、我的理解是否正确?)

    如果我要在 SoC 中执行推理、应该需要创建自定义 OpenVX 节点。  不同的运行时在创建此自定义节点时会在多大程度上有所不同? 如果在 RTOS SDK 中有使用 OSRT 和 TIDLRT 的不同示例、您能告诉我吗? 我已经在查找和分析"app_tidl_od_cam"源。

    此致、

    Daigo

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

    尊敬的 Daigo:

    在行中回答…

    [Daigo]我了解 OSRT 或 TIDLRT 将为 TI SoC 生成编译的模型(在我的案例中为 TDA4VM J721e)。 (首先、我的理解是否正确?)

    [CHRIS]是的、他们都愿意。  OSRT 将在 edgeai-tidl-tools/model-artifacts 和 TIDLRT 中具有输出网络和 IO 文件、您指定这些文件的目标位置。

    [Daigo]如果我要在 SoC 中执行推理、应该需要创建一个自定义 OpenVX 节点。  

    [克里斯]只有当你想.  对于测试、 /opt/tidl_test 中有一个名为 TI_DEVICE_ARMv8_TEST_dl_algo_host_RT.out 的文件。  您可以在创建推理配置文件后运行它。

    root@AM69-sk:/opt/tidl_test # ls -altr
    共计182924
    -rwxr-xr-x 1根根根160632 Mar 9 2018 TI_DEVICE_ARMv8_test_dl_algo_host_rt.out
    drwxr-xr-x 28根根目录4096 May 6 18:14 ..
    drwxr-xr-x 2根根目录4096 May 6 18:16。
    -rw-r--r-- 1根 root 383 May 7 21:50 infer_evm.txt

    示例(最小) 推理配置文件(推理文件的文档 https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/08_02_00_05/exports/docs/tidl_j721e_08_02_00_11/ti_dl/docs/user_guide_html/md_tidl_sample_test.html ):

    inFileFormat = 0
    debugTraceLevel = 0
    writeTraceLevel = 0
    netBinFile =/opt/out/model_artifacts/my_model.bin
    ioConfigFile =/opt/out/my_model.bin
    outData ="/opt/out/evm_inference_output.bin "
    inData ="/opt/tidl_test/my_input_data.bin "
    numFrames = 1

    [Daigo] 在创建此自定义节点时、不同的运行时在多大程度上会产生影响?

    [CHRIS]我不明白您所说的"自定义节点"是什么意思。  如果您是指定制层、我建议您不要这样做、直到您对 TIDL 有更多的经验。

    [Daigo] 如果在 RTOS SDK 中有使用 OSRT 和 TIDLRT 的不同示例、您能告诉我吗?  

    [CHRIS]是的、查看 edgeai-tidl-tools/examples/osrt_python/model_config.py。  所有这些都是示例应用。  例如、运行 RESNET 18模型、cd 到 edgeai-tidl-tools/examples/osrt_python/ort/。  然后运行:

    编译

    python3 ./onnxrt_ep.py -c -m cl-ort-resnet18-v1.

    要运行:

    python3 ./ onnxrt_ep.py -m cl-ort-resnet18-v1.

    请按照 edgeai-tidl-tools 中的说明、首先设置 OSRT 环境。

    [Daigo] 我已经在查找和分析"app_tidl_od_cam"源。

    [CHRIS]最终、您将需要制定自己的应用程序、这是一个良好的开端。  最好先使用预构建的实用程序来测试模型。  有信心后、请迁移到您的应用程序、以免在模型创建中引入更多变量。

    此致、

    Chris

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

    您好、Chris、

    > [克里斯]我不明白你所说的"自定义节点"。 如果您是指定制层、我建议您不要这样做、直到您对 TIDL 有更多的经验。

    这意味着 OpenVX 自定义节点。 如果我只想在独立的应用程序中运行推理、您介绍的测试应用程序就可以了。 但是、在我的用例中、我还需要在一个应用中运行推理和查看应用(如 SRV)。 (这与"app_tidl_avp4"样本类似)

    因此、我认为在 ECU 中运行使用 OSRT 或使用 TIDLRT 编译的模型时、需要创建 OpenVX 自定义节点。  我的问题是、根据使用的模型结构和运行时、创建 OpenVX 节点的方法有多大不同? 如果我猜错了,我可以用 app_create_grap_tidl ()为任何模型创建一个 TIDL 节点吗?

    此致、

    Daigo

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

    尊敬的 Daigo:

    就这些。  请按照所示例 OpenVX 应用进行操作、并针对您的应用进行修改。

    此致、

    Chris

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

    您好、Chris、

    我认为对于任何模型(例如 OD、SEG 等)都需要 TIDL 节点、这是正确的吗?

    此致、

    Daigo

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

    尊敬的 Daigo:

    是的、这就是 TIDL 的工作原理。

    此致、

    Chris