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:Yolov5 模型输入类型

Guru**** 2451970 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1550214/tda4vm-yolov5-model-input-type

器件型号:TDA4VM


工具/软件:

我已经使用 edgeai-yolov5 训练了一个 yolov5 模型、然后使用 edgeai-tidl-tools 对其进行编译、我注意到 param.yaml 中的输入详细信息为 type:tensor (float)、而在 Model Zoo 上提供的预编译模型中、否则类型为 tensor (uint8)、这可能是什么原因以及它在推理中有什么影响?

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

    尊敬的 Vendanth:

     出于 性能原因、TIDL 模型应使用 uint8 或 uint16 运行。  其中 int8 快 4 倍、int16 快。  浮动将正常工作、但在边缘器件上非常慢。  通常、所有器件都作为 uint8 运行、最常见的输入是图像数据。  其中此数据为 3,255,255、255,255、这很好地映射到 uint8。   

    如果使用 edgeai-tidl-tools 进行编译、并将 paramBits 设置为 32、则我唯一可以看到输出模型为 32 位浮点的位置(最好不要这样做)。  尝试将 paramBits 设置为 8、如果精度足够高、则您的模型将在器件上以最佳方式运行。

    此致、

    Chris

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

    parambits/tensor_bits 仅设置为 8。 我讨论的是 param.yaml 内的输入详细信息。 我将在下面分享一个屏幕截图、您可以看到输入详细信息显示为 tensor (float)、但在 yolov5 的预编译模型中、它在输入详细信息中显示 tensor (uint8)

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

    而您在这里看到、Model Zoo 中的预编译版本将其作为输入类型:Tensor (unit8)

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

    我不确定 YAML 文件的来源、TIDL 不仅使用参数文件(值=某些内容)。  这些可能来自 Vision Apps 配置。  简而言之、TIDL 使用 uint8/16 浮点运行。

    原始 ONNX 模型可能将 float32 作为输入、但它仅在主机上运行、而不是在边缘器件上运行。

    此致、

    Chris

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

    使用 edgeai-tidl-tools 进行编译后、会为模型生成模型工件文件夹、模型工件文件夹具有此 param.yaml 文件、我已共享了其屏幕截图

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

    你好,我想出了问题  

    if models_configs[model_name]["session"]["input_optimization"] == True:
                        if filename[-1] == ".onnx":
                            print("------> Performing ONNX input optimization")
                            onnxOpt.tidlOnnxModelOptimize(
                                abs_path, abs_path, input_scale, input_mean
                            )


    这个代码片段在编译期间没有被调用,因为只有当我们在 model_configs.py 中提供下载 URL 和元架构 URL 时才调用它,但由于我训练了我自己的模型,我不必从 URL 下载。 如果生成的 onnx 模型通过此函数传递、则它会将输入类型修改为 unit8。

    谢谢
    Vedanth