工具/软件:
您好:
我正在努力实现定制 增加 TIDL 的调试操作符。 以下是我的设置:
-
模型 :具有两个输入的 ONNX 图形:
-
"input":形状[1, 5] -
常量
"shape":[5, 1](int64)
-
-
预期输出形状 :
[5, 5](从 1×5 行广播到 5×5 矩阵)
当我在 PC 仿真器上运行模型时,操作人员工作正常—输出是一个带有重复行的完整 5×5 矩阵。
这是 PC 仿真器上输入和输出的屏幕截图:

在上 C7 DSP 、使用相同的实现、结果为 不正确:
-
仅填充第一行。
-
其余行被清零 (NULL)
在屏幕截图中、我尝试使用简单的计数器填充输出缓冲区:

PS:我实施了其他自定义运算符(例如,and、cos)、它们在 DSP 上运行良好、因为它们的输入和输出形状相同。
此问题仅在出现时出现 输出形状各不相同 时钟噪声。
下面是我的 expand 函数的实现
T* outDataPtr = static_cast<T*>(dst);
for (int i =0; i< params.outDataCount; i++ )
{
outDataPtr[i] = i;
}
这是我的整形函数
int32_t TIDL_tfOutReshapeCustomLayer(sTIDL_OrgNetwork_t *pOrgTIDLNetStructure,
int32_t layerIndex)
{
if(TIDL_CUSTOM_TYPE_0 == customParams.customLayerType)
{
...
}
else if (TIDL_CUSTOM_TYPE_EXPAND == customParams.customLayerType)
{
// These lines are taken from TIDL_tfOutReshapeIdentity
TIDLPCLayers.outData[0].elementType = TIDLPCLayers.inData[0].elementType;
TIDLPCLayers.outData[0].numDim = gLayers.weights.bufSize;
TIDLPCLayers.outData[0].dimValues[TIDL_DIM_BATCH] = TIDLPCLayers.inData[0].dimValues[TIDL_DIM_BATCH];
TIDLPCLayers.outData[0].dimValues[TIDL_DIM_DIM1] = TIDLPCLayers.inData[0].dimValues[TIDL_DIM_DIM1];
TIDLPCLayers.outData[0].dimValues[TIDL_DIM_DIM2] = TIDLPCLayers.inData[0].dimValues[TIDL_DIM_DIM2];
TIDLPCLayers.outData[0].dimValues[TIDL_DIM_NUMCH] = TIDLPCLayers.inData[0].dimValues[TIDL_DIM_NUMCH];
TIDLPCLayers.outData[0].dimValues[TIDL_DIM_HEIGHT] = TIDLPCLayers.inData[0].dimValues[TIDL_DIM_HEIGHT];
TIDLPCLayers.outData[0].dimValues[TIDL_DIM_WIDTH] = TIDLPCLayers.inData[0].dimValues[TIDL_DIM_WIDTH];
int64_t *weightsptr = (int64_t*) (gLayers.weights.ptr + gLayers.weights.offset);
for (int i = 0; i < gLayers.weights.bufSize; i++) {
TIDLPCLayers.outData[0].dimValues[TIDL_DIM_MAX - 1 - i] = (int32_t) max(weightsptr[gLayers.weights.bufSize -1 - i],(int64_t) TIDLPCLayers.inData[0].dimValues[TIDL_DIM_MAX - 1 - i]);
}
TIDLPCLayers.numMacs =
(int64_t)((int64_t)TIDLPCLayers.outData[0].dimValues[TIDL_DIM_BATCH]* TIDLPCLayers.outData[0].dimValues[TIDL_DIM_DIM1] *TIDLPCLayers.outData[0].dimValues[TIDL_DIM_DIM2] * TIDLPCLayers.outData[0].dimValues[TIDL_DIM_NUMCH] *
TIDLPCLayers.outData[0].dimValues[TIDL_DIM_HEIGHT] * TIDLPCLayers.outData[0].dimValues[TIDL_DIM_WIDTH]);
}
return 0;
}
当输出形状与输入形状不同时、TIDL 中是否存在任何特定于 DSP 的约束?
您能帮助我解决我的问题吗?
感谢任何修改输出形状的定制层的指导、调试提示或示例。
提前感谢您的支持!