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.

[参考译文] AM62A7:TIDL:AM62A 上人脸 Landmarking 模型的抖动和不准确关键点

Guru**** 2693585 points

Other Parts Discussed in Thread: SK-AM62A-LP

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1586327/am62a7-tidl-jitter-and-inaccurate-keypoints-for-a-face-landmarking-model-on-am62a

器件型号: AM62A7
主题中讨论的其他器件: SK-AM62A-LP

您好:
我正在尝试加速 A  面部标记/关键点检测模型 基础知识
SK-AM62A-LP 电路板。
该模型当前正在使用进行部署 SDK 10.01.04.00 TIDL 加速引擎
问题描述

  • PC 验证: 该模型可在使用标准的 PC 上完美运行 .onnx 文件、生成准确稳定的关键点。
  • AM62 部署: 在运行 TIDL 编译版本(使用原始版本 .onnx 和 AM62 上生成的工件文件夹)、预测的关键点是 错误 摇晃/抖动 帧到帧。

目标
我需要有关如何解决这两个问题的指导:

  • 不准确的关键点: 从纯 ONNX 模型迁移到 TIDL 编译的工件时、预测偏移的最可能原因是什么?
  • 抖动/抖动: 为什么 TIDL 推理会导致基于 PC 的 ONNX 推理中不存在的显著输出抖动?

有关为 AM62 修复地标模型或任何特定 TIDL 设置的任何提示都将非常有用。

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

    您好:

    感谢您提供明确的主题问题描述。 我很感激。  

    您遇到的问题听起来像是量化相关的误差损失。 让我首先向您介绍几个相关资源[1]

    抖动箱/关键点检测可能与 TIDL 和 C7xMMA 希望将模型运行为 INT8 来尽可能减少延迟有关。 量化本质上是有损耗的--从 32 位浮点数到 8 位整数 会 有一些损失。 我们可以通过几种方式来减少这种情况、例如量化感知训练、更好/更多的校准数据以及应用于 TIDL 的不同量化设置[2]。

    现在、对于输出是一系列坐标的物体检测和姿态估计网络而言、抖动检测是一个常见问题。 减少这种情况的主要方法是特意使一些层以 16 位模式(仍为整数)运行、而不是以 8 位运行 。 该配置可使用“output_feature_16bit_names_list"选项“选项[2]按层进行设置。 这将是 TIDL 解析的层名称的逗号分隔字符串

    • 请参阅模型工件/tempDir 目录中的一些包含图层名称的 TXT 文件 — 我们将一些运算符/图层融合在一起以提高性能、因此名称可能会与原始模型不同。  

    最典型的是将最后一组卷积作为 16 位 — 它们通常会馈入 SSD 头或网络中类似的 NMS 后处理块。 例如:  

    在此图中、将标识 16 位运算的最后一组 Conv2D 运算符。 ONNX SSD 头通常被分解,所以您应该找到网络中最后一组 Conv 层,并使用 output_feature_16bit_names_list  编译时设置将其设置为 16 位[3]  

    [1] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/tidl_fsg_quantization.md 

    [2] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/examples/osrt_python/README.md#advanced-options-for-accuracy-enhancement 

     [3] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/e70106c59a5bec5a4f794b81b88534279b8a2312/examples/osrt_python/common_utils.py#L78 

    此致、

    Reese

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

    感谢您提供详细的初始指导、特别是关于量化相关误差损失和 Output_Features_16bit_names_list 的使用。
    但是、在努力执行这些以及后续高级调试步骤后、坐标抖动和精度损失仍然存在。 这表明该问题可能比标准的培训后量化 (PTQ) 调整所能解决的深度更深。
    我正在发布所采取的详尽措施的正式摘要、确认已达到标准 PTQ 方法的限度。
    为了在针对 8 位基线 (tensor_bits = 8) 的情况下解决持续坐标误差和精度损失问题、我实施了一系列全面的精度修复:
    1.输出层的目标 16 位精度

    • 操作:使用 output_feature_16bit_names_list 明确设置最终输出层(例如 Conv_367、Clip_366、Conv_363,由图形工件标识)以 16 位精度运行。
    • 结果:没有改进。

    2.积极的手动 16 位增强

    • 操作:扩展了目标 16 位列表以包括多个特性映射和参数的最终层(使用 output_feature_16bit_names_list 和 params_16bit_names_list)。
    • 结果:没有改进。

    3.自动混合精度超控

    • 操作:启用最敏感的自动修复:advanced_options:mixed_precision_FACTOR = 2。 这是为了强制 TIDL 自动将导致全局量化误差的任何层提升到 16 位。
    • 结果:没有改进。

    4、全 16 位精度测试(控制案例)

    • 操作:作为一种关键的控制措施、整个模型在 tensor_bits = 16 的条件下进行全局编译、从而有效地禁用所有 8 位量化。
    • 结果:没有改进。 精度损失和坐标抖动保持不变。

    由于即使完全编译为 16 位(步骤 4)、模型也会表现出相同的坐标误差、因此该问题可能不是简单的 8 位精度缺陷。
    这一结果有力地指向以下情况之一:

    • 层运算符错误:最终坐标路径中的特定运算符(例如调整大小,添加,Div 或最终 Conv)正被 TIDL 后端错误处理、即使在 16 位模式下运行、也会导致错误累积或放大。


    您能否就此阶段最有效的诊断步骤提供指导? 鉴于混合精度和完整的 16 位测试失败、我可以使用哪些工具或日志来检查 TIDL 执行环境中特定后处理运算符的行为?

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

    您好:

    您可以尝试的另一种策略是从 TIDL 中运行图形的一部分、以便它在 Arm 上、而通过 TFLite 实现完整的 FP32。 一种方法是“拒绝列表“网络中的较后层(否则继续在 16 位中运行)、因此这些层以完整的 Fp32 在 CPU 上运行。  

    您的精度测试是在 x86 主机(使用仿真工具)还是在 target/EVM 上进行?

    您是否尝试过使用 tensor_bits=32 进行编译并使用仿真工具在 PC 上运行? 如果这也是错误的,那么它可能指示一个精确度错误。 Tensor_bits=32 被用作参考模式--它不会在器件上加速、而是用来确定 精度问题。   

    我们的精度调试指南中有更多值得遵循的步骤[1]

    对于 ONNX 模型(我看到您有 TFLite)、我们有时会制作一个网络版本、使每个中间张量都是一个输出--当它运行时、每个输出都转储到一个文件中。 然后、可以 使用 debug_level=4 使用 TIDL 运行原始模型、将跟踪转储到/tmp [2]、并将生成的_float.bin 与原始运行时的输出[1]进行比较。 我不确定 Tensorflow lite 模型是否能够以相同的方式进行修改、以便每个层都是模型输出。 生成的 float.bins 通常应该匹配,看起来类似于[3]-非线性行为、削波或其他“渐变“可视化也可以指示精度误差(这通常会向前推进到后续的图层)。

    • 请注意、对于每层都有输出的模型、不应与 TIDL 搭配使用。 该模型是一个参考点、因此我们可以按层分析准确性  

    [1] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/tidl_osr_debug.md#steps-to-debug-functional-mismatch-and-accuracy-in-host-emulation

    [2] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/tidl_osr_debug.md#feature-map-comparison-with-reference 

     [3] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/tidl_osr_debug.md#script-1--layer-level-activation-comparisons- 

    BR、
    Reese