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.

[参考译文] TDA4VE-Q1:TDA4 VM SDK 10_01_00_04:TIDL 节点在流水线模式下异常。

Guru**** 2394305 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1484591/tda4ve-q1-tda4-vm-sdk-10_01_00_04-tidl-node-is-abnormal-in-pipeline-mode

器件型号:TDA4VE-Q1

工具与软件:

您好:

SDK:TDA4 VM SDK 10_01_00_04

图形节点示例:  Input→Scale→pre_proc→TIDL→后处理

1. 非管道模式 、此过程可确保每个帧都产生正确的结果。
2. 流水线模式 、出现异常问题 TIDL 节点每隔一帧返回一个空指针 .


因此、最终输出将在之间交替 一个正确帧和一个异常帧 .

此问题的原因可能是什么?可采取哪些解决方案?

谢谢

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

    尊敬的 Xie:

    请给我一些时间进行调查。 感谢您的耐心。

    此致、

    Christina

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

    尊敬的 Xie:

    这与 OpenVX 流水线相关吗?  这就是你所说的"管道"吗?

    Chris

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

    是、这就是  OpenVX 流水线

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

    图形节点示例:
    Input→Scale→pre_proc→TIDL→post-processing→post-processing-2

    还有第二个问题:如果我添加另一个后处理节点、整个图形流水线会被阻止。

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

    尊敬的 Xie:

    tivxKernelSaveTensor 是否是自定义节点、 这是管道中的后处理、我是否正确?

    您能否提供有关流水线配置的更多信息、例如流水线深度、缓冲区深度、图形参数和节点参数。

    此致、
    Gokul

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

    这就是我的图。

    我的节点:input、virtual、image_mating、save_tensor、post_processing。

    SDK 节点:pre_proc、TIDL。

    1. graph: input→virtual→image matting(output Pipel)→pre_proc→TIDL→save tensor( output Pipel)->post_processing

    1.1、如果我将参数设置为1、那么流水线可以运行。

    TIVxSetGraphPipelineDepth(graphObj->graph,1);

    #define NUM_DEPTH 1
    tivxSetGraphPipelineDepth(graphObj->graph, 1);
    
    tivxSetNodeParameterNumBufByIndex(graphObj->virtualCameraObj.node, 1, 1);
    tivxSetNodeParameterNumBufByIndex(graphObj->virtualCameraObj.node, 2, 1);
    tivxSetNodeParameterNumBufByIndex(graphObj->PreProcObj.node, 2, NUM_DEPTH);
    tivxSetNodeParameterNumBufByIndex(graphObj->TIDLObj.node, 7, NUM_DEPTH);
    tivxSetNodeParameterNumBufByIndex(graphObj->post_processingObj.node, 2, NUM_DEPTH);

    1.2.如果将参数设置为大于1、例如2或3、则管道无法运行、并在几帧后卡住。

    TIVxSetGraphPipelineDepth(graphObj->graph,2);
    或者
    tivxSetGraphPipelineDepth(graphObj->graph,3) 
    #define NUM_DEPTH 2
    tivxSetGraphPipelineDepth(graphObj->graph, 3);
    
    tivxSetNodeParameterNumBufByIndex(graphObj->virtualCameraObj.node, 1, 1);
    tivxSetNodeParameterNumBufByIndex(graphObj->virtualCameraObj.node, 2, 1);
    tivxSetNodeParameterNumBufByIndex(graphObj->PreProcObj.node, 2, NUM_DEPTH);
    tivxSetNodeParameterNumBufByIndex(graphObj->TIDLObj.node, 7, NUM_DEPTH);
    tivxSetNodeParameterNumBufByIndex(graphObj->post_processingObj.node, 2, NUM_DEPTH);
    就像图片、它只运行2帧和 kepps 冻结 .
    问题:如何解决管道冻结问题?
    2. graph: input→virtual→image matting(output Pipel)→pre_proc→TIDL→save tensor (  output Pipeline)
    2.1 .如果删除最后的后处理节点,流水线可以正常运行。
     例如:input→virtual→image matting→pre_proc→TIDL→save tensor
    但会显示一些错误:


    因此、最终输出将在之间交替  一个正确帧和一个异常帧 .

    此问题的原因可能是什么?可采取哪些解决方案?

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

    尊敬的 Xie:

    我的理解是 virtualCameraObj 节点将映像加载到缓冲区中、在这种情况下、哪个参数是该节点的输出?

    我对为什么将2个参数设置为节点参数感到困惑

    tivxSetNodeParameterNumBufByIndex (graphObj->virtualCameraObj.node、1、1);
    tivxSetNodeParameterNumBufByIndex (graphObj->virtualCameraObj.node、2、1);

    您能解释从 virtualcamerobj 节点输出哪个、我看不到为 imageMattingNode 设置的参数吗?您也可以共享该参数吗?

    我建议您将管道深度增加到5、将 NUM_DEPTH 增加到4、并将 NUM_DEPTH 应用于所有节点参数、 在删除后处理节点(TIvxViewTransformNode)的情况下测试这些更改。

    此致、
    Gokul

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

    嗨、Gokul:

    1. 实际输出节点为2、而输出1仅用作中间载波、不会进一步传播。 我已经尝试仅为2设置输出缓冲器、但问题仍然存在。

    2. 我只是尝试将流水线深度增加到5并将 NUM_DEPTH 增加到4、但该行为与将深度设置为3并将 NUM_DEPTH 设置为2时几乎相同。

    3. 如果该viewTransform节点被删除、TIDL 将每隔一帧输出一个空指针。

    4. 如果viewTransform包含节点、则整个图会运行4帧、然后卡住。

    还有一些背景信息:在过去将 Entry 和 Eco 升级到 SDK 10.0时、发生了类似的流水线冻结问题。 当时、应用补丁后两个平台的问题都得到了解决。这就是我之前提到的问题:(TDA4VEN-Q1:Entry SDK 10.0补丁、关于流水线模式-处理器论坛-处理器- TI E2E 支持论坛

    但是、我检查了适用于 VM 的 SDK 10.0、似乎之前的修补程序已集成到正式版本中。 我想问一下这个 SDK 是否仍然存在类似的流水线问题。

    每当流水线深度设置为大于1时、流水线就会卡住。 在过去几天里,我尝试了各种配置的管道深度和 NUM_DEPTH 值,但它们都导致管道冻结。

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

    您好、xie:

    您是否可以尝试运行 tidl 演示应用、以了解流水线是否可以成功运行? 不确定是与您的应用程序相关的问题还是与升级后的 SDK 相关的问题。

    此致、

    Adam

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

    您好!

    我运行 vx_app_tidl_seg.out、、可以。

    演示的行为与我的应用不同。

    此致、

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

    尊敬的 Xie:

    由于运行应用程序 vx_app_tidl_seg.out 可以、因此问题不应出在 SDK 升级中。 您基于8.4编写的应用程序在10.1中很可能不适合某些 API 更改。 请检查  vx_app_tidl_seg 的代码和您的应用程序代码、以确保您的应用程序正确组成。  

    此致、

    Adam

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

    Adam、您好:

    目前、感知图设计如图所示。 如果按上述方式设计图形、则会导致整个图形被阻塞。

    故障排除后、我们发现只要view_transform添加节点、在整个图形中运行流水线就会导致图形被阻止。

    在进一步调查view_transform节点后,我们发现关键问题是上游节点(pre_proc,,TIDLsave_tensor)都是replicate * 4,view_transformsave_tensor同时需要同时处理的结果。 因此、它不能使用该replicate方法来复制数据、但必须在处理前聚合四个数据流。

    for(int i = 0; i < 4; ++i)
    {
    input_tensors[i] = (vx_user_data_object)vxGetObjectArrayItem((vx_object_array)tensor_arr[0], i);
    }
    obj->node = tivxViewTransformNode(graph, obj->viewTransformParams, obj->config, output_tensors, input_tensors[0], input_tensors[1], input_tensors[2], input_tensors[3]);
    

    例如、在这种情况下、当view_transform同时处理所有四个流时、会导致图形被阻止。

    我们还尝试view_transform仅处理第一个流、在本例中、整个图形可以成功运行。 但是、如果我们仅分别处理流2、3和4、该图形仍然会被阻止。

    (1)仅传递第一个数据流允许图形正常运行

    input_tensors = (vx_user_data_object)vxGetObjectArrayItem((vx_object_array)tensor_arr[0], 0);
    obj->node = tivxViewTransformNode(graph, obj->viewTransformParams, obj->config, output_tensors, input_tensors);
     (2)传入流2、3或4会导致图形被阻止
    input_tensors = (vx_user_data_object)vxGetObjectArrayItem((vx_object_array)tensor_arr[0], 1); 
    or
    input_tensors = (vx_user_data_object)vxGetObjectArrayItem((vx_object_array)tensor_arr[0], 2); 
    or
    input_tensors = (vx_user_data_object)vxGetObjectArrayItem((vx_object_array)tensor_arr[0], 3); 
    obj->node = tivxViewTransformNode(graph, obj->viewTransformParams, obj->config, output_tensors, input_tensors);
    因此、我们想问:

    如果上游节点是replicate节点、但下游节点需要聚合四个数据流以进行同步处理、那么该如何设计该图? 因为在我们当前的图形设计中、这似乎会导致整个图形无法正常运行。

    此致、

    XJC

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

    尊敬的 XJC:

    而不是从对象数组中获取元素并将其提供给 viewTransformNode 只需将整个对象数组( tensor_arr[0])提供给节点并处理该节点进程回调函数内的每个元素。

    APP_MULTI_cam 演示中完成了类似的实现、其中来自 VISS 节点的输出(复制的 x 摄像机数量)组合在马赛克节点中、并提供单个输出、请参阅该部分。

    此致、
    Gokul

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

    我按照您的方法操作、并解决了在链接时流水线无法正常运行的问题 视图变换 节点。

    现在、只剩下最后一个问题: TIDL 每隔一帧输出异常数据 .

    在上周的会议上、我们被告知要提及 SDK 10.1演示代码 响应。

    我们比较了 SDK 8.4和 SDK 10.1中的演示代码:psdkra/vision_apps/apps/dl_demos/app_tidl_seg。 代码是相同的、并且在应用级别没有差异。 如果 SDK 10.1有更新的演示、您能提供一个副本供我们比较吗?
    此致、
    XJC
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Xie JC:

    这是一个新问题、那么您可以创建一个新问题吗?  

    由于 OpenVX 图形问题已得到解决、我 将关闭此主题。  

    此致、

    Brijesh