下载
中文
注册

函数:set_input_aipp

C函数原型

aclError aclmdlSetInputAIPP(uint32_t modelId, aclmdlDataset *dataset, size_t index, const aclmdlAIPP *aippParmsSet)

Python函数

ret = acl.mdl.set_input_aipp(model_id, dataset, index, aipp_parms_set)

函数功能

动态AIPP场景下,根据指定的动态AIPP输入的输入index,设置模型推理时的AIPP参数值。

动态AIPP支持的几种操作的计算方式及其计算顺序如下:

  1. 抠图
  2. 色域转换
  3. 缩放(当前版本不支持缩放)
  4. 减均值/归一化
  5. 补边

输入说明

model_id:int,模型的ID,

可在以下接口成功加载模型后获取到模型ID。

dataset:int,表示模型的输入数据的指针地址,使用aclmdlDataset类型的数据描述模型推理时的输入数据,输入的内存地址、内存大小用aclDataBuffer类型的数据来描述。

index:int,标识动态AIPP输入的输入index。

  • 多个动态AIPP输入的场景下,用户可调用acl.mdl.get_aipp_type接口获取指定模型输入所关联的动态AIPP输入的输入index。
  • 为保证向前兼容,如果明确只有一个动态AIPP输入,可调用acl.mdl.get_input_index_by_name接口获取,输入名称固定为“ascend_dynamic_aipp_data”

aipp_parms_set:int,动态AIPP参数对象的指针地址,需提前调用acl.mdl.create_aipp接口创建aclmdlAIPP类型的数据。

返回值说明

ret:int,错误码

  • 返回0表示成功。
  • 返回其它值表示失败。

约束说明

  • 经过动态AIPP处理后的图像的宽、高必须与原始模型中输入Shape中的宽、高保持一致。
  • 多Batch场景下,根据每个Batch的配置计算出动态AIPP后输出图片的宽、高,经过动态AIPP后每个Batch的输出图片宽、高必须是一致的。计算输出图片宽、高的计算公式如表1所示。
  • 抠图或者缩放或者补边之后,对图片宽、高的校验规则如下,其中,aippOutputW、aippOutputH分别表示AIPP输出图片的宽、高,其它参数是acl.mdl.set_aipp_src_image_sizeacl.mdl.set_aipp_crop_paramsacl.mdl.set_aipp_padding_params接口的入参。

参考资源

接口调用流程与示例,参见动态AIPP(单个动态AIPP输入)

表1 输出图片宽、高计算公式

抠图

缩放

补边(padding)

动态AIPP输出图片的宽、高

aippOutputW = srcImageSizeW

aippOutputH = srcImageSizeH

aippOutputW = cropSizeW

aippOutputH = cropSizeH

aippOutputW = scfOutputSizeW

aippOutputH = scfOutputSizeH

aippOutputW = cropSizeW + paddingSizeLeft + paddingSizeRight

aippOutputH = cropSizeH + paddingSizeTop + paddingSizeBottom

aippOutputW = srcImageSizeW + paddingSizeLeft + paddingSizeRight

aippOutputH = srcImageSizeH + paddingSizeTop + paddingSizeBottom

aippOutputW = scfOutputSizeW + paddingSizeLeft + paddingSizeRight

aippOutputH = scfOutputSizeH + paddingSizeTop + paddingSizeBottom

aippOutputW = scfOutputSizeW

aippOutputH = scfOutputSizeH

aippOutputW = scfOutputSizeW + paddingSizeLeft + paddingSizeRight

aippOutputH = scfOutputSizeH + paddingSizeTop + paddingSizeBottom