功能介绍
AIPP(Artificial Intelligence Pre-Processing)人工智能预处理,用于在AI Core上完成图像预处理,包括色域转换(转换图像格式)、图像归一化(减均值/乘系数)和抠图(指定抠图起始点,抠出神经网络需要大小的图片)。AIPP区分为静态AIPP和动态AIPP,只能二选一,不能同时支持。
- 静态AIPP:模型编译时设置AIPP模式为静态,同时设置AIPP参数,模型生成后,AIPP参数值被保存在离线模型中,每次模型推理过程采用固定的AIPP预处理参数(无法修改)。
- 动态AIPP:模型编译时设置AIPP模式为动态,每次模型推理前,根据需求,在执行模型前设置动态AIPP参数值,然后在模型执行时可使用不同的AIPP参数。动态AIPP在根据业务要求改变预处理参数的场合下使用(如不同摄像头采用不同的归一化参数,输入图片格式需要兼容YUV420和RGB等)。
关于AIPP功能的详细介绍请参考《ATC工具使用指南》。
使用方法
下面介绍如何在模型构建时支持AIPP功能:
- Data算子输入数据的Channel维度的元素个数和图片实际保持一致。
|
auto shape_data = vector<int64_t>({ 1,10,12,12 });
TensorDesc desc_data(ge::Shape(shape_data), FORMAT_NCHW, DT_FLOAT16);
auto data = op::Data("data");
data.update_input_desc_x(desc_data);
data.update_output_desc_y(desc_data);
|
- 准备AIPP配置文件,配置说明请参考《ATC工具使用指南》,下面给出一些配置示例:
静态AIPP配置文件示例:
|
aipp_op {
aipp_mode:static # 表示静态AIPP
input_format:YUV420SP_U8
csc_switch:true
var_reci_chn_0:0.00392157
var_reci_chn_1:0.00392157
var_reci_chn_2:0.00392157
}
|
动态AIPP配置文件示例(除了以下字段外,其他无需配置):
|
aipp_op {
aipp_mode:dynamic # 表示动态AIPP
related_input_rank: 0 # 可选,标识对模型的第几个输入做AIPP处理,从0开始,默认为0
max_src_image_size:752640 # 输入图像最大的size,动态AIPP必须配置
}
|
- 模型编译时,在aclgrphBuildModel接口options中设置INSERT_OP_FILE和INPUT_FORMAT。
|
void PrepareOptions(std::map<AscendString, AscendString>& options) {
options.insert({
{ge::ir_option::EXEC_DISABLE_REUSED_MEMORY, "1"},
{ge::ir_option::INSERT_OP_FILE, PATH + "aipp_nv12_img.cfg"},
{ge::ir_option::INPUT_FORMAT, "NCHW"}
});
}
|
- 编译生成的离线模型自动插入aipp算子。
