动态输入介绍

当模型输入张量属性 validShapestride 中含有 -1 时,代表该模型的输入是动态的,您需要根据实际输入对动态维度进行填写。

stride 填写时应遵循以下规则:

  • 应确保填写数值满足 stride[idx]>=stride[idx+1]validShape.dimensionSize[idx+1]stride[idx] >= stride[idx+1] * validShape.dimensionSize[idx+1],其中 idx 代表当前维度。

  • 对于 Y 和 UV 输入的 stride, 由于存在一些硬件约束,需要W方向保证固定的对齐要求,这意味着您需要根据 stride 对输入进行对齐处理。

这里以S100模型为例,stride要求32对齐,模型有三个输入:

  • input_y : validShape = [1,-1,-1,1],stride = [-1,-1,1,1]
  • input_uv : validShape = [1,-1,-1,2],stride = [-1,-1,2,1]
  • input_roi : validShape = [1,4],stride = [16,4]

其中 input_yinput_uv 为动态输入,且是 Y 和 UV 输入。假设实际输入: input_yvalidShape = [1,220,220,1], input_uvvalidShape = [1,110,110,2]。 stride 计算如下所示,保证该维度stride 32对齐,其中 ALIGN_32 代表32字节对齐:

  • input_y :

    stride[3] = 1;

    stride[2] = 1;

    stride[1] = ALIGN_32(stride[2] * validShape.dimensionSize[2]) = ALIGN_32(1 * 220) = 224;

    stride[0] = ALIGN_32(stride[1] * validShape.dimensionSize[1]) = ALIGN_32(224 * 220) = 49280;

  • input_uv :

    stride[3] = 1;

    stride[2] = 2;

    stride[1] = ALIGN_32(stride[2] * validShape.dimensionSize[2]) = ALIGN_32(2 * 110) = 224;

    stride[0] = ALIGN_32(stride[1] * validShape.dimensionSize[1]) = ALIGN_32(224 * 110) = 24640;

您需要在准备输入时设置属性如下,并且将输入数据按照 stride 进行对齐处理:

  • input_y : validShape = [1,220,220,1],stride = [49280,224,1,1]
  • input_uv : validShape = [1,110,110,2],stride = [24640,224,2,1]
  • input_roi : validShape = [1,4],stride = [16,4]