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:转换 ONNX 模型以在电路板中使用它

Guru**** 2487425 points
Other Parts Discussed in Thread: SK-AM62A-LP

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1440116/sk-am62a-lp-converting-onnx-model-to-use-it-in-the-board

器件型号:SK-AM62A-LP

工具与软件:

大家好、团队成员:  

我目前正在尝试转换 ONNX 分段模型、以便在 SK-AM62A-LP 中运行。  
我创建了以下配置文件:

modelType=2
inputNetFile=/home/joaco/edgeai-tidl-tools/models/public/onnx_model_112x96.onnx
outputNetFile=onnx_model_112x96_net.bin
outputParamsFile=onnx_model_112x96_params.bin

并尝试运行 tidl_model_import 工具、以生成板所需的文件。 我的理解是、通过执行以下操作、我会将模型和模型工件传递到 app_edgeai.py。

更新固件  

./tidl_tools/tidl_model_import.out tidl_tools/config.txt 


出现以下错误:

Couldn't open Parameter Config file ../../test/testvecs/config/import/device_config.cfg.
Failed to read device config

如有任何帮助、我将不胜感激。

谢谢!

Joaquin Perez

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

    你好、Joaquin、

    您是否尝试使用 tidl_model_import.out 直接导入模型? 作为 edgeai-tidl-tools 的一部分下载的独立 tidl_tools 不支持这一点。 这可能可行、但您需要覆盖命令行上的多个路径。  

    • 该二进制文件中有几个假设路径、当在 examples/osrt_python/脚本中调用以进行编译时会被覆盖。 细节有点模糊
    • device_config.cfg 位于 tidl_tools 文件夹中。 从技术上讲、您可以创建打印输出中提到的目录结构、并将 CFG 文件复制到该位置。

    在独立模式下使用此工具的是"TIDL_RT"流程、该流程的支持有限。 它将生成仅与 TIDL_RT C++应用程序兼容的二进制文件。 要将工件与 ONNX Runtime 或 TFLite 等 OSRT 一起使用、还需要使用该运行时进行编译、因为它会生成运行时进行推理所需的多个文件。

    我建议使用 examples/osrt_python/ort/onnxrt_ep.py 进行编译。

    BR、
    Reese

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

    感谢您的回复!
    在尝试使用 examples/osrt_python/ort/ onnxrt_ep.py 编译模型时出现以下错误:

    root@6a971e398556:/home/root/examples/osrt_python/ort# python3 onnxrt_ep.py 
    Available execution providers :  ['TIDLExecutionProvider', 'TIDLCompilationProvider', 'CPUExecutionProvider']
    
    Running 1 Models - ['onnx_model_112x96']
    
    
    Running_Model :  onnx_model_112x96  
    
    Process Process-1:
    Traceback (most recent call last):
      File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
        self.run()
      File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
        self._target(*self._args, **self._kwargs)
      File "/home/root/examples/osrt_python/ort/onnxrt_ep.py", line 236, in run_model
        sess = rt.InferenceSession(config['model_path'] ,providers=EP_list, provider_options=[delegate_options, {}], sess_options=so)
      File "/usr/local/lib/python3.10/dist-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 362, in __init__
        self._create_inference_session(providers, provider_options, disabled_optimizers)
      File "/usr/local/lib/python3.10/dist-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 399, in _create_inference_session
        sess = C.InferenceSession(session_options, self._model_path, True, self._read_config_from_model)
    onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Load model from ../../../models/public/onnx_model_112x96.onnx failed:vector::_M_range_check: __n (which is 1) >= this->size() (which is 1)
    

    当使用 onnx 版本1.17.0和 onnx 运行时版本1.19.2时,该模型已经过测试并能正常工作。 setup.sh 所安装的版本具有不同的版本
    当我更新的版本的 onnx 和 onnx 运行时,我去下面的错误:

    root@6a971e398556:/home/root/examples/osrt_python/ort# python3 onnxrt_ep.py 
    Available execution providers :  ['AzureExecutionProvider', 'CPUExecutionProvider']
    
    Running 1 Models - ['onnx_model_112x96']
    
    
    Running_Model :  onnx_model_112x96  
    
    /usr/local/lib/python3.10/dist-packages/onnxruntime/capi/onnxruntime_inference_collection.py:69: UserWarning: Specified provider 'TIDLExecutionProvider' is not in available provider names.Available providers: 'AzureExecutionProvider, CPUExecutionProvider'
      warnings.warn(
    *************** EP Error ***************
    EP Error Unknown Provider Type: TIDLExecutionProvider when using ['TIDLExecutionProvider', 'CPUExecutionProvider']
    Falling back to ['CPUExecutionProvider'] and retrying.
    ****************************************
    Process Process-1:
    Traceback (most recent call last):
      File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
        self.run()
      File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
        self._target(*self._args, **self._kwargs)
      File "/home/root/examples/osrt_python/ort/onnxrt_ep.py", line 249, in run_model
        imgs, output, proc_time, sub_graph_time, height, width  = infer_image(sess, input_images, config)
      File "/home/root/examples/osrt_python/ort/onnxrt_ep.py", line 145, in infer_image
        copy_time, sub_graphs_proc_time, totaltime = get_benchmark_output(sess)
      File "/home/root/examples/osrt_python/ort/onnxrt_ep.py", line 84, in get_benchmark_output
        benchmark_dict = interpreter.get_TI_benchmark_data()
    AttributeError: 'InferenceSession' object has no attribute 'get_TI_benchmark_data'
    

    我知道此错误是由 onnx 运行时的版本引起的。 有办法解决这个问题吗?

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

    你好、Joaquin、

    是的,第二个日志肯定发生了,因为 onnxruntime 是通过像 PIP 这样的普通软件包管理器第二次设置的。 应删除此版本。 当运行'pip freeze'时、正确的 onnxruntime 将被命名为 onnxruntime-tidl、并且可以同时安装 onnxruntime 的基本版本--这可能会产生错误。

    因此、您的根本问题是模型无法在 ONNXRuntime 中针对此软件包的 TIDL 版本进行初始化。 您的 ONNX 文件位于哪个 opset / IR 版本? 我们支持选项9、11和18

    如果使用-d 命令行标签运行 onnxrt_epy.py 命令、它将尝试使用 CPUExecution 提供程序加载模型并运行。 这是一项很好的基线检查。 这对您有用吗?

    您也可以尝试传递-o 标签(如果您使用的是10_00_00_00工具或更新版本)、它应解决在应用一些优化规则后重新导出模型时的任何选项集问题。 这会调用tidl_onnx_model_optimizer