当模型输入张量属性 validShape
或 stride
中含有 -1
时,代表该模型的输入是动态的,您需要根据实际输入对动态维度进行填写。
stride
填写时应遵循以下规则:
应确保填写数值满足 ,其中 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_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]