跳转至

ATC工具使用指南

前言

概述

本文介绍如何将开源框架的网络模型(如Caffe、Onnx等),通过ATC(Advanced Tensor Compiler)将其转换成图像分析引擎支持的离线模型,模型转换过程中可以实现算子调度的优化、权值数据重排、内存使用优化等,可以脱离设备完成模型的预处理。

产品版本

与本文档相对应的产品版本如下。

产品名称

产品版本

Hi3519D

V500

Hi3516D

V500

Hi3516C

V608

Hi3516C

V610

说明:

本文未有特殊说明,Hi3516DV500与Hi3519DV500内容完全一致;Hi3516CV608与Hi3516CV610内容完全一致。

读者对象

本文档主要适用于以下工程师:

  • 技术支持工程师
  • 软件开发工程师

掌握以下经验和技能可以更好地理解本文档:

  • 熟悉Linux基本命令。
  • 对机器学习、图像分析方法有一定的了解。

修订记录

修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。

版本

日期

修改描述

00B02

2026-09-30

第2次临时版本发布

“--insert_op_conf”和“--fusion_switch_file”小节涉及修改

新增“ReduceL2<=17”和“ReduceL2/version18”小节

00B01

2026-06-30

第1次临时版本发布

简介

工具功能架构

ATC工具功能架构如图1所示。从图1中可以看出,用户可以将开源框架网络模型通过ATC工具转换成适配图像分析引擎的离线模型,也可以将转换后的离线模型转成json文件,方便文件查看。用户也可以直接将开源框架网络模型文件通过ATC工具转成json文件。

图 1 ATC工具功能架构

工具运行流程

使用ATC工具进行模型转换的总体流程如图1所示。

图 1 运行流程

详细流程说明如下:

  • 使用ATC工具之前,请先在开发环境安装ATC,获取相关路径下的ATC工具,详细说明请参见“获取ATC工具”中的环境准备。
  • 准备要进行转换的模型,并上传到开发环境,详细说明请参见“转换样例”。
  • 使用ATC工具进行模型转换,在配置相关参数时,根据实际情况选择是否进行“量化选项”。图像预处理是图像分析引擎提供的硬件图像预处理模块,包括色域转换,图像归一化(减均值/乘系数)功能。

使用入门

准备动作

获取ATC工具

独立安装CANN包,详请请参见《驱动和开发环境安装指南》"2.3.4 软件包安装"。

本手册以ATC独立安装CANN包为例进行说明。

设置环境变量

须知:

  • 使用export方式设置环境变量后,环境变量只在当前窗口有效。如果用户之前在.bashrc文件中设置过ATC安装路径的环境变量,则在执行上述命令之前,需要先手动删除原来设置的ATC安装路径环境变量。
  • 如果用户之前在.bashrc文件中设置过之前版本ATC安装路径的环境变量,则在执行atc命令之前,需要先手动删除原来设置的ATC安装路径环境变量,然后设置如下环境变量。设置完成后,切换到新窗口执行atc模型转换命令。

必选环境变量(如下环境变量中${install_path}以软件包使用默认安装路径为例进行说明)

export PATH=${install_path}/Ascend/ascend-toolkit/{software version}/atc/bin:$PATH 
export LD_LIBRARY_PATH=${install_path}/Ascend/ascend-toolkit/{software version}/atc/third_party_lib:$LD_LIBRARY_PATH

或者执行如下命令配置环境变量。

source ${install_path}/Ascend/ascend-toolkit/{software version}/x86_64-linux/script/setenv.sh

硬件约束

为了充分利用ATC并行加速的特性,建议运行服务器的核心数大于等于20。

转换样例

须知:

使用高版本ATC工具转换的模型,在低版本环境上使用可能会出现不兼容问题,建议使用匹配的版本重新进行模型转换。

开源框架的Caffe网络模型转换成离线模型

  1. 以ATC运行用户登录开发环境,并将模型转换过程中用到的模型文件(*.prototxt)、权重文件(*.caffemodel)等上传到开发环境任意路径,例如上传到$HOME_/test/_目录下。
  2. 执行如下命令生成离线模型。(如下命令中使用的目录以及文件均为样例,请以实际为准)

    atc --model=$HOME/test/xxx.prototxt --weight=$HOME/test/xxx.caffemodel --framework=0 --output=$HOME/test/out/xxx --image_list="data:$HOME/test/xxx_image_list.txt" --insert_op_conf="$HOME/test/image_preprocess.txt"
    

    关于参数的详细解释以及使用方法请参见“参数说明”。

  3. 若提示如下信息,则说明模型转换成功。

    end binary code generating
    

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

    说明:

    如果用户使用Faster RCNN、YOLOV3、YOLOV2、SSD等Caffe框架网络模型进行模型转换,由于此类网络中包含了一些原始Caffe框架中没有定义的算子结构,如ROIPooling、Normalize、PSROI Pooling和Upsample等。为了使图像分析引擎能支持这些网络,需要对原始的Caffe框架网络模型进行扩展,降低开发者开发自定义算子/开发后处理代码的工作量,详细扩展方法请参见“检测网硬化加速”。

开源框架的Onnx网络模型转换成离线模型

  1. 以ATC运行用户登录开发环境,并将模型转换过程中使用到的模型文件(*.onnx)等上传到开发环境任意路径,例如$HOME_/test/_目录下。
  2. 执行如下命令生成离线模型。(如下命令中使用的目录以及文件均为样例,请以实际为准)

    atc --model=$HOME/test/xxx.onnx --framework=5 --output=$HOME/test/out/xxx.om –image_list="data:$HOME/test/xxx_image_list.txt"
    

    关于参数的详细解释以及使用方法请参见“参数说明”。

  3. 若提示如下信息,则说明模型转换成功。

    end binary code generating
    

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

