如何使能AIPP
通过在模型转换过程中开启AIPP功能,可以在推理之前就完成所有的数据处理,专门的加速模块实现并保证性能,可以不让图像处理成为推理阶段的瓶颈,图像处理方式比较灵活。本章节给出如何在模型转换阶段开启AIPP功能。
使用约束
- 动态AIPP的参数每次推理需要计算,计算需要耗时,所以动态AIPP的性能比静态AIPP性能要差。
- 模型转换是否开启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。
- 获取Caffe网络模型。
- 构造AIPP配置文件insert_op.cfg。
- 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)。
- (可选)如果用户想查看转换后离线模型中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 } } ] } } }
父主题: AIPP使能