AIPP

功能介绍

AIPP(Artificial Intelligence Pre-Processing)人工智能预处理,用于在AI Core上完成图像预处理,包括色域转换(转换图像格式)、图像归一化(减均值/乘系数)和抠图(指定抠图起始点,抠出神经网络需要大小的图片)。AIPP区分为静态AIPP和动态AIPP,只能二选一,不能同时支持。

关于AIPP功能的详细介绍请参考ATC工具使用指南

使用方法

下面介绍如何在模型构建时支持AIPP功能:

  1. Data算子输入数据的Channel维度的元素个数和图片实际保持一致。
    1
    2
    3
    4
    5
    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);
    
  2. 准备AIPP配置文件,配置说明请参考ATC工具使用指南,下面给出一些配置示例:
    静态AIPP配置文件示例:
    1
    2
    3
    4
    5
    6
    7
    8
    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配置文件示例(除了以下字段外,其他无需配置):
    1
    2
    3
    4
    5
    aipp_op {
    aipp_mode:dynamic         # 表示动态AIPP
    related_input_rank: 0     # 可选标识对模型的第几个输入做AIPP处理从0开始默认为0
    max_src_image_size:752640 # 输入图像最大的size动态AIPP必须配置
    }
    
  3. 模型编译时,在aclgrphBuildModel接口options中设置INSERT_OP_FILEINPUT_FORMAT
    1
    2
    3
    4
    5
    6
    7
    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"} 
            });
    }
    
  4. 编译生成的离线模型自动插入aipp算子。