输出文件说明

  • *.om: 转换后的模型文件,文件名通过--output配置。
  • atc_perf.csv: 预估模型在板端运算时实际计算量。
  • calibration_param.txt: 模型使用的量化参数。
  • cnn_net_tree_parser.dot:原始模型解析后的算子信息。
  • cnn_net_tree_adapt.dot:网络适配后的算子信息。
  • cnn_net_tree.dot:网络优化后的算子信息。
  • cnn_net_tree_after_tiling_seg_0.dot:网络深度融合后的算子信息。

    说明:

    请通过dot命令把*.dot 文件转为pdf文件方便查看,如:dot -Tpdf cnn_net_tree.dot -o cnn_net_tree.pdf。 安装dot命令:apt install graphviz

  • mapper_debug.log:转换模型的调试日志。

  • mapper_error.log:转换模型的错误日志。
  • layer.json:输出原始模型的算子信息,见命令行参数--json。
  • shape.json:输出原始模型每个算子的shape信息,见命令行参数--json。
  • om.json:输出转换后的模型信息,见命令行参数--json。

    • 模型信息包括但不限于:

      • tmp_buf_size:板端运行模型时NPU算子需要的临时缓存。
      • aicpu_buf_size:板端运行模型时CPU算子需要的缓存。
      • dump_buf_size: 板端运行模型时,dump算子数据时需要的缓存。
      • model_param_size:om模型的参数大小。
      • atc_version:转换模型时用的ATC版本号。
      • batch_num:支持的动态batch数,见命令行参数--batch_num。
    • 算子信息包括但不限于:

      • name: 算子名。
      • type: 算子类型。
      • device_type:算子类型是CPU或NPU。
      • input_desc:算子输入信息。
      • output_desc:算子输出信息。
      • data_flow:算子输入、计算、输出的数据类型。

    须知:

    以下文件包含网络结构等敏感信息,若用户不需要保留这些数据,请及时删除:*.om/*.dot/*.json/mapper_debug.log

参数说明

概览

总体约束

在进行模型转换前,请务必查看如下约束要求:

  • 如果要将Faster RCNN等网络模型转成适配图像分析引擎的离线模型,则务必参见“定制网络修改”先修改prototxt模型文件。
  • 支持原始框架类型为Caffe、Onnx的模型转换,输入数据类型为FP32、FP16、INT16、UINT16、INT8、UINT8。
  • 当原始框架类型为Caffe时,模型文件(.prototxt)和权重文件(.caffemodel)的层名、层类型必须保持名称一致(包括大小写)。
  • 不支持动态shape的输入,例如:NCHW输入为[?,3,?,?]多个维度可任意指定数值。模型转换时需指定固定数值。
  • 输入数据默认最大支持四维,有特殊说明的算子,以具体规格说明为准。
  • 模型中的所有层算子除const算子外,输入和输出需要满足每个维度不为零。
  • 只支持“算子规格说明”中的算子,并需满足算子限制条件。不支持的算子需用户在板端使用CPU实现,把网络切分编译多个om,然后调用板端ACL API串通网络。
  • 当模型输入是4维或2维,且第0维>1时,ATC识别第0维为batch,为节省work buffer,把第0维改为1。
  • 模型中所有输入输出的名字和算子层的名字都需要小于255个字符。
  • 融合子网的中间节点如果配置为输出节点,默认不支持融合。
  • 以下参数仅Hi3516CV610 AIISP场景支持,非AIISP模型请勿配置:

    --alu_coef_pipe_name

    --backward_jmp

    --combine_tiling_info_enable

    --dlut_enable

    --dynamic_ub_reuse

    --event_table_opt

    --gplp_method

    --image_fake_raw_type

    --max_val

    --min_val

    --multi_model_share_aipp

    --once_jmp

    --once_jmp_cnt

    --out_nodes_order_2nd

    --pingpong_jmp

    --pingpong_jmp_cnt

    --pitch_align_opt

    --tile_number

    --ub_alloc_opt

    --w4_cube_eltwise_merge_enable

    --active2pwl

    --aidrc_compress_layer

    --aipp_data_merge_enable

    --deconv_multiple

    --dlut_input

    --dlut_table

    --fusion_buffer_info

    --fusion_end_nodes

    --fusion_strategy

    --fusion_subnet_info

    --input_crop_info

    --input_csc_input_bias_info

    --input_csc_matrix_info

    --input_csc_output_bias_info

    --input_dcmp_enable

    --input_dcmp_nodes

    --input_gamma_enable

    --input_gamma_lut_table

    --input_max_shape_info

    --input_padding_mode

    --input_resize_mode

    --input_resize_ratio

    --input_resize_shape_info

    --inst_opt_enable

    --inter_layer_event_opt_enable

    --isp_gain_clip_data_bits

    --isp_gain_input_enable

    --isp_gain_input_node_name

    --isp_gain_param_num

    --load_buffer_num

    --mutil_model_enable

    --nodes_order

    --op_binary_file

    --output_cmp_enable

    --output_cmp_nodes

    --output_crop_enable

    --output_crop_info

    --output_degamma_enable

    --output_degamma_lut_table

    --output_shape

    --packed_report_name

    --packed_report_repeat_num

    --post_processing_high_precision

    --profile_map_channel_num

    --profile_map_conv_node_name

    --pwl_file

    --reorder_nodes_disable

    --src_img_shape

    --store_buffer_num

    --op_binary_stage_num

    --two_stage_enable

    --alu_op_opt

参数配置方式

ATC 支持2种配置方式,支持同样的参数。

  • 文件参数方式:

    atc cfg_file

示例:atc test.cfg

  • 文件参数格式:

    [param1] value1

    [param2] value2

    …

文件参数格式示例:

[model] test.prototxt
[weight] test.caffemodel
[image_list] image_list.txt
[insert_op_conf] image_preprocess.txt
  • 命令行参数方式:

    atc param1=value1 param2=value2 ...

示例:

--model=$HOME/test/resnet50.prototxt --weight=$HOME/test/resnet50.caffemodel --image_list=image_list.txt --insert_op_conf=image_preprocess.txt

参数概览

通过atc --help命令查询出所有支持的参数。

基础功能

以下介绍部分常用参数选项,更多选项用法请输入--help。

总体选项

--help

功能说明:显示帮助信息。

关联参数:无

参数取值:无

推荐配置及收益:无

示例:atc --help

依赖约束:无

--version

功能说明:显示ATC版本信息。

关联参数:无

参数取值:无

推荐配置及收益:无

示例:atc --version

依赖约束:无

--mode

功能说明:运行模式。

关联参数:若--mode取值为1或3,则需要与 --om、--json参数配合使用。如果将原始模型文件转换成带shape信息的json文件,则还需要与 --dump_mode参数配合使用。

参数取值:

  • 参数值

    • 0:生成离线模型。
    • 1:离线模型或原始模型文件转json,方便查看模型中的参数信息。
    • 3:仅做预检,检查模型文件的内容是否合法。
  • 参数值约束:配置为1或3时不会转换离线模型。

  • 参数默认值:0

推荐配置及收益:无

示例:

--mode=0或--mode 0

说明:

使用atc命令进行模型转换时,命令有两种方式,用户根据实际情况进行选择,本章节以选择第一种方式为例进行说明:

  1. atc param1=value1 param2=value2 ...(value值前面不能有空格,否则会导致截断,param取的value值为空)
  2. atc param1 value1 param2 value2 ...

依赖约束:无

ATC输入选项

--model

功能说明:原始模型文件路径与文件名。

关联参数:当原始模型为Caffe框架时,需要和--weight参数配合使用。

参数取值:

  • 参数值:模型文件路径与文件名。
  • 参数值格式:路径和文件名,支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

推荐配置及收益:无

示例:

--model=$HOME/test/resnet50.prototxt --weight=$HOME/test/resnet50.caffemodel

依赖约束:无

--weight

功能说明:

  • 权重文件路径与文件名。
  • 当原始模型是Caffe时需要指定。

关联参数:当原始模型为Caffe框架时,需要和--model参数配合使用。

参数取值:

  • 参数值:权重文件路径与文件名。
  • 参数值格式:路径和文件名,支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

推荐配置及收益:无

示例:

--model=$HOME/test/resnet50.prototxt --weight=$HOME/test/resnet50.caffemodel

依赖约束:无

--om

功能说明:需要转换为json格式的离线模型(.om)、原始模型文件(.prototxt、.onnx)。

关联参数:若--mode=1,则该参数必填,并且需要与 --json参数配合使用。

参数取值:

  • 参数值:离线模型(.om)、原始模型文件(.prototxt、.onnx)。
  • 参数值格式:路径和文件名,支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

推荐配置及收益:无

示例:

  • 离线模型转换为json

    --mode=1 --om=$HOME/test/module/out/caffe_resnet50.om  --json=$HOME/test/module/out/result.json
    
  • 原始模型文件转换为json

    --mode=1 --om=$HOME/module/resnet50.prototxt  --json=$HOME/module/out/result.json  --framework=0
    

依赖约束:无

--framework

功能说明:原始框架类型。

关联参数:无

参数取值:

  • 参数值:

    • 0:Caffe
    • 5:ONNX
    • 6:ABSTRACT(使用构图接口)
  • 参数值约束:当 --mode为1时,该参数可选,可以指定Caffe、Onnx、原始模型转成json,不指定时默认为离线模型转json,如果指定时需要保证--om模型和--framework类型对应一致,例如:

    --mode=1 --framework=0 --om=$HOME/test/resnet18.prototxt  --mode=1 --framework=5 --om=$HOME/test/resnet101.onnx
    

推荐配置及收益:无

示例:

--mode=0  --framework=0  --model=$HOME/test/resnet50.prototxt  --weight=$HOME/test/resnet50.caffemodel

依赖约束:无

--custom_ops_lib

说明:

Hi3516CV610不支持自定义算子。

功能说明:自定义算子库文件路径与文件名。如果没有配置--custom_ops_lib,默认从环境变量LD_LIBRARY_PATH中加载名为libsvp_custom.so的自定义算子库。如果配置了--custom_ops_lib,则优先加载--custom_ops_lib。当转换的模型包含自定义算子,而环境变量LD_LIBRARY_PATH没有包含libsvp_custom.so时,必须配置--custom_ops_lib指定自定义算子库,否则转换模型失败。

参数取值:

  • 参数值:自定义算子库文件路径与文件名。绝对路径或相对ATC执行的路径。
  • 参数值格式:路径和文件名,支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

推荐配置及收益:无

示例:

--custom_ops_lib=$HOME/test/libsvp_custom.so

依赖约束:无

ATC输出选项

--output

功能说明:如果是开源框架的网络模型,存放转换后的离线模型的路径以及文件名,例如:$HOME/test/out/caffe_resnet18或$HOME/test/out/tf_resnet18,转换后的模型文件名以指定的文件名为准,自动以.om后缀结尾,例如:caffe_resnet18.om。

关联参数:无

参数取值:

  • 参数值:如果是开源框架的网络模型:存放转换后的离线模型的路径以及文件名。
  • 参数默认值:如果未指定路径或文件名,或以"/"结束,则默认生成inst.om。
  • 参数值格式:路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

推荐配置及收益:无

示例:

--output=$HOME/test/out/caffe_resnet18

依赖约束:无

--check_report

功能说明:预检结果保存文件路径和文件名。

关联参数:

--mode:当--mode=3仅做预检时,用于生成check_result.json预检结果文件。

参数取值:

  • 参数值:预检结果保存文件路径和文件名。
  • 参数默认值:无
  • 参数值格式:路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

推荐配置及收益:无

示例:

--check_report=$HOME/test/out/check_result.json

依赖约束:无

--json

功能说明:离线模型、原始模型文件、转换为json格式文件的路径和文件名。

关联参数:

  • 离线模型转换为json

    该参数需要与--mode=1、--om参数配合使用。

  • 原始模型文件转换为json

    该参数需要与--mode=1、--om参数、 --framework配合使用,caffe还需配合--weight使用。

参数取值:

  • 参数值:json格式文件的路径和文件名。
  • 参数值格式:路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

推荐配置及收益:无

示例:

  • 离线模型转换为包含模型信息和算子信息的json

    --mode=1 --om=$HOME/test/module/out/caffe_resnet50.om  --json=$HOME/test/module/out/om.json
    
  • 原始模型文件转换为包含层信息的json

    --mode=1 --om=$HOME/module/resnet50.prototxt  --json=$HOME/module/out/layer.json  --framework=0
    
  • 原始模型文件转换为包含形状信息的json

    --mode=1 --om=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel --json=$HOME/module/out/shape.json  --framework=0 --dump_mode=1
    

依赖约束:无

模型输入选项

--insert_op_conf

功能说明:插入图像预处理的配置。配置了图像预处理的Data层表示输入数据格式为图像,没有配置的为Feature Map。

关联参数:无

参数取值:

  • 参数值:插入图像预处理的配置文件路径与文件名。
  • 参数值格式:路径和文件名,支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

推荐配置及收益:无

须知:

  1. 图像预处理(AIPP:AI Preprocessing)当前支持图像裁剪(crop)、图像边缘填充(padding)、图像缩放(resize)、色域转换、通道数据交换、减均值、乘系数;对于Hi3519DV500芯片,如果图像缩放模式选择为最近邻(nearest),图像预处理按图像裁剪、图像边缘填充、图像缩放、色域转换、通道数据交换、减均值、乘系数顺序执行;如果选择图像缩放模式为线性缩放,图像预处理按图像裁剪、图像边缘填充、色域转换、通道数据交换、减均值、乘系数,图像缩放顺序执行。对于Hi3516CV610芯片,图像预处理按图像裁剪、图像边缘填充、色域转换、通道数据交换、减均值、乘系数,图像缩放顺序执行。
  2. 请按原始模型的图像预处理、板端运行时输入的数据格式配置。
  3. 模板中参数取值都为默认值,实际使用时,如果配置文件中某些参数未配置,则模型转换时自动设置成该模板中相应参数的默认值。
  4. input_format属性为必选属性,其余属性均为可选配置,如果未配置,则模型转换时自动设置成该模板中相应参数的默认值。
  5. 模型转换时开启或没有AIPP,在进行推理业务时,输入图片数据都要求为NCHW排布。
  6. 图像输入种类。
    • 若图像输入为YUV400,要求输入channel为1;
    • 若图像输入为UVSP、VUSP,要求输入channel为2;
    • 若图像输入为YUV420SP、YVU420SP、YUV422SP、YVU422SP、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE,要求输入channel为3;
    • 其他输入格式要求输入channel为4。
  7. 在使能AIPP功能时,您只能选择静态AIPP或动态AIPP方式来处理图片,不能同时配置静态AIPP和动态AIPP两种方式,使能AIPP时可以通过aipp_mode参数控制。动态AIPP的参数每次推理需要计算,计算需要耗时,所以动态AIPP的性能比静态AIPP性能要差。
  8. 当开启preproc为动态时,需与静态preproc结果一致时,生成离线模型时动态insert_op_conf文件需将静态对应的preproc参数一块配置。
  9. Hi3516CV610 输入数据大小>80k, 且C>1场景不支持动态aipp设置input_format为FM和VUSP。

将配置好的_insert_op.cfg_文件上传到ATC工具所在服务器任意目录,例如上传到_/home/test /_,使用示例如下:

--insert_op_conf=/home/test/insert_op.cfg

依赖约束:无

图 1 AIPP整体功能

AIPP规格约束
  • 对于Hi3519DV500,Resize模式不同,AIPP的流程顺序也不同。

    • 当Resize的模式是nearest时候,流程顺序是Crop、Pad、Resize、色域转换、通道转换、减均值归一化;
    • 当Resize的模式是bilinear时候,流程顺序是Crop、Pad、色域转换、通道转换、减均值归一化、Resize。
  • 对于Hi3516CV610,AIPP流程顺序统一为:Crop、Pad、色域转换、通道转换、减均值归一化、Resize。

  • Crop、Pad、Resize三个操作会改变图像尺寸,经过AIPP处理之后的图片的宽和高,应该与模型文件--input_shape中的宽和高相等。
  • 在处理RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR图像的时候,Crop和Pad是对原始图像即channel为1的图像进行处理,Resize则是对变成4通道后的数据即channel为4的数据进行处理。假设原始图像的大小为1*1*224*224,Crop的加载坐标以及大小参数分别为[3, 3, 110, 110],Pad的上下左右补边参数分别是[2, 2, 2, 2],经过Crop和Pad之后,图像变为1*1*114*114;在进入Resize前,图像会变为4通道:1*4*57*57;因此Resize的input需要填为1*4*57*57,此外Resize的output需要与--input_shape相等。
  • Crop、Pad、Resize静态模式不支持动态分辨率

    • Crop

      • 抠图起始位置用load_start_pos_w和load_start_pos_h表示,抠图大小用crop_size_w和crop_size_h表示。
      • 抠图起始位置约束

        • 要求load_start_pos_w * bitNum为8的倍数,其中bitNum代表图像像素的位宽。
        • 要求 load_start_pos_w<src_image_size_w,load_start_pos_h<src_image_size_h。
        • 对于YUV420SP、YVU420SP、YUV422SP、YVU422SP的图像,要求取值是偶数。
      • 抠图大小约束

        • 要求load_start_pos_w + crop_size_w <= src_image_size_w, load_start_pos_h + crop_size_h <= src_image_size_h
        • 对于YUV420SP、YVU420SP、YUV422SP、YVU422SP以及RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR的图像,要求取值是偶数。
    • Pad

      • 上下左右补边分别用top_padding, bottom_padding, left_padding, right_padding
      • 要求top_padding, bottom_padding, left_padding, right_padding范围都在[0, 15]
      • 对于RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR的图像,要求(top_padding+ bottom_padding)的结果为偶数,(left_padding + right_padding)为偶数
      • Pad模式包括const_zero、duplicate、reflection、symmetric。对于const_zero模式,当使能Resize的nearest模式,且垂直方向为下采样的时候,即高方向缩放倍数(输出/输入)小于1的时候,top_padding和bottom_padding只能设置为0。对于Hi3516CV610芯片,只支持const_zero和duplicate模式。
      • 对于YUV420SP、YVU420SP、YUV422SP、YVU422SP,静态aipp场景,pad要求取值是偶数;动态aipp场景,当resize关闭或者模式为nearest模式的时候,pad要求取值是偶数
    • Resize

      • 静态模式

        • 支持nearest resize, 宽、高缩放倍数(输出/输入)分别支持 0.25、0.5、1、2。
        • 对于Hi3519DV500芯片,bilinear resize支持cube和vector两种模式,区别为不同硬件实现,对于Hi3516CV610芯片,bilinear resize不区分模式。
        • 对于Hi3519DV500芯片,支持bilinear resize(cube) : 缩放倍数能用5.5定点数表示,则优先走cube,以获得通常情况下较优的性能。H方向缩放倍数为Hin/Hout,W方向缩放倍数为Win/Wout。5.5定点数,为整数部分使用5位和小数部分使用5位的定点数,该数的整数部分小于32,小数部分乘32后结果为整数。

          注:在align_corners模式下,缩放倍数计算公式为(Win-1)/(Wout-1)或(Hin-1)/(Hout-1)。

        • 对于Hi3519DV500芯片,支持bilinear resize (vector) : 如果不能使用cube的话,则使用vector。

        • 对于Hi3519DV500芯片,为了支持更高精度,用户可配置使用bilinear resize (vector)。
      • 动态模式

        • 支持nearest resize, 宽、高缩放倍数(输出/输入)分别支持 0.25、0.5、1、2。
        • 支持bilinear resize (vector)。
        • 输入、输出的分辨率最大值4096。

    图 1 crop,padding,resize顺序图

AIPP选项
aipp_mode

功能说明:AIPP模式,必须配置。

关联参数:无

参数取值:

  • 参数值:dynamic,static

    dynamic: 动态AIPP

    static: 静态AIPP

  • 参数类型:String

示例:

aipp_mode: static

依赖约束:无

功能说明:标识对模型的第几个输入做图像预处理,从0开始,默认为0。

关联参数:无

参数取值:

  • 参数值:0,1......
  • 参数默认值:0
  • 参数类型:整型
  • 参数数值约束:>=0

示例:

related_input_rank: 0

依赖约束:无

input_format配置说明

功能说明:板端运行时输入的图像格式或Feature Map,必须配置。

关联参数:无

参数取值:

  • 参数值:YUV420SP、YVU420SP、YUV422SP、YVU422SP、YUV400、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE、XRGB_PLANAR、ARGB_PLANAR、XBGR_PLANAR、ABGR_PLANAR、RGBX_PLANAR、RGBA_PLANAR、BGRX_PLANAR、BGRA_PLANAR、XRGB_PACKAGE、ARGB_PACKAGE、XBGR_PACKAGE、ABGR_PACKAGE、RGBX_PACKAGE、RGBA_PACKAGE、BGRX_PACKAGE、BGRA_PACKAGE、RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR、UVSP、VUSP。
  • 参数类型:enum
  • 参数值约束

    1.图像输入时shape必须为4d。

    2.图像输入与输入channel的对应关系如下:

    若图像输入为YUV420SP、YVU420SP、YUV422SP、YVU422SP、BGR_PLANAR, RGB_PLANAR,RGB_PACKAGE, BGR_PACKAGE,要求输入channel为3

    若图像输入为YUV400,要求输入channel为1;

    若图像输入为UVSP、VUSP,要求输入channel为2;

    若图像输入为XRGB_PLANAR、ARGB_PLANAR、XBGR_PLANAR、ABGR_PLANAR、RGBX_PLANAR、RGBA_PLANAR、BGRX_PLANAR、BGRA_PLANAR、XRGB_PACKAGE、ARGB_PACKAGE、XBGR_PACKAGE、ABGR_PACKAGE、RGBX_PACKAGE、RGBA_PACKAGE、BGRX_PACKAGE、BGRA_PACKAGE、RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR,要求输入channel为4。

    若图像输入为BGR_PLANAR且图像输入channel为1,则会强制将图像输入类型更改为YUV400。

    3.FM表示Feature Map。

    4.channel在aipp功能后的channel数目。

示例:

input_format: BGR_PLANAR

依赖约束:无

model_format配置说明

功能说明:模型运行时的色域格式。

关联参数:input_format

参数取值:

  • 参数值:RGB、BGR、ARGB、ABGR、RGBA、BGRA、XRGB、XBGR、RGBX、BGRX、RGGB、GRBG、GBRG、BGGR
  • 参数类型:enum
  • 参数值约束:需要与input_format相匹配

    YUV420SP、YVU420SP、YUV422SP、YVU422SP、UVSP、VUSP、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE可取值范围为RGB、BGR;

    XRGB_PLANAR、ARGB_PLANAR、XBGR_PLANAR、ABGR_PLANAR、RGBX_PLANAR、RGBA_PLANAR、BGRX_PLANAR、BGRA_PLANAR、XRGB_PACKAGE、ARGB_PACKAGE、XBGR_PACKAGE、ABGR_PACKAGE、RGBX_PACKAGE、RGBA_PACKAGE、BGRX_PACKAGE、BGRA_PACKAGE可取值范围为XRGB、XBGR、RGBX、BGRX;

    RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR可取值范围为RGGB、GRBG、GBRG、BGGR;

    YUV400忽略此配置;

    图像格式为灰度图(GRAY)时,不需配置;

    Feature Map忽略此配置。

示例:

model_format: BGR

依赖约束:无

色域转换配置说明

功能说明:用于将输入的图片格式,转换为模型需要的图片格式,静态aipp可选配置,动态aipp无须配置,Feature Map不支持此功能。

关联参数:无

相关参数:

  • csc_switch

    功能说明:色域转换开关,静态AIPP配置。

    参数类型:bool

    取值范围:true/false,true表示开启色域转换,false表示关闭;

    示例:

    csc_switch: false
    
  • matrix_r0c0,matrix_r0c1,matrix_r0c2,matrix_r1c0,matrix_r1c1,matrix_r1c2,matrix_r2c0,matrix_r2c1,matrix_r2c2

    功能说明:3*3 CSC矩阵元素

    参数类型:int16

    取值范围:[-32677, 32676]

    示例:

    matrix_r0c0: 1192
    matrix_r0c1: 2166
    matrix_r0c2: 0
    matrix_r1c0: 1192
    matrix_r1c1: -218
    matrix_r1c2: -547
    matrix_r2c0: 1192
    matrix_r2c1: 0
    matrix_r2c2: 1836
    
  • output_bias_0,output_bias_1,output_bias_2

    功能说明:RGB转YUV时的输出偏移。

    参数类型:uint8

    取值范围:[0, 255]

    示例:

    output_bias_0: 16
    output_bias_1: 128
    output_bias_2: 128
    
  • input_bias_0,input_bias_1,input_bias_2

    功能说明:YUV转RGB时的输入偏移。

    参数类型:uint8

    取值范围:[0, 255]

    示例:

    input_bias_0: 16 
    input_bias_1: 128
    input_bias_2: 128
    

计算规则:

YUV转BGR: 
| B |    | matrix_r0c0 matrix_r0c1 matrix_r0c2 | | Y - input_bias_r0 |           | output_bias_0 |
| G | = (| matrix_r1c0 matrix_r1c1 matrix_r1c2 | | U - input_bias_r1 |) >> 10 + | output_bias_1 | 
| R |    | matrix_r2c0 matrix_r2c1 matrix_r2c2 | | V - input_bias_r2 |           | output_bias_2 |

根据不同的彩色视频数字化标准又可以将视频格式分为BT-601标准清晰度视频格式(定义于SDTV标准中)和BT-709 高清晰度视频格式(定义于HDTV标准中)。针对模型输入的图片或视频,当前给出标清和高清之间的色域转换矩阵。

  • 601 yuv标清转rgb高清系数

    matrix_r0c0: 1192
    matrix_r0c1: 0
    matrix_r0c2: 1634
    matrix_r1c0: 1192
    matrix_r1c1: -400
    matrix_r1c2: -833
    matrix_r2c0: 1192
    matrix_r2c1: 2066
    matrix_r2c2: 0
    input_bias_0: 16 
    input_bias_1: 128 
    input_bias_2: 128
    output_bias_0: 0 
    output_bias_1: 0 
    output_bias_2: 0
    
  • 601 yuv标清转rgb标清矩阵系数

    matrix_r0c0: 1024
    matrix_r0c1: 0
    matrix_r0c2: 1404
    matrix_r1c0: 1024
    matrix_r1c1: -344
    matrix_r1c2: -716
    matrix_r2c0: 1024
    matrix_r2c1: 1775
    matrix_r2c2: 0
    input_bias_0: 16 
    input_bias_1: 128 
    input_bias_2: 128
    output_bias_0: 16 
    output_bias_1: 16 
    output_bias_2: 16
    
  • 601 yuv高清转rgb标清矩阵系数

    matrix_r0c0: 880
    matrix_r0c1: 0
    matrix_r0c2: 1233
    matrix_r1c0: 880
    matrix_r1c1: -302
    matrix_r1c2: -629
    matrix_r2c0: 880
    matrix_r2c1: 1599
    matrix_r2c2: 0
    input_bias_0: 0 
    input_bias_1: 128 
    input_bias_2: 128
    output_bias_0: 16 
    output_bias_1: 16 
    output_bias_2: 16
    
  • 601 yuv高清转rgb高清矩阵系数

    matrix_r0c0: 1024
    matrix_r0c1: 0
    matrix_r0c2: 1436
    matrix_r1c0: 1024
    matrix_r1c1: -352
    matrix_r1c2: -731
    matrix_r2c0: 1024
    matrix_r2c1: 1815
    matrix_r2c2: 0
    input_bias_0: 0 
    input_bias_1: 128 
    input_bias_2: 128
    output_bias_0: 0 
    output_bias_1: 0 
    output_bias_2: 0
    
  • 709 yuv标清转rgb高清矩阵系数

    matrix_r0c0: 1192
    matrix_r0c1: 0
    matrix_r0c2: 1836
    matrix_r1c0: 1192
    matrix_r1c1: -218
    matrix_r1c2: -547
    matrix_r2c0: 1192
    matrix_r2c1: 2166
    matrix_r2c2: 0
    input_bias_0: 16 
    input_bias_1: 128 
    input_bias_2: 128
    output_bias_0: 0 
    output_bias_1: 0 
    output_bias_2: 0
    
  • 709 yuv高清转rgb高清矩阵系数

    matrix_r0c0: 1024
    matrix_r0c1: 0
    matrix_r0c2: 1613
    matrix_r1c0: 1024
    matrix_r1c1: -192
    matrix_r1c2: -479
    matrix_r2c0: 1024
    matrix_r2c1: 1900
    matrix_r2c2: 0
    input_bias_0: 0 
    input_bias_1: 128 
    input_bias_2: 128
    output_bias_0: 0 
    output_bias_1: 0 
    output_bias_2: 0
    
  • 709 yuv标清转rgb标清矩阵系数

    matrix_r0c0: 1024
    matrix_r0c1: 0
    matrix_r0c2: 1578
    matrix_r1c0: 1024
    matrix_r1c1: -187
    matrix_r1c2: -470
    matrix_r2c0: 1024
    matrix_r2c1: 1861
    matrix_r2c2: 0
    input_bias_0: 16 
    input_bias_1: 128 
    input_bias_2: 128
    output_bias_0: 16 
    output_bias_1: 16 
    output_bias_2: 16
    
  • 709 yuv高清转rgb标清矩阵系数

    matrix_r0c0: 880
    matrix_r0c1: 0
    matrix_r0c2: 1385
    matrix_r1c0: 880
    matrix_r1c1: -164
    matrix_r1c2: -413
    matrix_r2c0: 880
    matrix_r2c1: 1634
    matrix_r2c2: 0
    input_bias_0: 0 
    input_bias_1: 128 
    input_bias_2: 128
    output_bias_0: 16 
    output_bias_1: 16 
    output_bias_2: 16
    

依赖约束:只有yuv格式输入支持csc配置;其它格式配置后不生效。

减均值乘系数配置说明

功能说明:减均值、乘系数;均值和系数的通道顺序为按model_format做完通道数据交换后的顺序。由于量化模块需感知均值和系数,因而动态AIPP在量化场景下,也需要配置,配置为在线时典型均值和系数值(注:如果配置的值,和动态AIPP在线传入的值差异较大,可能导致量化误差)。

计算规则:pixel_out_chx(i) = [clip(pixel_in_chx(i), min_chn_i ) - mean_chn_i ] * var_reci_chn

关联参数:无

相关参数:

  • mean_chn_0,mean_chn_1,mean_chn_2,mean_chn_3

    功能说明:每个通道的均值,可选。

    参数类型:float32

    取值范围:[-65504.0, 65504.0]

    示例:

    mean_chn_0: 0
    mean_chn_1: 0
    mean_chn_2: 0
    mean_chn_3: 0
    
  • var_reci_chn_0,var_reci_chn_1,var_reci_chn_2,var_reci_chn_3

    功能说明:每个通道的系数,可选。

    参数类型:float32

    取值范围:[0, 65504]

    示例:

    var_reci_chn_0: 1.0
    var_reci_chn_1: 1.0
    var_reci_chn_2: 1.0
    var_reci_chn_3: 1.0
    
  • min_chn_0,min_chn_1,min_chn_2,min_chn_3

    功能说明:每个通道的最小值。

    参数类型:float32

    取值范围:[-65504.0, 65504.0]

    示例:

    min_chn_0: 0
    min_chn_1: 0
    min_chn_2: 0
    min_chn_3: 0
    

依赖约束:当input_format参数为FM时,只使用第一组通道系数;当输入大于4维时,可只配置一组通道系数。Hi3516CV610不支持逐通道配置最小值,只会对所有通道统一使用min_chn_0作为最小值。

原始图像宽高

功能说明:原始图像的宽度、高度;静态aipp可选配置,动态aipp无须配置。

关联参数:无

参数取值:

  • 相关参数值:

    src_image_size_w: 原始图像的宽度。

    src_image_size_h: 原始图像的高度。

  • 参数类型:int32

  • 参数值约束:

    宽度取值范围为[2,4096];高度取值范围为[1,4096],对于YUV420SP_U8类型的图像,要求原始图像的宽和高取值是偶数。

    请根据实际图片的宽、高配置src_image_size_w和src_image_size_h;只有crop,resize,padding功能没有开启的场景,src_image_size_w和src_image_size_h才能不配置,该场景下会取网络模型输入定义的w和h。

    在处理RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR图像的时候,aipp的原始图像输入的通道数为1,src_img_size_w,src_img_size_h须按照通道数为1的图像进行设置的。进行aipp处理之后,数据会变成4通道,aipp处理的结果须与--input_shape一致,因此--input_shape须按照通道数为4的数据进行配置。例如src_image_size_w为256,src_image_size_h为128,crop,resize,padding功能没有开启,则--input_shape的shape配置为1,4,64,128。RAW输入的其他处理规则请见AIPP规格约束。

示例:

src_image_size_w: 16
src_image_size_h: 16

依赖约束:无

最大图像宽高

功能说明:输入图像的最大宽度、高度;静态aipp无须配置,动态aipp必须配置。

关联参数:无

参数取值:

  • 相关参数值:

    max_src_image_size_w: 最大输入图像的宽度。

    max_src_image_size_h: 最大输入图像的高度。

  • 参数类型:int32

  • 参数值约束:

    宽度取值范围为[2,4096];高度取值范围为[1,4096],对于YUV420SP_U8类型的图像,要求原始图像的宽和高取值是偶数。

示例:

max_src_image_size_w: 16
max_src_image_size_h: 16

依赖约束:无

crop配置说明

功能说明:AIPP处理时是否支持抠图,静态aipp可选配置,动态aipp无须配置。

关联参数:无

相关参数:

  • crop

    功能说明:crop转换开关,静态AIPP配置。

    参数类型:bool

    取值范围:true/false,true表示开启crop,false表示关闭;

    示例:

    crop: false
    
  • load_start_pos_w, load_start_pos_h

    功能说明:抠图起始位置水平、垂直方向坐标,抠图大小为网络输入定义的w和h。

    参数类型:int32

    取值范围:[0,4095]; load_start_pos_w<src_image_size_w,load_start_pos_h<src_image_size_h;

    示例:

    load_start_pos_w: 0
    load_start_pos_h: 0
    
  • crop_size_w, crop_size_h

    功能说明:抠图后的图像size。

    参数类型:int32

    取值范围:[0,4096]; load_start_pos_w + crop_size_w <= src_image_size_w、load_start_pos_h + crop_size_h <= src_image_size_h;

    示例:

    crop_size_w: 16
    crop_size_h: 16
    

依赖约束:仅支持shape维度为4

resize配置说明

功能说明:AIPP处理时是否支持缩放,静态aipp可选配置,动态aipp无须配置。

关联参数:无

相关参数:

  • resize

    功能说明:resize转换开关,静态AIPP配置。

    参数类型:bool

    取值范围:true/false,true表示开启resize,false表示关闭。

    示例:

    resize: false
    
  • resize_mode

    功能说明:缩放的方式,静态AIPP配置。

    参数类型:enum

    取值范围:

    对于Hi3519DV500芯片,取值范围为:nearest, linear_vector, linear_cube。其中linear_vector和linear_cube都是双线性插值,区别在于linear_vector使用vector逻辑单元进行处理,而linear_cube使用cube逻辑单元进行处理。

    备注:若linear不满足使用cube逻辑单元的条件,但是强制配置为linear_cube,会回退为linear_vector。linear_cube条件请参考前文描述。

    对于Hi3516CV610,取值范围为:nearest,linear。

    示例:

    resize_mode: nearest
    
  • resize_input_w, resize_input_h, resize_output_w, resize_output_h

    功能说明:缩放后和缩放前图像的宽度和高度。

    参数类型:int32

    取值范围:resize_output_h:[16,4096];resize_output_w:[16,1920];resize_output_w/resize_input_w∈[1/16,16]、resize_output_h/resize_input_h∈[1/16,16];

    示例:

    resize_input_w: 16
    resize_input_h: 16
    resize_output_w: 32
    resize_output_h: 32
    
  • coordinate_trans_mode

    功能说明:坐标轴转换的方式。

    参数类型:enum

    参数默认值:align_corners

    取值范围:静态AIPP,resize_mode为linear_vector, linear_cube支持half_pixel, pytorch_half_pixel, asymmetric, align_corners;动态AIPP支持asymmetric, align_corners。其中asymmetric模式与opencv的双线性插值对应,pytorch_half_pixel模式与pytorch的resize对应。

    示例:

    coordinate_trans_mode : align_corners
    

依赖约束:仅支持shape维度为4

padding配置说明

功能说明:AIPP处理时是否支持padding,静态aipp可选配置,动态aipp无须配置。

关联参数:无

相关参数:

  • padding

    功能说明:padding转换开关,静态AIPP配置。

    参数类型:bool

    取值范围:true/false,true表示开启padding,false表示关闭。

    示例:

    padding: false
    
  • padding_mode

    功能说明:padding的方式,静态AIPP配置。

    参数类型:enum

    取值范围:

    • const_zero:常量填充。
    • duplicate:复制填充。(对于Hi3516CV610芯片,当input_format为RGB_PACKAGE、BGR_PACKAGE、RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR、UVSP、VUSP时不支持)
    • reflection:镜像填充(Hi3516CV610芯片不支持)。
    • symmetric:对称填充(Hi3516CV610芯片不支持)。

    示例:

    padding_mode: const_zero
    
  • left_padding_size, right_padding_size, top_padding_size, bottom_padding_size

    功能说明:H和W的填充值,静态AIPP配置,上下左右四个值不能缺省。

    参数类型:int32

    取值范围:[0,15]。(对于Hi3516CV610芯片,当input_format为RGB_PACKAGE、BGR_PACKAGE时,left_padding_size和right_padding_size的取值范围为[0,5])

    示例:

    left_padding_size: 0
    right_padding_size: 0
    top_padding_size: 0
    bottom_padding_size: 0
    

参数值约束:

padding模式为reflection时,H和W的填充值需小于填充前的H和W;padding模式为symmetric时,H和W的填充值需不大于填充前的H和W;

依赖约束:仅支持shape维度为4。

静态AIPP配置项
# 图像预处理的配置以aipp_op开始,标识这是AIPP算子的配置。 
aipp_op {
aipp_mode: static
related_input_rank: 0
input_format: BGR_PLANAR
model_format: BGR

src_image_size_w: 16
src_image_size_h: 16

# crop参数设置 
crop: false
load_start_pos_w: 0
load_start_pos_h: 0
crop_size_w: 16
crop_size_h: 16

# resize参数设置 
resize: false
resize_mode: nearest
resize_input_w: 16
resize_input_h: 16
resize_output_w: 32
resize_output_h: 32

# padding参数设置
padding: false
padding_mode: const_zero
left_padding_size: 0
right_padding_size: 0
top_padding_size: 0
bottom_padding_size: 0
# 色域转换开关,静态AIPP配置
csc_switch: false
matrix_r0c0: 298
matrix_r0c1: 516
matrix_r0c2: 0
matrix_r1c0: 298
matrix_r1c1: -100
matrix_r1c2: -208
matrix_r2c0: 298
matrix_r2c1: 0
matrix_r2c2: 409
output_bias_0: 16
output_bias_1: 128
output_bias_2: 128
input_bias_0: 16
input_bias_1: 128
input_bias_2: 128

#  减均值、乘系数设置
mean_chn_0: 0
mean_chn_1: 0
mean_chn_2: 0
mean_chn_3: 0
var_reci_chn_0: 1.0
var_reci_chn_1: 1.0
var_reci_chn_2: 1.0
var_reci_chn_3: 1.0
min_chn_0: 0
min_chn_1: 0
min_chn_2: 0
min_chn_3: 0
}

示例:

下面以插入图像预处理算子为例进行说明,静态配置文件内容示例如下(文件名为举例为:insert_op.cfg)。

aipp_op { 
#第一个输入
    related_input_rank:0 
    aipp_mode:static
    input_format:YUV420SP 
    model_format:RGB
    # 以pytorch的预处理为例,如torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
    # 即 y = (x/255 - mean)/std = (x - 255*mean) * 1/(255*std)
    # 所以 mean_chn_x = 255*mean, var_reci_chn_x = 1/(255*std)
    mean_chn_0:123.675
    mean_chn_1:116.28
    mean_chn_2:103.53
    var_reci_chn_0:0.01712475 
    var_reci_chn_1:0.017507002 
    var_reci_chn_2:0.01742919 

# 第二个输入
    related_input_rank:1 
    input_format:RGB_PLANAR 
    model_format:BGR
    # 以Caffe 的ImageData层预处理为例:
    #transform_param {
    #    scale: 0.0078125
    #    mean_value: 104.0
    #    mean_value: 117.0
    #    mean_value: 123.0
    #}
    # 即 y = (x - mean_value) * scale,
    # 所以 mean_chn_x = mean_value, var_reci_chn_x = scale
    mean_chn_0:104
    mean_chn_1:117
    mean_chn_2:126
    var_reci_chn_0:0.0078125 
    var_reci_chn_1:0.0078125 
    var_reci_chn_2:0.0078125
 }
动态AIPP配置项
# 图像预处理的配置以aipp_op开始,标识这是AIPP算子的配置。 
aipp_op {
aipp_mode: dynamic
related_input_rank: 0
input_format : BGR_PLANAR
model_format : BGR
max_src_image_size_w:16
max_src_image_size_h:16
#说明:可通过命令行--input_csc_enable=OFF,--input_channel_order_enable=OFF,--input_crop_enable=OFF,--input_preprocess_enable=OFF, --input_resize_enable=OFF,--input_padding_enable=OFF关闭动态AIPP功能;当padding为动态时,可通过命令行设置--input_padding_info=layername:top_padding_size,bottom_padding_size,left_padding_size,right_padding_size设置其最大padding_info信息,否则为默认值[6, 6, 6, 6]。
}

备注:若使用在线均值方差功能,量化时由于需要感知均值方差,需送入均值方差处理后的数据作为量化输入。

示例:

下面以插入图像预处理算子为例进行说明,动态配置文件内容示例如下(文件名举例为:insert_op.cfg)。

aipp_op { 
#第一个输入
    related_input_rank:0 
    aipp_mode:dynamic
    input_format:YUV420SP 
    model_format:RGB
    max_src_image_size_w:16
    max_src_image_size_h:16
#第二个输入
    related_input_rank:1 
    aipp_mode:dynamic
    input_format:YUV420SP 
    model_format:RGB
    max_src_image_size_w:16
    max_src_image_size_h:16 
}
--input_csc_enable

功能说明:动态AIPP会开启所有的AIPP功能,如果在线色域转换不需使用,可以通过该选项进行关闭

关联参数:--insert_op_conf

参数取值:

  • 参数值:OFF
  • 参数值约束:只能为OFF

推荐配置及收益:无

示例:

--input_csc_enable=OFF

依赖约束:无

--input_channel_order_enable

功能说明:动态AIPP会开启所有的AIPP功能,如果在线通道转换不需使用,可以通过该选项进行关闭

关联参数:--insert_op_conf

参数取值:

  • 参数值:OFF
  • 参数值约束:只能为OFF

推荐配置及收益:无

示例:

--input_channel_order_enable=OFF

依赖约束:无

--input_preprocess_enable

功能说明:动态AIPP会开启所有的AIPP功能,如果在线均方差不需使用,可以通过该选项进行关闭

关联参数:--insert_op_conf

参数取值:

  • 参数值:OFF
  • 参数值约束:只能为OFF

推荐配置及收益:无

示例:

--input_preprocess_enable=OFF

依赖约束:无

--input_resize_enable

功能说明:动态AIPP会开启所有的AIPP功能,如果在线resize不需使用,可以通过该选项进行关闭

关联参数:--insert_op_conf

参数取值:

  • 参数值:OFF
  • 参数值约束:只能为OFF

推荐配置及收益:无

示例:

--input_resize_enable=OFF

依赖约束:无

--input_padding_enable

功能说明:动态AIPP会开启所有的AIPP功能,如果在线补边不需使用,可以通过该选项进行关闭

关联参数:--insert_op_conf

参数取值:

  • 参数值:OFF
  • 参数值约束:只能为OFF

推荐配置及收益:无

示例:

--input_padding_enable=OFF

依赖约束:无

--input_crop_enable

功能说明:动态AIPP会开启所有的AIPP功能,如果在线裁剪不需使用,可以通过该选项进行关闭

关联参数:--insert_op_conf

参数取值:

  • 参数值:OFF
  • 参数值约束:只能为OFF

推荐配置及收益:无

示例:

--input_crop_enable=OFF

依赖约束:无

--input_padding_info

功能说明:指定动态AIPP Padding的最大可能补边数。

关联参数:--insert_op_conf

参数取值:

  • 参数值:格式为op_name:top_padding_size,bottom_padding_size,left_padding_size,right_padding_size
  • 参数值约束:padding的范围为[0,15]
  • 参数默认值:默认[6,6,6,6]

推荐配置及收益:无

示例:

--input_padding_info="data0:2,2,2,2"

依赖约束:无

--image_data_bits

功能说明:指定输入RAW图像格式的数据位宽。

关联参数:--insert_op_conf 配置Data层输入为RAW图像格式,即input_format为RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR,此配置才生效。

参数取值:

  • 参数值:

    • Hi3519DV500:{8,10,12,14,16}
    • Hi3516CV610:{8}
  • 参数值约束:所有RAW图像格式输入共用1个配置。

  • 参数默认值:8。

推荐配置及收益:无

示例:

--image_data_bits=8

依赖约束:无

--bit_compact_layer

功能说明:指定输入YUV400图像格式的是否为4bit紧密排布。

关联参数:--insert_op_conf 配置Data层输入为YUV400图像格式,即input_format为YUV400,此配置才生效。

参数取值:

  • 参数值:字符串。网络模型中的节点(node_name)名称
  • 参数默认值:不使能。

推荐配置及收益:无

示例:

--bit_compact_layer="data0;data1"

依赖约束:Hi3516CV610不支持。

--input_type

功能说明:指定网络Data层的输入数据类型,只用于Feature map 输入的Data层,不能用于图片输入的Data层。

关联参数:--insert_op_conf未配置Data层输入为图片格式,即输入为Feature map时,才可以指定输入数据类型。

参数取值:

  • 参数值:格式为op_name:data_type

    • op_name:指定算子的层名,必须为Data层。
    • data_type:支持数据类型FP16, FP32, INT16, INT8, S16, S8, U16, U8, UINT16, UINT8。
  • 参数值约束:指定多个输入数据类型时,使用英文分号隔开,用双引号括住。如:--input_type="data0:INT8;data1:FP16"。

  • 参数默认值:Feature map未指定数据类型时,默认FP32。

推荐配置及收益:无

示例:

--input_type="data0:INT8;data1:FP16"

依赖约束:无

--input_shape

功能说明:指定模型输入数据的shape。

关联参数:--dynamic_image_size

参数取值:

  • 参数值:

    模型输入的shape信息,例如:"input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2"。指定的节点必须放在双引号中,节点中间使用英文分号分隔。input_name必须是转换前的网络模型中的节点名称。

    当某个输入需要支持动态分辨率时,需要将其h、w设置为-1。

  • 参数值约束:

    设置为固定取值,例如,取值为“1,2,3...”,用于将输入数据某个维度不固定的原始模型转换为固定维度的离线模型。

推荐配置及收益:无

示例:

--input_shape="input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2"

依赖约束:input_shape需要与image_list的量化校准文件数据匹配。

--input_format

功能说明:输入数据格式。

关联参数:无

参数取值:

  • 参数值:只支持NCHW。
  • 参数默认值:默认为NCHW。
  • 参数值约束:无

推荐配置及收益:无

示例:

--input_format=NCHW

依赖约束:无

模型输出选项

--output_type

功能说明:指定网络输出数据类型或指定输出节点的输出类型。

关联参数:

若指定某个输出节点的输出类型,则需要和--out_nodes参数配合使用。

参数取值:

  • 参数值:支持两种格式。

    格式1:data_type, 表示指定所有输出节点的输出数据类型。

    格式2:op_name:output_index:data_type,表示指定某个输出节点的某个输出的输出数据类型。

    • op_name:指定算子的层名,必须为--out_nodes指定的输出层。
    • output_index:指定输出层的第几个输出。
    • data_type:支持数据类型FP16, FP32, INT16, INT8, S16, S8, U16, U8, UINT16, UINT8。
  • 参数默认值:FP32

推荐配置及收益:无

示例:

  • 指定网络输出类型

    --output_type=FP32
    
  • 指定某个输出节点的输出类型

    output_type="conv1:0:FP32"  --out_nodes="conv1:0"
    

依赖约束:AICPU算子只支持输出FP32。

--out_nodes

功能说明:指定输出节点。当用户想要查看网络中间某层算子的输出时,则需要指定输出此算子。模型的最后一层默认输出,不需要指定。

关联参数:无

参数取值:

  • 参数值:

    • 网络模型中的节点(node_name)名称。
    • 指定的输出节点必须放在双引号中,节点中间使用英文分号分隔。node_name必须是模型转换前的网络模型中的节点名称,冒号后的数字表示第几个输出,例如node_name1:0,表示节点名称为node_name1的第1个输出。
  • 参数值约束:

    • 如果模型转换过程中该算子被离线计算融合掉,则该算子不能作为输出节点,配置不生效。
    • 没有实际运算而被优化删除的算子,不能作为输出节点,配置不生效。如Cast, Dropout算子。
    • 配置的输出节点的顺序与最后输出的顺序无关。
    • 即使最后一层的节点没有被指定,也一定会被输出。
    • 支持最大输入节点和输出节点加起来不能超过32个。

推荐配置及收益:无

示例:

参数值取网络模型中的节点(node_name)名称。

--out_nodes="node_name1:0;node_name1:1;node_name2:0"

依赖约束:无

--image_report_name

功能说明:指定网络某个输出为图像格式。

关联参数:--out_nodes,--image_report_bit,--image_report_type。

参数取值:指定网络输出算子的层名,必须为--out_nodes指定的输出层。

参数值约束:不能配置为data层或preprocessMerge的算子层。

推荐配置及收益:无

示例:

指定conv1输出,且为12bit的RGGB图像格式

--out_nodes=conv1:0 --image_report_name=conv1 --image_report_bit=12 --image_report_type=RGGB
--image_report_bit

功能说明:指定输出RAW图像格式的数据位宽。

关联参数:--image_report_type 配置为RGGB、GRBG、GBRG、BGGR时此配置才生效。

参数取值:

  • 参数值:8,10,12,14,16
  • 参数默认值:8

推荐配置及收益:无

依赖约束:Hi3516CV610不支持参数值为10或者14。

示例:

指定conv1输出,且为12bit的RGGB图像格式

--out_nodes=conv1:0 --image_report_name=conv1 --image_report_bit=12 --image_report_type=RGGB
--image_report_type

功能说明:图像格式输出的类型

关联参数:--out_nodes,--image_report_name,--image_report_bit,--output_rgb_order,RGB_order

参数取值:

  • 参数值:RGGB、GRBG、GBRG、BGGR、UVSP、VUSP、YUV400、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE、XRGB_PLANAR、XBGR_PLANAR、RGBX_PLANAR、BGRX_PLANAR、XRGB_PACKAGE、XBGR_PACKAGE、RGBX_PACKAGE、BGRX_PACKAGE
  • 参数默认值:RGGB
  • 参数值约束:

    1.图像输出时shape必须为4d。

    2.若图像输出为YUV400,要求输出channel为1;

    若图像输出为UVSP,VUSP,要求输出channel为2;

    若图像输出为 BGR_PLANAR, RGB_PLANAR,RGB_PACKAGE, BGR_PACKAGE,要求输出channel为3;

    其他输出格式要求输出channel为4。

    3.参数值必须与RGB_order或--output_rgb_order相匹配,详见RGB_order和--output_rgb_order。

    Hi3516CV610仅支持RGGB、GRBG、GBRG、BGGR。

推荐配置及收益:无

示例:

指定conv1输出,且为12bit的RGGB图像格式

--out_nodes=conv1:0 --image_report_name=conv1 --image_report_bit=12 --image_report_type=RGGB --output_rgb_order=RGGB
--output_rgb_order

功能说明:模型输出数据做通道转换前的通道顺序。

关联参数:--image_report_type

参数取值:

  • 参数值:字符串。取值范围{RGB、BGR、XRGB、RGBX、XBGR、BGRX、RGGB、GRBG、GBRG、BGGR}
  • 参数默认值:RGB

参数值约束:

  • 配置值需和image_report_type的类型匹配:

    UVSP、VUSP、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE可取值范围为RGB、BGR;

    XRGB_PLANAR、XBGR_PLANAR、RGBX_PLANAR、BGRX_PLANAR、XRGB_PACKAGE、XBGR_PACKAGE、RGBX_PACKAGE、BGRX_PACKAGE可取值范围为XRGB、XBGR、RGBX、BGRX

    RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR可取值范围为RGGB、GRBG、GBRG、BGGR

    YUV400忽略此配置。

  • 多个输出时,共用一个配置。

  • 不能与RGB_order同时配置。
  • Hi3516CV610仅支持RGGB、GRBG、GBRG、BGGR。

推荐配置及收益:无

示例:

[output_rgb_order] RGB

依赖约束:image_report_type配置时才生效。

--output_reorder

功能说明:转换后的模型输出节点顺序和原始模型是否保持一致。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:转换后的模型输出节点与原始模式保持一致。
    • 1:转换后的模型输出节点重新排列,与原始模式可能不一致。
  • 参数默认值:1

示例:

--output_reorder=1

依赖约束:无

量化选项

--gfpq_param_file

功能说明:GFPQ(Grouped Floating Point Quantization)分组量化参数配置文件。AMCT校准或retrain输出此文件,如quant_param_record.txt。ATC转换模型校准时输出此文件,如calibration_param.txt。

关联参数:

--model:当输入模型为定点模型时,必须配置此参数。定点模型即AMCT校准后输出权重参数为定点的模型。

参数取值:参数值:protobuf格式的文件路径,支持txt和bin格式。

文件格式定义:Proto定义

syntax = "proto2";
package calibration;
enum DataType {
    S4 = 0;
    U4 = 1;
    S8 = 2;
    U8 = 3;
    S16 = 4;
    U16 = 5;
    F16 = 6;
    S32 = 7;
    U32 = 8;
    F32 = 9;
}

message FactorParam
{
    required DataType data_type = 1 [default = S8];
    repeated float scale = 2;
    repeated float offset = 3;
    optional bytes params = 4;
}

message QuantParam
{
    repeated FactorParam input = 1;
    optional FactorParam weight = 2;
}

message LayerParam
{
    required string name = 1;
    optional DataType calc_data_type = 2 [default = S8];
    required QuantParam quant_param = 3;
}

message CalibrationParam
{
    optional uint32 version = 1 [default = 65536];
    repeated LayerParam layer = 2;
}

示例:

version: 65536
layer {
  name: "conv1"
  calc_data_type: S8
  quant_param {
    input {
      data_type: S8
      scale: 12.75
      offset: -77
    }
    weight {
      data_type: S8
      scale: 127
    }
  }
}

推荐配置及收益:

  • 配置量化参数后,ATC不需要再校准,节省转换模型的时间。
  • 使用AMCT重训或校准后的quant_param_record.txt,精度更好。

示例:

--gfpq_param_file=quant_param_record.txt

依赖约束:Hi3516CV610不支持VEC层配置高精度。

--image_list

功能说明:转换模型生成量化参数时用的校准数据。支持Feature map文本和二进制格式文件和图片格式文件。

关联参数:

  • --model:当输入模型为定点模型时,不需要配置此参数。
  • --gfpq_param_file:配置了所有层的量化参数时,不需要配置此参数。已配置量化参数的层,不校准,只使用image_list做forward。
  • --dump_data:需要导出校准数据时,必须配置此参数。
  • --input_type:校准数据使用二进制文件时,需要文件的数据类型和--input_type匹配,如果没有配置,默认FP32。
  • --insert_op_conf:配置了图像预处理的Data层使用图片文件格式,没有则使用Feature map格式。

参数取值:

  • 参数值:输入的层名和校准数据的文件路径。
  • 参数值格式:多输入时,使用半角分号“;”隔开,用双引号括住。示例:

    --image_list="name1:file1;name2:file2"

    此外,多输入时,也可以使用多个image_list分别输入。示例:

    --image_list="name1:file1"

    --image_list="name2:file2"

  • 文件格式:

    • --insert_op_conf没有配置图像预处理时,即输入为Feature map。

      • 文本文件:

        文件内容为浮点文本数据,数据间以空格或逗号分隔,一行的数据个数为输入形状channel × height × width。一行表示一个batch。示例:

        输入形状 3×2×2,4个batch。即一行12个数据,共4行。feature_map.txt:

        1 2 3 4 5 6 7 8 9 10 11 12
        0.46 0.05 -0.01 -0.20 -7 -0.6114 -0.12 0.87 0.553 -0.67 -0.027 0.164082
        -0.367 0.373 0.99 -0.0820 0.04 -0.454 -0.311 0.52 -0.033 -0.3 0.731473 0.09
        -0.012 0.928 -0.903 0.374 0.7 0.4 -0.48 -0.490 0.473455 -0.146 -0.83 -0.637
        
      • 二进制文件:

        文件内容为数据值的二进制,文件名必须以“.bin”为后缀。数据类型需要和--input_type匹配。

        如需跑多batch,需将多个batch的输入按顺序存放到同一个".bin"文件中。

    • --insert_op_conf配置图像预处理,即输入为图片时,文件内容为图片文件路径,一行一个图片文件路径,一行表示一个batch。图片大小不限,ATC根据输入的height × width缩放。

      图片文件路径支持以下三种。

      1. 绝对路径;
      2. 相对--image_list的路径;
      3. 相对ATC执行的路径。

      示例:testcase/image_list.txt,3个batch配置3个图片文件。

      /home/xxx/testcase/images/test_1.jpg
      images/test_2.png
      testcase/images/test_3.bmp
      

      --insert_op_conf图像预处理配置的input_format为YUV420SP、YVU420SP、YUV422SP、YVU422SP、YUV400、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE、XRGB_PLANAR、ARGB_PLANAR、XBGR_PLANAR、ABGR_PLANAR、RGBX_PLANAR、RGBA_PLANAR、BGRX_PLANAR、BGRA_PLANAR、XRGB_PACKAGE、ARGB_PACKAGE、XBGR_PACKAGE、ABGR_PACKAGE、RGBX_PACKAGE、RGBA_PACKAGE、BGRX_PACKAGE、BGRA_PACKAGE时,使用图片路径文本格式,支持图片后缀bmp、jpeg、jpg、jpe、jp2、png。

      --insert_op_conf图像预处理配置的input_format为RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR时,使用浮点文本格式,数据排列格式为RAW图像通道拆分前的顺序。

      示例:输入4×2×2的RAW_RGGB, 通道拆分前的顺序:

      1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16
      

      通道拆分后的数据:

      1   3   9   11  2   4   10  12  5   7   13  15  6   8   14  16
      

      即:

      Channel_0:1 3   9   11
      Channel_1:2 4   10  12
      Channel_2:5 7   13  15
      Channel_3:6 8   14  16
      

      通过image_type配置输入数据类型时,image_type为0,18,19,20,21,24,25时输入文件内容为浮点文本数据,其他情况下输入文件内容为图片文件路径。

      推荐配置及收益:校准时需要的图片是典型场景图片,建议从网络模型的测试场景随机选择3~5张作为参考图片进行量化,选择的图像要尽量覆盖模型的各个场景(图像要包含分类或检测的目标,如分类网的目标是苹果、梨、桃子,则参考图像至少要包含苹果、梨、桃子。比如检测人、车的模型,参考图像中必须有人、车,不能仅使用人或者无人无车的图像进行量化)。图片影响校准生成量化参数,选择典型场景的图片计算出来的量化参数对典型场景的量化误差越小。所以请不要选择偏僻场景、过度曝光、纯黑、纯白的图片,请选择识别率高,色彩均匀的典型场景图片。

      示例:

      --image_list=”data1:feature_map.txt;data2:images.txt”
      

      依赖约束:无

--compile_mode

功能说明:编译模式,量化后的数据bit位宽,参数值0和1不影响权重量化的bit位宽,权重固定是8bit量化。参数值3和4将权重量化成4bit,以用于整网的性能测试,实际使用时需要4bit重训。

关联参数:

--gfpq_param_file:优先使用配置的量化参数。未配置量化参数时,compile_mode才生效。

参数取值:

  • 参数值

    • 0:A8W8,使用8bit量化数据和权重。
    • 1:A16W8,使用16bit量化数据,使用8bit量化权重。
    • 2:预留值。
    • 3:A4W4,使用4bit量化数据和权重,该参数值用于测试整网A4W4的性能。Hi3519DV500不支持配置该值。
    • 4:A8W4,使用8bit量化数据,使用4bit量化权重,该参数值用于测试整网A8W4的性能。Hi3519DV500不支持配置该值。
    • 5:数据和权重量化使用8bit,且仅对CUBE算子进行量化,非CUBE算子使用fp16格式。
    • 6:数据量化使用16bit,权重量化使用8bit,且仅对CUBE算子进行量化,非CUBE算子使用fp16格式。

      CUBE算子:Conv,ConvTranspose,DepthwiseConv,InnerProduct,Gemm,MatMul,Pooling系列算子。

  • 参数值约束:无

  • 参数默认值:0

推荐配置及收益:

  • 配置为0时,带宽小,板端缓存小,耗时少,精度损失大。
  • 配置为1时,带宽大,板端缓存大,耗时大,精度损失小。
  • 配置为5时,带宽、板端缓存、耗时比模式0大,比模式1和6小;精度损失比模式0小,与模式1相比则和网络结构相关,若网络中含有大量的非CUBE算子,则此模式可能精度损失更小。
  • 配置为6时,带宽大,板端缓存大,耗时大,精度损失很小。

示例:

--compile_mode=0

依赖约束:无

--weight_quant_per_channel

功能说明:权重是否每个卷积单独量化,对应一组量化参数。只有Convolution和Deconvolution 支持。

关联参数:

--gfpq_param_file:优先使用配置的量化参数。未配置量化参数时, --weight_quant_per_channel才生效。

参数取值:

  • 参数值

    • 0:去使能。
    • 1:使能。
  • 参数默认值:1

推荐配置及收益:配置为1时,权重量化粒度细,精度更好。

示例:

--weight_quant_per_channel=1

依赖约束:无

--quant_mode

功能说明:量化算法模式

  • 参数取值:

    • 0:使用默认量化算法,linear_quant
    • 1:数据和权重使用不同的量化算法,其中数据使用ifmr算法进行量化,权重使用arq算法进行量化
  • 参数值约束:无

  • 参数默认值:0

示例:

--quant_mode=0

依赖约束:无

--high_precision_layer

功能说明:高精度层配置。如果配置的层是CUBE算子,该算子会进行量化,数据量化使用16bit,权重量化使用8bit,如果是非CUBE算子,则使用fp16格式。

CUBE算子:Conv,ConvTranspose,DepthwiseConv,InnerProduct,Gemm,MatMul,Pooling系列算子。

  • 参数取值:字符串。网络模型中的节点(node_name)名称的集合。

  • 推荐配置及收益:无

  • 示例:其中opName0、opName1、opName2为需要配置的节点在网络模型中的名称

--high_precision_layer=opName0;opName1;opName2
--concat_auto_fallback_to_fp16

功能说明:当concat多路输入的数值范围差距较大时,进行量化可能会增大量化误差,此时将concat的量化类型自动回退成fp16,防止量化误差增大。

关联参数:无

参数取值:

  • 参数值:

    0:去使能

    1:使能

  • 参数默认值:1

推荐配置及收益:配置为1时,可避免因concat多路输入数值范围差距大引起的量化误差。

示例:

--concat_auto_fallback_to_fp16=1

依赖约束:Hi3519DV500不支持

--output_quantized

功能说明:当--output_type配置为S8、U8、S16或者U16的时候是否做量化。

关联参数:--gfpq_param_file:配置量化参数时, --output_quantized不生效。

参数取值:

  • 参数值:

    • 0:去使能
    • 1:使能
  • 参数默认值:0

示例:

--output_quantized=1
--all_batch_quant_together_enable

功能说明:量化时,是否所有batch一起进行量化参数计算。

参数取值:

  • 参数值:

    • 0:去使能
    • 1:使能
  • 参数默认值:0

示例:

--all_batch_quant_together_enable=1
--matmul_per_channel_enable

功能说明:权重是否每通道单独量化,对应一组量化参数。只有Matmul、Innerproduct、Gemm 支持。

关联参数:

--gfpq_param_file:优先使用配置的量化参数。未配置量化参数时, --matmul_per_channel_enable才生效。

--weight_quant_per_channel:当该配置为0时,--matmul_per_channel_enable不生效

参数取值:

  • 参数值

    • 0:去使能。
    • 1:使能。
  • 参数默认值:0

推荐配置及收益:配置为1时,权重量化粒度细,精度更好。

示例:

--matmul_per_channel_enable=1

依赖约束:Hi3516CV610不支持

--data_symmetric_quant_enable

功能说明:数据量化是否使用对称量化。

关联参数:--gfpq_param_file:配置量化参数时, --data_symmertric_quant_enable不生效。

参数取值:

  • 参数值:

    • 0:去使能
    • 1:使能
  • 参数默认值:0

示例:

--data_symmertric_quant_enable=1

依赖约束:Hi3516CV610不支持

RPN硬化层选项

--nms_threshold

功能说明:Nms层阈值,只用于ATC量化校准时的RPN硬化层,板端推理时不使用此值。仅Hi3519DV500 YOLOV3/V4/V5/V7支持配置多个nms_threshold阈值,且最大支持80类阈值配置,当配置多个阈值时,启动多类别多阈值功能。

关联参数:无

参数取值:

  • 参数值:[0,1)
  • 参数默认值:0.75

推荐配置及收益:无

示例:

--nms_threshold=0.75
6个类别:--nms_threshold=0.1,0.2,0.3,0.4,0.5,0.6

依赖约束:无

--low_score_threshold

功能说明:Filter层最低分数阈值,只用于ATC量化校准时的RPN硬化层,板端推理时不使用此值。仅Hi3519DV500 YOLOV3/V4/V5/V7支持配置多个low_score_threshold阈值,且最大支持80类阈值配置,当配置多个阈值时,启动多类别多阈值功能。

关联参数:无

参数取值:

  • 参数值:[0,1)
  • 参数默认值:0.5

推荐配置及收益:无

示例:

--low_score_threshold=0.5
6个类别:--low_score_threshold=0.5,0.5,0.5,0.5,0.5,0.5

依赖约束:无

--min_width

功能说明:Filter层最低宽度阈值。仅19DV500 YOLOV3/V4/V5/V7支持配置多个min_width阈值,且最大支持80类阈值配置,当配置多个阈值时,启动多类别多阈值功能。

关联参数:无

参数取值:

  • 参数值:[1,4096]
  • 参数默认值:1

推荐配置及收益:无

示例:

--min_width=1
6个类别:--min_width=1,1,1,1,1,1

依赖约束:无

--min_height

功能说明:Filter层最低高度阈值。仅Hi3519DV500 YOLOV3/V4/V5/V7支持配置多个min_height阈值,且最大支持80类阈值配置,当配置多个阈值时,启动多类别多阈值功能。

关联参数:无

参数取值:

  • 参数值: [1,4096]
  • 参数默认值:1

推荐配置及收益:无

示例:

--min_height=1
6个类别:--min_height=1,1,1,1,1,1

依赖约束:无

--image_width

功能说明:

网络包含RPN硬化层,输入为Feature map,不是图片时,需指定原图的宽。

关联参数:无

参数值:[1,4096]

推荐配置及收益:无

示例:

--image_width=224

依赖约束:无

--image_height

功能说明:网络包含RPN硬化层,输入为Feature map,不是图片时,需指定原图的高。

关联参数:无

参数值:[1,4096]

推荐配置及收益:无

示例:

--image_height=224

依赖约束:无

--generate_anchors_file

功能说明:锚点坐标文件。使用硬化层的Faster RCNN、RFCN、SSD网络必须配置。

关联参数:无

参数取值:

  • 参数值:anchors文件路径与文件名。
  • 参数值格式:路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。
  • 文件内容的格式:

    • Faster RCNN和RFCN锚点坐标文件每行内容为“xmin, ymin, xmax, ymax”,如下:

      -84.000000 -40.000000 99.000000 55.000000
      -176.000000 -88.000000 191.000000 103.000000
      -360.000000 -184.000000 375.000000 199.000000
      -56.000000 -56.000000 71.000000 71.000000
      ……
      

      请参考samples/2_object_detection/rfcn/rfcn_resnet50/caffe_model/anchors.txt

      生成anchors.txt的方法,例如Caffe框架在py-faster-rcnn/rpn/proposal_layer.py保存anchors,如下图:

  • SSD锚点坐标文件每行内容为“xmin, ymin, xmax, ymax, var0, var1, var2, var3”,如下:

    -11.000000 -11.000000 19.000000 19.000000 0.099854 0.099854 0.199951 0.199951
    -17.000000 -17.000000 25.000000 25.000000 0.099854 0.099854 0.199951 0.199951
    -17.000000 -6.000000 25.000000 14.000000 0.099854 0.099854 0.199951 0.199951
    -6.000000 -17.000000 14.000000 25.000000 0.099854 0.099854 0.199951 0.199951
    ……
    

请参考samples/2_object_detection/ssd/caffe_model/anchors.txt

生成anchors.txt方法:例如Caffe框架下保存mbox_priorbox层的输出,再生成anchors,示例python代码如下:

import numpy as np
data = np.loadtxt("mbox_priorbox_output0_2_34928_caffe.float")
image_width=300
image_height=300
anchors_num = int(data.size / 8)
data = data.reshape(int(data.size / 4), -1)
boxes = data[ : anchors_num]
boxes[:,[0,2]] = boxes[:,[0,2]] * image_width
boxes[:,[1,3]] = boxes[:,[1,3]] * image_height
variance = data[ anchors_num : ]
anchors = np.hstack((boxes, variance))
np.savetxt("anchors_txt", anchors, fmt="%.6f")

推荐配置及收益:无

示例:

--generate_anchors_file=anchors.txt

依赖约束:无

--detection_out_accuracy

功能说明:RPN层是否输出高精度。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0: 低精度,使用FP16。
    • 1:高精度,使用FP32。
  • 参数默认值:0。

推荐配置及收益:无

示例:

--detection_out_accuracy=0

依赖约束:无

--use_class_id

功能说明:RPN层输出是否包括class id。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:不包括class id。
    • 1:包括class id。
  • 参数默认值:1。

推荐配置及收益:当前版本只支持配1

示例:

--use_class_id=1

依赖约束:无

Recurrent网络选项

--recurrent_max_total_t

功能说明:Recurrent网络(包含LSTM/RNN/GRU层)每一句话的最大帧数,用于板端运行时分配输入内存。

关联参数:无

参数取值:

  • 参数值:[1, 1024]
  • 参数默认值:1024

推荐配置及收益:按板端实际部署运行时每一句话的最大帧数配置,配置越大,分配的输入内存越大。

示例:

--recurrent_max_total_t=1024

依赖约束:必须大于等于每一句话的最大帧数,否则输入数据不完整,计算错误。

--recurrent_tmax

功能说明:Recurrent网络(包含LSTM/RNN/GRU层)执行期间,将基于continuous对输入的每一句话进行子句切分,一句话会被切分为若干子句以实现并行处理。该参数表示由切分所产生的若干子句中,子句的最大帧数,用于板端运行时分配临时缓存。假设某Recurrent层第二个输入continuous的数据为 [0, 1, 0],这意味着帧数为3的句子将被切分为帧数为2和1的两个子句,子句的最大帧数为2,故该参数取2。

关联参数:无

参数取值:

  • 参数值:[1, 1024]
  • 参数默认值:1024

推荐配置及收益:按板端实际部署运行时每一句话基于continuous做子句切分后,子句的最大帧数配置,若难以明确子句的最大帧数,则配置为每一句话的最大帧数即可,配置越大占用临时缓存越大。

示例:

--recurrent_tmax=1024

依赖约束:必须大于等于每一句话进行子句切分后的子句最大帧数,否则计算错误。

目标解决方案选项

--soc_version

功能说明:模型转换时指定解决方案版本。

关联参数:无

参数取值:

  • 参数值:Hi3516DV500,Hi3519DV500,Hi3516CV608,Hi3516CV610
  • 参数默认值:

    • Hi3516DV500/Hi3519DV500: Hi3516DV500
    • Hi3516CV608/Hi3516CV610: 无,且参数为必传值。
  • 用户根据具体板端解决方案,选择对应的取值。

推荐配置及收益:无

示例:

--soc_version=Hi3516DV500

依赖约束:无

高级功能

以下介绍部分常用参数选项,更多选项用法请输入--help。

功能配置选项

--max_roi_frame_cnt

功能说明:包含ROIPOOLING/PSROI/ROIALIGN网络的RPN阶段输出的候选框最大数目。

关联参数:无

参数取值:

  • 参数值:[1,2048]
  • 参数默认值:300

推荐配置及收益:无

示例:

--max_roi_frame_cnt=300

依赖约束:无

--online_model_type

功能说明:转换生成模型的类型,用于板端执行profiling或dump数据。

关联参数:

--layer_fusion_enable:深度融合的层板端不支持dump,而指令仿真支持,即*.om转json文件里,属性is_dump_available为0的层不支持dump。

--net_optimize_enable:层间融合的数据不支持dump,即*.om转json文件里,_datadump_original_op_names描述融合的层。例如Convolution融合了BatchNorm,只能dump 融合之后的数据。

参数取值:

  • 参数值:[0,7]。

    0: 没有调试相关的内容,没有网络结构和算子信息。

    1: 调试带层信息。

    2: 调试带层开始和结束标记,板端profiling 用。

    3: 调试带层信息、层开始和结束标记。

    4: 调试带层TRAP指令,板端dump数据用。

    5: 调试带层信息、层TRAP指令。

    6: 调试带层开始和结束标记、层TRAP指令。

    7: 调试带层信息、层开始和结束标记、TRAP指令。

  • 参数默认值:2

推荐配置及收益:

  • Release 配置 0。

  • Debug for profile配置2。

  • Debug for dump and compare配置4。

示例:

--online_model_type=2

依赖约束:无

--dynamic_image_size

功能说明:设置输入的动态分辨率档位,在板端运行时可选择其中的一个作为输入的大小。

关联参数:

--input_shape:当某个输入采用动态分辨率时,需要配置该选项,且将宽、高配置成-1。

参数取值:

  • 参数值:

    模型输入的动态分辨率信息,例如:"h1,w1;h2,w2"。指定的分辨率必须放在双引号中,分辨率中间使用英文分号分隔。

  • 参数值约束:

    可支持设置【2,100】组分辨率。第一组分辨率的宽高都必须为最大。

    每组分辨率宽、高的取值范围为[1, 16384]。

推荐配置及收益:配置的动态分辨率越多时,生成的OM也会越大,请根据实际需要设置。

示例:

--dynamic_image_size="h1,w1;h2,w2"
--input_shape="input1:1,3,-1,-1"

表示input1使用动态分辨率,且动态分辨率有两组,分别为【h1, w1】、【h2, w2】。

在运行时,可以指定采用【h1, w1】或【h2, w2】进行推理。若未指定,则使用第一档分辨率【h1,w1】进行推理。

依赖约束:

  • --insert_op_conf 配置 aipp_mode 为 static 且使能Crop或Pad或Resize时, 不支持动态分辨率。
  • 模型本身不支持其他分辨率时,不支持动态分辨率。如模型包含FC层。

    须知:

    开启动态分辨率时,网络及算子的性能同静态相比可能会有所下降:

    • 带有权重的算子,比如Convolution、Deconvolution、DepthwiseConv、InnerProduct算子,性能可能会下降。
    • 整网由于层间深度融合、层间数据共享策略的变化,相比静态模式,性能可能会下降。
--hwts_preemption_enable

功能说明:网络前向推理的时候,是否允许被优先级更高的任务抢占。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:关闭优先级抢占。
    • 1:使能优先级抢占。
  • 参数默认值:0。

推荐配置及收益:按板端实际部署运行时的场景配置,如果模型需要使能优先级抢占和优先级提升,则必须配置为1;若配置为0,通过板端ACL接口 svp_acl_mdl_config_handle *svp_acl_mdl_create_config_handle()创建handle之后,对handle设置的优先级抢占和优先级提升无效。

示例:

--hwts_preemption_enable=1

依赖约束:无

须知:

  • 有AICPU算子的模型,workbuf中有32KB用于保存切换任务的上下文。
  • 使能任务抢占后,也需要32KB用于保存切换任务的上下文,如果模型有AICPU算子,则workbuf没有变化,如果没有AICPU算子,则workbuf增大32KB。
--hwts_jump_option

功能说明:网络向前推理的时候,aicpu执行时,aicore是否处于忙等状态。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:busy jump,aicpu执行时,aicore处于忙等状态,workbuf可共享。
    • 1:release jump,aicpu执行时,aicore释放,workbuf不可共享。
  • 参数默认值:0

示例:

--hwts_jump_option=0

依赖约束:无

--inout_mem_reuse_mode

功能说明:网络在推理的时候,需要的内存主要有:输入内存、输出内存、workbuf(用来保存推理时的中间数据)。如果输入、输出内存中的数据后续不再需要使用,则在推理时可以将中间数据保存在输入、输出内存中,从而减少workbuf的大小。本字段用来描述输入、输出内存可被复用时的各种模式。

关联参数:--inout_mem_reuse_name。

参数取值:

  • 参数值:[0, 6]

    • 0:输入内存不连续,输出内存不连续。此模式下,可以使用inout_mem_reuse_name来指定哪些输入、输出内存可以被复用。
    • 1:输入内存连续,输出内存不连续。此模式下,所有输入地址连续,且可以被复用,输入内存需要按照index顺序排布;可以使用--inout_mem_reuse_name指定哪些输出内存可以被复用。
    • 2:输入内存不连续,输出内存连续。此模式下,所有输出地址连续,且可以被复用,输出内存需要按照index顺序排布;可以使用--inout_mem_reuse_name指定哪些输入内存可以被复用。
    • 3:输入内存连续,输出内存连续。此模式下,所有输入地址连续,且可以被复用,输入内存需要按照index顺序排布,输出内存按照index顺序排布;所有输出地址连续,且可以被复用。
    • 4:输入、输出内存连续。此模式下,所有输入、输出地址连续,且可以被复用,输入内存需要按照index顺序排布,输出内存需要按照index顺序排布,并且需要按照输入/输出顺序排布。
    • 5:输入、输出、tmpbuf内存连续。此模式下,所有输入、输出和tmpbuf地址连续,且可以被复用,输入内存需要按照index顺序排布,输出内存需要按照index顺序排布,并且需要按照输入/输出/workbuf顺序排布。依赖约束:Hi3519DV500不支持。
    • 6:输出、tmpbuf内存连续。此模式下,所有输出和tmpbuf地址连续,且可以被复用,输出内存需要按照index顺序排布,并且需要按照输出/workbuf顺序排布。依赖约束:Hi3519DV500不支持。
  • 参数默认值:0

示例:

--inout_mem_reuse_mode=0

须知:

  • 若指定了输入或者输出内存连续,则在分配输入、输出内存时,需要保证连续,否则在推理时会出现错误。
  • 当输入输出多batch时,只能通过--inout_mem_reuse_name来指定可被复用的输入,此时输入仅第一个batch内存可被复用。输出不能被复用。
  • 使能复用模式后,还会根据网络的实际情况分析实际推理时是否可以被复用。因此,该模式不能保证一定可以减少workbuf。如果最终未使能复用,在使用接口svp_acl_mdl_get_reuse_buffer_type从OM中获取复用标记时,会显示为0。
  • 开启动态分辨率后,所有档位使用相同的复用结果。即某一档位下,若某个输入或者输出被复用了,则其它档位下也会被设置成复用。
  • 使用时,板端的内存申请需要按照相应的规则申请,具体可参考《应用开发指南》"WorkBuf内存复用"章节 。
--inout_mem_reuse_name

功能说明:用来指定网络推理时,哪些输入、输出内存可以被复用。详见inout_mem_reuse_mode。

关联参数:--inout_mem_reuse_mode。

参数取值:输入名称、输出名称。多个名称之间用;隔离。默认值为空。

示例:

--inout_mem_reuse_name="data1;out1"

假设某个网络的输入为data1,data2;输出为out1,out2。则上述示例表示data1对应的内存可以被复用,out1对应的内存可以被复用。

--pb_share_config

功能说明:设置模型转换时,PB缓存复用相关的配置

关联参数:无

参数取值:

  • 参数值:

    PB缓存复用相关的配置,指定复用的PB大小,单位为KB,例如:"30"。

    如果模型中仅存在一种PB复用场景,则只需要传递一个参数即可,此时编译出的OM中仅包含指定的一种PB复用场景。

  • 参数值约束:

    目前Hi3516CV610芯片,仅支持复用0KB,30KB,100KB三种场景,且仅支持存在一种PB复用场景。

示例:

--pb_share_config="30"

依赖约束:Hi3519DV500不支持。

须知:

PB内存复用不仅需要ATC "--pb_share_config"配置,同时需要不同组件配合才能生效,不同组件生效场景如下:

  • 板端:依赖板端Ko配置的更改,如果需启用PB复用,需更改《MPP媒体处理软件V.xx开发参考》“系统控制”章节中module param -> profile参数,然后重新插入KO才能够生效。
  • 指令仿真/性能仿真:通过接口svp_acl_init的json参数配置,配置格式为:
    {
        "pb_reuse": {
        "pb_buf_size":"30720"
        }
    }
    
    其中30KB复用场景 "pb_buf_size" 配置为30720,100KB复用场景 "pb_buf_size" 配置为102400。
  • 功能仿真无需特殊配置,只需要ATC "--pb_share_config"配置即可。
--workbuf_optimize_enable

功能说明:设置模型转换时,是否开启workbuf优化。workbuf大小和模型结构有关,因此开启该优化有可能减小workbuf的大小,也有可能不减小。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:去使能。
    • 1:使能。
  • 参数默认值:1

推荐配置及收益:推荐配置1,可能降低workbuf的大小。

示例:

--workbuf_optimize_enable=1

依赖约束:仅支持Hi3516CV610。

--workbuf_priority_first

功能说明:在模型转换时,是否开启workbuf优先策略。ATC默认按“性能优先”的策略进行模型转换,当开启该参数后,ATC按“workbuf优先”的策略进行模型转换,编译出workbuf最小的OM。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:去使能。
    • 1:使能。
  • 参数默认值:0

推荐配置及收益:当需要优化work buffer时,推荐配置1。

示例:

--workbuf_priority_first=1

依赖约束:仅支持Hi3516CV610。

模型调优选项

--batch_num

功能说明:

  • 支持batch处理的层单次处理的数据份数。影响性能和临时缓存大小。例如InnerProduct层支持batch处理,当batch_num配置为0或1时,则分配1份输入和输出所需的内存,单次处理1份数据。
  • 当batch_num配置为256时,则分配256份的输入和输出所需的内存,单次处理256份数据。

关联参数:无

参数取值:

  • 参数值:[0, 256]。

    • 0和1:表示single(单张)模式。Batch层一次处理一张图片,临时缓存为一张图片分配。
    • 大于1:表示batch(多张)模式。Batch层一次处理batch张图片,临时缓存为batch张图片分配。
  • 参数默认值:Hi3519DV500:网络包含AICPU层时,或网络不包含batch层时,默认为1。其他情况默认为16。batch层:如InnerProduct。Hi3516CV610:默认为1

  • 参数值约束:

    网络包含Recurrent层且Recurrent层连接非FC层时,网络包含ROIPooling/PSROIPooling层、RPN硬化层、IF/LOOP/SCAN、Winpartition-WinpartitionReverse循环等这类控制层时,不支持batch,强制设置batch_num为1。

    网络包含如下结构时,不支持batch,强制设置batch_num为1:

    图 1 不支持batch结构图

    其中batch op是指:FC算子、CPU算子。

推荐配置及收益:对于batch层,batch模式比single模式性能好,占用内存也会更多。batch层包括InnerProduct、LSTM、RNN、GRU。

示例:

--batch_num=256

依赖约束:无

--internal_stride

功能说明:DDR读写对齐字节数。

关联参数:无

参数取值:

  • 参数值:{16,32,64,128,256}

  • 参数默认值:16

推荐配置及收益:

  • DDR类型为DDR4时,读写32字节对齐性能最好,建议配置为32。
  • 每个width占用的内存对齐到internal_stride,当width*sizeof(data_type)不能整除internal_stride时,internal_stride越大越占用内存,读写内存越多也越耗时间,所以并不是internal_stride越大越好。

示例:

--internal_stride=16

依赖约束:无

--fusion_switch_file

功能说明:融合规则开关配置文件路径以及文件名。

关联参数:--fusion_switch_file是控制指定某个图优化开关,--net_optimize_enable是控制所有图优化开关。

  • 当配置--net_optimize_enable=0时,--fusion_switch_file不生效。
  • 当配置--net_optimize_enable=1时,--fusion_switch_file生效。

参数取值:

  • 参数值:支持配置以下2种方式,

    • 文件路径以及文件名。
    • 融合规则字符串。(仅Hi3519DV500支持)
  • 参数值格式:

    • 路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。
    • 融合规则字符串:格式"item1:on;item2:off",融合规则+英文冒号+"on"或"off",融合规则之间使用英文分号分隔。例如:"BatchNormMergeToConvWeight:off;BatchNormMergeToConvActive:off"
  • 参数值约束:如果用户想使用经过AMCT量化后的模型,进行精度比对,则该参数必填。通过配置该文件,关闭融合功能。

推荐配置及收益:无

示例:支持如下融合规则。

  • BatchNormMergeToConvWeight: BatchNorm层融合到前一层Conv/Deconv/FC的权重。
  • BatchNormMergeToConvActive: BatchNorm层融合到前一层Conv/Deconv/FC的输出参数。
  • ScaleMergeToConvWeight: Scale层融合到前一层Conv/Deconv/FC的权重。
  • ScaleMergeToConvActive: Scale层融合到前一层Conv/Deconv/FC的输出参数。
  • BiasMergeToConv: Bias层融合到前一层Conv/Deconv/FC的权重。
  • ReluMerge: Relu层融合到前一层的输出参数。
  • PReluMerge: PRelu层融合到前一层的输出参数。
  • AbsMerge: Abs层融合到前一层的输出参数。
  • BatchNormTransfromToDepthwiseConv: BatchNorm层转换为DepthwiseConv层。性能大幅提升,精度略微降低。
  • EltwiseMergeToCube:Eltwise层融合到Cube层,Cube层包括Conv/Deconv/DepthwiseConv/Pool。性能提升,量化参数有溢出风险。
  • PoolMergeToConv:MaxPooling层、AvePooling层、GlobalMaxPooling层、GlobalAvePooling融合到Conv层。
  • SwishMergeToConv: Swish/Gelu层融合到Conv层
  • SigmoidMergeToConv: Sigmoid层融合到Conv层
  • GemmTransformToFc:Flatten/Reshape+Gemm转成FC层,H3519DV500不支持该配置。
  • TransformerFusion:开启开源swin/vit等transformer网络结构优化,转换为picovison对应结构。
  • PermuteOptimizeFusion:Permute消除图优化,消除冗余permute和reshape,开启会性能提升。默认开启。

配置文件样例如下,冒号前面为融合规则名,后面字段表示融合规则是否开启(文件名举例为_fusion_switch.txt_:

BatchNormMergeToConvWeight:on
BatchNormMergeToConvActive:off
ScaleMergeToConvWeight:on
ScaleMergeToConvActive:off
BiasMergeToConv:on
ReluMerge:on
PReluMerge:on
AbsMerge:on
BatchNormTransfromToDepthwiseConv:on
PoolMergeToConv:on
EltwiseMergeToCube:on
SwishMergeToConv:on
SigmoidMergeToConv:on
GemmTransformToFc:on

将配置好的_fusion_switch.txt_文件上传到ATC工具所在服务器任意目录,例如上传到_/home/test/_,使用示例如下:

--fusion_switch_file=/home/test/fusion_switch.txt

Hi3519DV500支持不指定fusion_switch.txt文件路径,直接配置融合规则,使用示例如下:

--fusion_switch_file=BatchNormMergeToConvWeight:off;BatchNormMergeToConvActive:off;ScaleMergeToConvWeight:off;ScaleMergeToConvActive:off

依赖约束:无

--net_optimize_enable

功能说明:所有融合规则的使能开关。

关联参数:--fusion_switch_file是控制指定某个融合规则的开关,--net_optimize_enable是控制所有融合规则的开关。

  • 当配置--net_optimize_enable=0时,关闭所有融合规则,--fusion_switch_file不生效。
  • 当配置--net_optimize_enable=1时,使能所有融合规则,如果配置了--fusion_switch_file,以配置的融合规则文件为准。

参数取值:

  • 参数值:[0,1]

    • 0:去使能。
    • 1:使能。
  • 参数默认值:1

推荐配置及收益:融合可以减少算子,提升性能,推荐配置1。

示例:

--net_optimize_enable=1

依赖约束:无

--layer_fusion_enable

功能说明:层间深度融合的使能开关。层间深度融合是指多层之间融合在一起,切小块循环计算,数据在内部RAM传递,不读写DDR。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:去使能。
    • 1:使能。
  • 参数默认值:1

推荐配置及收益:层间深度融合可以减少DDR读写,提升性能,推荐配置1。

示例:

--layer_fusion_enable=1

依赖约束:无

--layer_m2m_enable

功能说明:层间数据共享的使能开关。层间数据共享是指两层之间,上一层的输出数据在内部RAM共享给下一层作为输入数据,不读写DDR。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:去使能。
    • 1:使能。
  • 参数默认值:1

推荐配置及收益:层间数据共享可以减少DDR读写,提升性能,推荐配置1。

示例:

--layer_m2m_enable=1

依赖约束:无

--layer_m2m_no_event_enable

功能说明:使能层间数据共享时,层间事件的使能开关。有事件时,必须等上一层全部计算完再开始下一层的计算。没有事件时,不依赖上一层的计算可以先开始,不用等上一层计算完。

关联参数:该参数需要与--layer_m2m_enable一起使用。

参数取值:

  • 参数值:[0,1]

    • 0:去使能。
    • 1:使能。
  • 参数默认值:1

推荐配置及收益:关闭层间事件同步,可以减少等待,提升性能,推荐配置1。

示例:

--layer_m2m_no_event_enable=1

依赖约束:无

--weight_cmp_ratio

功能说明:待压缩权重的长度占权重总长度的比例。例如权重总长为1000,weight_cmp_ratio为0.4时,则取400长度的权重进行压缩,假设压缩后长度为300,则最终权重的长度为(1000-400)+300=900。

关联参数:无

参数取值:

  • 参数值:[0,1]
  • 参数默认值:0

推荐配置及收益:通常,在极致省带宽场景下推荐配置为1,在性能提升场景下,推荐配置为[0.4, 0.5]之间。对于权重稀疏性较差的网络,可能导致压缩后权重略微变大,具体是否开压缩以及压缩比例需根据具体网络实测后确定。该编译选项适用于网络中fc层较多且权重较大的场景,例如resnet、densenet网络。

示例:

--weight_cmp_ratio=0.435

依赖约束:Hi3516CV610不支持。

--tilingw_fusion_enable

功能说明:层间深度融合进阶切块(tilingw depth fusion)的使能开关。层间深度融合是指多层之间融合在一起,切小块循环计算,数据在内部RAM传递,不读写DDR。

关联参数:该参数需要与--layer_fusion_enable一起使用。

参数取值:

  • 参数值:[0,1]

    • 0:去使能。
    • 1:使能。
  • 参数默认值:1

推荐配置及收益:层间深度融合可以减少DDR读写,提升性能,推荐配置1。

示例:

--tilingw_fusion_enable=1

依赖约束:仅支持Hi3516CV610。

--tilingw_fusion_piecenum

功能说明:配置层间深度融合进阶切块(tilingw depth fusion)的宽维度的切块数量。当网络的分辨率比较大导致work buffer较大时,可以尝试增大该参数值,例如改成3,能够对网络切得更碎融合更深,以减小work buffer,降低模型推理占用的内存。若编译过程中提示有关于cache miss的warn警告时,可能由于切块很碎导致深度融合子网过长,存在cache miss,导致性能的下降、带宽的增加,此时应按实际需求决策以性能优先还是work buffer优先来选择合适的参数。

关联参数:该参数需要与--tilingw_fusion_enable 一起使用。

参数取值:

  • 参数值:[2, 5]
  • 参数默认值:2

推荐配置及收益:当需要优化work buffer时,可以尝试改成3或者4。网络workbuf的收益与模型结构强相关,因此具体收益以实测为准。

示例:

--tilingw_fusion_piecenum=3

依赖约束:仅支持Hi3516CV610。

--gelu_high_precision_mode

功能说明:手动设置小算子融合成gelu时是否使用高精度模式。

关联参数:无

参数取值:

  • 参数值:[0, 1]
  • 参数默认值:0

推荐配置及收益:当需要优化精度时,建议配置成1。当需要优化性能时,建议配置成0。

示例:

--gelu_high_precision_mode=1

依赖约束:仅支持Hi3519DV500。

--group_conv_trans_depthwise_enable

功能说明:是否使能group conv转换为depthwise conv。

关联参数:可以与--group_conv_not_trans_depthwise_layer联合使用。

参数取值:

参数值:[0, 1]

参数默认值:1

推荐配置及收益:由于Hi3516CV610上depthwise conv不支持高精度,当网络配置高精度出现由于depthwise conv导致精度不够问题时,可以配置为false,使group conv能走高精度,以提升精度,但是这样会增加om大小,带宽和耗时。

示例:

--group_conv_trans_depthwise_enable=1

依赖约束:仅支持Hi3516CV610。

--group_conv_not_trans_depthwise_layer

功能说明:当group_conv_trans_depthwise_enable配置为1时,可以配置某些group conv层不转换成depthwise conv,以平衡精度与内存及耗时。

关联参数:可以与--group_conv_trans_depthwise_enable联合使用。

参数取值:字符串。网络模型中的节点(node_name)名称。

推荐配置及收益:无。

示例:

--group_conv_trans_depthwise_enable=1
--group_conv_not_trans_depthwise_layer=group_conv1

依赖约束:仅支持Hi3516CV610。

--n_loop_enable

功能说明:当n>1,是否开启n循环。

关联参数:当开启该功能时,--batch_num将强制为1

参数取值:

  • 参数值:[0,1]

    • 0:去使能。
    • 1:使能。
  • 参数默认值:0

  • 参数值约束:网络包含Recurrent层、ROIPooling/PSROIPooling层、RPN硬化层、IF/LOOP/SCAN等控制层时,不支持该配置使能

推荐配置及收益:开启n循环可以使网络使用n==1的shape进行指令生成:更小的shape将更易进行片上buffer交互,减少ddr交互,提升性能。但如果网络n>1的shape不大,算子间在未开启n循环的时候就能使用片上buffer交互,那么该配置将没有收益,或者会有负收益。因此该配置不一定有性能收益,可以先尝试是否有收益再使用。

示例:

--n_loop_enable=1

依赖约束:Hi3516CV610不支持。

--tiling_cube_l0c_priority_enable

功能说明:Conv是否允许优先切Cin。

关联参数:无。

参数取值:

  • 参数值

    • 1:切Cin与切H,W,Cout优先级一致。

    • 0:优先切H,W,Cout。

  • 参数默认值:1。

  • 参数值约束:无。

推荐配置及收益:配置false,降低切Cin的优先级,可以提升精度,但是可能会导致性能下降。

示例:

--tiling_cube_l0c_priority_enable=0

依赖约束:无

调试选项

--save_original_model

功能说明:是否生成原始模型文件,用于功能仿真。原始模型文件包含了离线模型文件,所以也可用于上板运行。

关联参数:该参数需要与 --output参数配合使用。

参数取值:

  • 参数值

    • false:不生成原始模型文件。
    • true:生成原始模型文件。
  • 参数默认值:false

  • 参数值约束:若设置为true,在--output参数指定路径下生成原始模型文件(以后缀“*_original.om”格式结尾),用于功能仿真,也可用于上板运行。

推荐配置及收益:无

示例:

--output=/home/test/out/caffe_resnet50  --save_original_model=true

模型转换成功后,在out目录下生成原始模型文件caffe_resnet50_original.om。

依赖约束:无

--dump_mode

功能说明:是否生成带shape信息的json文件。

关联参数:该参数需要与--json、--mode=1、--framework、--om参数(需要为原始模型文件,如果为Caffe框架模型文件,还需要增加--weight参数)配合使用。

参数取值

  • 参数值:

    • 0:不使能。
    • 1:使能。
  • 参数默认值:0

推荐配置及收益:无

示例:

atc --mode=1 --om=$HOME/test/resnet50.prototxt  --json=$HOME/test/out/resnet50.json  --framework=0 --weight=$HOME/test/resnet50.caffemodel --dump_mode=1

依赖约束:无

--dump_data

功能说明:导出ATC转换模型过程中的数据到文件。

关联参数:无

参数取值

  • 参数值:范围[0,31]

    0:不导出。

    1:导出校准量化参数时每层quant->dequant->forward的数据到mapper_quant目录。文件为protobuf格式,.dump后缀。

    2:导出使用量化参数仿真时每层quant->forward->dequant的数据到mapper_simulate目录,文件为protobuf格式,.dump后缀。

    4:导出校准量化参数时的权重、模型参数等数据。

    8:导出校准量化参数时每层quant->dequant->forward的数据到mapper_quant目录,文件为txt格式,.float后缀。

    16:导出使用量化参数仿真时每层quant->forward->dequant的数据到mapper_simulate目录,文件为txt格式,.float后缀。

    值{1,2,4}可以组合成{3,5,6,7},如配置3,即1+2,同时导出mapper_quant和mapper_simulate。

  • 参数默认值:0

  • 参数值约束:mapper_simulate依赖mapper_quant,即导出mapper_simulate时需同时导出mapper_quant。

推荐配置及收益:无

示例:

--image_list=input_data.txt --dump_data=3

依赖约束:需配置--image_list才能导出数据,否则编译报错。

--is_precheck

功能说明:预检查输入的参数、模型等是否满足转换离线模型的要求。满足则返回成功,但不会生成离线模型;不满足,则返回失败,用户按提示信息修改参数或模型。

关联参数:无

参数取值

  • 参数值:[0,1]

    • 0:关闭预检查。
    • 1:使能预检查。
  • 参数默认值:0

推荐配置及收益:转换模型需要校准生成量化参数,比较耗时,使能预检查可以跳过校准,快速检查是否可以正常转换模型,节省时间。

示例:

--is_precheck=1

依赖约束:无

--log_level

功能说明:ATC的日志级别。

关联参数:无

参数取值

  • 参数值:[0,3]

    0:必要的日志信息。

    1:接口级的日志信息。

    2:模块级的日志信息。

    3:函数级的日志信息。

  • 参数默认值:0

推荐配置及收益:配置值越大,输出日志信息越多,转换模型的时间越长,推荐配置为0。

示例:

--log_level=0

依赖约束:无

--forward_quantization_option

功能说明:ATC转换模型校准时的量化选项。控制推理时是否使能数据量化或权重量化。

关联参数:无

参数取值

  • 参数值:

    0:关闭数据和权重量化。

    1:使能数据量化。

    2:使能权重量化。

    3:使能数据和权重量化。

  • 参数默认值:3

推荐配置及收益:无

示例:

--forward_quantization_option=0

依赖约束:无

--cutoff_layer

功能说明:删除指定层名以下的层,包含指定的层。定位网络精度问题,只需要跑前面的层,不需要跑后面的层时,使用此参数裁剪网络。

关联参数:无

参数取值:字符串。网络模型中的节点(node_name)名称。

推荐配置及收益:无。

示例:删除conv1以下的层,包含conv1。

--cutoff_layer=conv1

依赖约束:无

--board_single_push_enable

功能说明:板端是否单步运行。定位网路问题的时候,可以用来排除是否指令时序问题。

参数取值:

  • 参数值:

    • 0:去使能
    • 1:使能
  • 参数默认值:0

示例:

--board_single_push_enable=1

依赖约束:Hi3516DV500不支持。

仅文件方式支持的参数

以下参数仅支持以cfg文件方式配置,不支持命令行方式配置,用于兼容使用NNIE的cfg配置文件转模型。cfg文件格式见参数配置方式。

模型输入选项

以下配置不能和insert_op_conf同时配置。

image_type

功能说明:输入数据格式。

关联参数:一个输入对应一组image_type,norm_type,data_scale,mean_file。

参数取值:

  • 参数值:整型数。
    • 0:Feature map
    • 1:BGR_PLANAR
    • 2:YUV420SP
    • 3:YVU420SP
    • 4:YUV422SP
    • 5:YVU422SP
    • 6:YUV400
    • 7:RGB_PLANAR
    • 8:RGB_PACKAGE
    • 9:BGR_PACKAGE
    • 10:XRGB_PLANAR
    • 11:XBGR_PLANAR
    • 12:RGBX_PLANAR
    • 13:BGRX_PLANAR
    • 14:XRGB_PACKAGE
    • 15:XBGR_PACKAGE
    • 16:RGBX_PACKAGE
    • 17:BGRX_PACKAGE
    • 18:RAW_RGGB
    • 19:RAW_GRBG
    • 20:RAW_GBRG
    • 21:RAW_BGGR
    • 24:UVSP
    • 25:VUSP

参数值约束:

  • 图像输入时shape必须为4d。
  • 图像输入类型:

    • 若图像输入为YUV400,要求输入channel为1;
    • 若图像输入为UVSP、 VUSP,要求输入channel为2;
    • 若图像输入为YUV420SP、 YVU420SP、 YUV422SP、YVU422SP、 BGR_PLANAR、 RGB_PLANAR、 RGB_PACKAGE、 BGR_PACKAGE,要求输入channel为3;
    • 其他输入格式要求输入channel为4。
  • 不能和insert_op_conf同时配置。

推荐配置及收益:无

示例:

[image_type] 1
[norm_type] 5
[data_scale] 0.00390625
[mean_file] mean.txt

依赖约束:无

norm_type

功能说明:对输入数据的预处理方法。

关联参数:一个输入对应一组image_type,norm_type,data_scale,mean_file。

参数取值: 整型数。

  • 0:不做任何预处理;
  • 1:减图像均值;
  • 2:减通道均值;
  • 3:对图像像素值乘以data_scale;
  • 4:减图像均值后再乘以data_scale;
  • 5:减通道均值后再乘以data_scale。

参数值约束:不能和insert_op_conf同时配置

推荐配置及收益:无

示例:

[image_type] 1
[norm_type] 5
[data_scale] 0.00390625
[mean_file] mean.txt

依赖约束:无

data_scale

功能说明:数据预处理缩放比例,配置为浮点数,配合norm_type使用。

关联参数:一个输入对应一组image_type,norm_type,data_scale,mean_file。

参数取值:浮点数。

参数值约束:不能和insert_op_conf同时配置

参数默认值:0.00390625

推荐配置及收益:无

示例:

[image_type] 1
[norm_type] 5
[data_scale] 0.00390625
[mean_file] mean.txt

依赖约束:无

mean_file

功能说明:均值文件。

关联参数:一个输入对应一组image_type,norm_type,data_scale,mean_file。

参数取值:

  • 参数值:文件路径与文件名。
  • 参数值格式:路径和文件名,支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

参数值约束:

  • 不能和insert_op_conf同时配置。
  • norm_type为1、4时,表示均值文件xxx.binaryproto,caffe框架导出的预处理文件,已经过时,不建议使用。
  • norm_type为2、5时,表示通道均值文件。
  • norm_type为0、3时,用户也需要配置mean_file项,但具体内容可以是一个无效路径,比如null;通道均值文件中每一行的浮点数表示对应的通道均值,如单通道只有一个值。

    示例:3个通道的mean.txt

    123.675
    116.28‬
    103.53
    

推荐配置及收益:无

示例:

[image_type] 1
[norm_type] 5
[data_scale] 0.00390625
[mean_file] mean.txt

依赖约束:无

RGB_order

功能说明:模型推理时的通道顺序,即对输入数据做通道转换后、输出数据做通道转换前的通道顺序。

关联参数:image_type、--image_report_type

参数取值:字符串。取值范围{RGB、BGR、XRGB、RGBX、XBGR、BGRX、RGGB、GRBG、GBRG、BGGR}

参数值约束:

  • 配置值需和image_type和image_report_type的类型匹配:

    • YUV420SP、YVU420SP、YUV422SP、YVU422SP、UVSP、VUSP、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE可取值范围为RGB、BGR;
    • XRGB_PLANAR、XBGR_PLANAR、RGBX_PLANAR、BGRX_PLANAR、XRGB_PACKAGE、XBGR_PACKAGE、RGBX_PACKAGE、BGRX_PACKAGE可取值范围为XRGB、XBGR、RGBX、BGRX;
    • RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR可取值范围为RGGB、GRBG、GBRG、BGGR;
    • YUV400忽略此配置。
  • 多个输入时,共用一个配置。

  • 不能与input_rgb_order、output_rgb_order(Hi3516CV610不支持)同时配置。

推荐配置及收益:无

示例:

[RGB_order] RGB

依赖约束:image_type或image_report_type配置为图像格式时才生效。

input_rgb_order

功能说明:模型输入数据做通道转换后的通道顺序。

关联参数:image_type

参数取值:字符串。取值范围{RGB、BGR、XRGB、RGBX、XBGR、BGRX、RGGB、GRBG、GBRG、BGGR}

参数值约束:

  • 配置值需和image_type的类型匹配:

    • YUV420SP、YVU420SP、YUV422SP、YVU422SP、UVSP、VUSP、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE可取值范围为RGB、BGR;
    • XRGB_PLANAR、XBGR_PLANAR、RGBX_PLANAR、BGRX_PLANAR、XRGB_PACKAGE、XBGR_PACKAGE、RGBX_PACKAGE、BGRX_PACKAGE可取值范围为XRGB、XBGR、RGBX、BGRX;
    • RAW_RGGB、RAW_GRBG、RAW_GBRG、RAW_BGGR可取值范围为RGGB、GRBG、GBRG、BGGR;
    • YUV400忽略此配置。
  • 多个输入时,共用一个配置。

  • 不能与RGB_order同时配置。

推荐配置及收益:无

示例:

[input_rgb_order] RGB

依赖约束:image_type配置为图像格式时才生效。

ATC输入选项

prototxt_file

仅文件方式支持prototxt_file,等同参数--model

caffemodel_file

仅文件方式支持caffemodel_file,等同参数--weight

已废弃参数

--recurrent_cont:仅支持continuous模式,不需要配置。

与NNIE参数差异

NNIE

ATC

是否差异

差异

batch_num

batch_num

是

NNIE:1. 默认值256;2. 没有参数值约束。

ATC:1. 参数默认值:网络包含AICPU层时,或网络不包含batch层时,默认为1。其他情况默认为16;2. 参数值约束:网络包含Recurrent层且Recurrent层连接非FC层时,网络包含ROIPooling/PSROIPooling层、RPN硬化层、IF/LOOP/SCAN这类控制层时,不支持batch,强制设置batch_num为1。

caffemodel_file

caffemodel_file(weight)

否

--

compile_mode

compile_mode

是

NNIE:支持0/1/2配置,2:User-specify(用户配置模式): 需要用户在prototxt中标明所有使用高精度计算的层。

ATC:支持0/1配置。

compress_mode

不支持,可以使用weight_cmp_ratio达到类似效果。

--

--

data_scale

data_scale

是

NNIE:data_scale取值范围(1/4096,FLT_MAX), FLT_MAX=3.402823466e+38。

ATC:data_scale无取值范围。不能和insert_op_conf同时配置。

gfpq_param_file

gfpq_param_file

是

NNIE:文件内容为非线性量化参数。

ATC:文件内容为线性量化参数。

image_height

image_height

是

NNIE:image_height取值范围 [8, 4096]。

ATC:image_height取值范围 [1, 4096]。

image_list

image_list

是

NNIE:支持的图片格式:".bmp", ".dib", ".jpeg", ".jpg", ".jpe", ".jp2", ".png", ".webp", ".pbm", ".pgm", ".ppm", ".sr", ".ras", ".tiff", ".tif", ".BMP", ".DIB", ".JPEG", ".JPG", ".JPE", ".JP2", ".PNG", ".WEBP", ".PBM", ".PGM", ".PPM", ".SR", ".RAS", ".TIFF", ".TIF"。

ATC:支持图片后缀bmp,jpeg,jpg,jpe,jp2,png。

image_type

image_type

是

NNIE:image_type取值范围{0,1,3,5}。

ATC:image_type取值范围[1, 25]。

image_width

image_width

是

NNIE:image_height取值范围 [8, 4096]。

ATC:image_height取值范围 [1, 4096]。

instruction_name

output

否

--

internal_stride

internal_stride

是

NNIE:internal_stride取值{16,32}。

ATC:internal_stride取值{16,32,64,128,256}。

is_check_prototxt

不支持,可以使用check_report达到类似效果。

--

--

is_simulation

支持,效果参考save_original_model。

是

NNIE:转换的模型只能用于功能仿。

ATC:转换的模型能同时用于板端、指令仿和功能仿。

log_level

log_level

否

--

max_roi_frame_cnt

max_roi_frame_cnt

是

NNIE:max_roi_frame_cnt取值[1, 5000]。

ATC:max_roi_frame_cnt取值[1, 2048]。

mean_file

mean_file

否

--

net_type

不支持,当前根据opType识别。

--

--

norm_type

norm_type

否

--

prototxt_file

prototxt_file(model)

否

--

recurrent_tmax

recurrent_tmax

否

--

RGB_order

RGB_order

是

NNIE:RGB_order取值{RGB、 BGR}。

ATC:RGB_order取值{RGB、BGR、XRGB、RGBX、XBGR、BGRX、RGGB、GRBG、GBRG、BGGR}。

roi_coordinate_file

不支持,roi作为data层,通过image_list配置。

--

--

sparse_rate

不支持

--

--

定制网络修改

简介

本章节修改只适用于Caffe网络模型。

网络的算子可以分为如下几类:

  • 标准算子:图像分析引擎支持的Caffe标准算子,比如Convolution等。
  • 扩展算子:图像分析引擎支持的公开但非Caffe标准算子,分为 2 种:
    • 一种是基于Caffe框架进行自定义扩展的算子,比如Faster RCNN中的ROIPooling、SSD中的归一化算子Normalize等。
    • 另外一种是来源于其他图像分析方法框架的自定义算子,比如YOLOV2中Passthrough等。

Faster RCNN、SSD等网络模型都包含了一些原始Caffe框架中没有定义的算子结构,如ROIPooling、Normalize、PSROI Pooling和Upsample等。为了使图像分析引擎能支持这些网络,需要对原始的Caffe框架网络模型进行扩展,降低开发者开发自定义算子/开发后处理代码的工作量。若开发者的Caffe框架网络模型中使用了这些扩展算子,在进行模型转换时,需要先在prototxt中修改/添加扩展层的定义,才能成功进行模型转换。

本章节提供了图像分析引擎的扩展算子列表,并给出了如何根据扩展算子修改prototxt文件方法。

Recurrent网络prototxt示例

须知:

带continuous模式下:同caffe prototxt一致,data层及Recurrent层包含continuous,但是N维度必须1; 请参考customer/Software/sample/中lstm、rnn、gru 的sample写法。

prototxt针对RNN层书写规范

RNN的基本计算公式如下 (与Caffe一致):

输入: xt,cont,ht-1

输出:Ot,ht

隐藏层:ht=tanh(wxhxt+whhht-1+bh)

输出层:ot=tanh(whoht+b0)

若有额外固定输入向量 xstatic,计算公式变为:

输入: xt,cont,ht-1

输出:Ot,ht

隐藏层:ht=tanh(wxhxt+whhht-1+wshxstatic+bh)

输出层:ot=tanh(whoht+b0)

基于以上计算公式,RNN的prototxt有以下4种场景:

通常场景(expose_hidden=false,2输入,1输出)

Input: xt(1~T),cont(1~T)

Output: ot(1~T)

Prototxt示例如下,有2个bottom和1个top,,其中bottom[0]对应_x_t(1~T),bottom[1]对应cont_(1~T),top[0]对应_ot(1~T):

  • 若recurrent_param的expose_hidden 没配,默认值为false;
  • 不支持recurrent_param 的debug_info,配置不会生效。
layer { 
  name: "rnn1" 
  type: "RNN" 
  bottom: "data0_xt" 
  bottom: "data1_cont" 
  top: "rnn1_ht " 
  recurrent_param { 
    num_output: 1000 
    weight_filler { 
      type: "uniform" 
      min: -0.08 
      max: 0.08 
    } 
    bias_filler { 
      type: "constant" 
      value: 0 
    } 
 }
}
隐藏参数显式输入输出(expose_hidden=true,3输入,2输出)

Input: xt(1~T),cont(1~T),h0

Output: ot(1~T),hT

Prototxt示例如下,有3个bottom和2个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应cont_(1~T),bottom[2]对应_h0,top[0]对应_o_t(1~T),top[1]对应_h_T;

  • h0的向量维度须与recurrent_param的num_output一致;
  • 只有前两个bottom与第一个top有时间的维度。
  • expose_hidden=true配置下,不支持后接InnerProduct层。
layer { 
  name: "rnn1" 
  type: "RNN" 
  bottom: "data0_xt" 
  bottom: "data1_cont" 
  bottom: "data2_h0" 
  top: "rnn1_ht " 
  top: "rnn1_hT" 
  recurrent_param { 
    num_output: 1000 
    expose_hidden=1 
    weight_filler { 
      type: "uniform" 
      min: -0.08 
      max: 0.08 
    } 
    bias_filler { 
      type: "constant" 
      value: 0 
    } 
  }
}
具有额外的固定输入(expose_hidden=false,3输入,1输出)

Input: xt(1~T),cont(1~T),xstatic

Output: ot(1~T)

Prototxt示例如下,有3个bottom和1个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应cont_(1~T),bottom[2]对应_xstatic,top[0]对应_o_t(1~T);

  • xt_(1~T)和_cont(1~T)_的向量维度,必须与_xstatic的向量维度一致;
  • 如果recurrent_param 的expose_hidden 没配,默认值为false;
  • 不支持recurrent_param 的debug_info,配置不会生效。
layer { 
   name: "rnn1" 
   type: "RNN" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   bottom: "data2_xstatic"
   top: "rnn1_ht "
   recurrent_param { 
     num_output: 1000 
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }
既有固定输入,又有显式的隐藏参数(expose_hidden=true,4输入,2输出)

Input: xt(1~T),cont(1~T),xstatic,h0

Output: ot(1~T),hT

Prototxt示例如下,有4个bottom和2个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应cont_(1~T),bottom[2]对应_xstatic,bottom[3]对应_h_0,top[0]对应_o_t(1~T),top[1]对应_h_T;

  • h0的向量维度必须与recurrent_param的num_output一致;
  • xt_(1~T)_和_cont(1~T)的向量维度,必须与_xstatic的向量维度一致;
  • 只有前两个bottom与第一个top有时间的维度;
  • expose_hidden=true配置下,不支持后接InnerProduct层。
layer { 
   name: "rnn1" 
   type: "RNN" 
   bottom: "data0_xt" 
   bottom: "data1_cont" 
   bottom: "data2_xstatic" 
   bottom: "data3_h0" 
   top: "rnn1_ht" 
   top: "rnn1_hT" 
   recurrent_param { 
   num_output: 1000 
   expose_hidden=1 
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }

prototxt针对LSTM层书写规范

LSTM的基本计算公式如下 (与Caffe一致):

输入门:it=sigmoid(wxixt+whiht-1+bi)

遗忘门:ft=sigmoid(wxfxt+whfht-1+bf)

输入值:gt=tanh(wxgxt+whght-1+bg)

当前cell:ct=it*gt +ft*ct-1

输出门:ot=sigmoid(wxoxt+whoht-1+b0)

若有额外固定输入向量_x_static,计算公式变为:

输入门:it=sigmoid(wxixt+whiht-1+wsixstatic+bi)

遗忘门:ft=sigmoid(wxfxt+whfht-1+wsfxstatic+bf)

输入值:gt=tanh(wxgxt+whght-1+wsgxstatic+bg)

当前cell:ct=it*gt +ft*ct-1

输出门:ot=sigmoid(wxoxt+whoht-1+wsoxstatic+b0)

基于以上计算公式,LSTM的prototxt有以下4种场景。

通常场景(expose_hidden=false,2输入,1输出)

Input: xt(1~T),cont(1~T)

Output: ht(1~T)

Prototxt示例如下,有2个bottom和1个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应cont_(1~T),top[0]对应_ht(1~T):

  • 若recurrent_param的expose_hidden 没配,默认值为false;
  • 不支持recurrent_param 的debug_info,配置不会生效。
layer { 
   name: "lstm1" 
   type: "LSTM" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   top: "lstm1_ht"
   recurrent_param { 
     num_output: 1000 
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }
隐藏参数显式输入输出(expose_hidden=true,4输入,3输出)

Input: xt(1~T),cont(1~T)__,h0,c0

Output: ht(1~T),hT,cT

Prototxt示例如下,有4个bottom和3个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应_cont(1~T),bottom[2]对应_h0,bottom[3]对应c0,top[0]对应_h_t(1~T),top[1]对应_h_T,top[2]对应cT;

  • h0,c0的向量维度须与recurrent_param的num_output一致;
  • 只有前两个bottom与第一个top有时间的维度;
  • 不支持recurrent_param 的debug_info,配置不会生效;
  • expose_hidden=true配置下,不支持后接InnerProduct层。
layer { 
   name: "lstm1" 
   type: "LSTM" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   bottom: "data2_h0"
   bottom: "data3_c0"
   top: "lstm1_ht"
   top: "lstm1_hT"
   top: "lstm1_cT"
   recurrent_param { 
   num_output: 1000 
   expose_hidden = 1
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }
具有额外的固定输入(expose_hidden=false,3输入,1输出)

Input: xt(1~T),cont(1~T), xstatic

Output: ht(1~T)

Prototxt示例如下,有3个bottom和1个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应_cont(1~T),_ bottom[2]对应_x_static,top[0]对应_h_t(1~T);

  • xt_(1~T)_和_cont(1~T)的向量维度,必须与_xstatic的向量维度一致;
  • 只有前两个bottom与第一个top有时间的维度;
  • 如果recurrent_param 的expose_hidden 没配,默认值为false;
  • 不支持recurrent_param 的debug_info,配置不会生效。
layer { 
   name: "lstm1" 
   type: "LSTM" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   bottom: "data2_xstatic"
   top: "lstm1_ht"
   recurrent_param { 
   num_output: 1000 
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }
既有固定输入,又有显式的隐藏参数(expose_hidden=true,5输入,3输出)

Input: xt(1~T),cont(1~T),xstatic ,h0 , c0

Output: ht(1~T) ,hT , cT

Prototxt示例如下,有5个bottom和3个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应_cont(1~T),bottom[2]对应_xstatic,bottom[3]对应_h_0,bottom[4]对应_c_0,top[0]对应_h_t(1~T),top[1]对应_h_T,top[2]对应_c_T;

  • h0 ,c0的向量维度必须与recurrent_param的num_output一致;
  • xt_(1~T)_和_cont(1~T)的向量维度,必须与_xstatic的向量维度一致;
  • 只有前两个bottom与第一个top有时间的维度;
  • 不支持recurrent_param 的debug_info,配置不会生效;
  • expose_hidden=true配置下,不支持后接InnerProduct层。
layer { 
   name: "lstm1" 
   type: "LSTM" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   bottom: "data2_xstatic"
   bottom: "data3_h0"
   bottom: "data4_c0"
   top: "lstm1_ht"
   top: "lstm1_hT"
   top: "lstm1_cT"
   recurrent_param { 
   num_output: 1000 
   expose_hidden = 1
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }

prototxt针对GRU层书写规范

GRU的基本计算公式如下 (与Caffe一致):

重置门:Rt = sigmoid(wxrxt+whrht-1+bi)

更新门:Zt = sigmoid(wxzxt+whzht-1+bf)

中间结果:hhatt = tanh(whhat(Rt * ht-1)+bg)

输出门:ht = sigmoid((1 - Zt) * ht-1 + Zt * hhatt)

若有额外固定输入向量_x_static,计算公式变为:

重置门:Rt = sigmoid(wxrxt+whrht-1+wsrxstatic+bi)

更新门:Zt = sigmoid(wxzxt+whzht-1+wszxstatic+bf)

中间结果:hhatt = tanh(whhat(Rt * ht-1)+bg)

输出门:ht = sigmoid((1 - Zt) * ht-1 + Zt * hhatt)

基于以上计算公式,GRU的prototxt有以下4种场景:

通常场景(expose_hidden=false,2输入,1输出)

Input: xt(1~T),cont(1~T)

Output: ht(1~T)

Prototxt示例如下,有2个bottom和1个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应cont_(1~T),top[0]对应_ht(1~T):

  • 若recurrent_param的expose_hidden 没配,默认值为false;
  • 不支持recurrent_param 的debug_info,配置不会生效。
layer { 
   name: "GRU1" 
   type: "GRU" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   top: "ht"
   recurrent_param { 
     num_output: 1000 
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }
隐藏参数显式输入输出(expose_hidden=true,3输入,2输出)

Input: xt_(1~T)__,cont(1~T)_,h0

Output: ht(1~T),hT

Prototxt示例如下,有2个bottom和2个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应_cont(1~T),bottom[2]对应_h0,top[0]对应_h_t(1~T),top[1]对应_h_T;

  • h0的向量维度须与recurrent_param的num_output一致;
  • 只有前两个bottom与第一个top有时间的维度;
  • 不支持recurrent_param 的debug_info,配置不会生效;
  • expose_hidden=true配置下,不支持后接InnerProduct层。
layer { 
   name: "GRU1" 
   type: "GRU" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   bottom: "data2_h0"
   top: "ht"
   top: "hT"
   recurrent_param { 
   num_output: 1000 
   expose_hidden = 1
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }
具有额外的固定输入(expose_hidden=false,3输入,1输出)

Input: xt_(1~T)__,cont(1~T)_, xstatic

Output: ht(1~T)

Prototxt示例如下,有3个bottom和1个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应_cont(1~T),bottom[2]对应_xstatic,top[0]对应_h_t(1~T);

  • xt_(1~T)_和_cont(1~T)的向量维度,必须与_xstatic的向量维度一致;
  • 只有前两个bottom与第一个top有时间的维度;
  • 如果recurrent_param 的expose_hidden 没配,默认值为false;
  • 不支持recurrent_param 的debug_info,配置不会生效。
layer { 
   name: "GRU1" 
   type: "GRU" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   bottom: "data2_xstatic"
   top: "ht"
   recurrent_param { 
   num_output: 1000 
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }
既有固定输入,又有显式的隐藏参数(expose_hidden=true,4输入,2输出)

Input: xt_(1~T)__,cont(1~T)_,xstatic ,h0

Output: ht(1~T),hT

Prototxt示例如下,有4个bottom和2个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应_cont(1~T),bottom[2]对应_xstatic,bottom[3]对应_h_0,top[0]对应_h_t(1~T),top[1]对应_h_T;

  • h0的向量维度必须与recurrent_param的num_output一致;
  • xt_(1~T)_和_cont(1~T)的向量维度,必须与_xstatic的向量维度一致;
  • 只有前两个bottom与第一个top有时间的维度;
  • 不支持recurrent_param 的debug_info,配置不会生效;
  • expose_hidden=true配置下,不支持后接InnerProduct层。
layer { 
   name: "gru1" 
   type: "GRU" 
   bottom: "data0_xt"
   bottom: "data1_cont"
   bottom: "data2_xstatic"
   bottom: "data3_h0"
   top: "ht"
   top: "hT"
   recurrent_param { 
   num_output: 1000 
   expose_hidden = 1
     weight_filler { 
       type: "uniform" 
       min: -0.08 
       max: 0.08 
     } 
     bias_filler { 
       type: "constant" 
       value: 0 
     } 
   } 
 }

Recurrent网络约束

若Recurrent网络中包含诸如Conv等4D规格的算子,则存在如下约束:

  • Prototxt首层的N轴为1,即维度为1×C×H×W;
  • 若batch_num配置为大于1的值,Recurrent算子的第二个输入continuous必须为Data层;
  • 若batch_num配置为大于1的值,Prototxt构图时,需确保每张图片的计算不存在数据依赖。例如,不同图片所产生的帧数据不能拼接为整体以作为Recurrent算子第一个输入。

检测网硬化加速

DecBBox、Sort、Nms、Filter层功能说明

针对Faster RCNN、RFCN、SSD、YOLOV1、YOLOV2、YOLOV3等检测网络,DecBBox会根据prototxt里面的calc_mode的参数配置解析对应的网络模型,将不同个数以及不同格式的tensor转换成统一的格式。因此DecBBox的输入取决于calc_mode参数的配置,下文会有详细介绍。DecBBox的输出为1×C×6×N的tensor,其中C为检测类别的数量,N为锚点的数量,height等于6表示检测框xmin, ymin, xmax, ymax, score, classID等六个信息,数据类型均为浮点型。当不需要输出类别信息时,DecBBox的输出为1×C×5×N。

Filter层的作用是根据设定的score的阈值将DecBBox输出的分数小于等于阈值的检测框滤掉,阈值的数据类型为浮点型,输入范围为[0,1)。

Sort层的作用是根据分数大小对DecBBox层的输出进行排序,当参数multi_class_sorting配置为true时,Sort层采取所有类别混合排序的策略,当参数multi_class_sorting配置为false时,Sort层采取每个类别之间根据分数分开排序的策略。Sort层支持top_k的配置,即保留候选框的最大个数。当实际检测框个数小于top_k时,按实际检测框的数量输出。阈值top_k的数据类型为uint型,支持大于1的正整数。

Nms(Non-Maximum Suppression)层的作用是当两个候选框交叠面积除以两张图片占用的总面积大于一定阈值的时候过滤掉得分较低的检测框。阈值的数据类型为浮点型,输入的数据范围支持[0,1)。

Nms层和Filter层所需要的阈值信息由用户给定的data层输入,输入数据类型为float,一共包含四个点,分别对应Nms的阈值、Filter层的得分阈值、Filter的高度阈值和Filter层的宽度阈值。

注意:Filter层、Sort层、Nms层只能接在DecBBox层后面,Filter层、Sort层、Nms层之间的连接顺序和数量任意。当Sort层接在DecBbox层后面时,multi_class_sorting只支持配false。

硬化层参数配置

须知:

FilterBox层暂不支持配置top_k参数,配置时不生效。SSD,Faster RCNN, RFCN网络需配置锚点信息的文件。配置的nms_threshold, low_score_threshold, min_height, min_width等参数仅用作ATC推理时使用,实际板端仿真使用参数需通过API接口配置。API配置参数与推理参数建议保持一致。

表 1 硬化层参数配置限制

参数

参数意义

DecBBox

FilterBox

Sort

Nms

DetectionOutput

top_k

输出框数配置, prototxt中配置

NA

NA

[1 ~ 10000]

[1 ~ 10000]

NA

num_classes

分类数目配置,prototxt文件中配置。

NA

NA

NA

NA

[1~1000]

multi_class_sorting

多类sort配置,prototxt文件中配置。

NA

NA

true/false

NA

NA

calc_mode

计算模式配置,必须和网络类型匹配, prototxt中配置。

[0~5],8

NA

NA

NA

NA

表 2 Faster RCNN RFCN SSD硬化层参数配置

层/参数

参数

参数意义

Faster RCNN/RFCN

SSD

DetectionOutput

num_anchors

锚点数目,必须配置

√

√

num_classes

分类数目,必须配置

1

√

num_coords

坐标数目,必须配置为4

4

4

DecBBox

share_location

是否是共享位置预测

false

true

share_variance

是否共享方差,SSD网络必须配置为false

NA

false

clip_bbox

是否使能框裁剪,只支持配置为true

true

true

code_type

必须配置为CENTER_SIZE

CENTER_SIZE

CENTER_SIZE

bias

YOLOV2/V3/V5/V7网络必须配置,值域[0,1024.0]

NA

NA

variance

方差配置,SSD网络必须配置,且个数必须为4,值域[0,1.0]

NA

示例:variance: 0.1

variance: 0.1

variance: 0.2

variance: 0.2

calc_mode

计算模式, 必须配置为表格中网络对应数值

0

4

FilterBox

top_k

输出框数, 暂不支持,配置时不生效

NA

NA

Sort

multi_class_sorting

是否使用多类sort

false

true/false

具体配置请参考prototxt示例

top_k

输出框数

[1~10000]

[1~10000]

Nms

top_k

输出框数

[1~10000]

[1~10000]

表 3 YOLOV1/V2/V3硬化层参数配置

层/参数

参数

参数意义

YOLOV1

YOLOV2

YOLOV3

DetectionOutput

num_anchors

锚点数目,必须配置

√

√

√

num_classes

分类数目,必须配置

√

√

√

num_coords

坐标数目,必须配置为4

4

4

4

num_grids_width

YOLO网络栅格Width,YOLO网络必须配置

√

√

√

num_grids_height

YOLO网络栅格Height,YOLO网络必须配置

√

√

√

DecBBox

share_location

是否是共享位置预测,

true

true

true

share_variance

是否共享方差,SSD网络必须配置为false

NA

NA

NA

clip_bbox

是否使能框裁剪,只支持配置为true

true

true

true

code_type

必须配置为CENTER_SIZE

CENTER_SIZE

CENTER_SIZE

CENTER_SIZE

bias

YOLOV2/V3/V5/V7网络必须配置,值域[0~1024.0]

NA

示例

bias: 1.08

bias: 1.19

bias: 3.42

bias: 4.41

bias: 6.63

bias: 11.3

bias: 9.42

bias: 5.11

bias: 16.6

bias: 10.5

示例:

bias: 116

bias: 90

bias: 156

bias: 198

bias: 373

bias: 326

variance

方差配置,SSD网络必须配置,且个数必须为4,值域[0,1.0]

NA

NA

NA

calc_mode

计算模式, 必须配置为表格中网络对应数值

1

2

3

FilterBox

top_k

输出框数,暂不支持,配置时不生效

NA

NA

NA

Sort

multi_class_sorting

是否使用多类sort,必须配置为表格中网络对应数值

false

false

false

top_k

输出框数

[1~10000]

[1~10000]

[1~10000]

Nms

top_k

输出框数

[1~10000]

[1~10000]

[1~10000]

Faster RCNN 网络

Faster RCNN Proposal层硬化结构如图1所示。

输出给Proposal硬化后的DetectionOutput层的得分数据类型必须是float类型,并且此Softmax层和Proposal硬化层之间不能有任何计算层,参考如下所示:

layer { 
   name: "rpn_cls_prob" 
   type: "Softmax" 
   bottom: "rpn_cls_score_reshape" 
   top: "rpn_cls_prob" 
 }

Proposal硬化层描述请参考“算子规格说明”中DetectionOutput章节。

图 1 Faster RCNN Proposal层硬化结构图

Faster RCNN Proposal硬化层的输入为两个tensor,分别对应图1中的bottom0以及bottom1。 假设N为锚点的总数量,则bottom0的维度为的为1×1×1× N,bottom1的维度为的1×1×4×N,输入数据为大于0的float类型数据。DecBbox层中心点宽高的具体计算公式如下:

DecCx = priWidth * dx(P) + priCx

DecCy = priHeight * dy(P) + priCy

DecWidth = exp(dw(P)) * priWidth

DecHeight = exp(dh(P)) * priHeight

其中_DecCx_, DecCy, DecWidth, _DecHeight_分别对应检测框的中心点和宽高; priWidth, priHeight, priCx, _priCy_为锚点的宽高和中心点坐标。锚点的坐标由外部输入文件anchor.txt(对应 [generate_anchors_file]配置项)提供。具体格式为N行4列的数据,N为锚点的数量,4列数据分别对应锚点的xmin, ymin, xmax, ymax, 输入数据为大于0的整数,数据类型为float类型。其他四组输入_dx(P), dy(P), dw(P), dh(P)_与图中的bottom对应。具体细节可参考sample用例。

Faster RCNN Proposal硬化层的输出信息由两个report层构成。第一个report层的输出信息为检测框的数量,第二个report层的输出信息为:xmin, ymin, xmax, ymax, 得分以及类别,检测框的输出顺序按分数由大到小排列。假设最终有300个检测框,则第一个report层的输出信息为:检测框数量(300);第二个report层的信息为:检测框的xmin(300个xmin),检测框的ymin(300个ymin),检测框的xmax(300个max),检测框的ymax(300个ymax),对应的框的得分(300个分数,由大到小),以及对应的框的类别(300个classs ID)。注意,由于proposal层的类别信息(即classID)仅分为前景和背景,图中bottom0只对应前景的分数信息,因此实际最终的输出信息只有前景的检测框的个数、坐标、分数以及classID。

RFCN网络

RFCN Proposal层硬化结构如图1所示,发布包中提供了基于resnet50的sample:samples/2_object_detection/rfcn/rfcn_resnet50,请参考此示例进行适配。

输出给Proposal硬化后DetectionOutput层的得分数据类型必须是float类型,并且此Softmax层和Proposal硬化层之间不能有任何计算层,如下所示:

layer { 
   name: "rpn_cls_prob" 
   type: "Softmax" 
   bottom: "rpn_cls_score_reshape" 
   top: "rpn_cls_prob" 
 }

Proposal硬化层描述请参考samples/2_object_detection/rfcn/rfcn_resnet50/caffe_model/rfcn_resnet50.prototxt。

图 1 RFCN Proposal层硬化结构图

RFCN网络Proposal硬化层的输入输出与Faster RCNN Proposal一致,此处不再赘述。

SSD网络

SSD DetectionOutput层硬化结构如图1所示,发布包中提供了sample:samples/2_object_detection/ssd,请参考此示例进行适配。

输出给DetectionOutput硬化层的得分数据类型为float类型,并且此Softmax层和DetectionOutput硬化层之间不能有任何计算层,如下所示:

layer { 
   name: "mbox_conf_softmax" 
   type: "Softmax" 
   bottom: "mbox_conf_permute" 
   top: "mbox_conf_softmax" 
   softmax_param { 
     axis: 1 
   } 
 }

DetectionOutput硬化层描述请参考sample/samples/2_object_detection/ssd/caffe_model/ssd.prototxt。

图 1 SSD DetectionOutput层硬化结构图

SSD网络的rpn模块输入由三个部分组成,分别对应上图中的mbox_conf_extract、permute层和RPN threshold。具体公式如下:

DecCx = Var1 * L0c1 * priWidth + priCx

DecCy = Var2 * L0c2 * priHeight + priCy

DecWidth = exp(Var3 * L0c3) * priWidth

DecHeight = exp(Var4 * L0c4) * priHeight

其中_DecCx_, DecCy, DecWidth, _DecHeight_分别对应检测框的中心点和宽高;Var1, Var2, Var3, Var4为调整系数;L0c1, L0c2, L0c3_, L0c4为框的预测信息;_riWidth, _piHeight_, priCx, _priCy_为锚点的中心点坐标和宽高。锚点的坐标以及调整系数由外部输入文件anchor.txt(对应 [generate_anchors_file]配置项)提供。具体格式为N行8列的数据,N为锚点的数量,8列数据分别对应锚点的xmin, ymin, xmax, ymax 以及调整系数var1, var2, var3, var4。

permute层提供_L0c1_, L0c2, L0c3, L0c4坐标信息,维度为1×1×4×N,N为框的数量。

mbox_conf_extract提供分数信息和类别信息,维度为1×(C-1)×1×N,其中C为包含背景的类别数量,减1表示去掉背景,N为锚点数量。如果类别不需要去掉背景,请删除层mbox_conf_extract,直接mbox_conf_softmax输出给DetectionOutput层,修改DetectionOutput层的num_classes 为包含背景的类别数。

rpn_threshold提供4个阈值,分别是nms_threshold、low_score_threshold、min_height、min_width,ATC转换模型时自动加的data层,在板端ACL运行时通过data层输入。

SSD的输出信息由两个report层构成,第一个report层的输出信息为检测框输出的数量,第二个report层的信息为xmin, ymin, xmax, ymax, 得分以及类别,检测框的输出顺序按分数由大到小排列。假设最终有300个检测框,则第一个report层输出的信息依次为:检测框数量(300);第二个report层输出的信息为:检测框的xmin(300个xmin),检测框的ymin(300个ymin),检测框的xmax(300个xmax),检测框的ymax(300个ymax),对应的框的得分(300个分数,由大到小),以及对应的框的类别(300个classs ID)。

YOLOV1网络

YOLOV1 DetectionOutput层硬化结构如图1所示,发布包中提供了sample: samples/2_object_detection/yolo,请参考此示例进行适配。

图 1 YOLOV1 DetectionOutput层硬化结构图

YOLOV1的输入维度为1×1×(C + 5)× N的tensor,数据类型为float类型,其中C为类别的数量,N为检测框的个数。图1中直观的显示了rpn层输入的组成部分,左边的permute层对应类别信息,维度为1×1×C×N;中间的permute层对应坐标的信息,维度为1×1×4×N, 对应的取值范围为[0, 1]; reshape层对应分数的信息,维度为1×1×1×N。这三个层被concat层连接成1×1×(C+5)×N的tensor作为rpn层的输入。其计算公式如下:

x方向(y方向计算流程与x方向类似):

cX = (col + x) / gridNumWidth

halfW = w * w * 0.5

pMinX = cX - hallfW

pMaxX = cX + halfW

score:

finalScore = objScore * classScore

其中col为列索引,gridNumWidth为锚点宽,x和w为上一层的输出,cX为检测框中心点x坐标,halfW为检测框宽*0.5,pMinX为检测框Xmin,pMaxX为检测框Xmax。objScore和classScore为上一层的输出,finalScore为最终分数。

YOLOV1的输出信息由两个report层构成,第一个report层输出各类别检测框输出的数量,第二个report层输出各类别检测框的xmin, ymin, xmax, ymax, 得分以及类别,每一类的排序按检测框的输出顺序按分数由大到小排列。

YOLOV2网络

YOLOV2 DetectionOutput层硬化结构如图1所示,发布包中提供了sample:samples/2_object_detection/yolo,请参考此示例进行适配。

须知:

DetectionOutput输出的是1×1×6×top_k的格式,类别中存放得分最高的分类序号,同YOLOV2/V3中的1×class_num×6×top_k不同。

图 1 YOLOV2 DetectionOutput层硬化结构图

YOLOV2相比于YOLOV1在计算检测框宽高时增加了bias1, bias2两个参数。其中bias1和bias2的需要在prototxt中配置, bias1和bias2的数量等于每个grid内锚点的数量的两倍,输出顺序依次为每个锚点的bias1以及每个锚点的bias2。假设每个grid内一共有3个锚点,则需要输入的对应的bias顺序为: 锚点0的bias1, bias2; 锚点1的bias1, bias2以及锚点2的bias1,bias2。数据类型为float,取值范围为大于0的浮点数。详细设置可参照sample中的测试用例。YOLOV2的输入tensor规格与YOLOV2相同,对应图1中的最后一个permute层,此处不再赘述。其计算公式如下:

x方向(y方向计算流程与x方向类似):

cX = (sigmoid(X) + col) / gridNumWidth * img_w

halfW = exp(w) * bias / gridNumWidth * 0.5 * img_w

pMinX = cX - hallfW

pMaxX = cX + halfW

score:

finalScore = sigmoid(objScore) * max(softmax(classScore))

其中col为列索引,gridNumWidth为锚点宽,x和w为上一层的输出,bias为锚点参数,cX为检测框中心点x坐标,halfW为检测框宽*0.5,pMinX为检测框Xmin,pMaxX为检测框Xmax。objScore和classScore为上一层的输出,finalScore为最终分数。

YOLOV2的输出信息由两个report层构成,第一个report层输出检测框的数量,第二个report层输出各类别检测框的xmin, ymin, xmax, ymax, 得分以及类别,按检测框的输出顺序按分数由大到小排列。假设最终有300个检测框,则第一个report层为输出检测框数量(300);第二个report层输出检测框的xmin(300个xmin),检测框的ymin(300个ymin),检测框的xmax(300个xmax),检测框的ymax(300个ymax),对应的框的得分(300个分数,由大到小),以及对应的框的类别(300个classs ID)。

YOLOV3/V4/V5/V7网络

YOLOV3/V4/V5/V7 DecBBox/DetectionOutput层硬化结构如图1所示,发布包中提供了sample:samples/2_object_detection/yolo,请参考此示例进行适配。仅Hi3519DV500 YOLOV3/V4/V5/V7支持所类别多阈值功能,且最大支持80类阈值配置,其中ONNX DecBBox算子中multi_label属性需要配置为1,不支持高精度。当配置多个阈值时,启动多类别多阈值功能,其中YOLOV3/V4会损失17%左右的性能,YOLOV5/V7会损失60%左右的性能。

图 1 YOLOV3/V4/V5/V7 DecBBox/DetectionOutput层硬化结构图

YoloV3/V4/V5/V7的输入tensor规格以及prototxt中bias的规格与YOLOV2相同,此处不再赘述。YOLOV3/V4的计算公式如下:

x方向(y方向计算流程与x方向类似):

cX = (sigmoid(X) + col) / gridNumWidth * img_w

halfW = exp(w) * bias * 0.5

pMinX = cX - halfW

pMaxX = cX + halfW

score:

finalScore = sigmoid(objScore) * max(sigmoid(classScore))

YOLOV5/V7的计算公式如下:

x方向(y方向计算流程与x方向类似):

cX = (2 * sigmoid(X) - 0.5 + col) / gridNumWidth * img_w

halfW = 2*sigmoid(w) * 2*sigmoid(w) * bias / gridNumWidth * 0.5 * img_w

pMinX = cX - halfW

pMaxX = cX + halfW

score:

finalScore = sigmoid(objScore) * max(sigmoid(classScore))

其中col为列索引,gridNumWidth为锚点宽,x和w为上一层的输出,bias为锚点bias参数,cX为检测框中心点x坐标,halfW为检测框宽*0.5,pMinX为检测框Xmin,pMaxX为检测框Xmax。objScore和classScore为上一层的输出,finalScore为最终分数。

YoloV3/V5/V7的输出信息由两个report层构成,第一个report层输出检测框的数量,第二个report层输出各类别检测框的xmin, ymin, xmax, ymax, 得分以及类别,按检测框的输出顺序按分数由大到小排列。假设最终有300个检测框,则第一个report层为输出检测框数量(300);第二个report层输出检测框的xmin(300个xmin),检测框的ymin(300个ymin),检测框的xmax(300个xmax),检测框的ymax(300个ymax),对应的框的得分(300个分数,由大到小),以及对应的框的类别(300个classs ID)。

YOLOV8网络

YOLOV8DecBBox/Sort/Nms/Filter层硬化结构图如图1所示,发布包提供了sample:samples/2_object_detection/yolo,请参考此示例进行适配。

图 1 YOLOV8 DecBBox/Sort/Nms/Filter层硬化结构图

YOLOV8的输入tensor规格、输出信息与YOLOV2相同,此处不再赘述。

坐标计算部分由DecBBox之前的算子实现,参考YOLOV8源码,采用DFL损失函数。

score在DecBBox中计算,计算公式如下:

finalScore = max(sigmoid(classScore))

Hi3516CV610检测网后处理流程

Hi3516CV610在sample中提供了SSD、YOLOV3、 YOLOV5、YOLOV7、YOLOV8官方模型的处理步骤,其对应caffe、onnx以及om模型的后缀名为"_new_rpn",后处理流程如图1所示。其sample的部署详见发布包:samples/2_object_detection/yolo(ssd)。

其中FilterVector算子介绍和参数配置方法详见FilterVector和FilterVector章节。受硬件限制,与Hi3519DV500的Filter算子相比,Hi3516CV610的FilterVector算子的输入为向量,且支持top_k配置,当top_k配置值小于实际框数量时,只会保留前top_k个符合阈值要求的框。

图 1 Hi3516CV610检测网后处理流程图

Transformer网络硬化加速

针对SwinT、MOTR等Transformer网络,对网络进行定制化修改,通过新增算子、扩展已有算子规格、增加网络优化特性等,实现网络在芯片上部署和硬化加速。对Transformer网络的定制化修改中,以CNN为基础进行等效替换,整个网络的数据流从HWC转置为CHW实现,Q、K、V的Attention操作均转为Conv实现,同时对数据变形、转置、切分和合并等操作进行融合,转化为利于硬件加速的等效算子实现。

SwinT网络

SwinT网络新增算子包含Roll、WinPartition、WinPartitionReverse、LayerNorm、Gelu2。

Roll

Roll算子封装了一系列Slice、Concat操作,对应onnx网络结构如图1所示。算子规格详见"Roll"。

图 1 Roll算子对应原生onnx网络结构

WinPartition

WinPartition算子封装了一系列Reshape、Transpose等操作,对应onnx网络结构如图2所示。算子规格详见"WinPartition"。

图 2 WinPartition算子对应原生onnx网络结构

WinPartitionReverse

WinPartitionReverse算子对应WinPartition的逆操作,封装了一系列Reshape、Transpose等操作,对应onnx网络结构如图3所示。算子规格详见"WinPartitionReverse"。

图 3 WinPartitionReverse算子对应原生onnx网络结构

LayerNorm

仅支持对单个维度进行layernorm运算,算子规格详见"LayerNorm"

Gelu

算子规格详见"Gelu"。

MOTR网络

MOTR网络新增算子包含InverseSigmoid、GridSampleXDec、PosEncode、MulReduceSum。

InverseSigmoid

InverseSigmoid为Sigmoid的逆过程,公式为y = -log((1 / x) - 1),对应onnx网络结构如图1所示。算子规格详见"InverseSigmoid"。

图 1 InverseSigmoid对应原生onnx网络结构

GridSampleXDec

GridSampleXDec算子封装了一系列Reshape、Transpose、Slice、Squeeze、Div、Sub、Mul、Add、GridSample等操作,对应onnx网络结构如图2所示。算子规格详见"GridSampleXDec"。

图 2 GridSampleXDec算子对应原生onnx网络结构

PosEncode

PosEncode算子封装了一系列Squeeze、Transpose、Mul、Unsqueeze、Div、Sin、Cos、Concat、Reshape等操作,对应onnx网络结构如图3所示。算子规格详见"PosEncode"。

图 3 PosEncode对应原生onnx网络结构

MulReduceSum

MulReduceSum封装了Gather、Unsqueeze、Mul、Reducesum、Reshape等操作,对应onnx网络结构如图4所示。算子规格详见"MulReduceSum"。

图 4 MulReduceSum对应原生onnx网络结构

算子规格说明

须知:

  • Caffe与Onnx框架算子规格中,如无特别说明,输入、输出形状支持范围如下: 向量:channel <= 65535,矩阵:width <= 65535,张量:width <= 65535 分辨率要求channel对齐到8后,所有维度的乘积不能超过1073741824。
  • 算子规格的参数数据类型为ATC算子的数据类型,与Onnx/Caffe 不一致的数据类型将强转为ATC算子的数据类型。
  • 当计算数据类型为FP16时,值超出2048会有精度损失。

Caffe框架算子规格

该算子规格仅适用于Caffe框架原生IR定义的网络模型。

其他约束:不支持层名为空。

Hi3516CV610约束:如算子无特殊说明,不支持输入或输出存在轴长度超过65535。

图像分析引擎

AbsVal

功能描述:求绝对值。支持高维度输入。

ArgMax

功能描述:沿某轴找出topk值及索引(因硬件限制,当前只支持top 1。

规格约束:不支持5D shape输入

参数名

数据类型

参数含义

规格

out_max_val

bool

默认为false, 如果为true,且未定义axis时,生成pair(argmax, maxval)

支持

top_k

uint32

最大的k个值

只支持配置为1

axis

uint32

无默认值,表示取top_k值的维度,若不设该值,则表示将所有维度flatten之后,再应用top_k取值

支持配置[-4,3],但取-4和0时会报错。

Hi3519DV500:

不支持对argmax轴进行切分。没有配置axis时,须满足输入channel × height × width < 65536,且均小于65536。配置axis轴时,argmax轴应小于65536。

Hi3516CV610:

不支持对argmax轴进行切分。没有配置axis时,须满足输入channel × height × width < 4096。配置axis轴时,argmax轴应小于4096。

BatchNorm

功能描述:数据归一化。

参数名

数据类型

参数含义

规格

use_global_stats

bool

false表示使用滑动平均;true表示使用全局的,不每次进行计算

支持

moving_average_fraction

float

默认为.999,每次迭代滑动平均衰减系数

不解析生效

eps

float

默认为1e-5,用来防止被0除

支持配置

Bias

功能描述:计算两个输入数据的和。

参数名

数据类型

参数含义

规格

axis

int32

默认为1,不同的值对应的相加维度不同

支持配置范围为[-4, 3],默认为1,遵循caffe规则

num_axes

int32

默认为1,当只有一个bottom时有效,指定训练的bias参数维度大小,-1表示从axis指定的轴开始的全部维度,0表示参数只有一个scalar

与axis配套使用,遵循caffe规则

BNLL

功能描述:按照一固定公式计算,激活函数。支持高维度输入。

Clip

功能描述:数据截断。

Hi3516CV610 规格约束:参数max的值必须不小于参数min的值,如果不满足约束,将按照[min, min]的边界条件对数据进行截断

参数名

数据类型

参数含义

规格

min

float

截断的最小值

支持,配置范围:[-65504,65504]

max

float

截断的最大值

支持,配置范围:[-65504,65504]

Concat

功能描述:至少两个输入,将它们在某个维度上拼接起来,支持高维度输入。

参数名

数据类型

参数含义

规格

其他约束

axis

int32

默认为1,表示哪个维度concat,可以为负数

支持配置,

令dim表示输入shape的维数,如NCHW的维数为4,按如下两种情况配置属性:

1. dim等于4且第0维等于1场景,支持配置 [-4, 3]

2. dim大于4,或者dim等于4且第0维非1场景,支持配置[-dim, -dim+axis_r1] U [-2, -1] U [dim-2, dim-1] U [0, axis_r1]。其中axis_r1为最左非1轴,即shape从左到右出现的第一个非1轴,如[1, 2, c, h, w],则axis_r1=1。

-

concat_dim

uint32

跟axis含义相同,不支持负值

已废弃,不建议使用,axis与concat_dim不应同时使用。

bottom number<=32

Convolution

功能描述:对输入做卷积。

规格约束:

  • Hi3519DV500:当Convolution的输入NCHW的N不等于1时, 输入和输出channel 需满足以下条件:(data_bit_num * channel) % 64 == 0,例如当输入为8bit,channel需为8的倍数;当Convolution输入是数据层时,输入无上述限制;支持图片输入,支持的类型包括YUV420SP、YVU420SP、BGR_PLANNAR、RGB_PLANNAR、BGR_PACKAGE、RGB_PACKAGE;不支持group > 1。
  • Hi3516CV610:当Convolution的输入NCHW的N不等于1时, 输入和输出channel都需为8的倍数;不支持图片输入;不支持group > 1;不支持S16计算,如果配置S16会回退为S8。

data_bit_num 表示计算数据位宽,当计算数据类型为U4/S4时,data_bit_num = 4;当计算数据类型为U8/S8时,data_bit_num = 8;当计算数据类型为U16/S16时,data_bit_num = 16。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

num_output

uint32

输出的channel大小

支持配置,最大32768

支持配置,最大16384

bias_term

bool

默认为1,表示是否加bias

支持配置0或1

pad

uint32

默认为0,表示补边的大小

支持,配置范围:[0, 15];不能与pad_h或者pad_w同时配置

支持,配置范围:[0, 7];不能与pad_h或者pad_w同时配置

kernel_size

uint32

kernel的大小

支持范围:[1, 64],受dilation、输入数据类型和输出数据类型的影响

支持范围:[1, 15],受dilation、输入数据类型和输出数据类型的影响

stride

uint32

默认为1,stride的大小

支持范围:[1, 255]

支持范围:[1, 16]

dilation

uint32

默认为1,dilation的大小

支持范围:[1, 15],配置后(kernel-1)×dilation+1<=255

支持范围:[1, 8]

pad_h

uint32

默认为0,表示height方向的padding

支持,配置范围:[0, 15],且须满足pad_h <=(kernel_h-1)×dilation_h+1;不能与pad同时配置

支持,配置范围:[0, 7],且须满足pad_h <=(kernel_h-1)×dilation_h+1;不能与pad同时配置

pad_w

uint32

默认为0,表示width方向的padding

支持,配置范围:[0, 15],且须满足pad_w <=(kernel_w-1)×dilation_w+1;不能与pad同时配置

支持,配置范围:[0, 7],且须满足pad_w <=(kernel_w-1)×dilation_w+1;不能与pad同时配置

kernel_h

uint32

kernel的height大小

支持,配置范围:[1,255]

支持,配置范围:[1,15]

kernel_w

uint32

kernel的width大小

支持,配置范围:[1,255]

支持,配置范围:[1,15]

stride_h

uint32

stride的height大小

支持范围:[1, 255]

支持范围:[1, 16]

stride_w

uint32

stride的width大小

支持范围:[1, 255]

支持范围:[1, 16]

group

uint32

默认为1,group的大小

支持

axis

int32

默认为1,axis值之前的维度认为是独立输入,axis之后的维度认为是空间维度,即在做卷积时会求和。

不支持配置

CReLU

功能描述:激活函数CReLU(x)=[ReLU(x),ReLU(−x)]。

Crop

功能描述:数据裁剪。

参数名

数据类型

参数含义

规格

axis

int32

默认为2,裁剪维度

支持,配置范围:[-4, 3]

offset

uint32

默认为0,裁剪偏移

支持,配置范围:[0, UINT32_MAX]

Deconvolution

功能描述:卷积的反过程,将卷积的前向传播和后向传播置换。

规格约束:(dilation × (kernel -1) 大于等于pad。当输入NCHW的N不等于1时,不支持。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

num_output

uint32

输出的channel大小

支持配置,最大32768

支持配置,最大16384;

bias_term

bool

默认为1,表示是否加bias

支持配置0或1

pad

uint32

默认为0,表示补边的大小

支持,配置范围:[0, 15],kernel、stride和dilation影响支持范围;不能与pad_h或者pad_w同时配置

支持,配置范围:[0, 7],kernel、stride和dilation影响支持范围;不能与pad_h或者pad_w同时配置

kernel_size

uint32

kernel的大小

支持范围:[1,64],受dilation、input_channel、输入数据类型和输出数据类型的影响

支持范围:[1,15],受dilation、input_channel、输入数据类型和输出数据类型的影响

stride

uint32

默认为1,stride的大小

支持范围:[1, 255]

支持范围:[1, 16]

dilation

uint32

默认为1,dilation的大小

支持范围:[1, 15],配置后(kernel-1)*dilation+1<=255;

支持范围:[1, 8]

pad_h

uint32

默认为0,表示height方向的padding

支持,配置范围:[0, 15],kernel、stride和dilation影响支持范围;不能与pad同时配置

支持,配置范围:[0, 7],kernel、stride和dilation影响支持范围;不能与pad同时配置

pad_w

uint32

默认为0,表示width方向的padding

支持,配置范围:[0, 15],kernel、stride和dilation影响支持范围;不能与pad同时配置

支持,配置范围:[0, 7],kernel、stride和dilation影响支持范围;不能与pad同时配置

kernel_h

uint32

kernel的height大小

支持,配置范围:[1, 255]

支持,配置范围:[1, 15]

kernel_w

uint32

kernel的width大小

支持,配置范围:[1, 255]

支持,配置范围:[1, 15]

stride_h

uint32

stride的height大小

支持范围:[1, 255]

支持范围:[1, 16]

stride_w

uint32

stride的width大小

支持范围:[1, 255]

支持范围:[1, 16]

group

uint32

默认为1,group的大小

支持

axis

int32

默认为1,axis值之前的维度认为是独立输入,axis之后的维度认为是空间维度,即在做卷积时会求和。

不支持配置

DepthwiseConv

功能描述:对输入做卷积。

规格约束:

pad与pad_h/pad_w参数不可以同时配置。

  • Hi3519DV500:需满足 kernel_h*ALIGN128(kernel_w*8*data_bit_num) / 8 <= 3*131072;当DepthwiseConv的输入NCHW的N不等于1时, 输入和输出channel 需满足以下条件:(data_bit_num * channel) % 64 == 0,例如当输入为8bit,channel需为8的倍数。
  • Hi3516CV610:需满足 kernel_h*ALIGN128(kernel_w*8*data_bit_num) / 8 <= 3*16384

data_bit_num 表示计算数据位宽,当计算数据类型为U4/S4时,data_bit_num = 4;当计算数据类型为U8/S8时,data_bit_num = 8;当计算数据类型为U16/S16时,data_bit_num = 16。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

num_output

uint32

输出的channel大小

支持配置,最大32768,需要=input_channel

支持配置,最大16384,需要=input_channel

bias_term

bool

默认为1,表示是否加bias

支持配置0或1

pad

uint32

默认为0,表示补边的大小

支持,配置范围:[0, 15],且pad<=kernel_size;不能与pad_h或者pad_w同时配置

支持,配置范围:[0, 7],且pad<=kernel_size;不能与pad_h或者pad_w同时配置

kernel_size

uint32

kernel的大小

支持范围:[1,64],受dilation、stride、input_channel、输入数据类型和输出数据类型的影响

支持范围:[1,15],受dilation、stride、input_channel、输入数据类型和输出数据类型的影响

stride

uint32

默认为1,stride的大小

支持范围:[1, 255]

支持范围:[1, 16]

dilation

uint32

默认为1,dilation的大小

支持范围:[1, 15],配置后(kernel-1)×dilation+1<=255

支持范围:[1, 8]

pad_h

uint32

默认为0,表示height方向的padding

支持,配置范围:[0, 15],且pad_h<=kernel_h;不能与pad同时配置

支持,配置范围:[0, 7],且pad_h<=kernel_h;不能与pad同时配置

pad_w

uint32

默认为0,表示width方向的padding

支持,配置范围:[0, 15],且pad_w<=kernel_w;不能与pad同时配置

支持,配置范围:[0, 7],且pad_w<=kernel_w;不能与pad同时配置

kernel_h

uint32

kernel的height大小

支持,配置范围:[1, 255]

支持,配置范围:[1, 15]

kernel_w

uint32

kernel的width大小

支持,配置范围:[1, 255]

支持,配置范围:[1, 15]

stride_h

uint32

stride的height大小

支持范围:[1, 255]

支持范围:[1, 16]

stride_w

uint32

stride的width大小

支持范围:[1, 255]

支持范围:[1, 16]

axis

int32

默认为1,axis值之前的维度认为是独立输入,axis之后的维度认为是空间维度,即在做卷积时会求和。

不支持配置

DetectionOutput

功能描述:RPN 硬化层。

参数名

数据类型

参数含义

规格

param_type

ParamType

RPN硬化层类型

支持,4种类型DecBBox,Sort,Nms,FilterBox

calc_mode

uint32

默认为0,DecBBox的网络类型

支持7种类型

0:RCNN (Hi3516CV610不支持)

1:YOLOV1 (Hi3516CV610不支持)

2:YOLOV2 (Hi3516CV610不支持)

3:YOLOV3/V4

4:SSD

5:YOLOV5/V7

8:YOLOV8

top_k

uint32

默认为1,输出框的个数

支持,值域[1,10000]

num_classes

uint32

默认为0,分类数目

支持,值域[1,1000]。YOLOV1/V2/V3/V4/V5/V7需要满足num_classes + 5 = input_h,YOLOV8需要满足num_classes + 4 = input_h

multi_class_sorting

bool

默认为false, 是否多类sort

支持

num_anchors

uint32

默认为0, 锚点数

支持,值域[1,524288],需要满足num_anchors%(num_grids_width*num_grids_height) = 0。对于YOLO网络,需要满足num_anchors=input_w

num_coords

uint32

默认为4,坐标数

支持,仅支持4

share_location

bool

默认为false, 是否是共享位置预测

支持

share_variance

bool

默认为false, 是否共享方差

支持,SSD网络必须配置为false

clip_bbox

bool

默认为true, 是否使能框裁剪

仅支持true

code_type

CodeType

编码类型

仅支持CENTER_SIZE

bias

float

默认为0,偏置

YOLOV2/V3/V5/V7网络必须配置,且满足bias.size/2=(input_w/(num_grids_width * num_grids_height))。值域:[0,1024]。

variance

float

默认为0,方差

支持SSD网络必须配置,且个数必须为4,值域:[0,1.0]

num_grids_width

uint32

YOLO网络栅格Width

YOLO网络必须配置,值域[1,1024]

num_grids_height

uint32

YOLO网络栅格Height

YOLO网络必须配置,值域[1,1024]

Eltwise

功能描述:进行elementwise的计算操作,包括相加、相乘、求最大。支持高维度输入。

参数名

数据类型

参数含义

规格

operation

EltwiseOp

默认为SUM,element-wise的操作,加、乘、求最大

支持, 相加、相乘、求最大

coeff

float

blob_wise系数

仅在operation为相加时支持

stable_prod_grad

bool

对于乘操作,大于两输入的情况,选择是否使用更慢但更稳定的方法求梯度

不支持配置

ELU

功能描述:一种固定公式的激活函数。支持高维度输入。

参数名

数据类型

参数含义

规格

alpha

float

默认为1,公式中的alpha系数

支持

Exp

功能描述:计算exp。支持高维度输入。

参数名

数据类型

参数含义

规格

base

float

默认为-1.0

支持,-1或是正数

scale

float

默认为1.0

支持

shift

float

默认为0.0

支持

Extract

功能描述:沿某个维度切割输入数据,输出1个切割的数据。

参数名

数据类型

参数含义

规格

axis

int32

默认为1

支持,配置范围:[-4, 3]

slice_point_begin

uint32

默认为0

支持

slice_point_end

uint32

默认为1

支持

Flatten

功能描述:将输入的blob转成向量。支持高维度输入。

参数名

数据类型

参数含义

规格

axis

int32

flatten开始的维度

axis取值范围:[-3, 3],默认值为1,其中axis=0和axis=4(即N维度)不支持。

end_axis

int32

flatten结束的维度

end_axis取值范围:[-4, 3],默认值为-1,表示最后一条轴。End_axis应大于axis。

GRU

功能描述:GRU网络,若前接非Data层,不支持非Data层的输出数据维度为4维。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

num_output

uint32

默认为0,输出的维度大小

支持,最大支持8192

支持,最大支持1872

debug_info

bool

默认为false,是否输出debug_info

不支持配置

expose_hidden

bool

默认为false,表示是否增加额外输入输出层,对于GRU是同时增加1层

支持配置false或true

Hswish

功能描述:激活函数h-swish(x)=x*ReLU6(x+3)/6。支持高维度输入。

参数名

数据类型

参数含义

规格

negative_slope

float

默认为0,负值的斜率

支持

InnerProduct

功能描述:全连接层,计算内积。支持2、3、4维输入。

规格约束:当axis=1且输入数据为3维时,最高维仅支持1,其他情况支持最高维大于1。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

num_output

uint32

输出的维度大小

支持,最大支持32768

支持,最大支持16384

bias_term

bool

是否加bias

支持配置0或1

axis

int32

默认为1,进行内积计算的维度

当Recurrent层后面紧接FC,或两者通过其他算子间接相连时,支持且仅支持axis=2,其他场景不支持配置。

transpose

bool

是否转置权值矩阵

支持配置0或1

Input

功能描述:输入层。支持高维度输入。

参数名

数据类型

参数含义

规格

shape

BlobShape

定义blob的大小,可以每个分别定义,可以统一定为同样大小,可以不定义

支持最大input节点和输出节点加起来不能超过32个

Interp

功能描述:计算双线性插值。

Hi3516CV610硬件约束:输入shape维度大小需满足N * ceil(C/8) <=213。

参数名

数据类型

参数含义

规格

其他约束

height

uint32

输出的height大小

支持配置

不支持zoom_factor和shrink_factor同时配置

Out = In + (In - 1) × (zoom_factor - 1);

Out = (In - 1) / shrink_factor + 1;

仅支持通过负补边对输入进行裁剪;

仅支持Tensor输入;

输入输出w(补边后)不支持超过65535

输入w和h(补边后)不支持单独为1,但支持同时为1

width

uint32

输出的width大小

支持配置

zoom_factor

uint32

默认为1,输出的放大倍数

支持配置,优先级高于height/width

shrink_factor

uint32

默认为1,输出的缩小倍数

支持配置,优先级高于height/width

pad_beg

uint32

默认为0,左补边和上补边的大小

支持配置为非正整数

pad_end

uint32

默认为0,右补边和下补边的大小

支持配置为非正整数

Log

功能描述:计算log。支持高维度输入。

参数名

数据类型

参数含义

规格

base

float

默认为-1.0

支持-1和除了1的任意正数

scale

float

默认为1.0

支持任意值

shift

float

默认为0.0

支持任意值

LRN

功能描述:一种normalization的方法。

参数名

数据类型

参数含义

规格

local_size

uint32

默认为5

支持3、5、7,需要满足Channel大于等于local_size

alpha

float

默认为1.0

支持

beta

float

默认为0.75

支持

norm_region

NormRegion

默认为ACROSS_CHANNELS

只支持ACROSS_CHANNELS

k

float

默认为1.0

不能为负数

LSTM

功能描述:LSTM网络,若前接非Data层,不支持非Data层的输出数据维度为4维。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

num_output

uint32

默认为0,输出的维度大小

支持,最大支持8192

支持,最大支持1872

debug_info

bool

默认为false,是否输出debug_info

不支持配置

-

expose_hidden

bool

默认为false,表示是否增加额外输入输出层,对于LSTM是同时增加2层

支持配置true或false

-

MatMul

功能描述:两个输入数据做矩阵乘。

参数名

数据类型

参数含义

规格

dim_1

uint32

第1个矩阵的行,即第1个输入的height

支持

dim_2

uint32

第1个矩阵的列,即第1个输入的width

第2个矩阵的行,即第2个输入的width

支持

dim_3

uint32

第2个矩阵的列,即第2个输入的height

支持

Mish

功能描述:激活函数mish(x)=x*tanh(ln(1+exp(x)))。支持高维度输入。

MVN

功能描述:x'=(x-mean(x))/std(x)。

规格约束:仅支持4D输入,输入W需小于65536。

参数名

数据类型

参数含义

规格

normalize_variance

bool

默认为true, 设为false时只减均值

支持配置true或false

across_channels

bool

默认为false, 设为true时则CHW视为一个向量

支持配置true或false

eps

float

默认为1e-9,用来防止除0

支持配置

Nop

功能描述:数据搬移。

Normalize

功能描述:一种数据归一化的方法。

规格约束:当运算轴为C轴,此时C的大小不得超过4096。

参数名

数据类型

参数含义

规格

across_spatial

bool

默认为true

只支持配置为false

channel_shared

bool

默认为true

支持

eps

float

默认为1e-10

支持

sqrt_a

float

默认为1

支持

PassThrough

功能描述:把height和width的数据展开到channel维度。

规格约束:只支持输入数据类型为NCHW。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

num_output

uint32

输出C维度,默认为0

支持[1, 40000]

支持[1, 4096]

block_height

uint32

默认为0

支持[1, 255]

支持[2, 16],且要被输入h整除

block_width

uint32

默认为0

支持[1, 255]

支持[2, 16],且要被输入w整除

Permute

功能描述:数据转置。

规格约束:当存在以下场景规格时,用CPU进行计算

  • 输入数据为4维场景,N轴与C轴发生交换,且N/C轴的长度均不为1
  • N轴与H轴或W轴发生交换
  • 输入数据维度高于4的场景,有维度高于C轴的轴参与转置
  • C轴参与转置,并且所有维度高于C轴的轴长度乘积不小于1024

参数名

数据类型

参数含义

规格

order

uint32

整型数组

支持

Pooling

功能描述:对输入做pooling。

规格约束:

  • Hi3519DV500 需满足 kernel_h*ALIGN128(kernel_w*8*dataBit) / 8 <= 7*128K。
  • Hi3516CV610 需满足 kernel_h*kernel_w*8*dataByte <= 4*16K;当数入数据为Fp32,运算数据为S8时,需满足 kernel_h*kernel_w*8 *2Byte+kernel_h*kernel_w*8<= 4*16K
  • 一维池化的时候需满足 (input W + pad W) > (output W - 1) * stride W;或2D池化的时候也需同时满足 (input H + pad H) > (output H - 1) * stride H。否则会因为pad起始值超出输入shape的轴长度而导致输出shape被截断。
  • 部分超出图像分析引擎规格的用CPU进行计算。图像分析引擎规格如下表。
  • MAX模式下同时输出最大值索引(即算子有两路输出)时,仅支持接upsample算子。
  • 支持NCHW格式,N>=1

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

pool

PoolMethod

默认为MAX,pooling的类型,另一种是AVE

支持

pad

uint32

默认为0,表示补边的大小

支持,配置范围:[0, 15]

支持,配置范围:[0, 11]

pad_h

uint32

默认为0,表示height方向的padding

支持,配置范围:[0, 15]

支持,配置范围:[0, 11]

pad_w

uint32

默认为0,表示width方向的padding

支持,配置范围:[0, 15]

支持,配置范围:[0, 11]

pad_up

uint32

默认为0,表示上面的padding

支持,配置范围:[0, 15]

支持,配置范围:[0, 11]

pad_down

uint32

默认为0,表示下面的padding

支持,配置范围:[0, 15]

支持,配置范围:[0, 11]

pad_left

uint32

默认为0,表示左面的padding

支持,配置范围:[0, 15]

支持,配置范围:[0, 11]

pad_right

uint32

默认为0,表示右面的padding

支持,配置范围:[0, 15]

支持,配置范围:[0, 11]

pad_value

float

默认为0,表示padding的值

支持,配置范围:[-65536,65536], 值约束范围在[输入的最小值,0]或[0, 输入的最大值]

kernel_size

uint32

kernel的大小

支持,配置范围:[1, 255]

支持,配置范围:[1, 127]

kernel_h

uint32

kernel的height大小

支持,配置范围:[1, 255]

支持,配置范围:[1, 127]

kernel_w

uint32

kernel的width大小

支持,配置范围:[1, 255]

支持,配置范围:[1, 127]

stride

uint32

默认为1,stride的大小

支持,配置范围:[1, 255],stride <= input_size

支持,配置范围:[1, 16],stride <= input_size

stride_h

uint32

stride的height大小

支持,配置范围:[1, 255],stride_h <= input_h

支持,配置范围:[1, 16],stride_h <= input_h

stride_w

uint32

stride的width大小

支持,配置范围:[1, 255],stride_w <= input_w

支持,配置范围:[1, 16],stride_w <= input_w

round_mode

RoundMode

默认为CEIL,计算输出形状的取整方式。

支持配置CEIL或FLOOR

global_pooling

bool

默认为false,是否全平面做pooling

支持配置0或1

Power

功能描述:f(x)=(shift+scale∗x)^power。支持高维度输入。

参数名

数据类型

参数含义

规格

power

float

默认为1.0

支持

scale

float

默认为1.0

支持

shift

float

默认为0.0

支持

PReLU

功能描述:带参数的ReLU激活函数。

参数名

数据类型

参数含义

规格

channel_shared

bool

默认为false,表示负向斜率是否channel共享

支持

PSROIPooling

功能描述:位置敏感的候选区域池化。

规格约束:第二路输入仅支持rpn层或者data层。

Hi3516CV610硬件约束:输入shape维度大小需满足N * H * W <=3496。

参数名

数据类型

参数含义

规格

spatial_scale

float

rois映射到原始feature map的缩放比例系数,默认为0.0

支持

output_dim

int32

输出数据的channel,默认为0

支持

group_size

int32

输出数据的宽度和高度,默认为0

支持

Reduction

功能描述:将输入的blob reduction成一个scalar。支持高维度输入。

参数名

数据类型

参数含义

规格

operation

ReductionOp

默认为SUM,可选ASUM、SUMSQ、MEAN

支持SUM、ASUM、SUMSQ、MEAN

axis

int32

表示从第几个维度开始后面的维度全部reduction

走图像分析引擎需满足以下约束,其余走cpu模式

1、设r为输入数据维度,支持范围:[1, r - 1] U [1 - r, -1]。

2、输入数据维度小于4;或者输入数据维度为4,且第一维shape=1。

coeff

float

默认为1.0,输出的系数

支持

ReLU/ReLU6/RReLU

功能描述:ReLU激活函数。支持高维度输入。

参数名

数据类型

参数含义

规格

negative_slope

float

默认为0,负值的斜率

支持

Reorg

功能描述:Yolov2算子,Height和Width折叠到Channel的变形操作。

规格约束:只支持输入数据类型为NCHW。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

stride

uint32

折叠的像素。

支持[2, 255],输出C维度支持[1, 4096]

支持[2, 16],要被输入h/w整除,输出C维度支持[1, 4096]

Reshape

功能描述:维度变换。支持高维度输入。

参数名

数据类型

参数含义

规格

shape

BlobShape

指示输出的维度大小,0表示跟bottom一致,-1表示该维度由输入的blob及输出的其他维度决定

支持高维度输入。

axis

int32

默认为0,表示shape中第一数值与输出的第几个起始维度对应

默认为0,遵循caffe规则

特殊内容:当axis<0时,实际起始维度为axis+1。如当shape=NCHW时,axis=-2,意味着仅对W轴reshape。

num_axes

int32

默认为-1,表示从axis开始做几个维度的reshape

默认值-1表示对axis起始的所有轴进行变换

Reverse

功能描述:将输入在指定的轴上进行反转。

参数名

数据类型

参数含义

规格

其他约束

axis

int32

表示需要反转的轴

支持配置为0,若前后接Recurrent(LSTM/RNN/GRU)层,则表示在Recurrent层输入或输出的帧数轴上做反转。

  • 输入和输出必须是Recurrent (LSTM/RNN/GRU)层,或者reverse的参数axis对应的维度值为1。
  • 仅支持输出给一个算子
  • Reverse和Recurrent之间不支持上报
RNN

功能描述:RNN网络,若前接非Data层,不支持非Data层的输出数据维度为4维。

参数名

数据类型

参数含义

规格

Hi3519DV500

Hi3516CV610

num_output

uint32

默认为0,输出的维度大小

支持,最大支持8192

支持,最大支持1872

debug_info

bool

默认为false,是否输出debug_info

不支持配置

expose_hidden

bool

默认为false,表示是否增加额外输入输出层,对于RNN是增加1层

支持配置0或1

ROIPooling

功能描述:目标检测的候选框区域池化。

规格约束:第二路输入仅支持rpn层或者data层。

参数名

数据类型

参数含义

规格

pooled_h

uint32

输出数据的高度,默认为0

支持

pooled_w

uint32

输出数据的宽度,默认为0

支持

spatial_scale

float

rois映射到原始feature map的缩放比例系数,默认为1

支持

Scale

功能描述:计算两个输入数据的乘,支持两个输入维度大小不一致。

参数名

数据类型

参数含义

规格

axis

int32

默认为1,输入的bottom[0]做scale的起始维度,axis不同则bottom[1]的shape不同

支持配置范围为[-4, 3],默认值1,遵循caffe规则

num_axes

int32

默认是1,当只有一个bottom的时候有效,表示做scale的维度,-1表示axis开始全部,0表示是参数只有一个scalar

与axis配套使用,遵循caffe规则;

bias_term

bool

默认为false,表示是否加bias

支持配置0或1;

ShuffleChannel

功能描述:将c分成group个子组,并通过逐一从每个子组中选择元素获得新的顺序。

参数名

数据类型

参数含义

规格

其他约束

group

uint32

将c分成group组

支持配置[1, c],小于等于0或者大于c会报错

仅支持输入为向量、3阶张量、4阶张量

Sigmoid

功能描述:sigmoid激活函数。支持高维度输入。

Slice

功能描述:沿某个维度切割输入的blob,输出多个切割的blob,支持高维度输入。

参数名

数据类型

参数含义

规格

axis

int32

默认为1,表示切块的维度

令dim表示输入shape的维数,如NCHW的维数为4,按如下两种情况配置属性:

1. dim等于4且第0维等于1场景,支持配置 [-4, 3]

2. dim大于4,或者dim等于4且第0维非1场景,支持配置[-dim, -dim + axis_r1] U [-2, -1] U [dim-2, dim-1] U [0, axis_r1]。其中axis_r1为最左非1轴,即shape从左到右出现的第一个非1轴,如[1, 2, c, h, w],则axis_r1=1。

slice_point

uint32

表示输出的各个blob的切割点,不定义的则均分

  1. 支持,切割点数小于32。
  2. slice_point应按从小到大顺序排列

slice_dim

uint32

默认为1,跟axis含义相同

  1. 参考axis规格,不支持负数。
  2. axis与slice_dim不应同时使用
Silence

功能描述:屏蔽输出。

规格约束:只支持连接Slice,且Slice两个输出,屏蔽Slice的其中一个输出。

Softmax

功能描述:计算softmax函数。

参数名

数据类型

参数含义

规格

其他约束

axis

int32

默认为1,计算softmax的维度

(-r,r-1],r=rank(input), axis不为0

若r为5,axis不为-4,1

axis 为1时:

向量 channel<=65536

张量 channel<=4096

Hi3516CV610 需满足:

  • 运算轴为axisC时,5*16*1024*8>=input_c*dataBit/2;
  • 运算轴为axisH/axisW时,5*16*1024*8>=4*input_axis*dataBit
Split

功能描述:复制输入的blob到多个节点。

SPP

功能描述:对不同的输入做金字塔的pooling,输出一样的大小。

参数名

数据类型

参数含义

规格

其他约束

pyramid_height

uint32

spp的高,即做2^n次pooling

支持,2^n次,n<7;

等同pool+reshape+concat的规格

pool

PoolMethod

默认为MAX,pooling的类型,另一种是AVE

支持,pooling kernel小于等于255

Swish

功能描述:激活函数swish(x)=x * sigmoid (beta * x) 。支持高维度输入。

参数名

数据类型

参数含义

规格

beta

float

默认为1,表示x的scale系数

支持

TanH

功能描述:tanh激活函数。支持高维度输入。

Threshold

功能描述:输入与一个阈值相比较,大于则输出1,小于等于则输出0。支持高维度输入。

参数名

数据类型

参数含义

规格

threshold

float

默认为0

支持

Tile

功能描述:沿某个维度复制,支持高维度输入(shape>4)。

参数名

数据类型

参数含义

规格

axis

int32

默认为1,表示tile轴的维度,如果配置的轴是最高轴到C轴其中的一个轴,要求最高轴到该轴之前的值必须是1。如[N, 1, H, W]->[N,2,H,W],N必须等于1,否则不支持。

假设数据维度为s,支持配置[-s, s-1]。

tiles

int32

表示复制的份数

-

Upsample

功能描述:上采样。

参数名

数据类型

参数含义

规格

其他约束

interpolation_mode

InterpolationMode

默认为NEAREST,表示插值模式

仅支持interpolation_mode为NEAREST,scale仅支持2

scale等同于stride

scale

uint32

缩放倍数,默认为2

SortVector

说明:

Hi3519DV500不支持。

功能描述:对输入向量进行排序操作。

规格约束:输入shape只支持1*1*1*w格式。当后接算子的类型为SortVector或FilterVector时,不支持is_output_idx配1。输入shapeW取值范围为[1,4095]。

参数名

数据类型

参数含义

规格

top_k

uint32

默认为inputW,表示输出的值最大个数,配置后outputW=min(top_k,inputW)。

支持配置

is_output_idx

bool

默认为false,值为false时表示输出为向量值,为true时表示输出为向量索引。

支持配置

is_report_vector_num

bool

默认为true,值为true时表示当算子为最后一层时,会后接两个report层,同时输出结果向量以及向量长度;值为false时后接一个report层,只输出结果向量。

支持配置

FilterVector

说明:

Hi3519DV500不支持。

功能描述:对输入向量进行过滤操作。大于等于过滤阈值的数据会被保留,其余被过滤,过滤后的输出紧凑排布。

规格约束:输入shape只支持1*1*1*w格式。当后接算子的类型为SortVector或FilterVector时,不支持is_output_idx配1。

参数名

数据类型

参数含义

规格

top_k

uint32

默认为inputW,表示输出的值最大个数,配置后outputW=min(top_k,inputW)。当top_k配置值小于实际框数量时,只会保留前top_k个符合阈值要求的框。

支持配置

is_output_idx

bool

默认为false,值为false时表示输出为向量值,为true时表示输出为向量索引。

支持配置

filter_thresh

float

默认为0.5,过滤阈值。

支持配置

is_report_vector_num

bool

默认为true,值为true时表示当算子为最后一层时,会后接两个report层,同时输出结果向量以及向量长度;值为false时后接一个report层,只输出结果向量。

支持配置

Onnx框架算子规格

该算子规格仅适用于Onnx框架原生IR定义的网络模型。

图像分析引擎

Abs

opset version: 13

功能描述:求绝对值。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

否

Acos

opset version: 7

功能描述:逐点求arccosine。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

Add

opset version: 13

功能描述:计算两个输入element-wise的和。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

broadcast支持:

  1. aicore在限定维度(dim<=5)内支持broadcast任意轴。
  2. 设dimH为dim[0]到dim[-3]的总shape。在条件1内,存在以下场景会区分走aicore(dimH <= 4096)或cpu (dimH > 4096):
    1. dim = 4,且dim[-3]需广播,dim[-4]不广播,dim[-4]>1。如input1=[2, 2, H, W], input2=[2, 1, H, W]
    2. dim = 5,且dim[-3]需广播,dim[-4]不广播,dim[-4]>1。如input1=[N1, 2, 2, H, W], input2=[N1, 2, 1, H, W]
    3. dim = 5,且dim[-3],dim[-4]需广播,dim[-5]不广播,dim[-5] > 1。如input1=[N1, 2, 2, H, W],input2=[N1, 1, 1, H, W]
  1. 高维度(dim>5) broadcast为cpu模式。
  2. 以cpu模式支持双向在线广播。
  3. 以aicore模式支持一路在线一路离线的双向广播。

是

B

input

float

数据

ArgMax

opset version: 13

功能描述:返回指定轴上最大值的索引。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持,但不支持大于4的高维度

是

axis

attribute

int32

选取最大值所在的维度

假设r=rank(input),支持axis为[-r+1, -1] U [1, r-1]。

keepdims

attribute

bool

是否保留收缩的轴

Hi3516CV610不支持配置为false

select_last_index

attribute

bool

出现多个相同值为最大值的情况,选择返回第一次出现或最后一次出现最大值的坐标(0为第一次出现)

支持配置为0或1

ArgMin

opset version: 13

功能描述:返回指定轴上最小值的索引,Hi3519DV500该算子走CPU。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持,大于4维时,走CPU;axis指定的轴大小超过4096时,走CPU。

是

axis

attribute

int32

选取最小值所在的维度

[-r,r-1],r=rank(input)。

其中axis==0时,走CPU。

keepdims

attribute

bool

是否保留收缩的轴

支持。

keepdims为true时,走CPU

select_last_index

attribute

bool

出现多个相同值为最小值的情况选择返回第一次出现或最后一次出现最小值的坐标(0为第一次出现)

支持

Asin

opset version: 7

功能描述:逐点求arcsine。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

Atan

opset version: 7

功能描述:逐点求arctangent。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

AveragePool

功能描述:平均池化。

规格说明:支持NCHW格式,N>=1

opset version: 11

约束条件:一维池化的时候需满足 (input W + pad W) > (output W - 1) * stride W;或2D池化的时候也需同时满足 (input H + pad H) > (output H - 1) * stride H。否则会因为pad起始值超出输入shape的轴长度而导致输出shape被截断

Hi3516CV610:当kernel_shape与输入数据的最后两维长度不一致时,需满足 kernel_h * kernel_w * 8 * dataBit / 8 <= 4 * 16K;当输入数据为Fp32,运算数据为S8时,需满足 kernel_h*kernel_w*8 *2Byte+kernel_h*kernel_w*8<= 4*16K

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

auto_pad

attribute

string

pad模式

支持

是

部分超出图像分析引擎规格的用CPU

图像分析引擎规格:

  • Hi3519DV500:

    1 <= kernel <=255;

    1 <= stride <=255;

    1 <= pad <= 7

  • Hi3516CV610:

    1 <= kernel <=127;

    1 <= stride <=16

    1 <= pad <= 5

strides <= input_size;

0 <=pad left < kernel width;

pad right < kernel width;

0 <=pad up < kernel height;

pad down < kernel height;

当前shape已支持(N,C,H,W),N>=1;

ceil_mode

attribute

int

计算输出形状时是用ceil还是floor

支持

count_include_pad

attribute

int

计算边沿值时是否包含填充的元素

支持

kernel_shape

attribute

int

kernel沿各轴的大小

支持

1D pooling:1维输入

2D pooling:2维输入

pads

attribute

int

每个轴的开始和结束位置

支持

1D pooling:2维输入

2D pooling:4维输入

strides

attribute

int

每个轴的stride

支持

1D pooling:1维输入

2D pooling:2维输入

X

input

float

数据

支持

BatchNormalization

opset version:9

功能描述:计算输入的batch normalization。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

不支持2d以下shape(不含2d)。

否

scale

input

float

scale tensor

必须为离线

B

input

float

bias tensor

必须为离线

mean

input

float

mean tensor

必须为离线

var

input

float

variance tensor

必须为离线

epsilon

attribute

float

避免除零

支持

momentum

attribute

float

每次迭代滑动平均衰减系数

不支持配置,配置时不生效

Celu

opset version: 12

功能描述:一种固定公式的激活函数:

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

alpha

attribute

float

公式里的alpha值

支持(除alpha的值为0)

是

X

input

float

数据

支持

Ceil

功能描述:对输入X元素进行向上取整得到Y。

Hi3519DV500为CPU算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

Clip

opset version: 13

功能描述:根据上下边界对数据进行裁剪。

Hi3516CV610 规格约束:参数max的值必须不小于参数min的值,如果不满足约束,将按照[max, max]的边界条件对数据进行裁剪。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

否

min

input(optional)

float

下边界

必须为离线,必须为scalar,可不配置

max

input(optional)

float

上边界

必须为离线,必须为scalar,可不配置

Compress

opset version: 11

功能描述:从输入张量中沿给定轴根据condition中每个索引是否为true来选择切片。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

否

condition

input

bool

指定轴上的slice或data是否被选择

长度小于等于shape(axis),必须为离线输入

axis

attribute

int32

指定compress的轴

[-r,r-1],r=rank(input),若未指定则输入将被flatten

Concat

opset version: 13

功能描述:将多个输入在指定维度拼接。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

可为多个

是

axis

attribute

int32

表示在某个维度拼接

支持配置,

令dim表示输入shape的维数,如NCHW的维数为4,支持按如下两种情况配置属性:

1. dim等于4且第0维等于1场景,支持配置 [-4, 3]

2. dim大于4,或者dim等于4且第0维非1场景,支持配置[-dim, -dim + axis_r1] U [-2, -1] U [dim-2, dim-1] U [0, axis_r1]。其中axis_r1为最左非1轴,即shape从左到右出现的第一个非1轴,如[1, 2, c, h, w],则axis_r1=1。

其余场景用CPU实现。

Constant

功能描述:生成离线数据。

opset version: 21

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

sparse_value

attribute

不支持

离线数据

只支持整型和浮点型

是

value

attribute

binary

value_float

attribute

float

value_floats

attribute

float

value_int

attribute

不支持

value_ints

attribute

不支持

value_string

attribute

不支持

value_strings

attribute

不支持

ConstantOfShape

功能描述:生成离线数据。

opset version: 21

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

value

attribute

float

离线数据值

1、input只支持整型

2、value只支持浮点型

仅支持离线输入。

input

input

int64

离线数据shape

Conv

opset version: 11

功能描述:对输入做卷积计算。

规格约束:

  • Hi3519DV500:当Convolution的输入NCHW的N不等于1时, 输入和输出channel 需满足以下条件:(data_bit_num * channel) % 64 == 0,例如当输入为8bit,channel需为8的倍数;当Convolution输入是数据层时,输入无上述限制;支持图片输入,支持的类型包括YUV420SP、YVU420SP、BGR_PLANNAR、RGB_PLANNAR、BGR_PACKAGE、RGB_PACKAGE;不支持group > 1。
  • Hi3516CV610:当Convolution的输入NCHW的N不等于1时, 输入和输出channel都需为8的倍数;不支持图片输入;不支持group > 1;不支持S16计算,如果配置S16会回退为S8。

data_bit_num 表示计算数据位宽,当计算数据类型为U4/S4时,data_bit_num = 4;当计算数据类型为U8/S8时,data_bit_num = 8;当计算数据类型为U16/S16时,data_bit_num = 16。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

N×C×H×W

否

W

input

float

权重

必须为离线,M×C/group×kH×kW

B

input(optional)

float

偏置

M(M为Feature map数量),必须为离线

auto_pad

attribute

string

指定padding的类型,可配置为NOTSET, SAME_UPPER, SAME_LOWER 或 VALID

auto_pad各参数定义见onnx文档

dilations

attribute

list of ints

沿各轴dilation的大小

大小为2,配置后 (kernel-1) × dilation + 1 < 255

group

attribute

int

默认为1,inputC和outputC需要切分的大小

支持

kernel_shape

attribute

list of ints

卷积kernel的大小

大小为2,顺序为(height, width),受dilation、输入数据类型和输出数据类型的影响

  • Hi3519DV500:高,宽配置范围[1, 64]
  • Hi3516CV610:高,宽配置范围[1, 15]

pads

attribute

list of ints

各轴起始位置补边的大小

格式为 [x1_begin, x2_begin...x1_end, x2_end,...],不可与auto_pad同时配置,配置范围:

  • Hi3519DV500:[0, 15]
  • Hi3516CV610:[0, 7]

且须满足pad <=(kernel-1)×dilation+1

strides

attribute

list of ints

沿各轴stride的大小

大小为2,顺序为(height, width), 配置范围:

  • Hi3519DV500:[1, 255]
  • Hi3516CV610:[1, 16]
ConvTranspose

opset version: 11

功能描述:对输入做反卷积计算。

规格约束:(dilations × (kernel_shape -1) 大于等于pads。当输入NCHW的N不等于1时,不支持。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

否

W

input

float

权重

必须为离线,C×M/group×kH×kW

B

input(optional)

float

偏置

必须为离线,M(M为Feature map数量)

auto_pad

attribute

string

指定padding的类型,可配置为NOTSET, SAME_UPPER, SAME_LOWER 或 VALID

auto_pad各参数定义见备注

dilations

attribute

list of ints

沿各轴dilation的大小

dilation的个数等于输入维度大小,支持1~15,配置后 (kernel-1) × dilation + 1 < 255

group

attribute

int

默认为1,inputC和outputC需要切分的大小

支持

kernel_shape

attribute

list of ints

卷积kernel的大小

大小为2,顺序为(height, width)受dilation、stride、input_channel、输入数据类型和输出数据类型的影响

  • Hi3519DV500:高,宽配置范围[1, 64]
  • Hi3516CV610:高,宽配置范围[1, 15]

output_padding

attribute

list of ints

在输出结果的基础上补边

不支持配置

output_shape

attribute

list of ints

输出的形状

支持

pads

attribute

list of ints

各轴起始位置补边的大小

格式为 [x1_begin, x2_begin...x1_end, x2_end,...],不可与auto_pad同时配置;若配置该项,须配置4个数[padUp, padLeft, padDown, padRight ],分别表示配置的上、左、下、右补边数. kernel、stride和dilation影响支持范围

  • Hi3519DV500:配置范围[0, 15]
  • Hi3516CV610:配置范围[0, 7]

strides

attribute

list of ints

沿各轴stride的大小

大小为2,顺序为(height, width), 配置范围:

  • Hi3519DV500:[1, 255]
  • Hi3516CV610:[1, 16]
Cos

opset version: 7

功能描述:计算cosine。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

Cosh

功能描述:逐点求hyperbolic cosine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

DecBBox

功能描述:RPN硬化层。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

0

input

float

数据

-

否

1

input

float

bias数据

YOLOV2/V3/V4/V5/V7网络必须配置,且满足input.size=(input_w/(gridW*gridH))。值域:[0,1024]。

是

calc_mode

attribute

uint32_t

默认为0,DecBBox网络类型

支持7种类型

0:RCNN (Hi3516CV610不支持)

1:YOLOV1 (Hi3516CV610不支持)

2:YOLOV2 (Hi3516CV610不支持)

3:YOLOV3/V4

4:SSD

5:YOLOV5/V7

8:YOLOV8

否

num_classes

attribute

uint32_t

默认为0,分类数目

支持,值域[1,1000]。YOLOV1/V2/V3/V4/V5/V7 需要满足num_classes + 5 = input_h,YOLOV8需要满足num_classes + 4 = input_h

否

num_anchors

attribute

uint32_t

默认为0,锚点数

支持,值域[1,524288]。需要满足num_anchors%(gridW*gridH) = 0。对于YOLO网络,需要满足num_anchors=input_w

否

num_coords

attribute

uint32_t

默认为4,坐标数

支持,仅支持4

否

share_loc

attribute

bool

默认为false,是否共享位置预测

支持

否

clip_bbox

attribute

bool

默认为true,是否使能框裁剪

支持,仅支持true

否

gridW

attribute

uint32_t

YOLO网络栅格Width

YOLO网络必须配置,值域[1,1024]

否

gridH

attribute

uint32_t

YOLO网络栅格Height

YOLO网络必须配置,值域[1,1024]

否

imgW

attribute

uint32_t

输入为Feature map时指定原图的宽

支持,值域[1,4096]

否

imgH

attribute

uint32_t

输入为Feature map时指定原图的高

支持,值域[1,4096]

否

useClassId

attribute

bool

默认为true,输出是否包含class id

支持,仅支持true

否

multi_label

attribute

bool

默认false,是否开启多类别功能

支持,仅19DV500支持true

否

DepthToSpace

opset version: 11

功能描述:重新排列空间数据块,将depth数据转移到进入space。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

  1. 仅支持4D shape NCHW,且N=1。
  2. C必须是blocksize*blocksize的整数倍。

是

blocksize

attribute

int

取空间的大小

mode

attribute

string

排布方式

  1. 图像分析引擎仅支持DCR模式且blockSize在[2,4]之间,其余blockSize走CPU
  2. CRD模式仅支持CPU
Div

opset version:13

功能描述:计算两个输入element-wise的除。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

broadcast支持与Add一致。

是

B

input

float

数据

Dropout

功能描述:当前仅支持将输入复制到输出。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

否

ratio

input(optional)

float

数据

不支持配置

training_mode

input(optional)

bool

是否为training模式

不支持配置

seed

attribute

int

随机数生成seed

不支持配置

Elu

opset version: 6

功能描述:一种固定公式的激活函数。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

alpha

attribute

float

默认为1,公式中的alpha系数

支持

Exp

opset version: 13

功能描述:计算exp。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

Expand

功能描述:将输入tensor广播成输出tensor。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持。

shape必须离线

当满足以下条件中任意一个时,走CPU分支:

  • X离线。
  • shape的维度>X的维度。
  • 除了CHW以外的其余维度需要广播。

是

shape

input

int64

指示输出的形状

Erf

opset version: 13

功能描述:一种固定公式的误差函数,支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

Filter

功能描述:RPN硬化层,对检测框进行过滤。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

0

input

float

数据

-

否

topK

attribute

uint32_t

最大输出框的个数

不支持,配置时不生效

否

conf_thres

attribute

float

最低分数阈值

支持,值域[0,1)

Floor

功能描述:对输入X元素进行向下取整得到Y。

Hi3519DV500为CPU算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

Flatten

功能描述:将输入以指定轴为界拉伸成2D Matrix。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

axis

attribute

int32

指定分界轴

axis取值范围:[-3, 3],默认值为1,其中axis=0和axis=4(即N维度)不支持。axis值应小于等于输入张量的秩

FilterVector

说明:

Hi3519DV500不支持。

功能描述:对输入向量进行过滤操作。大于等于过滤阈值的数据会被保留,其余被过滤,过滤后的输出紧凑排布。

规格约束:输入shape只支持1*1*1*w格式。当后接算子的类型为SortVector或FilterVector时,不支持is_output_idx配1。

参数名

数据类型

参数含义

规格

top_k

uint32

默认为inputW,表示输出的值最大个数,配置后outputW=min(top_k,inputW)。当top_k配置值小于实际框数量时,只会保留前top_k个符合阈值要求的框。

支持配置

filter_thresh

float

默认为0.5,过滤阈值。

支持配置

is_output_idx

bool

默认为false,值为false时表示输出为向量值,为true时表示输出为向量索引。

支持配置

is_report_vector_num

bool

默认为true,值为true时表示当算子为最后一层时,会后接两个report层,同时输出结果向量以及向量长度;值为false时后接一个report层,只输出结果向量。

支持配置

Gather

功能描述:将指定轴方向指定indices的数据聚合在一起。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线输入

其他约束

data

input

float

数据

当axis为W轴时,输入W支持的最大值。

  • Hi3519DV500:65535
  • Hi3516CV610:4095

是

走图像分析引擎需满足:axis对应的shape维度,小于U16最大值65535的约束,其余走CPU模式。

indices

input

int32/int64

需要提取的indices

支持scalar/tensor输入。

  • indices为在线输入时:[0,s-1],s=shape(axis)
  • indices为离线输入时:[-s,s-1],s=shape(axis)

是

axis

attribute

int32

gather的轴

[-r,r-1],r=rank(input)

不涉及

GatherElements

功能描述:将指定轴方向指定indices的数据逐元素聚合在一起。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线输入

其他约束

data

input

float

数据

当axis为W轴时,输入W支持的最大值。

  • Hi3519DV500:65535

是

走图像分析引擎需满足:axis对应的shape维度,小于U16最大值65535的约束,其余走CPU模式。

indices

input

int32/int64

需要提取的indices

支持scalar/tensor输入。

  • indices为在线输入时:[0,s-1],s=shape(axis)
  • indices为离线输入时:[-s,s-1],s=shape(axis)
  • indices为在线输入,shape(axis)<=65535且rank(indices)>1时:shape[-1]<4096

是

axis

attribute

int32

gather的轴

[-r,r-1],r=rank(input)

不涉及

Gemm

功能描述:实现两个矩阵的乘积。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

alpha

attribute

float

A×B的乘数

支持

是

只有当alpha=1、beta=1,transA为false,transB不做限制,C为一维向量,B和C都为离线输入时,即经过离线处理可以满足fc计算公式的[M,K]*[K,N]+[N]的条件时,使用图像分析引擎,其它情况用CPU。

beta

attribute

float

C的乘数

支持

transA

attribute

int

决定A是否转置

支持

transB

attribute

int

决定B是否转置

支持

A

input

float

数据

支持

B

input

float

数据

支持

C

input

float

数据

optional

GlobalAveragePool

功能描述:实现对同一channel的所有元素平均池化。

规格说明:支持NCHW格式,N>=1

opset version: 1

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

X

input

float

数据

支持

是

部分超出图像分析引擎规格的用CPU

图像分析引擎规格:

Hi3519DV500:

1 <= input_h <=255

1 <= input_w <= 255

Hi3516CV610:

1 <= input_h <=127

1 <= input_w <= 127

GlobalMaxPool

功能描述:实现对同一channel的所有元素最大池化。

规格说明:支持NCHW格式,N>=1

opset version: 1

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

X

input

float

数据

支持

是

部分超出图像分析引擎规格的用CPU

图像分析引擎规格:

Hi3519DV500:

1 <= input_h <=255

1 <= input_w <= 255

Hi3516CV610:

1 <= input_h <=127

1 <= input_w <= 127

GRU

opset version: 14

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

输入是否可选

约束

activation_alpha

attribute

float

激活函数的缩放值

不支持配置

不涉及

不涉及

支持两种输出格式:

1. 输出仅有1个参数:Y

2. 输出全部参数:Y,Y_h

输入和输出形状的最后一维,Hi3516CV610最大支持1872。

activation_beta

attribute

float

激活函数的缩放值

不支持配置

activations

attribute

string

输入、输出、遗忘、cell和hidden使用的激活函数

不支持配置

clip

attribute

float

激活函数前对数据clip的阈值

支持

direction

attribute

string

指定RNN是前向/反向/双向

支持

hidden_size

attribute

int

隐藏层细胞单元个数

支持

layout

attribute

int

数据排布格式

不支持配置,默认为0

linear_before_reset

attribute

int

如果为1,则输出隐藏门时,在乘以重置门输出前先做线性变换

支持

X

input

float

输入句子序列

支持

否

必填

W

input

float

门权重

支持

仅为离线

R

input

float

循环权重

支持

B

input

float

门偏置

支持

可选

sequence_lens

input

int

句子长度

支持

是

initial_h

input

float

hidden初始值

支持

Y

output

float

所有帧hidden输出的集合

支持

不涉及

必填

Y_h

output

float

最后一帧hidden输出

支持

可选

Gelu

opset version: 20

功能描述:Transformer网络常用的高斯误差线性单元激活函数。onnx opset v20算子,opset v20以下需以自定义算子形式构造。曾用名Gelu2,兼容Gelu2算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

否

approximate

attribute

string

gelu近似算法

  • 'fast_approximation': 高性能近似模式。
  • 'better_approximation': 高精度近似模式。
  • 支持官方'none', 'tanh',但统一转为'fast_approximation'近似实现。
GridSampleXDec

功能描述:GridSampleXDec根据输入的参考框和偏移,从输入的特征图中抽取对应的数据作为输出。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

offset

input

float

相对于参考框的偏移

仅支持shape结构为4维,仅支持h=1,且w要等于参考框的w。offset通道数=n_heads*n_points*2。

否

value

input

float

输入特征图数据

仅支持shape结构为4维。value 通道数需要被n_head整除。

ref

input

float

参考框

仅支持shape结构为4维,仅支持h=1,c=4,且w要等于偏移的w

n_heads

参数

int

输入特征及偏移的分组数

否

n_points

参数

int

每组偏移的数量

否

H

参数

int

参考框的高度缩放系数

否

-

W

参数

int

参考框的宽度缩放系数

否

-

GroupNorm

功能描述:计算 y = scale * (x - mean) / sqrt(variance + epsilon) + bias。其中,mean和variance 是根据每个通道组的实例计算的,并且应为每组通道指定比例(scale)和偏差(B)。

规格约束:scale和B不支持在线输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

epsilon

attribute

float

避免除零

支持

是

num_groups

attribute

uint32

分组数

支持(大于0)

input

input

float

数据

支持

scale

input

float

缩放比例

支持

bias

input

float

偏差

支持

HardSigmoid

opset version: 6

功能描述:根据公式进行计算y = max(0, min(1, alpha * x + beta))。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

alpha

attribute

float

系数

支持

beta

attribute

float

偏置

支持

Identity

opset version: 13

功能描述:将数据复制到输出。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

If

功能描述:进行分支判断计算。

opset version:13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

cond

input

bool

输入的条件值

支持

不支持。仅支持输入全在线。

else_branch

attribute

graph

如果为真执行的子图

支持

then_branch

attribute

graph

如果为假执行的子图

支持

InverseSigmoid

功能描述:InverseSigmoid为Sigmoid的逆过程,计算公式为:y = -log((1 / x) - 1)

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线输入

data

input

float

数据

支持

否

InstanceNormalization

功能描述:计算y = scale * (x - mean) / sqrt(variance + epsilon) + B。

opset version:6

规格约束:当运算轴为C轴,此时C的大小不得超过4096

当符合以下规格时,走CPU实现:

  • scale 离线,bias在线,走CPU;
  • N轴大小不为1时,走CPU。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

epsilon

attribute

float

避免除零

支持

是

input

input

float

数据

支持

scale

input

float

数据

支持

B

input

float

数据

支持

LRN

opset version:12

功能描述:计算Local Response Normalization。

Hi3516CV610 规格约束:channel不支持大于1024。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

否

alpha

attribute

float

scaling系数

支持

beta

attribute

float

指数系数

支持

bias

attribute

float

偏置(偏置必须大于等于0)

支持

size

attribute

int32

local size

支持3、5、7,需要满足Channel大于等于size

说明:

向量:输入width <= 21840

LeakyRelu

opset version: 13

功能描述:激活函数f(x) = alpha * x for x < 0, f(x) = x for x >= 0。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

alpha

attribute

float

leakage系数

支持

Log

opset version: 13

功能描述:计算log。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持,用户需自行保证输入为合法正数。负数行为未定义。

是

LogSoftmax

功能描述:根据指定公式计算LogSoftmax(input, axis) = Log(Softmax(input, axis=axis))。

opset version:13

Hi3516CV610需满足 : 运算轴为axisC时,5*16K>=input_c*dataBit/2;运算轴为axisH/axisW时,5*16K>=4*input_axis*dataBit

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

否

axis

attribute

int32

指定softmax的轴

[-r,r-1],r=rank(input),

若r为4,axis不为-4和0

若r为5,axis不为-5,-4,0和1

Loop

功能描述:对子图进行循环计算。

opset version:13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

body

attribute

graph

循环执行的子图

迭代次数必须为离线值

是。不支持所有输入同时都为离线输入。

M

input

int64

迭代的次数

cond

input

bool

输入的条件值

v_initial

input

variadic

迭代变量

说明:

不支持输出中含有scan_output的输出。

LSTM

opset version: 14

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

输入是否可选

约束

activation_alpha

attribute

float

激活函数的缩放值

不支持配置

不涉及

不涉及

支持三种输出格式:

1. 输出仅有1个参数:Y

2. 输出2个参数:Y,Y_h

3. 输出全部参数:Y,Y_h,Y_c

输入和输出形状的最后一维,Hi3516CV610最大支持1872。

activation_beta

attribute

float

激活函数的缩放值

不支持配置

activations

attribute

string

输入、输出、遗忘、cell和hidden使用的激活函数

不支持配置

clip

attribute

float

激活函数前对数据clip的阈值

支持

direction

attribute

string

指定RNN是前向/反向/双向

支持

hidden_size

attribute

int

隐藏层细胞单元个数

支持

input_forget

attribute

int

如果为1,输入门与遗忘门融合

不支持配置,默认为0

layout

attribute

int

数据排布格式

不支持配置,默认为0

X

input

float

输入句子序列

支持

否

必填

W

input

float

门权重

支持

仅为离线

R

input

float

循环权重

支持

B

input

float

门偏置

支持

可选

sequence_lens

input

int

句子长度

支持

是

initial_h

input

float

hidden初始值

支持

initial_c

input

float

cell初始值

支持

P

input

float

peephole权重

支持

仅为离线

Y

output

float

所有帧hidden输出的集合

支持

不涉及

必填

Y_h

output

float

最后一帧hidden输出

支持

可选

Y_c

output

float

最后一帧cell输出

支持

LayerNorm

功能描述:LayerNorm 为层归一化,可以对网络中的每个神经元的输出进行归一化,使得网络中每一层的输出都具有相似的分布。Layernorm是对单轴进行归一化。

规格约束:当运算轴为C轴,此时C的大小不得超过4096。

LayerNorm与ONNX原生算子差异:

在ONNX原生算子中,LayerNormalization的支持归一化维度为W,HW和CHW,不支持对单H轴和单C轴进行归一化。而本LayerNorm算子支持对单W轴、单H轴及单C轴进行归一化,但不支持HW和CHW等多轴进行归一化。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线输入

data

input

float

数据

支持,最大支持4维

否

scale

input

float

scale tensor

支持

是

bias

input

float

bias tensor

支持

axis

attribute

int32

归一化计算轴

选择运算轴,支持配置C、H、W,不支持HW、CHW,默认为1

不涉及

eps

attribute

float

防止除0错误

支持

MatMul

功能描述:支持numpy-style的矩阵相乘。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

A

input

float

数据

支持二维及以上。

是

  1. 图像分析引擎不支持输入维度大于4维,用CPU实现
  2. 不支持n>1且仅有c轴broadcast

B

input

float

数据

支持二维及以上。

Max

opset version:13

功能描述:计算多输入element-wise的最大值。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data_0

input

float

数据

broadcast支持与Add一致。

额外约束(至少两路输入):

(1)多路输入中,在线输入仅支持一路广播

(2)多路输入中,离线输入可存在多路广播

是。

支持两路输入全离线,不支持两路以上输入场景全离线。

MaxPool

功能描述:最大池化。

规格说明:支持NCHW格式,N>=1

opset version: 11

注意:ONNX opset 12 与 PyTorch 的 MaxPool ceil_mode 行为不一致,该问题在 opset 22 中已修复,ATC 实现与 opset 22 保持一致。

约束条件:一维池化的时候需满足 (input W + pad W) > (output W - 1) * stride W;或2D池化的时候也需同时满足 (input H + pad H) > (output H - 1) * stride H。否则会因为pad起始值超出输入shape的轴长度而导致输出shape被截断

Hi3516CV610:当kernel_shape与输入数据的最后两维长度不一致时,需满足 kernel_h * kernel_w * 8 * dataBit / 8 <= 4 * 16K;当输入数据为Fp32,运算数据为S8时,需满足 kernel_h*kernel_w*8 *2Byte+kernel_h*kernel_w*8<= 4*16K

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

auto_pad

attribute

string

pad模式

支持

是

只支持dilation为1。

同时输出最大值索引(即算子有两路输出)时,仅支持接upsample算子。

部分超出图像分析引擎规格的用CPU

图像分析引擎规格:

  • Hi3519DV500:

    1 <= kernel <=255;

    1 <= stride <=255, strides <= input_size;

    1 <= pad <= 7;

  • Hi3516CV610:

    1 <= kernel <=127

    1 <= stride <=16, strides <= input_size;

    1 <= pad <= 5

0 <=pad left < kernel width;

pad right < kernel width;

0 <=pad up < kernel height;

pad down < kernel height;

当前shape已支持(N,C,H,W),N>=1;

ceil_mode

attribute

int

计算输出形状时是用ceil还是floor

支持

dilations

attribute

int

每个轴的dilation值

支持

1D pooling:1维输入

2D pooling:2维输入

kernel_shape

attribute

int

kernel沿各轴的大小

支持

1D pooling:1维输入

2D pooling:2维输入

pads

attribute

int

每个轴的开始和结束位置

支持

1D pooling:2维输入

2D pooling:4维输入

storage_order

attribute

int

存储序(row major、column major)

支持

strides

attribute

int

每个轴的stride

支持

1D pooling:1维输入

2D pooling:2维输入

X

input

float

数据

支持

Mean

opset version:13

功能描述:计算多输入element-wise的均值。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data_0

input

float

数据

broadcast支持与Add一致。

额外约束(至少两路输入):

(1)多路输入中,在线输入仅支持一路广播

(2)多路输入中,离线输入可存在多路广播

是

不支持输入全离线。

Min

opset version:13

功能描述:计算多输入element-wise的最小值。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data_0

input

float

数据

broadcast支持与Add一致。

额外约束(至少两路输入):

(1)多路输入中,在线输入仅支持一路广播

(2)多路输入中,离线输入可存在多路广播

是

支持两路输入全离线,不支持两路以上输入场景全离线。

Mul

opset version:13

功能描述:计算两个输入element-wise的乘积。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

broadcast支持与Add一致。

是

B

input

float

数据

MeanVarianceNormalization

功能描述:计算mvn。

opset version:13

规格约束:仅支持4D输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

仅支持axes为(0,2,3)/(0,1,2,3)

是

MulReduceSum

功能描述:onnx自定义算子,输入为GridSampleXDec和Softmax,用于替换GridSampleXDec后的Gather、Unsqueeze、Mul、Reducesum、Reshape小算子,作为集合实现。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

第一路输入,来自GridSampleXDec

仅支持shape结构为5维, [n1, nx0, c, h, w],且n1*nx0*c需<4096;Hi3516CV610需满足n1*nx0*c<4000;

Hi3516CV610需满足,n1*nx0*c<4096且n1*nx0<2800, n1<=120, nx0<=40, 当c不是8的倍数且n1=1且h*w不等于1时,nx0*c<=3500.

否

Y

input

float

第二路输入,来自Softmax

仅支持shape结构为5维,

[n1, ny0, c, h, w],其中n1, c, h, w必须与X中对应轴一致,且n1*ny0*c需<4096;Hi3516CV610需满足,n1*ny0*c<4096且n1*ny0<2800, n1<=120, ny0<=40

index

attribute

int64

从Y (shape=[n1, ny0, c, h, w])中gather第index块的数据(shape=[n1, 1, c, h, w])。

0<=index<ny0

Neg

opset version: 13

功能描述:对输入数据,进行符号翻转。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

NMS

功能描述:RPN硬化层,对检测框进行非极大值抑制。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

0

input

float

数据

-

否

topK

attribute

uint32

最大输出框个数

支持,值域[1,10000]

否

nms_thresh

attribute

float

nms阈值

支持,值域[0,1)

PRelu

opset version: 9

功能描述:带参数的ReLU激活函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

  1. 当前仅支持数据X在线,Slope数据离线
  2. 以4D输入NCHW为例,Slope仅支持channel轴为1或C,即shape=[1, 1, 1, 1]或[1, C, 1, 1];若是2D NC场景,则Slope shape可为[1, 1]或[1, C]。

否

slope

input

float

负数部分斜率

Pow

opset version: 15

功能描述:计算f(x) = x^exponent。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

不支持广播,不支持多个指数

是

Y

input

float

指数

说明:

数据为张量时:width<=16384

PosEncode

功能描述:针对transformer网络,把一个词映射成一个向量。

opset version: 11

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

仅支持shape结构为4维,仅支持h=1,c=1或4

否

Constant

input

float

离线数据

仅支持shape结构为4维,仅支持h=1,w轴维度与data保持一致;且c_constant需为偶数且不能取0。

是

Pad

功能描述:对输入的数据进行填充。

opset version: 21

规格约束:当存在以下场景规格时,用CPU进行计算

  • 对N轴或者C轴进行填充时
  • 对H或W轴进行填充,填充的数量大于15或小于0时
  • Pad mode 为 reflect 模式时(Hi3519DV500无该规格约束)
  • 对任意轴进行删除时

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

mode

attribute

string

3种模式"constant"、"reflect"、"edge"

支持

是(pads,constant_value仅支持离线输入)

data

input

float

数据

pads

input

int64

指示每个轴的起始和结尾填充或删除的数量

constant_value

input

float

如果mode为"constant",填充的值,默认值为0

Reciprocal

opset version: 13

功能描述:对每个点求倒数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

ReduceL1/version<=17

opset version: 13

功能描述:对指定的轴计算l1_norm。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceL1/version18

opset version: 18

功能描述:对指定的轴计算l1_norm。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是(axes仅支持离线输入)

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

input

list of ints

reduce的轴

支持

noop_with_empty_axes

attribute

int

当没有设置axes的时候,如果该处为false,则对所有轴规约,否则返回原data

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceL2<=17

opset version: 13

功能描述:对指定的轴计算l2_norm。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096,Hi19DV500不支持图像分析引擎,走cpu模式

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceL2/version18

opset version: 18

功能描述:对指定的轴计算l2_norm。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是(axes仅支持离线输入)

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096,Hi19DV500不支持图像分析引擎,走cpu模式

axes

input

list of ints

reduce的轴

支持

noop_with_empty_axes

attribute

int

当没有设置axes的时候,如果该处为false,则对所有轴规约,否则返回原data

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceMax/version<=17

opset version: 13

功能描述:对指定的轴求最大值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)。

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceMax/version18

opset version: 18

功能描述:对指定的轴求最大值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是(axes仅支持离线输入)

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

input

list of ints

reduce的轴

支持

noop_with_empty_axes

attribute

int

当没有设置axes的时候,如果该处为false,则对所有轴规约,否则返回原data

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceMean/version<=17

opset version: 13

功能描述:对指定的轴计算求平均值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceMean/version18

opset version: 18

功能描述:对指定的轴计算求平均值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是(axes仅支持离线输入)

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

input

list of ints

reduce的轴

支持

noop_with_empty_axes

attribute

int

当没有设置axes的时候,如果该处为false,则对所有轴规约,否则返回原data

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceMin/version<=17

opset version: 13

功能描述:对指定的轴计算最小值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceMin/version18

opset version: 18

功能描述:对指定的轴计算最小值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是(axes仅支持离线输入)

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

input

list of ints

reduce的轴

支持

noop_with_empty_axes

attribute

int

当没有设置axes的时候,如果该处为false,则对所有轴规约,否则返回原data

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceSumSquare<=17

opset version: 13

功能描述:对指定的轴计算平方和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceSumSquare/version18

opset version: 18

功能描述:对指定的轴计算平方和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是(axes仅支持离线输入)

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

input

list of ints

reduce的轴

支持

noop_with_empty_axes

attribute

int

当没有设置axes的时候,如果该处为false,则对所有轴规约,否则返回原data

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceSum/version<=12

功能描述:对指定的轴求和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

ReduceSum/version13

功能描述:对指定的轴求和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

约束

data

input

float

数据

支持

是(axes仅支持离线输入)

走图像分析引擎需满足以下约束,其余走cpu模式

1、axes是除N轴(axis=0/-r)外的任意轴组合

2、输入数据维度=3或4,且第一维shape=1。

3、Hi3516CV610需满足data的shape在reduce轴不大于4096

axes

input

list of ints

reduce的轴

支持

noop_with_empty_axes

attribute

int

当没有设置axes的时候,如果该处为false,则对所有轴规约,否则返回原data

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

int

是否保留reduce的轴

支持,默认为1

Relu

opset version: 13

功能描述:ReLU激活函数。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

Reshape

功能描述:将输入的维度转换为指定维度。支持高维度输入。

opset version: 21

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

shape

input

int64

输出的具体形状

shape必须为离线

Resize

功能描述:将输入按指定mode进行缩放。

opset version: 13 11 10

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

coordinate_transformation_mode

attribute

string

坐标轴转换的方式

nearest模式支持配置为asymmetric;linear模式支持配置为half_pixel,pytorch_half_pixel,align_corners,asymmetric

否

cubic_coeff_a

attribute

float

cube模式下缩放参数

不支持配置

exclude_outside

attribute

int

是否包含张量之外的采样点

不支持配置

extrapolation_value

attribute

float

coordinate_transformation_mode为 "tf_crop_and_resize",输入数据超出范围时使用的值。

不支持配置

mode

attribute

string

插值模式

支持nearest,linear

linear模式,输入w不支持超过65535,输入w和h不支持为1

nearest_mode

attribute

string

插值模式配置为nearest时的取值方式

仅支持配置为floor

X

input

float

数据

支持

roi

input

float

roi区域

不支持配置

scales

input

float

沿各个轴的缩放倍数

必须且只能离线配置scales或者sizes中的一个。nearest模式,scales仅支持(1,1,2,2)、(1,1,4,4)和(1,1,8,8),sizes只支持hw扩大2倍、4倍和8倍。

sizes

input

int64

输出的shape

RNN

opset version: 14

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

输入是否可选

约束

activation_alpha

attribute

float

激活函数的缩放值

不支持配置

不涉及

不涉及

支持两种输出格式:

1. 输出仅有1个参数:Y

2. 输出全部参数:Y,Y_h

输入和输出形状的最后一维,Hi3516CV610最大支持1872。

activation_beta

attribute

float

激活函数的缩放值

不支持配置

activations

attribute

string

输入、输出、遗忘、cell和hidden使用的激活函数

不支持配置

clip

attribute

float

激活函数前对数据clip的阈值

支持

direction

attribute

string

指定RNN是前向/反向/双向

支持

hidden_size

attribute

int

隐藏层细胞单元个数

支持

layout

attribute

int

数据排布格式

不支持配置,默认为0

X

input

float

输入句子序列

支持

否

必填

W

input

float

门权重

支持

仅为离线

R

input

float

循环权重

支持

B

input

float

门偏置

支持

可选

sequence_lens

input

int

句子长度

支持

是

initial_h

input

float

hidden初始值

支持

Y

output

float

所有帧hidden输出的集合

支持

不涉及

必填

Y_h

output

float

最后一帧hidden输出

支持

可选

RoiAlign

功能描述:对候选Roi区域进行align操作

opset version: 10

参数名

参数/输入

数据类型

参数含义

规格(Hi3519DV500)

规格(Hi3516CV610)

是否支持离线data输入

X

input

float

输入数据

支持

支持

否

rois

input

float

roi候选框数据

支持(候选框需设置为整数,且需要在X的有效区域上)

同Hi3519DV500

否

batch_indices

input

int64

操作的输入数据batch索引

仅支持为0,配置其它值不生效

同Hi3519DV500

否

coordinate_transformation_mode

attribute

string

坐标变换方式

不支持

不支持

-

mode

attribute

string

池化方式,avg或max

支持

支持

-

output_height

attribute

int

输出h大小

支持

支持

-

output_width

attribute

int

输出w大小

支持

支持

-

sampling_ratio

attribute

int

采样率

支持

支持,采样总数不大于36。采样总数=高的采样率*宽的采样率。当值为零时,采样总数=ceil(inH/outH)*ceil(inW/outW)

-

spatial_scale

attribute

float

坐标转换参数

支持

支持

-

Round

功能描述:对输入X求Round得到Y。

Hi3519DV500为CPU算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

Roll

功能描述:对窗口内的数据做滚动偏移。

参数名

参数/输入

数据类型

参数含义

公共规格

是否支持离线输入

data

input

float

数据

仅支持4维,W需小于65536。

否

offset_x

input

int

X方向窗口偏移

标量,支持正值或负值,范围为(-W, W),W为data输入的width

是(仅支持离线输入)

offset_y

input

int

Y方向窗口偏移

标量,支持正值或负值,范围为(-H, H),H为data输入的height

是(仅支持离线输入)

Scan

opset version: 11

功能描述:做需要有时序的计算。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

body

attribute

graph

子图

当前不支持scan_input_directions和scan_output_directions为1的场景

是

num_scan_inputs

attribute

int64

需要迭代的tensor个数

scan_input_axes

attribute

int64

需要迭代的tensor切块轴

scan_input_directions

attribute

int64

需要迭代的tensor切块后输入方向

scan_output_axes

attribute

int64

需要迭代的tensor输出拼接轴

scan_output_directions

attribute

int64

需要迭代的tensor拼接方向

initial_state_and_scan_inputs

input

variadic

数据

Scatter/ScatterElements

功能描述:替换输入数据指定位置的值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其余约束

axis

attribute

int32

替换的轴面

支持

是

  1. 走图像分析引擎需同时满足以下规格要求,其余走cpu:
    1. indices在线,updates离线,data可在线可离线
    2. data为非高维度shape。高维度shape定义:dim>5或dim=4且shape[0]>1。
  2. indices受量化影响,可能数据范围会超出[0, s-1]的有效区间,此时会将indices截断到区间内,即:indices<0,则indices=0;indices>s-1,则indices=s-1。

data

input

float

数据

支持

indices

input

int32/int64

要替换数据下标

支持。

indices仅能支持数据范围:[0, s-1], s是data的第axis个维度。

updates

input

float

要替换的值

支持

ScatterND

功能描述:替换输入数据指定位置的值。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

data

input

float

数据

支持

是

Hi3519DV500:满足以下规格使用图像分析引擎实现:

  1. data 的各维≤32768且C维≤4096
  2. data 输入不被其他算子共享消费
  3. 离线 indices 值在 [-32768, 32767] 范围内
  4. updates 为在线输入

Hi3516CV610:使用CPU实现

indices

input

int64

要替换的数据切片在输出中的坐标值

支持

updates

input

float

要替换的值

支持

Selu

opset version: 13

功能描述:Selu激活函数。默认参数下进图像分析引擎,即alpha1.67326 && gamma1.0507。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

alpha

attribute

float

系数

支持

是

gamma

attribute

float

系数

支持

X

input

float

数据

支持

Shape

功能描述:返回上层tensor的shape。

规格约束:不支持将shape层作为网络的最后一层。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

node

数据

支持

是

Sigmoid

opset version: 13

功能描述:计算sigmoid。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

Sign

opset version: 13

功能描述:计算输入tensor的元素符号。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

Sin

opset version: 7

功能描述:计算sine。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

Sinh

功能描述:逐点求hyperbolic sine。

Hi3516CV610为CPU算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

Size

opset version: 13

功能描述:返回上层数据个数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

node

数据

支持

是

Slice

opset version: 13

功能描述:将输入数据按照指定维度切割成多个数据。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

一个

是。starts、ends、axes、steps必须为离线数据。

axes

attribute/input

1-D 数据

表示切割的维度

[-r,r-1],r=rank(input)

steps = 1时,高维度仅支持配置axes取值为[-1,-2] U [r-2, r-1]。

steps = 2时,高维度仅支持配置axes取值为[-r] U [-1, -2] U [r-2, r-1] U [0]。

starts

attribute/input

1-D 数据

表示切割的起始元素

[-r,r-1],r=rank(input)

ends

attribute/input

1-D 数据

表示切割的终结元素

[-r,r-1],r=rank(input),必须大于starts

steps

input

1-D 数据

表示切割的步长

缺省为1。

仅opset>=10时存在steps属性。opset <10时steps恒为1。

  • Hi3516CV610:当steps不为1,且axes=-1时,不支持axes对应的轴超过4095。
  • Hi3519DV500:当steps不为1,且axes=-1时,不支持axes对应的轴超过65535。
Softplus

opset version: 1

功能描述:计算ln(exp(x) + 1)。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

Softsign

opset version: 1

功能描述:计算(x/(1+|x|))。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

SpaceToDepth

opset version: 11

功能描述:重新排列空间数据块,将space数据转移到进入depth。

注意:输出Channel最大仅支持40000(Hi3519DV500)/4096(Hi3516CV610)。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

Hi3519DV500

Hi3516CV610

input

input

float

数据

  1. 仅支持4D shape NCHW,且N=1。
  2. H/W必须是blocksize的整数倍。

是

blocksize

attribute

int

取空间的大小

支持[1, 255]

支持[2, 16]

Split

opset version: 13

功能描述:在指定数据轴对数据进行拆分。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

axis

attribute

int64

指定拆分轴

支持,高维度场景下axis约束与 Slice相同。

否

input

input

float

数据

支持

split

input

int64

拆分的长度

支持

Squeeze

功能描述:删除指定下标轴的1。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

axes

input

int64

删除轴的下标

支持

Sub

opset version: 13

功能描述:tensor对应轴作减法。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

broadcast支持与Add一致。

是

B

input

float

数据

Sum

opset version: 13

功能描述:对所有的tensor对应值求和。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data_0

input

variadic

数据

broadcast支持与Add一致。

额外约束(至少两路输入):

(1)多路输入中,在线输入仅支持一路广播

(2)多路输入中,离线输入可存在多路广播

是。

支持两路输入全离线,不支持两路以上输入场景全离线。

Softmax

功能描述:

  • Opset version 11:计算指定轴往后所有轴的softmax。
  • Opset version 13:计算指定轴的softmax。
  • Hi3516CV610需满足: 运算轴为axisC时,5*16*1024*8>=input_c*dataBit/2;运算轴为axisH/axisW时,5*16*1024*8>=4*input_axis*dataBit

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

axis

attribute

int32

指定softmax的轴

[-r,r-1],r=rank(input),

若r为4,axis不为-4和0

若r为5,axis不为-5,-4,0和1

是

input

input

float

数据

支持

Sort

功能描述:RPN硬化层,对检测框进行排序

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

0

input

float

数据

支持

否

topK

attribute

uint32_t

最大输出框个数

支持,值域[1,10000]

否

multi_sort

attribute

bool

是否使用多类sort

支持

class_num

attribute

uint32_t

分类个数

支持,值域[1,1000]

SortVector

说明:

Hi3519DV500不支持。

功能描述:对输入向量进行排序操作。

规格约束:输入shape只支持1*1*1*w格式。当后接算子的类型为SortVector或FilterVector时,不支持is_output_idx配1。输入shapeW取值范围为[1,4095]。

参数名

数据类型

参数含义

规格

top_k

uint32

默认为inputW,表示输出的值最大个数,配置后outputW=min(top_k,inputW)。

支持配置

is_output_idx

bool

默认为false,值为false时表示输出为向量值,为true时表示输出为向量索引。

支持配置

is_report_vector_num

bool

默认为true,值为true时表示当算子为最后一层时,会后接两个report层,同时输出结果向量以及向量长度;值为false时后接一个report层,只输出结果向量。

支持配置

Tanh

opset version: 13

功能描述:求tanh。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

ThresholdedRelu

opset version: 10

功能描述:作为激活函数实现数据变换: y=x for x > alpha, y=0 otherwise。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

alpha

attribute

float

数据分段阈值

支持,默认为1.0

不涉及

X

input

float

数据

支持

是

Tile

功能描述:对每一个轴的数据进行重复叠加,支持高维度输入(shape>4)。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持,不支持N大于1。

是

repeats

input

int64

指定轴重复几遍

必须为离线,size为InputDimNum的一维数组,且元素大于0。最高轴到C轴只允许有一个轴的重复次数不为1,且最高轴到该轴之前的轴的值必须为1,HW轴不受限制。如[N, 1, H, W]->[N,2,H,W],N必须等于1,否则不支持。

Transpose

功能描述:数据转置。支持高维度输入,输入数据是4维或高维度场景下,高维度轴长度乘积大于等于1024时,走cpu模式。例如输入4维数据NCHW,当N大于等于1024时走cpu模式;输入数据5维shape[n1, n0, c, h, w],当n1*n0大于等于1024时走cpu模式。

opset version: 21

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

perm

attribute

int32

整型数组,转置后轴的排列值

支持,shape大小与输入shape一致

否

TopK

opset version: 11

功能描述:沿指定轴检索最大或最小的K个元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

axis

attribute

int

排序的维度。

支持。范围为[-r,r-1],r=rank(input)

Hi3516CV610使用CPU实现,Hi3519DV500的支持如下:

largest为false或者sorted为false的场景使用CPU实现,其他场景如果满足下面任一一条使用图像引擎实现:

1. 输入4维以下

2. 输入4维且最高维为1,axis的值不为0或者-4

3. 其他维度数,axis为最后两个轴的其中之一

不满足的场景使用CPU实现

是

largest

attribute

int

决定是否返回最大或最小的元素

支持

sorted

attribute

int

无论sorted为true或false输出都是排序后的

支持

X

input

float

数据

支持

K

input

int64

最大或最小的元素个数。

支持。

须大于0且小于等于数据输入X的axis轴对应的数据量

Upsample

功能描述:上采样。

参数名

参数/输入

数据类型

参数含义

规格

其他约束

data

input

float

数据

仅支持NCHW

不支持离线data输入

mode

attribute

string

默认为nearest,表示插值模式

仅支持mode为nearest

scale等同于stride

scale

input

uint32

缩放倍数,默认为2

仅支持离线输入,仅支持NCHW,且要求N和C轴必须为1,H和W轴仅支持设置为2,不支持单轴上采样。

Unsqueeze

功能描述:在指定下标轴插入1。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

axes

input

int32

插入轴的下标

支持

WinPartition

功能描述:WinPartition主要用来对张量划分窗口,通过指定窗口大小,将原本的张量从NCHW, 划分成 num_windows,C,1,window_size*window_size,其中num_windows=H*W/ (window_size*window_size),即窗口的个数。

规格约束:输入C在Hi3516CV610上必须为8的整数倍,在Hi3519DV500中必须为4(当输出为fp16时)或8(当输出为s8时)的整数倍;WinPartition和WinPartitionReverse配对出现时不支持batch。

参数名

参数/输入

数据类型

参数含义

公共规格

是否支持离线data输入

data

input

float

数据

仅支持shape结构为4维,仅支持输入N维度为1

否

windowSize

input

int

窗口的大小

windowSize不能为0,必须能被输入W维度和输入H维度整除

是

WinPartitionReverse

功能描述:WinPartitionReverse为WinPartition的逆过程,将shape还原成WinPartition输入shape。

规格约束:输入C在Hi3516CV610上必须为8的整数倍,在Hi3519DV500中必须为4(当compile_mode=1/5/6时)或8(当compile_mode=0时)的整数倍;WinPartition和WinPartitionReverse配对出现时不支持batch,WinPartitionReverse单独出现支持batch。

参数名

参数/输入

数据类型

参数含义

公共规格

是否支持离线输入

data

input

float

数据

仅支持shape结构为4维,仅支持inputWidth等于window_size * window_size

否

windowSize

input

int

窗口的大小

windowSize不能为0,必须能被origHSize和origWSize整除

是

origHSize

input

int

原始Height大小

须大于0

是

origWSize

input

int

原始Width大小

须大于0

是

CPU

Acosh

opset version: 9

功能描述:逐点求hyperbolic arccosine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

And

功能描述:对输入A、B进行elementwise逻辑与计算得到输出C。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

bool

数据

输入A、B皆支持Numpy-style广播

是

B

input

bool

数据

说明:当And算子作为首层,使用--input_type设置数据类型时,需要设置成FP32。

Asinh

opset version: 9

功能描述:逐点求hyperbolic arcsine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

Atanh

opset version: 9

功能描述:逐点求hyperbolic arctangent。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

BitShift

功能描述:对输入的元素的二进制表示进行移位操作。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

direction

attribute

string

决定移位的方向

支持

是

X

input

int

数据

y

input

int

移动的数量

CumSum

功能描述:计算输入元素沿给定轴的累加和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

exclusive

attribute

int

指示是否包含顶部元素的独占和

支持

是

当x为离线输入时,axis同样必须是离线输入

reverse

attribute

int

指示求和的元素方向

x

input

float

数据

axis

input

int32, int64

指示求和的维度

Cmp

函数功能:

配置比较类型,目前支持"COND_GT"、"COND_EQ"、"COND_LT"、"COND_NE"、"COND_GE"、"COND_LE"六种。

参数说明:

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

compType

input

float

数据

比较类型:

COND_GT 大于;

COND_EQ 等于;

COND_LT 小于;

COND_NE 不相等;

COND_GE 大于等于;

COND_LE 小于等于。

默认 COND_GT 大于

是

Equal

功能描述:逐点计算A中元素是否等于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持Numpy-style广播

是

B

input

float

数据

支持Numpy-style广播

Det

功能描述:求行列式。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

需2D或以上

是

Div

功能描述:对输入A、B进行除法运算得到输出C。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

输入A、B皆支持Numpy-style广播

是

B

input

float

数据

Expand

功能描述:将输入tensor广播成输出tensor。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

是

shape

input

int64

指示输出的形状

必须为离线

GatherElements

功能描述:是一种索引操作,通过在由indices的元素确定的索引位置处对输入数据张量进行索引来生成其输出。它的输出形状与索引的形状相同。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

indices

input

int32/int64

需要提取的indices

[-s,s-1],s=shape(axis)

axis

attribute

int32

gather的轴

[-r,r-1],r=rank(input)

GlobalLpPool

功能描述:实现对同一channel的所有元素Lp norm。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

p

attribute

int

Lp norm的p值

支持

是

-

X

input

float

数据

Greater

功能描述:逐点计算A中元素是否大于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持Numpy-style广播

是

B

input

float

数据

支持Numpy-style广播

GreaterOrEqual

功能描述:逐点计算A中元素是否大于等于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持Numpy-style广播

是

B

input

float

数据

支持Numpy-style广播

GridSample

功能描述:基于网格坐标位置的插值,对输入x进行采样。该算子仅支持Hi3519DV500芯片。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

x

input

float

数据

仅支持4D

否

grid

input

float

坐标

shape为[N,H,W,2],

数值范围大部分值应在 [-1, 1] 范围内。如果网格的值超出 [-1, 1] 范围,则相应的输出将按照 padding_mode 的定义进行处理。

否

align_corners

attribute

int32

角点像素是否中心对齐

取值0或1,默认为0。

是

mode

attribute

string

插值模式

取值'linear'、'nearest'或'cubic',分别表示线性插值、临近插值、三次插值,默认为'linear'。

是

padding_mode

attribute

string

补边填充方式

取值'zeros'、'border'或'reflection',分别表示0值模式、边缘模式、镜像模式,默认为'zeros'。

是

HardMax

功能描述:如果沿着axis,输入的点是最大的则为1,否则为0。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

axis

attribute

int32

轴

[-r,r-1],r=rank(input)

Less

功能描述:逐点计算A中元素是否小于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持Numpy-style广播

是

B

input

float

数据

支持Numpy-style广播

LessOrEqual

功能描述:逐点计算A中元素是否小于等于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持Numpy-style广播

是

B

input

float

数据

支持Numpy-style广播

LpNormalization

功能描述:对指定轴进行lp_norm计算。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

axis

attribute

int32

指定进行正则化的轴

[-r,r-1],r=rank(input)

p

attribute

float

归一化的顺序

支持

MaxUnPool

功能描述:MaxPool的部分逆操作。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

kernel_shape

attribute

int

沿着每轴的kernel大小

支持

是

pads

attribute

int

每个轴的开始和结束位置

支持

strides

attribute

int

每个轴的stride

支持

X

input

float

数据

支持

I

input

int64

对应X中元素的索引

支持

output_shape

input(optional)

int64

输出形状

必须为离线,可不配置

Mod

功能描述:对输入数据的元素进行取余。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

fmod

attribute

bool

指示进行fmod还是integer mod

支持

输入A、B皆支持Numpy-style广播

是

A

input

float

数据

B

input

float

数据

NonMaxSuppression

功能描述:过滤掉与其它框有高的IOU的框。其输出shape 随在线数据变化,模型转换时按最大shape分配内存和推理。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

center_point_box

attribute

int

框数据的格式

支持

是

boxes

input

float

数据

支持

scores

input

float

数据

支持

max_output_boxes_per_class

input

float

每类每batch的最大框数

optional

iou_threshold

input

float

框与框的IOU(intersection-over-union)阈值

optional

score_threshold

input

float

决定是否基于分数去除框

optional

NonZero

功能描述:返回非零元素的索引。其输出shape 随在线数据变化,模型转换时按最大shape分配内存和推理。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

Not

功能描述:对输入X进行逻辑非运算得到输出Y。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

bool

数据

支持

是

说明:当Not算子作为首层,使用--input_type设置数据类型时,需要设置成Fp32。

OneHot

功能描述:求onehot编码。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

indices

input

float

indices指示哪些位置为on_value,输入必须为整数坐标对应的浮点表示,如0.0, 1.0等。

[-depth, depth-1]

是。depth必须为离线输入

depth

input

float

onehot编码的类数

支持

values

input

float

共有两个值,一个on_value,另一个为off_value

[off_value, on_value]

axis

attribute

int32

指定onehot编码的轴

[-r-1, r],r=rank(input)

Or

功能描述:对输入A、B进行elementwise逻辑或计算得到输出C。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

bool

数据

输入A、B皆支持Numpy-style广播

是

B

input

bool

数据

说明:当Or算子作为首层,使用--input_type设置数据类型时,需要设置成Fp32。

Range

功能描述:根据起始值,结束值,步长信息计算输出数列。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

start

input

float

数列起始值

支持

是。仅支持所有输入为离线数据。

limit

input

float

数列结束值

支持

delta

input

float

数列步长

支持

Resize

功能描述:将输入按指定mode进行缩放。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

coordinate_transformation_mode

attribute

string

坐标轴转换的方式

除tf_crop_and_resize外支持配置

是

cubic_coeff_a

attribute

float

cube模式下缩放参数

不支持配置

exclude_outside

attribute

int

是否包含张量之外的采样点

不支持配置

extrapolation_value

attribute

float

coordinate_transformation_mode为 "tf_crop_and_resize",输入数据超出范围时使用的值。

支持配置

mode

attribute

string

插值模式

支持nearest,linear

nearest_mode

attribute

string

插值模式配置为nearest时的取值方式

支持

X

input

float

数据

仅支持4D

roi

input

float

roi区域

不支持配置

scales

input

float

沿各个轴的缩放倍数

必须且只能配置scales或者sizes中的一个

sizes

input

int64

输出的shape

支持

ReduceL2

opset version: 13

功能描述:对指定的轴计算l2_norm。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceLogSum

opset version: 13

功能描述:对指定的轴计算log_sum。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceLogSumExp

opset version: 13

功能描述:对指定的轴计算log_sum_exp。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceProd

opset version: 13

功能描述:对指定的轴计算乘积。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

是

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

bool

是否保留reduce的轴

支持

Selu

opset version: 13

功能描述:Selu激活函数。非默认参数下进CPU模式,即alpha!=1.67326 || gamma != 1.0507。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

alpha

attribute

float

系数

支持

是

gamma

attribute

float

系数

支持

X

input

float

数据

支持

Shrink

功能描述:Shrink激活函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

bias

attribute

float

给输出数据的偏转值

支持

是

lambd

attribute

float

Shrink公式的lambd值

支持

input

input

float

数据

支持

Sqrt

opset version: 13

功能描述:对输入数据求平方根。支持高维度输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

是

Transpose

功能描述:和numpy的transpose一样转置输入tensor。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

perm

attribute

int

permute轴

支持

是

data

input

float

数据

Xor

功能描述:对输入A、B进行elementwise逻辑异或计算得到输出C。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

bool

数据

输入A、B皆支持Numpy-style广播

是

B

input

bool

数据

Where

功能描述:根据condition确定输出是X还是Y对应的元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

condition

input

bool

指示是输出元素是到X还是Y对应的元素

condition、X、Y都支持广播

是

X

input

float

condition为True时选定的值

Y

input

float

condition为False时选定的值

Gather

功能描述:将指定轴方向指定indices的数据聚合在一起。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线输入

data

input

float

数据

支持tensor输入。

是

indices

input

int32/int64

需要提取的indices

支持scalar/tensor输入。

  • indices为在线输入时:[0,s-1],s=shape(axis)
  • indices为离线输入时:[-s,s-1],s=shape(axis)

是

axis

attribute

int32

gather的轴

[-r,r-1],r=rank(input)

不涉及

Roi/Psroi Pooling算子输入格式

标准Caffe/Onnx的Roi/Psroi Pooling算子都有2个输入,其中第1个输入是维度为N×C×H×W的输入数据,第2个输入是维度为num_rois×5的ROI区域。本小节描述当Roi/Psroi Pooling算子作为网络首层时,ATC工具和板端需要的第2个输入(板端还需要第3个输入)的数据格式。

ATC工具的输入格式

ATC工具支持两种ROI输入格式。

  • 与标准Caffe/Onnx的输入格式保持一致;
  • 与硬化DecBBox层的输出格式保持一致,维度为1×1×H×num_rois,H >= 4。Prototxt的写法如图1所示。

图 1 两种输入格式的prototxt写法

对应两种不同的prototxt写法,相应的量化数据输入格式如图2所示。对于格式1),N维度为num_rois,所以每个ROI区域是一行。对于格式2),N维度为1,所以H×W个点在同一行;需要注意:当H > 4时,需保证表示ROI区域的坐标排在H0-H3,并且顺序为x0 -> y0 -> x1 -> y1。

图 2 两种输入格式的量化数据排布

板端的输入格式

当Roi/Psroi Pooling算子作为网络首层时,最终生成的网络结构如图1所示。

  • 第1个data层对应feature_map输入,
  • 第2个data层对应ROI区域输入,
  • 第3个data层的输入是实际有效ROI的个数,即ActualRoiNum。

图 1 首层Roi/Psroi Pooling网络结构图

板端只支持1种ROI区域(第2个data层)输入格式,类似ATC工具的第2种输入格式。ATC工具的输入配置为格式1)或2),不影响最终生成的om支持的输入格式。板端需要的ROI输入维度为1×1×H×MaxRoiFrameCnt,其中H等于prototxt中配置的H,MaxRoiFrameCnt等于cfg文件中指定的max_roi_frame_cnt。当ActualRoiNum < MaxRoiFrameCnt,每一行需要补齐到MaxRoiFrameCnt个点。Roi/Psroi Pooling算子会按照min(MaxRoiFrameCnt, ActualRoiNum)计算。

Recurrent(LSTM/GRU/RNN)算子板端输入输出格式

标准Caffe的Recurrent(LSTM/GRU/RNN)算子都有至少2个输入,其中第1个输入是维度为t×n×d的输入数据,第2个输入是维度为t×n的continuous数据。本小节描述当Recurrent网络包含诸如Conv等4D规格的算子且batch_num配置为大于1的值时,板端的输入输出数据格式。

板端的输入格式

假设Recurrent网络片段结构如图1所示,Reshape层和Permute层负责将Conv输出的4D数据转换为3D数据并作为LSTM层的第一个输入,Data(Preprocess)层对应LSTM层的第二个continuous输入。当Prototxt首层N轴为1,即维度为1×C×H×W时,LSTM层的帧数轴t为18,句子轴n为1。

图 1 Recurrent网络片段结构图

若batch_num配置为大于1的值,针对LSTM层的continuous输入(Data层),板端需准备指定图片张数对应的数据量,并且数据排布等同于标准Caffe下,Prototxt首层N轴为batch_num时continuous的数据排布。以图1为例,板端准备的continuous数据应符合标准Caffe下continuous的shape为[18, batch_num]所对应的数据排布。

板端的输出格式

当batch_num配置为大于1的值时,板端的输出数据将按照图片顺序依次排列,即先排完第一张图片对应的全量数据,再依次排列后续各图片对应的全量数据。该排布可能和Caffe标准框架下Prototxt首层N轴为batch_num所产生的数据排布不一致。

仍以图1为例,LSTM层第一个输出shape为[18, 1, 128],板端在该层得到的输出符合shape为[batch_num, 18, 1, 128]对应的数据排布, 即依次排列每张图片对应的计算数据。在标准Caffe下,若Prototxt首层N轴为batch_num,LSTM层第一个输出符合shape为[18, batch_num, 128]对应的数据排布,即不同图片对应的数据间存在交叉排列。

性能优化推荐设置

网络连接

兄弟节点的数据类型

当多个兄弟节点的输入数据类型(DDR)与计算数据类型(NPU)完全一致时,性能最好。

如果使用ATC生成的量化参数,兄弟节点的上述几个数据类型大部分情况是一致的;如果需要通过AMCT调整数据类型,则需自行保证一致性。

如图1所示,net1、net2是推荐设置,net3不推荐;图中的S8_FP16_S8,分别表示:输入数据类型(DDR)_ 计算数据类型(NPU)_ 输出数据类型(DDR)。

图 1 兄弟节点的数据类型设置

兄弟节点的补边

当兄弟节点的kernel_h相等,建议上补边也相等;如图1所示,左图是推荐设置。

图 1 兄弟节点的补边设置

只有上补边有影响,左、右、下补边没有影响。

当兄弟节点的kernel_h不相等,则上补边是否相等没有影响。

Conv级联Pool

当Conv是单输出节点,并且Pool同时满足kernel=2*2,stride=2*2,pad=0时,性能最好。

图 1 Conv级联Pool推荐设置

算子属性

Conv/Pool/DepthwiseConv

属性名称

推荐设置

output_w

output_w % 16 = 0

output_h

> 1

output_c

output_c % 16 = 0

input_c

input_c % (64 / data_bit_num) = 0,且 input_c <= 8192

kernel

1*1; 2*2; 3*3

针对Convolution,当(input_c < 32)时,不推荐设置kernel为1*1

dilation

1*1

stride

Hi3519DV500:1*1,2*2

Hi3516CV610:1*1, 不推荐2*2

pad

pad_up < kernel_h

pad_down < kernel_h

在可以选择上补边或者下补边时,推荐设置上补边

group

针对Convolution,每个group都可以视作一个Convolution层,则当每个group的参数都满足上述推荐设置时,性能最好。

weight_param_size

< 1MB

说明:

  • data_bit_num 表示计算数据位宽,当计算数据类型为U4/S4时,data_bit_num = 4;当计算数据类型为U8/S8时,data_bit_num = 8;当计算数据类型为U16/S16时,data_bit_num = 16。
  • weight_bit_num表示权重位宽,当权重类型为S4时,weight_bit_num=4;当权重类型为S8时,weight_bit_num=8。
  • output_w / output_c / input_c 不满足对齐要求时,会浪费补齐到对应倍数的计算量。
  • weight_param_size 表示量化后权重的总大小,以 group=1 的Convolution为例,weight_param_size = output_c * input_c * kernel_h * kernel_w * weight_bit_num / 8。

Deconv

属性名称

推荐设置

output_w

output_w % 16 = 0

output_h

> 1

output_c

output_c % 16 = 0

input_c

input_c % (64 / data_bit_num) = 0

32 <= input_c <= 8192

kernel

1*1; 2*2; 3*3

针对Deconvolution,当(input_c < 32)时,不推荐设置kernel为1*1

dilation

1*1

stride

1*1; 2*2

stride_w <= kernel_w

stride_h <= kernel_h

pad

pad_up > (kernel_h - stride_h - 1)

pad_down > (kernel_h - stride_h - 1)

在可以选择上补边或者下补边时,推荐设置上补边

weight_param_size

< 1MB

输入输出shape

建议使用NCHW格式来描述算子的输入输出数据排布。

变形类算子

算子

推荐设置

Concat

Slice

输入输出均为NCHW格式,并且在C轴拼接或者分割时,效率最高

Reshape

output_w = input_w时,效率最高

双目运算类算子

包括:Caffe框架中的Eltwise算子,Pytorch框架中的Add / Sub / Mul 等算子。

建议使用加、减、乘、取Max 的算子。