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:获取边界框信息

Guru**** 2540720 points
Other Parts Discussed in Thread: TDA4VM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1560506/tda4vm-getting-information-for-bounding-box

器件型号:TDA4VM


工具/软件:

你(们)好

app_tidl_od TI Processor SDK RTOS 的演示应用中、如何访问和读取所检测到物体的详细信息?
具体而言、我希望检索各对象的检测结果(如分数)和边界框坐标、以便进一步使用或记录此数据。

据我所知、TIDL 的推理输出通常作为 A 返回 张量或数组。  

如何访问 检测元数据 (分数,坐标,类 ID)?

演示代码中是否有实用功能或特定数据结构将张量解码为有意义的检测结果?

如果我要记录或导出原始检测结果、读取和解释张量内容的正确方法是什么?

为便于参考、我将在此处附加图像。  

谢谢你  
此致、
Komal  

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

    尊敬的 Komal:

    如果启动写入跟踪级别、您将在跟踪/目录中获得中间输出(它必须已经存在)。  在 推理文件中:


    writeTraceLevel = 3

    这将为每一层生成一个.y 文件(int 表示)和_float.bin 文件 (float32)。  此数据是所有图层的中间输出、然后在模型工件中使用生成的 SVG 文件与 ONNX 图匹配。

    此致、

    Chris

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

    你(们)好  
    感谢您的帮助。  

    在运行推理并使输出在内部出队后
    vx_status app_run_grap_for_one_frame_pipeline (appObj *obj、vx_int32 frame_id)

    我想检索每个检测到的对象的实际检测结果(边界框,分数和类 ID)。

    我知道 TIDL 推理输出张量/数组、但我的问题是:

    -如何检索单帧推理检测到的物体数量?

    -哪个 API /数据结构包含这些连续和流水线的解码检测结果?

    -如何访问每次检测的元数据(边界框坐标,类 ID,置信得分)?

    -在演示代码中,检测输出张量被解码到边界框+分数+类 ID?

    -在 app_tidl_od 中是否有提供的实用程序或结构来将原始张量解析为对象元数据?

    -如果我想记录/导出这些结果,解释张量内容的正确方法是什么(例如,格式[x, y, w, h, 分数、class_id])?

    为了澄清这一点、我不问中间功能映射(writeTraceLevel 输出)。 相反,我希望在 vxGraphParameterDequeueDoneRef () 返回输出后得到最终的后处理检测结果。

    您能否向我指出输出张量被解析的确切函数/API、以便我可以记录或保存边界框和分数?

    谢谢你  

    此致、
    Komal

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

    尊敬的 Komal:

    我没有您的模型、因此只能提供通用指南。   此外、我只能对 TIDL 进行评论、在增加 TIOX 的复杂性之前、请先重点关注该问题。  确保您的模型在独立运行时正常工作。 输出张量在推理配置文件中指定的文件中生成。  例如:

    outData =/out/result1.bin

    此文件 在仿真中输入到 PC_dsp_test_dl_algo.out。  例如、./pc_dsp_test_dl_alg.out s:myinference_file.txt

    运行模型后、上述操作会将所有输出张量放置在 outData 指定的文件中。  它们将按模型的顺序排列、但您可以设置顺序。  例如、如果您在模型中具有等距、嵌入和属性作为输出、您可以通过以下方式在导入配置文件中设置:

    outDataNamesList =“offset、embed、attr“

    现在我们说偏移是 1、3、24、24 张量、嵌入是 1、1、24、24 张量、attr 是 1、1、5、5 张量。   读取输出张量的代码。

    OFFSET_SIZE = 1*3*24*24

    embed_size = 1*1*24*24

    attr_size = 1*1*5*5

    ALL_OUTPUTS =  np.fromfile('out/result1.bin',dtype=np.uint8)

    OFFSET = ALL_OUTPUTS[0:OFFSET_SIZE]

    Embed = all_outputs[offset_size:embed_size]

    Attr = all_outputs[offset_size+embed_size:attr_size]

    此时的解释是特定于模型的,作为模型用户,您应该能够理解每个张量的含义。  

    此致、

    Chris

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

    HII

    使用 VISION SDK:
    /RTOS/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/vision_apps

    示例应用:
    app_tidl_od(基于 YOLO 的物体检测演示)
    下面的配置文件和网络文件已经来自 tidl 示例。  
    ->配置文件:
    /ti/j7/workarea/tiovx/conformance_tests/test_data/psdkra/tidl_models/tidl_io_onnx_yolo_8200_416_1.bin

    ->网络文件:
    /ti/j7/workarea/tiovx/conformance_tests/test_data/psdkra/tidl_models/tidl_net_onnx_yolo_8200_416.bin

     目标平台:
    通过 TDA4VM J721e EVM 进行板载测试

     视为的输出(对于单个帧):

    0000000500_scaler_416x416.YUV
    pre_proc_output_0000000500_416x416_ch0.YUV
    tidl_output_0000000500_tensor_1_200x1x1_ch0.bin
    tidl_output_0000000500_tensor_0_5x200x1_ch0.bin
    马赛克_输出_ 0000000500_1920x1080。YUV

    YUV 文件是清晰的(分频器输入,预处理输入和马赛克输出)。

    bin 文件 (tidl_output_*) 包含原始张量数据。

      我们需要访问和解释来自张量输出文件的检测结果(边界框坐标,类 ID 和置信评分)。 具体来说:

    1) 这些张量遵循什么元数据格式?

    2) 如何解析.bin 张量输出来提取边界框和检测分数?

    3) Vision Apps/TIDL SDK 中是否提供了一个示例或实用程序来说明如何将这些张量解码为人类可读的检测信息?


    我们的解释:
    基于 YOLO 模型结构,我们收到:

    Tensor_0(形状:5×200×1)→可能包含边界框坐标和对象性分数。 每行最多可代表 200 个提案[x、y、w、h、置信度]。

     Tensor_1(形状:200×1×1)→可能包含 200 个方案中每一个方案的类 ID(或类置信度分布)。

    最终检测如下所示:

    BINDING_BOX =(x、y、w、h)
    分数       =置信度
    class_id    =来自 tensor_1

    “我想确认这一解释是否正确。 如果没有、您能否提供 app_tidl_od 与 YOLO 模型使用的确切张量解码方案? 在一般边界框将有 4 个点,但在这种情况下,我们只有 x, y, w, h 我们如何验证/验证边界框的输出是否正确?

    谢谢  
    此致。
    Komal  

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

    尊敬的 Komal:

    使用如下所示的命令来读取.bin 文件:

    tensor1 = np.fromfile('tidl_output_0000000500_tensor_1_200x1x1_ch0.bin',dtype=np.uint8)

    uint8 是常见的 TIDL 输出、但如果您将输出更改为 int8/unit16/int16、则会相应地进行调整。   然后执行:

    TENSOR1.整形 (TENSORSHAPE)

    您实际上应该首先在仿真中对其进行测试、而不是使用 OpenVX。  首先隔离问题、然后增加复杂性。  您必须在某处安装 edgeai-tidl-tools 才能编译模型。  首先在仿真中运行模型 (https://github.com/TexasInstruments/edgeai-tidl-tools)。

    此致、

    Chris