工具与软件:
您好:
SDK:TDA4 VM SDK 10_01_00_04
图形节点示例: Input→Scale→pre_proc→TIDL→后处理
1. 非管道模式 、此过程可确保每个帧都产生正确的结果。
2. 流水线模式 、出现异常问题 TIDL 节点每隔一帧返回一个空指针 .
因此、最终输出将在之间交替 一个正确帧和一个异常帧 .
此问题的原因可能是什么?可采取哪些解决方案?
谢谢
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.
工具与软件:
您好:
SDK:TDA4 VM SDK 10_01_00_04
1. 非管道模式 、此过程可确保每个帧都产生正确的结果。
2. 流水线模式 、出现异常问题 TIDL 节点每隔一帧返回一个空指针 .
因此、最终输出将在之间交替 一个正确帧和一个异常帧 .
此问题的原因可能是什么?可采取哪些解决方案?
谢谢
这就是我的图。
我的节点: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、则管道无法运行、并在几帧后卡住。
#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);
因此、最终输出将在之间交替 一个正确帧和一个异常帧 .
此问题的原因可能是什么?可采取哪些解决方案?
尊敬的 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:
实际输出节点为2、而输出1仅用作中间载波、不会进一步传播。 我已经尝试仅为2设置输出缓冲器、但问题仍然存在。
我只是尝试将流水线深度增加到5并将 NUM_DEPTH 增加到4、但该行为与将深度设置为3并将 NUM_DEPTH 设置为2时几乎相同。
如果该viewTransform
节点被删除、TIDL 将每隔一帧输出一个空指针。
如果viewTransform
包含节点、则整个图会运行4帧、然后卡住。
还有一些背景信息:在过去将 Entry 和 Eco 升级到 SDK 10.0时、发生了类似的流水线冻结问题。 当时、应用补丁后两个平台的问题都得到了解决。这就是我之前提到的问题:(TDA4VEN-Q1:Entry SDK 10.0补丁、关于流水线模式-处理器论坛-处理器- TI E2E 支持论坛)
但是、我检查了适用于 VM 的 SDK 10.0、似乎之前的修补程序已集成到正式版本中。 我想问一下这个 SDK 是否仍然存在类似的流水线问题。
每当流水线深度设置为大于1时、流水线就会卡住。 在过去几天里,我尝试了各种配置的管道深度和 NUM_DEPTH 值,但它们都导致管道冻结。
Adam、您好:
目前、感知图设计如图所示。 如果按上述方式设计图形、则会导致整个图形被阻塞。
故障排除后、我们发现只要view_transform
添加节点、在整个图形中运行流水线就会导致图形被阻止。
在进一步调查view_transform
节点后,我们发现关键问题是上游节点(pre_proc
,,TIDL
save_tensor
)都是replicate * 4
,view_transform
save_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);
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
我按照您的方法操作、并解决了在链接时流水线无法正常运行的问题 视图变换 节点。
现在、只剩下最后一个问题: TIDL 每隔一帧输出异常数据 .
在上周的会议上、我们被告知要提及 SDK 10.1演示代码 响应。
psdkra/vision_apps/apps/dl_demos/app_tidl_seg
。 代码是相同的、并且在应用级别没有差异。 如果 SDK 10.1有更新的演示、您能提供一个副本供我们比较吗?