Rspress

# #动态输入介绍

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

`stride` 填写时应遵循以下规则：

- 应确保填写数值满足 s t r i d e[i d x]>=s t r i d e[i d x+1]∗v a l i d S h a p e.d i m e n s i o n S i z e[i d x+1]stride[idx] >= stride[idx+1] * validShape.dimensionSize[idx+1]s t r i d e[i d x]>=s t r i d e[i d x+1]∗v a l i d S ha p e.d im e n s i o n S i ze[i d x+1]，其中 `idx` 代表当前维度。

- 对于 Y 和 UV 输入的 `stride`， 由于存在一些硬件约束，需要W方向保证固定的对齐要求，其中S600要求64对齐，非S600要求32对齐，这意味着您需要根据 `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_y` 与 `input_uv` 为动态输入，且是 Y 和 UV 输入。假设实际输入: `input_y` 的 `validShape` = [1,220,220,1]， `input_uv` 的 `validShape` = [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]

页面目录