昇腾社区首页
中文
注册

如何使能AIPP

通过在模型转换过程中开启AIPP功能,可以在推理之前就完成所有的数据处理,专门的加速模块实现并保证性能,可以不让图像处理成为推理阶段的瓶颈,图像处理方式比较灵活。本章节给出如何在模型转换阶段开启AIPP功能。

使用约束

  1. 动态AIPP的参数每次推理需要计算,计算需要耗时,所以动态AIPP的性能比静态AIPP性能要差。
  2. 模型转换是否开启AIPP功能,执行推理业务时,对输入图片数据的要求:
    • 模型转换时开启AIPP,在进行推理业务时,输入图片数据要求为NHWC排布,该场景下最终与AIPP连接的输入节点的格式被强制改成NHWC,可能与模型转换命令中--input_format参数指定的格式不一致。
    • 模型转换时没有开启AIPP,模型转换如果没有使用--input_format指定模型的输入格式,则Caffe模型默认为NCHW排布, TensorFlow 模型输入默认为NHWC。在进行推理业务时,需要用户自行根据模型的输入格式来选取输入图片的排布类型。例如, 输入图片数据为NHWC排布,模型为Caffe模型, 模型转换时不指定--input_format,则默认的模型输入格式为NCHW, 输入图片和模型输入的格式不一致。该场景下,需要用户自行把NHWC排布的原始图片数据转换为NCHW排布。

使用示例

模型转换时,AIPP功能会以aipp算子形式插入离线模型中,如下示例以Caffe框架ResNet50网络模型为例,演示模型转换时如何使用AIPP。

  1. 获取Caffe网络模型。

    您可以从以下链接中获取ResNet-50网络的模型文件(*.prototxt)、预训练模型文件(*.caffemodel),并以CANN软件包运行用户将获取的文件上传至开发环境任意目录,例如上传到$HOME/module/目录下。

    • ResNet-50网络的模型文件(*.prototxt):单击Link下载该文件。
    • ResNet-50网络的预训练模型文件(*.caffemodel):单击Link下载该文件。
  2. 构造AIPP配置文件insert_op.cfg

    您可以根据AIPP配置示例典型场景样例参考章节获取AIPP配置示例,如果上述示例无法满足要求,则需要参见配置文件模板自行构造配置文件。

  3. atc命令中加入--insert_op_conf参数,用于插入aipp预处理算子,执行如下命令生成离线模型。(如下命令中使用的目录以及文件均为样例,请以实际为准)
    atc --model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel --framework=0 --insert_op_conf=$HOME/module/insert_op.cfg  --output=$HOME/module/out/caffe_resnet50 --soc_version=<soc_version>
    关于参数的详细解释以及使用方法请参见参数说明。若提示如下信息,则说明模型转换成功。
    ATC run success

    成功执行命令后,在--output参数指定的路径下,可查看离线模型(如:caffe_resnet50.om)。

  4. (可选)如果用户想查看转换后离线模型中aipp算子的相关信息,则可以将上述离线模型转成json文件查看,命令如下:
    atc --mode=1 --om=$HOME/module/out/caffe_resnet50.om  --json=$HOME/module/out/caffe_resnet50.json

    如下为json文件中带有aipp信息的样例(如下样例中所有aipp属性值都为样例,请以用户实际构造的配置文件为准):

    {
                  "key": "aipp",
                  "value": {
                    "func": {
                      "attr": [
                        {
                          "key": "mean_chn_0",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "mean_chn_1",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "mean_chn_2",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "mean_chn_3",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "csc_switch",
                          "value": {
                            "b": true
                          }
                        },
                        {
                          "key": "input_format",
                          "value": {
                            "i": 1
                          }
                        },
                        {
                          "key": "input_bias_0",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "input_bias_1",
                          "value": {
                            "i": 128
                          }
                        },
                        {
                          "key": "input_bias_2",
                          "value": {
                            "i": 128
                          }
                        },
                        {
                          "key": "aipp_mode",
                          "value": {
                            "i": 1
                          }
                        },
                        {
                          "key": "src_image_size_h",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "crop_size_h",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "matrix_r0c0",
                          "value": {
                            "i": 256
                          }
                        },
                        {
                          "key": "matrix_r0c1",
                          "value": {
                            "i": 443
                          }
                        },
                        {
                          "key": "matrix_r0c2",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "src_image_size_w",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "crop_size_w",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "rbuv_swap_switch",
                          "value": {
                            "b": false
                          }
                        },
                        {
                          "key": "padding",
                          "value": {
                            "b": false
                          }
                        },
                        {
                          "key": "ax_swap_switch",
                          "value": {
                            "b": false
                          }
                        },
                        {
                          "key": "top_padding_size",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "matrix_r1c0",
                          "value": {
                            "i": 256
                          }
                        },
                        {
                          "key": "matrix_r1c1",
                          "value": {
                            "i": -86
                          }
                        },
                        {
                          "key": "matrix_r1c2",
                          "value": {
                            "i": -178
                          }
                        },
                        {
                          "key": "resize",
                          "value": {
                            "b": false
                          }
                        },
                        {
                          "key": "resize_output_h",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "related_input_rank",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "load_start_pos_h",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "matrix_r2c0",
                          "value": {
                            "i": 256
                          }
                        },
                        {
                          "key": "matrix_r2c1",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "matrix_r2c2",
                          "value": {
                            "i": 350
                          }
                        },
                        {
                          "key": "resize_output_w",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "var_reci_chn_0",
                          "value": {
                            "f": "1"
                          }
                        },
                        {
                          "key": "var_reci_chn_1",
                          "value": {
                            "f": "1"
                          }
                        },
                        {
                          "key": "var_reci_chn_2",
                          "value": {
                            "f": "1"
                          }
                        },
                        {
                          "key": "load_start_pos_w",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "var_reci_chn_3",
                          "value": {
                            "f": "1"
                          }
                        },
                        {
                          "key": "single_line_mode",
                          "value": {
                            "b": false
                          }
                        },
                        {
                          "key": "output_bias_0",
                          "value": {
                            "i": 16
                          }
                        },
                        {
                          "key": "output_bias_1",
                          "value": {
                            "i": 128
                          }
                        },
                        {
                          "key": "output_bias_2",
                          "value": {
                            "i": 128
                          }
                        },
                        {
                          "key": "right_padding_size",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "bottom_padding_size",
                          "value": {
                            "i": 0
                          }
                        },
                        {
                          "key": "min_chn_0",
                          "value": {
                            "f": "0"
                          }
                        },
                        {
                          "key": "min_chn_1",
                          "value": {
                            "f": "0"
                          }
                        },
                        {
                          "key": "min_chn_2",
                          "value": {
                            "f": "0"
                          }
                        },
                        {
                          "key": "min_chn_3",
                          "value": {
                            "f": "0"
                          }
                        },
                        {
                          "key": "crop",
                          "value": {
                            "b": false
                          }
                        },
                        {
                          "key": "cpadding_value",
                          "value": {
                            "f": "0"
                          }
                        },
                        {
                          "key": "left_padding_size",
                          "value": {
                            "i": 0
                          }
                        }
                      ]
                    }
                  }
                }