动态AIPP配置示例
AIPP配置文件支持定义多组AIPP配置,对不同的模型输入进行不同的AIPP处理,配置多组AIPP参数时,将一组AIPP配置放到一个aipp_op配置项里;如果模型只有一个输入,则只需要配置第一组aipp_op即可。
如下示例以网络模型为多输入时进行说明。
配置示例
- 如果模型转换时,用户设置了--dynamic_batch_size动态Batch档位参数,同时又通过--insert_op_conf参数配置了动态AIPP功能:
实际推理时,调用AscendCL提供的aclmdlSetInputAIPP接口,设置动态AIPP相关参数值时,需确保batchSize要设置为最大Batch数。接口详细说明请参见“应用开发接口 > AscendCL API(C&C++) > 模型管理 > 模型执行 > aclmdlSetInputAIPP”。
- 如果模型转换时,用户设置了--dynamic_image_size动态分辨率参数,同时又通过--insert_op_conf参数配置了动态AIPP功能:
实际推理时,调用AscendCL提供的aclmdlSetInputAIPP接口,设置动态AIPP相关参数值时,不能开启Crop和Padding功能。该场景下,还需要确保通过aclmdlSetInputAIPP接口设置的宽和高与aclmdlSetDynamicHWSize接口设置的宽、高相等,都必须设置成动态分辨率最大档位的宽、高。接口详细说明请参见“应用开发接口 > AscendCL API(C&C++) > 模型管理 > 模型执行”章节。
- 如果模型转换时,用户设置了--input_shape动态shape范围参数,同时又通过--insert_op_conf参数配置了AIPP功能,则AIPP输出的宽和高要在--input_shape所设置的范围内。
动态AIPP场景下,用户无需手动配置csc_switch、rbuv_swap_switch等参数,根据如下配置文件配置好相关参数后,模型转换时,ATC会为动态AIPP新增一个模型输入(以下简称AippData)。
实际推理时,需要调用AscendCL提供的aclmdlSetInputAIPP接口,设置动态AIPP相关参数值,然后传给上述新增的AippData,AippData根据传入的参数值构造的结构体为动态AIPP的参数输入结构,该结构体无需用户手动处理。接口详细说明请参见“应用开发接口 > AscendCL API(C&C++) > 模型管理 > 模型执行 > aclmdlSetInputAIPP”。
aipp_op
{
aipp_mode: dynamic
related_input_rank: 0 # 标识对第1个输入进行AIPP处理
max_src_image_size: 752640 # 输入图像最大的size,参数必填
}
aipp_op
{
aipp_mode: dynamic
related_input_rank: 1 # 标识对第2个输入进行AIPP处理
max_src_image_size: 752640 # 输入图像最大的size,参数必填
}
动态AIPP的参数输入结构
根据配置示例配置好动态AIPP文件后,模型推理时为动态AIPP新增模型输入(AippData)传入参数值后,自动形成的结构体如下,该结构体无需用户手动处理:
typedef struct tagAippDynamicBatchPara
{
int8_t cropSwitch; //crop switch
int8_t scfSwitch; //resize switch
int8_t paddingSwitch; // 0: unable padding,
// 1: padding config value,sfr_filling_hblank_ch0 ~ sfr_filling_hblank_ch2
// 2: padding source picture data, single row/collumn copy
// 3: padding source picture data, block copy
// 4: padding source picture data, mirror copy
int8_t rotateSwitch; //rotate switch,0: non-rotate,1: rotate 90°clockwise,2: rotate 180°clockwise,3: rotate 270° clockwise
int8_t reserve[4];
int32_t cropStartPosW; //the start horizontal position of cropping
int32_t cropStartPosH; //the start vertical position of cropping
int32_t cropSizeW; //crop width
int32_t cropSizeH; //crop height
int32_t scfInputSizeW; //input width of scf
int32_t scfInputSizeH; //input height of scf
int32_t scfOutputSizeW; //output width of scf
int32_t scfOutputSizeH; //output height of scf
int32_t paddingSizeTop; //top padding size
int32_t paddingSizeBottom; //bottom padding size
int32_t paddingSizeLeft; //left padding size
int32_t paddingSizeRight; //right padding size
int16_t dtcPixelMeanChn0; //mean value of channel 0
int16_t dtcPixelMeanChn1; //mean value of channel 1
int16_t dtcPixelMeanChn2; //mean value of channel 2
int16_t dtcPixelMeanChn3; //mean value of channel 3
uint16_t dtcPixelMinChn0; //min value of channel 0
uint16_t dtcPixelMinChn1; //min value of channel 1
uint16_t dtcPixelMinChn2; //min value of channel 2
uint16_t dtcPixelMinChn3; //min value of channel 3
uint16_t dtcPixelVarReciChn0; //sfr_dtc_pixel_variance_reci_ch0
uint16_t dtcPixelVarReciChn1; //sfr_dtc_pixel_variance_reci_ch1
uint16_t dtcPixelVarReciChn2; //sfr_dtc_pixel_variance_reci_ch2
uint16_t dtcPixelVarReciChn3; //sfr_dtc_pixel_variance_reci_ch3
int8_t reserve1[16]; //32B assign, for ub copy
}kAippDynamicBatchPara;
typedef struct tagAippDynamicPara
{
uint8_t inputFormat; //input format:YUV420SP_U8/XRGB8888_U8/RGB888_U8
//uint8_t outDataType; //output data type: CC_DATA_HALF,CC_DATA_INT8, CC_DATA_UINT8
int8_t cscSwitch; //csc switch
int8_t rbuvSwapSwitch; //rb/ub swap switch
int8_t axSwapSwitch; //RGBA->ARGB, YUVA->AYUV swap switch
int8_t batchNum; //batch parameter number
int8_t reserve1[3];
int32_t srcImageSizeW; //source image width
int32_t srcImageSizeH; //source image height
int16_t cscMatrixR0C0; //csc_matrix_r0_c0
int16_t cscMatrixR0C1; //csc_matrix_r0_c1
int16_t cscMatrixR0C2; //csc_matrix_r0_c2
int16_t cscMatrixR1C0; //csc_matrix_r1_c0
int16_t cscMatrixR1C1; //csc_matrix_r1_c1
int16_t cscMatrixR1C2; //csc_matrix_r1_c2
int16_t cscMatrixR2C0; //csc_matrix_r2_c0
int16_t cscMatrixR2C1; //csc_matrix_r2_c1
int16_t cscMatrixR2C2; //csc_matrix_r2_c2
int16_t reserve2[3];
uint8_t cscOutputBiasR0; //output bias for RGB to YUV, element of row 0, unsigned number
uint8_t cscOutputBiasR1; //output bias for RGB to YUV, element of row 1, unsigned number
uint8_t cscOutputBiasR2; //output bias for RGB to YUV, element of row 2, unsigned number
uint8_t cscInputBiasR0; //input bias for YUV to RGB, element of row 0, unsigned number
uint8_t cscInputBiasR1; //input bias for YUV to RGB, element of row 1, unsigned number
uint8_t cscInputBiasR2; //input bias for YUV to RGB, element of row 2, unsigned number
uint8_t reserve3[2];
int8_t reserve4[16]; //32B assign, for ub copy
kAippDynamicBatchPara aippBatchPara; //allow transfer several batch para.
} kAippDynamicPara;