前言

概述

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

产品版本

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

产品名称

产品版本

SS928

V100

SS927

V100

读者对象

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

  • 技术支持工程师

  • 软件开发工程师

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

  • 熟悉Linux基本命令。

  • 对机器学习、图像分析方法有一定的了解。

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

修订记录

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

文档版本

发布日期

修改说明

00B02

2025-12-25

第2次版本发布

图像分析引擎小节新增Scatter/ScatterElements,Flatten、Where、ScatterND涉及修改

00B01

2025-09-15

第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工具转换的模型,在低版本环境上使用可能会出现不兼容问题,建议使用匹配的版本重新进行模型转换。

开源框架的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框架网络模型进行扩展,降低开发者开发自定义算子/开发后处理代码的工作量,详细扩展方法请参见检测网硬化加速prototxt示例。

开源框架的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:板端运行模型时图像分析引擎算子需要的临时缓存。

      • aacpu_buf_size:板端运行模型时CPU算子需要的缓存。

      • dump_buf_size: 板端运行模型时, dump算子数据时需要的缓存。

      • model_param_size:om模型的参数大小。

      • atc_version:转换模型时用的ATC版本号。

      • batch_num:支持的动态batch数,见命令行参数--batch_num。

    • 算子信息包括但不限于:

      • name: 算子名。

      • type: 算子类型。

      • device_type:算子类型是CPU或图像分析引擎。

      • input_desc:算子输入信息。

      • output_desc:算子输出信息。

      • data_flow:算子输入、计算、输出的数据类型。

参数说明

概览

总体约束

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

  • 如果要将Faster RCNN等网络模型转成适配图像分析引擎的离线模型,则务必参见定制网络修改(Caffe)先修改prototxt模型文件。

  • 支持原始框架类型为Caffe、Onnx的模型转换,输入数据类型为FP32、FP16、INT16、UINT16、INT8、UINT8。

  • 当原始框架类型为Caffe时,模型文件(.prototxt)和权重文件(.caffemodel)的层名、层类型必须保持名称一致(包括大小写)。

  • 不支持动态shape的输入,例如:NCHW输入为[?,3,?,?]多个维度可任意指定数值。模型转换时需指定固定数值。

  • 输入数据最大支持四维,转维算子(reshape等)不能输出五维。

  • 模型中的所有层算子除const算子外,输入和输出需要满足每个维度不为零。

  • 只支持算子规格说明中的算子,并需满足算子限制条件。不支持的算子需用户在板端使用CPU实现,把网络切分编译多个om,然后调用板端ACL API串通网络。

  • 当模型输入是4维或2维,且第0维>1时,ATC识别第0维为batch,为节省work buffer,把第0维改为1。

参数配置方式

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

功能说明:自定义算子库文件路径与文件名。如果没有配置--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。

关联参数:无

参数取值:

  • 参数值:如果是开源框架的网络模型:存放转换后的离线模型的路径以及文件名。

  • 参数值格式:路径和文件名:支持大小写字母(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. 图像预处理当前仅支持色域转换、通道数据交换、减均值、乘系数,按顺序执行。

  2. 请按原始模型的图像预处理、板端运行时输入的数据格式配置。

  3. 模板中参数取值都为默认值,实际使用时,如果配置文件中某些参数未配置,则模型转换时自动设置成该模板中相应参数的默认值。

  4. input_format属性为必选属性,其余属性均为可选配置,如果未配置,则模型转换时自动设置成该模板中相应参数的默认值。

  5. 模型转换时开启或没有AAPP,在进行推理业务时,输入图片数据都要求为NCHW排布。

  6. 若图像输入为YUV400,要求输入channel为1;若图像输入为YUV420SP、YVU420SP、YUV422SP、YVU422SP、BGR_PLANAR、RGB_PLANAR、RGB_PACKAGE、BGR_PACKAGE,要求输入channel为3;其他输入格式要求输入channel为4。

  7. 图像预处理中的色域转换、通道数据交换根据input_format和model_format使能,不支持ax_swap_switch和input_bias等参数配置使能。

# 图像预处理的配置以aapp_op开始,标识这是AAPP算子的配置,所有输入的配置都在aapp_op里描述。 
aapp_op {
# related_input_rank参数为可选,标识对模型的第几个输入做图像预处理,从0开始,默认为0。例如模型有两个输入,需要对第2个输入做图像预处理,则配置related_input_rank为1。
# 类型: 整型
# 配置范围 >= 0
related_input_rank: 0
# 板端运行时输入的图像格式,必选
# 类型: enum
# 取值范围: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
input_format : BGR_PLANAR
# 原始模型训练时的图像格式(通道数据顺序),可选
# 类型: enum
# 取值范围:RGB、BGR、ARGB、ABGR、RGBA、BGRA、XRGB、XBGR、RGBX、BGRX、RGGB、GRBG、GBRG、BGGR
# 图像格式为灰度图(GRAY)时,不需配置。
model_format : BGR
# 减均值、乘系数设置
# 注意:均值和系数的通道顺序为按model_format做完通道数据交换后的顺序。
# 计算规则如下:
# pixel_out_chx(i) = [pixel_in_chx(i) – mean_chn_i] * var_reci_chn
# 每个通道的均值,可选
# 类型:float32
# 取值范围:[-65504.0, 65504.0]
mean_chn_0 :0
mean_chn_1 :0
mean_chn_2 :0
mean_chn_3 :0
# 每个通道的系数,可选
# 类型: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
}

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

aapp_op { 
#第一个输入
related_input_rank:0 
    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
 }

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

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

依赖约束:无

--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必须是转换前的网络模型中的节点名称。

  • 参数值约束:

    设置为固定取值,例如,取值为“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"
    

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

--out_nodes

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

关联参数:无

参数取值:

  • 参数值:

    • 网络模型中的节点(node_name)名称。

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

  • 参数值约束:

    • 如果模型转换过程中该算子被离线计算融合掉,则该算子不能作为输出节点,配置不生效。

    • 没有实际运算而被优化删除的算子,不能作为输出节点,配置不生效。如Cast, Dropout算子。

    • 配置的输出节点的顺序与最后输出的顺序无关。

    • 即使最后一层的节点没有被指定,也一定会被输出。

    • 输出节点个数最大为32,即--out_nodes配置的节点加上默认输出的节点个数不能大于32。

推荐配置及收益:无

示例:

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

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

依赖约束:无

--output_reorder

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

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:转换后的模型输出节点与原始模式保持一致。

    • 1:转换后的模型输出节点重新排列,与原始模式可能不一致。

  • 参数默认值:1

示例:

--output_reorder=1

依赖约束:包含CPU算子网络时,不支持参数配置为0

量化选项

--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

依赖约束:无

--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匹配。

    --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
    

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

    示例:

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

    依赖约束:无

--compile_mode

功能说明:编译模式,量化后的数据bit位宽,不影响权重量化的bit位宽,权重固定是8bit量化。

关联参数:

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

参数取值:

  • 参数值

    • 0:数据和权重量化使用8bit。

    • 1:数据量化使用16bit,权重量化使用8bit。

    • 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

--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

依赖约束:无

RPN硬化层选项

--nms_threshold

功能说明:Nms层阈值,只用于ATC量化校准时的RPN硬化层,板端推理时不使用此值。

关联参数:无

参数取值:

  • 参数值:[0,1)

  • 参数默认值:0.75

推荐配置及收益:无

示例:

--nms_threshold=0.75

依赖约束:无

--low_score_threshold

功能说明:Filter层最低分数阈值,只用于ATC量化校准时的RPN硬化层,板端推理时不使用此值。

关联参数:无

参数取值:

  • 参数值:[0,1)

  • 参数默认值:0.08

推荐配置及收益:无

示例:

--low_score_threshold=0.08

依赖约束:无

--min_width

功能说明:Filter层最低宽度阈值。

关联参数:无

参数取值:

  • 参数值:[1,4096]

  • 参数默认值:1

推荐配置及收益:无

示例:

--min_width=1

依赖约束:无

--min_height

功能说明:Filter层最低高度阈值。

关联参数:无

参数取值:

  • 参数值: [1,4096]

  • 参数默认值:1

推荐配置及收益:无

示例:

--min_height=1

依赖约束:无

--image_width

功能说明:

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

关联参数:无

参数取值:

  • 参数值:[1,4096]

  • 参数默认值:0

推荐配置及收益:无

示例:

--image_width=224

依赖约束:无

--image_height

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

关联参数:无

参数取值:

  • 参数值:[1,4096]

  • 参数默认值:0

推荐配置及收益:无

示例:

--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/fasterrcnn/fasterrcnn_alexnet/caffe_model/anchors.txt和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

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

须知: ONNX框架下无需配置该参数。

示例:

--recurrent_max_total_t=1024

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

--recurrent_tmax

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

关联参数:无

参数取值:

  • 参数值:[1, 1024]

  • 参数默认值:1024

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

须知: ONNX框架下无需配置该参数。

示例:

--recurrent_tmax=1024

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

目标解决方案选项

--soc_version

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

关联参数:无

参数取值:

  • 参数值:SS626V100,SS928V100

  • 参数默认值:SS626V100

  • 用户根据具体板端解决方案,选择对应的取值。

推荐配置及收益:无

示例:

--soc_version=SS626V100

依赖约束:无

高级功能

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

功能配置选项

--max_roi_frame_cnt

功能说明:包含ROI/PSROI网络的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。

参数取值:

  • 参数值:[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

依赖约束:不支持dump的层包括:深度融合的层、RoiPooling的第三路代表框个数的输入层。

--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】进行推理。

依赖约束:模型本身不支持其他分辨率时,不支持动态分辨率。如模型包含FC层。

模型调优选项

--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张图片分配。

  • 参数默认值:网络包含CPU层时默认为1。其他情况默认为256。

  • 参数值约束:

    • 网络包含Recurrent层且Recurrent层连接非FC层时,网络包含ROIPooling/PSROIPooling层、RPN硬化层时,不支持batch,强制设置batch_num为1。

    • 网络包含CPU层时,板端ACL配置的dynamic batch size必须小于等于ATC转模型时配置的batch_num。

推荐配置及收益:对于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生效。

参数取值:

  • 参数值:配置文件路径以及文件名。

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

  • 参数值约束:如果用户想使用经过昇腾模型压缩工具量化后的模型,进行精度比对,则该参数必填。通过配置该文件,关闭融合功能。

推荐配置及收益:无

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

  • 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层融合到Conv层。

  1. 支持文件配置,配置文件样例如下,冒号前面为融合规则名,后面字段表示融合规则是否开启(文件名举例为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
    

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

    --fusion_switch_file=/home/test/fusion_switch.txt
    
  2. 支持直接配置融合规则,使用示例如下。

    --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

依赖约束:无

--force_to_cpu

功能说明:强制指定某些层为cpu层。

关联参数:无

参数取值:指定算子的层名。

参数值约束:只能配置支持cpu的算子。

推荐配置及收益:如fp16数据范围精度导致的精度问题下降,可将对应算子设置成cpu算子,提升精度。

示例:

指定gather1和gather2为cpu算子

--force_to_cpu=gather1;gather2

--softmax_optimize_enable

功能说明:softmax性能优化开关。

关联参数:无

参数取值:

  • 参数值:[0,1]

    • 0:关闭softmax性能优化。

    • 1:使能softmax性能优化,axis为-1时性能收益2-4倍。

      当(最大值 - 数据)> 9.010911时,存在精度损失风险。如输入数据[10, 0.1],预期输出[0.9999498, 0.0000501],实际输出[1.000000, 0.000000]。

  • 参数默认值:0

示例:

--softmax_optimize_enable=1

依赖约束:无

--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

依赖约束:无

调试选项

--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

依赖约束:无

仅文件方式支持的参数

以下参数仅支持以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

  • 参数值约束: 不能和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。

参数取值:

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

  • 参数值约束: 配置值需和image_type的类型匹配。多个输入时,共用一个配置。

推荐配置及收益:无

示例:

[RGB_order] RGB

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

已废弃参数

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

定制网络修改(Caffe)

简介

本章节修改只适用于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对应_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示例如下,有3个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),_ x_static

Output: ht(1~T)

Prototxt示例如下,有3个bottom和1个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应_cont1(~T), bottom[2]对应_xstatic,top对应_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) ,h_T _, cT

Prototxt示例如下,有4个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_ ,c_0的向量维度必须与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一致):

  • 重置门:R_t _= sigmoid(wxrxt+whrht-1+bi)

  • 更新门:Z_t _= sigmoid(wxzxt+whzht-1+bf)

  • 中间结果:hhatt = tanh(whhat(Rt_ * h_t-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_ * h_t-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),_ x_static

Output: ht(1~T)

Prototxt示例如下,有3个bottom和1个top,其中bottom[0]对应_x_t(1~T),bottom[1]对应_cont(1~T),bottom[2]对应_xstatic,top对应_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),x_static _,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配置为batch(多张)模式,Recurrent算子的第二个输入continuous必须为Data层;

  • 若batch_num配置为batch(多张)模式,Prototxt构图时,需确保每张图片的计算不存在数据依赖。例如,不同图片所产生的帧数据不能拼接为整体以作为Recurrent第一个输入。

检测网硬化加速prototxt示例

针对Faster RCNN、RFCN、SSD、YOLOV1、YOLOV2、YOLOV3等检测网络,支持对Proposal、SsdDetectionOutput、YoloDetectionOutput等层进行硬化,达到加速目的。本节描述如何把Proposal、SsdDetectionOutput、YoloDetectionOutput改为RPN硬化的DetectionOutput层。

注意:DetectionOutput、DecBBox、Sort、Nms、Filter等硬化层不能作为首层;输出的得分是float型。

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层的作用是将DecBBox根据设定的score的阈值将分数小于等于阈值的检测框滤掉,阈值的数据类型为浮点型,输入范围为[0,1)。

Sort层的作用是根据分数大小对DecBBox层的输出进行排序,当参数multi_class_sorting配置为true时,Sort层采取所有类别混合排序的策略,当参数multi_class_sorting配置为true时,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层之间的连接顺序和数量任意。

硬化层参数配置

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

表 1 硬化层参数配置限制

参数

参数意义

DecBBox

FilterBox

Sort

Nms

DetectionOutput

top_k

输出框数配置, prototxt中配置

NA

[1 ~ 524288]

[1 ~ 10000]

[1 ~ 10000]

NA

num_classes

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

NA

NA

NA

NA

[1~256]

multi_class_sorting

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

true/false

NA

NA

NA

NA

calc_mode

网络类型配置,必须和网络类型匹配, Prototxt中配置。

[0~4]

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

code_type

必须配置为CENTER_SIZE

CENTER_SIZE

CENTER_SIZE

bias

YOLOV2 YOLOV3网络必须配置,值域[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

输出框数, 暂不支持

[1~524288]

[1~524288]

Sort

multi_class_sorting

是否使用多类sort

false

true/false

具体配置请参考prototxt示例

top_k

输出框数

[1~10000]

[1~10000]

nms

top_k

输出框数

[1~10000]

[1~10000]

表 3 YOLOV1 YOLOV2 YOLOV3硬化层参数配置

层/参数

参数

参数意义

YOLO_V1

YOLO_V2

YOLO_V3

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

是否使能框裁剪

false/ture

false/ture

false/ture

code_type

必须配置为CENTER_SIZE

CENTER_SIZE

CENTER_SIZE

CENTER_SIZE

bias

YOLOV2 YOLOV3网络必须配置,值域[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

输出框,不支持配置

[1~524288]

[1~524288]

[1~524288]

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所示,发布包中提供了基于alexnet的sample:samples/2_object_detection/fasterrcnn/fasterrcnn_alexnet,请参考此示例进行适配。

输出给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/fasterrcnn/fasterrcnn_alexnet/caffe_model/fasterrcnn_alexnet.prototxt。

图 1 Faster RCNN Proposal层硬化结构图

Faster RCNN Proposal硬化层的输入为两个tensor,分别对应图1中的bottom0以及bottom1。 假设N为锚点的总数量,则bottom0的维度为的为1×1×1× N,bottom1的维度为的1×1×4×N,输入数据为大于0的浮点型数据。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的整数,数据类型为浮点型。其他四组输入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: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为框的预测信息;priWidth, priHeight, 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个max),检测框的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,数据类型为浮点型,其中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层的输入。

Yolov1的输出信息由两个report层构成,第一个report层输出各类别检测框输出的数量,第二个report层输出各类别检测框的xmin, ymin, xmax, ymax, 得分以及类别,每一类的排序按检测框的输出顺序按分数由大到小排列。假设最终有300个检测框输出,包括人、猫、狗三种类别各50个,150个,100个,其对应的class ID分别为0,1,2。则第一个report层输出的信息依次为:人、猫、狗的检测框数量(50,100,150);第二个report层输出的信息为:人检测框的xmin(50个xmin),检测框的ymin(50个ymin),检测框的xmax(50个max),检测框的ymax(50个ymax),猫检测框的xmin(150个xmin),检测框的ymin(150个ymin),检测框的xmax(150个max),检测框的ymax(150个ymax),狗检测框的xmin(100个xmin),检测框的ymin(100个ymin),检测框的xmax(100个max),检测框的ymax(100个ymax);人对应的框的得分(50个分数,由大到小),猫对应的框的得分(150个分数,由大到小),狗对应的框的得分(100个分数,由大到小);人对应的框的类别(50个classs ID 0);猫检测框的xmin(150个xmin),检测框的ymin(150个ymin),检测框的xmax(150个max),检测框的ymax(150个ymax),对应的框的得分(150个分数,由大到小),猫对应的框的类别(150个classs ID 1);狗检测框的xmin(100个xmin),检测框的ymin(100个ymin),检测框的xmax(100个max),检测框的ymax(100个ymax),对应的框的得分(100个分数,由大到小),狗对应的框的类别(100个classs ID 2)。

YOLOV2网络

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

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

图 1 YOLOV2 DetectionOutput层硬化结构图

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

Yolov2的输出信息由两个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)。

YOLOV3/V5/V7网络

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

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

Yolov3的输入tensor规格以及prototxt中bias的规格与Yolov2相同,此处不再赘述。

Yolov3的输出信息由两个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)。

YOLOV5/YOLOV7的计算公式如下。

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 = halfW + cX

score:finalScore = sigmoid(objScore) * sigmoid(classScore)

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

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 = sigmoid(classScore)

算子规格说明

须知: Caffe与Onnx框架算子规格中,如无特别说明,输入、输出形状支持范围如下。 向量:channel <= 65535,矩阵:width <= 65535,张量:width <= 65535 当计算数据类型为FP16时,值超出2048会有精度损失。

Caffe框架算子规格

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

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

图像分析引擎

AbsVal

功能描述:求绝对值。

ArgMax

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

参数名

数据类型

参数含义

规格

out_max_val

bool

默认为false, 如果为true, 生成pair(argmax, maxval)

支持

top_k

uint32

最大的k个值

只支持配置为1

axis

uint32

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

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

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

select_last_index

bool

默认为true, 表示在输出最大值索引时,若存在多个最大值,输出最后一个最大值索引。

由于硬件限制,在配置为false情况下,可以获得较好性能

支持

ArgMin

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

参数名

数据类型

参数含义

规格

out_min_val

bool

默认为false, 如果为true, 生成pair(argmin, minval)

支持

top_k

uint32

最小的k个值

只支持配置为1

axis

uint32

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

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

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

select_last_index

bool

默认为true, 表示在输出最小值索引时,若存在多个最小值,输出最后一个最小值索引。

由于硬件限制,在配置为false情况下,可以获得较好性能。

支持

BatchNorm

功能描述:数据归一化。

参数名

数据类型

参数含义

规格

use_global_stats

bool

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

支持true

moving_average_fraction

float

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

不解析生效

eps

float

默认为1e-5,用来防止被0除

支持配置

Bias

功能描述:计算两个输入数据的和。

参数名

数据类型

参数含义

规格

axis

int32

默认为1,不同的值对应的相加维度不同

支持两种配置(1,-3,0,-4),默认为1,遵循caffe规则

num_axes

int32

默认为1,当只有一个bottom时有效,指定训练的bias参数维度大小

与axis配套使用,在axis = (1,-3)时num_axes支持配置为(1,-1),在axis=(0,-4)时num_axes支持配置为(2,-1),遵循caffe规则

BNLL

功能描述:按照一固定公式计算,激活函数。

Clip

功能描述:数据截断。

参数名

数据类型

参数含义

规格

min

float

截断的最小值

支持,配置范围:[-65504,65504]

max

float

截断的最大值

支持,配置范围:[-65504,65504]

Concat

功能描述:至少两个输入,将它们在某个维度上拼接起来。

参数名

数据类型

参数含义

规格

其他约束

axis

int32

默认为1,表示哪个维度concat,可以为负数

支持配置,范围:[-3, -1] U [1, 3],不支持N维度的concat。

axis 1: width<=65535

axis 2: width<=16384

axis 3: width<=4096

vector: width<=65535

concat_dim

uint32

DEPRECATED;跟axis含义相同,不支持负值

支持配置,范围:[1, 3],与axis配套使用,遵循caffe规则。

bottom number<=32

Convolution

功能描述:对输入做卷积。

规格约束:输入数据类型为NCHW,且N须为1。

参数名

数据类型

参数含义

规格

num_output

uint32

输出的channel大小

支持配置,最大32768

bias_term

bool

默认为1,表示是否加bias

支持配置0或1

pad

uint32

默认为0,表示补边的大小

支持,配置范围:[0, 15]

kernel_size

uint32

kernel的大小

支持范围:[1, 255]

stride

uint32

默认为1,stride的大小

支持范围:[1, 255]

dilation

uint32

默认为1,dilation的大小

支持范围:[1, 15],配置后(kernel-1)×dilation+1<=255

pad_h

uint32

默认为0,表示height方向的padding

支持,配置范围:[0, 15]

pad_w

uint32

默认为0,表示width方向的padding

支持,配置范围:[0, 15]

kernel_h

uint32

kernel的height大小

支持,配置范围:[1,64],受dilation、stride、输入数据类型和输出数据类型的影响

kernel_w

uint32

kernel的width大小

支持,配置范围:[1,64],受dilation、stride、输入数据类型和输出数据类型的影响

stride_h

uint32

stride的height大小

支持范围:[1, 255]

stride_w

uint32

stride的width大小

支持范围:[1, 255]

group

uint32

默认为1,group的大小

支持最大2048

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。

参数名

数据类型

参数含义

规格

num_output

uint32

输出的channel大小

支持配置,最大32768;

bias_term

bool

默认为1,表示是否加bias

支持配置0或1;

pad

uint32

默认为0,表示补边的大小

支持,配置范围:[0, 127]

kernel_size

uint32

kernel的大小

支持范围:[1,64],受dilation、stride、input_channel、输入数据类型和输出数据类型的影响

stride

uint32

默认为1,stride的大小

支持范围:[1,64],受dilation、stride、input_channel、输入数据类型和输出数据类型的影响

dilation

uint32

默认为1,dilation的大小

支持范围:[1, 15],配置后(kernel-1)*dilation+1<=255;

pad_h

uint32

默认为0,表示height方向的padding

支持,配置范围:[0, 127]

pad_w

uint32

默认为0,表示width方向的padding

支持,配置范围:[0, 127]

kernel_h

uint32

kernel的height大小

支持,配置范围:[1, 255]

kernel_w

uint32

kernel的width大小

支持,配置范围:[1, 255]

stride_h

uint32

stride的height大小

支持范围:[1, 255]

stride_w

uint32

stride的width大小

支持范围:[1, 255]

group

uint32

默认为1,group的大小

支持最大2048

axis

int32

默认为1,axis值之前的维度认为是独立输入,axis之后的维度认为是空间维度,即在做卷积时会求和。

不支持配置

DepthwiseConv

功能描述:对输入做卷积。

参数名

数据类型

参数含义

规格

num_output

uint32

输出的channel大小

支持配置,最大32768;

bias_term

bool

默认为1,表示是否加bias

支持配置0或1;

pad

uint32

默认为0,表示补边的大小

支持,配置范围:[0, 15],且pad<=kernel_size

kernel_size

uint32

kernel的大小

[1,64],受dilation、stride、input_channel、输入数据类型和输出数据类型的影响

stride

uint32

默认为1,stride的大小

支持范围:[1, 255]

dilation

uint32

默认为1,dilation的大小

支持范围:[1, 15],配置后(kernel-1)*dilation+1<=255;

pad_h

uint32

默认为0,表示height方向的padding

支持,配置范围:[0, 15],且pad_h<=kernel_h

pad_w

uint32

默认为0,表示width方向的padding

支持,配置范围:[0, 15],且pad_w<=kernel_w

kernel_h

uint32

kernel的height大小

支持,配置范围:[1, 255]

kernel_w

uint32

kernel的width大小

支持,配置范围:[1, 255]

stride_h

uint32

stride的height大小

支持范围:[1, 255]

stride_w

uint32

stride的width大小

支持范围:[1, 255]

axis

int32

默认为1,axis值之前的维度认为是独立输入,axis之后的维度认为是空间维度,即在做卷积时会求和。

不支持配置

DetectionOutput

功能描述:RPN 硬化层。

参数名

数据类型

参数含义

规格

param_type

ParamType

RPN硬化层类型

支持,4种类型DecBBox,Sort,Nms,FilterBox

calc_mode

uint32

默认为0,DecbBOX的网络类型

支持5种类型

0:RCNN; 1:YOLOV1; 2:YOLOV2; 3:YOLOV3; 4:SSD; 5: YOLOV5/YOLOV7: 8:YOLOV8;

top_k

uint32

默认为1,输出框的个数

支持,值域[1,10000]

num_classes

uint32

默认为0,分类数目

支持,值域[1,1000]。YOLOV1YOLOV2 YOLOV3 YOLOV4YOLOV5 YOLOV7 需要满足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 YOLOV3 YOLOV5YOLOV7网络必须配置,且满足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系数

支持

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取值范围:[-4, 3],默认值为1,-4与0含义相同。不支持N维度。

end_axis

int32

flatten结束的维度

end_axis取值范围:[-4, 3],默认值为-1,表示最后一条轴。End_axis应大于axis。

GRU

功能描述:GRU网络。

参数名

数据类型

参数含义

规格

num_output

uint32

默认为0,输出的维度大小

支持,最大支持8192

debug_info

bool

默认为false,是否输出debug_info

不支持配置

expose_hidden

bool

默认为false,表示是否增加额外输入输出层,对于GRU是同时增加1层

支持配置true或false

Hswish

功能描述:激活函数h-swish(x)=x*ReLU6(x+3)/6。

参数名

数据类型

参数含义

规格

negative_slope

float

默认为0,负值的斜率

支持

InnerProduct

功能描述:全连接层,计算内积。

参数名

数据类型

参数含义

规格

num_output

uint32

输出的维度大小

支持,最大支持32768

bias_term

bool

是否加bias

支持配置0或1

axis

int32

默认为1,进行内积计算的维度

当Recurrent层后面紧接FC,或两者通过其它算子间接相连时,支持且仅支持axis=2,其他场景不支持配置。

transpose

bool

是否转置权值矩阵

支持配置0或1

Input

功能描述:输入层。

参数名

数据类型

参数含义

规格

shape

BlobShape

定义blob的大小,可以每个分别定义,可以统一定为同样大小,可以不定义

支持最大input节点和输出节点加起来不能超过32个

Interp

功能描述:计算双线性插值。

参数名

数据类型

参数含义

规格

其他约束

height

uint32

默认为0,输出的height大小

支持配置

输入width=4096;

输出w < 2048;

Out = In + (In - 1) × (zoom_factor - 1);

Out = (In - 1) / shrink_factor + 1;

仅支持通过负补边对输入进行裁剪;

仅支持有效输入(加补边)/输出形状height /width同时为1或同时不为1;

仅支持Tensor输入。

width

uint32

默认为1,输出的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,输入的通道数C不能小于local_size

alpha

float

默认为1.0

支持

beta

float

默认为0.75

支持

norm_region

NormRegion

默认为ACROSS_CHANNELS

只支持ACROSS_CHANNELS

k

float

默认为1.0

不能为负数

LSTM

功能描述:LSTM网络。

参数名

数据类型

参数含义

规格

num_output

uint32

默认为0,输出的维度大小

支持,最大支持8192

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输入。

参数名

数据类型

参数含义

规格

normalize_variance

bool

默认为true, 设为false时只减均值

支持配置true或false

across_channels

bool

默认为false, 设为true时则CHW视为一个向量

支持配置true或false

eps

float

默认为1e-9,用来防止除0

不支持配置

Nop

功能描述:数据搬移。

Normalize

功能描述:一种数据归一化的方法。

规格约束:(只支持tensor输入)。

参数名

数据类型

参数含义

规格

across_spatial

bool

默认为true

支持

channel_shared

bool

默认为true

支持

eps

float

默认为1e-10

支持

sqrt_a

float

默认为1

支持

Pad

功能描述:对输入的数据进行填充。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

mode

attribute

string

3种模式"constant"、"reflect"、"edge"

支持。

当mode为"constant",且只在H/W轴做padding,且padding的值在[0, 15]范围内时,走图像分析引擎,其余场景走CPU。

data

input

float

数据

pad

input

int64

指示各个轴填充或删除的元素个数,顺序为 n_begin, c_begin, h_begin, w_begin, n_end, c_end, h_end, w_end

constant_value

input

float

如果mode为"constant",填充的值

说明:

  • 当mode为"reflect",pads必须小于对应轴的元素个数。

  • 当pads为负数,pads的绝对值必须小于或等于对应轴的元素个数。

PassThrough

功能描述:把height和width的数据展开到channel维度。

规格约束:(只支持输入数据类型为NCHW)。

参数名

数据类型

参数含义

规格

num_output

uint32

默认为0

支持

block_height

uint32

默认为0

支持

block_width

uint32

默认为0

支持

Permute

功能描述:数据转置。

规格约束:order为0312时,输入的width不能大于65535。

参数名

数据类型

参数含义

规格

order

uint32

整型数组

支持2,3,4,5,6维

Pooling

功能描述:对输入做pooling。

参数名

数据类型

参数含义

规格

pool

PoolMethod

默认为MAX,pooling的类型,另一种是AVE

支持

pad

uint32

默认为0,表示补边的大小

支持,配置范围:[0, 255]

pad_h

uint32

默认为0,表示height方向的padding

支持,配置范围:[0, 255]

pad_w

uint32

默认为0,表示width方向的padding

支持,配置范围:[0, 255]

pad_up

uint32

默认为0,表示上面的padding

支持,配置范围:[0, 255]

pad_down

uint32

默认为0,表示下面的padding

支持,配置范围:[0, 255]

pad_left

uint32

默认为0,表示左面的padding

支持,配置范围:[0, 255]

pad_right

uint32

默认为0,表示右面的padding

支持,配置范围:[0, 255]

pad_value

float

默认为0,表示padding的值

支持,配置范围:[-65536,65536], 值约束范围在[输入的最小值,0]或[0, 输入的最大值]

kernel_size

uint32

kernel的大小

支持,配置范围:[1, 255]

kernel_h

uint32

kernel的height大小

支持,配置范围:[1, 255]

kernel_w

uint32

kernel的width大小

支持,配置范围:[1, 255]

stride

uint32

默认为1,stride的大小

支持,配置范围:[1, 255]

stride_h

uint32

stride的height大小

支持,配置范围:[1, 255]

若输出高度为1,stride_h <= input_height + pad_up + pad_down - kernel_h + 1

stride_w

uint32

stride的width大小

支持,配置范围:[1, 255]

若输出宽度为1,stride_w <= input_width + pad_left + pad_right - kernel_w + 1

round_mode

RoundMode

默认为CEIL,计算输出形状的取整方式。

支持配置CEIL或FLOOR

global_pooling

bool

默认为false,是否全平面做pooling

支持配置0或1

Power

功能描述:f(x)=(shift+scale∗x)^power

参数名

数据类型

参数含义

规格

power

float

默认为1.0

支持0、-1/2、1/2以及正整数和负整数

scale

float

默认为1.0

支持

shift

float

默认为0.0

支持

PReLU

功能描述:带参数的ReLU激活函数。

参数名

数据类型

参数含义

规格

channel_shared

bool

默认为false,表示负向斜率是否channel共享

支持

PSROIPooling

功能描述:位置敏感的候选区域池化。

规格约束:第二路输入仅支持rpn层或者data层。

参数名

数据类型

参数含义

规格

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

默认为2,表示从第几个维度开始后面的维度全部reduction

支持范围:[2, 3]

coeff

float

默认为1.0,输出的系数

支持

ReLU/ReLU6/RReLU

功能描述:ReLU激活函数。

参数名

数据类型

参数含义

规格

negative_slope

float

默认为0,负值的斜率

支持

Reorg

功能描述:Yolov2算子,Height和Width折叠到Channel的变形操作。

规格约束:(只支持输入数据类型为NCHW)。

参数名

数据类型

参数含义

规格

stride

uint32_t

默认为0,折叠的像素。

支持

Reshape

功能描述:维度变换。

规格约束:reshape 到第0维时,输出维度小于ub_size/sizeof(data_type)。例如ub_size为2M, data_type为int8_t, 则小于524288‬。

参数名

数据类型

参数含义

规格

shape

BlobShape

指示输出的维度大小,0表示跟bottom一致,-1表示该维度由输入的blob及输出的其他维度决定

支持[1,4]个shape_dim配置

axis

int32

默认为0,表示shape中第一数值与输出的第几个起始维度对应

支持[-4,3]范围内可配,不支持N维度,默认为0,遵循caffe规则

特殊内容:当axis<0时,实际起始维度为axis+1。如当shape=NCHW时,axis=-2,意味着仅对W轴reshape。

num_axes

int32

默认为-1,表示从axis开始做几个维度的reshape

支持[-1,3]范围内可配,默认值-1表示对axis起始的所有轴进行变换

Reverse

功能描述:将输入在指定的轴上进行反转。

参数名

数据类型

参数含义

规格

其他约束

axis

int32

表示需要反的轴

支持配置为0,若前后接Recurrent(LSTM/RNN/GRU)层,则表示在Recurrent层输入或输出的帧数轴上做反转。

  • 输入和输出必须是Recurrent (LSTM/RNN/GRU)层,或者reverse的参数axis所对应的维度值为1
  • 仅支持输出给一个算子
  • Reverse和Recurrent之间不支持上报

RNN

功能描述:RNN网络。

参数名

数据类型

参数含义

规格

num_output

uint32

默认为0,输出的维度大小

支持,最大支持8192

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

功能描述:计算两个输入数据的乘,支持两个输入维度大小不一致。

规格约束:第一路输入的shape只支持4维或2维;如果存在第二路输入,其shape参考axis属性的配置规格要求。

参数名

数据类型

参数含义

规格

axis

int32

默认为1,输入的bottom[0]做scale的起始维度,axis不同则bottom[1]的shape不同

支持两种配置(1,-3,0,-4),默认值1。若param为在线输入,在axis = (1,-3)时,param输入的维度数为1或比data输入的维度数少1,在axis=(0,-4)时,param输入的维度数为2或与data输入的维度数相同,遵循caffe规则;

num_axes

int32

默认是1,当只有一个bottom的时候有效,表示做scale的维度,-1表示axis开始全部,0表示是参数只有一个scalar

支持配置1或者-1,与axis配套使用,在axis = (1,-3)时num_axes支持配置为(1,-1),在axis=(0,-4)时num_axes支持配置为(2,-1),遵循caffe规则;

bias_term

bool

默认为false,表示是否加bias

支持配置0或1;

ShuffleChannel

功能描述:将c分成group个子组,并通过逐一从每个子组中选择元素获得新的顺序。

参数名

数据类型

参数含义

规格

其他约束

group

uint32

将c分成group组

支持配置[1, c],小于等于0或者大于c会报错

仅支持输入为向量和4阶张量,width=4096

Sigmoid

功能描述:sigmoid激活函数。

Slice

功能描述:沿某个维度切割输入的blob,输出多个切割的blob。

参数名

数据类型

参数含义

规格

axis

int32

默认为1,表示切块的维度

支持[-3, -1] U [1, 3]范围内可配,不支持N维度,默认值1,遵循caffe规则

slice_point

uint32

表示输出的各个blob的切割点,不定义的则均分

支持,切割点数小于等于32

slice_dim

uint32

默认为1,跟axis含义相同

支持配置[1,3],与axis配套使用,遵循caffe规则

Silence

功能描述:屏蔽输出。

规格约束:只支持连接Slice,且Slice两个输出,屏蔽Slice的其中一个输出。连接其他层时,删除Silence层,不支持屏蔽。

Softmax

功能描述:计算softmax函数。

参数名

数据类型

参数含义

规格

其他约束

axis

int32

默认为1,计算softmax的维度

支持配置[1,2,3];

N=1;

axis 为1时:

向量 channel<=65536

张量 channel<=4096

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

功能描述:沿某个维度复制。

参数名

数据类型

参数含义

规格

axis

int32

默认为0,表示tile轴的维度

支持配置[-3, -1]和[1,3]

tiles

int32

表示复制的份数

-

Upsample

功能描述:上采样。

参数名

数据类型

参数含义

规格

其他约束

interpolation_mode

InterpolationMode

默认为NEAREST,表示插值模式

仅支持interpolation_mode为NEAREST,scale仅支持2

scale等同于stride

scale

uint32

默认为2

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

偏差

支持

Warp

功能描述:根据运动矢量,把输入数据映射到输出数据上。运动矢量包含x和y方向的移动单位,

  • 在x方向上,正值表示像素点向左移动,负值表示像素点向右移动;

  • 在y方向上,正值表示像素点向上移动,负值表示像素点向下移动。

假设src_x和src_y是原始的像素坐标,x和y是运动矢量,则映射后的坐标是dst_x=src_x-x,dst_y=src_y-y。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

只支持4维tensor

roi

input

float

data中需要根据motion vector做映射的平面范围

shape为1*4,4个值分别为[up_offset, bottom_offset, left_offset, right_offset],且4个值均需要为非负数;

当不配置roi时,默认按输入[0,0,0,0]处理

motion vector

input

int8

运动矢量,channel0表示x方向移动的单位;channel1表示y方向移动的单位。

只支持4维tensor,channel必须为2;其H/W与data输入的H/W保持一致;mv这一路输入的值,范围必须在[-4, 4]之间

说明: warp支持2个或者3个在线输入;当有3个在线输入时,默认3个输入分别对应data、roi、motion_vector;当有2个在线输入时,默认2个输入分别是data、motion_vector。

CPU

Unpooling

功能描述:Pooling的部分逆操作。

规格约束:算子为双输入,第一路输入data,第二路输入mask(mask输入的index满足0 <= index < outHeight * outWidth;

其中 outHeight = (inHeight - 1) * stride_h - 2 * pad_h + kernel_h, outWidth = (inWidth - 1) * stride_w - 2 * pad_w + kernel_w

参数名

数据类型

参数含义

规格

pad

uint32

默认为0,表示补边的大小

支持,需要小于对应kernel

pad_h

uint32

默认为0,表示height方向的padding

支持,需要小于对应kernel

pad_w

uint32

默认为0,表示width方向的padding

支持,需要小于对应kernel

pad_up

uint32

默认为0,表示上面的padding

支持,需要小于对应kernel

pad_down

uint32

默认为0,表示下面的padding

支持,需要小于对应kernel

pad_left

uint32

默认为0,表示左面的padding

支持,需要小于对应kernel

pad_right

uint32

默认为0,表示右面的padding

支持,需要小于对应kernel

kernel_size

uint32

kernel的大小

支持,需要大于0

kernel_h

uint32

kernel的height大小

支持,需要大于0

kernel_w

uint32

kernel的width大小

支持,需要大于0

stride

uint32

默认为1,stride的大小

支持

stride_h

uint32

stride的height大小

支持

stride_w

uint32

stride的width大小

支持

global_pooling

bool

默认为false,是否全平面做pooling

支持配置0或1,配置为1时pad仅支持0,stride仅支持1,不能配置kernel_size

Onnx框架算子规格

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

图像分析引擎

Abs

功能描述:求绝对值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

Add

功能描述:计算两个输入element-wise的和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

输入4维及以下的非广播场景或者有一路为离线输入的数据量为1使用图像引擎实现;输入4维及以下的广播场景满足以下要求使用图像引擎实现:

1. 在线输入的维度需一致

2. 在线输入不需要C轴H轴及W轴都广

3. 不需要N轴广播

4. 在线输入最多只有一路需要广播

不满足的场景使用CPU实现

B

input

float

数据

ArgMax

功能描述:返回指定轴上最大值的索引。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axis

attribute

int32

选取最大值所在的维度

[-r,r-1],r=rank(input),其中-r和0不支持

keepdims

attribute

bool

是否保留收缩的轴

-

select_last_index

attribute

bool

出现多个相同值为最大值的情况,选择返回第一次出现或最后一次出现最大值的坐标(0为第一次出现)

仅支持配置为1

ArgMin

功能描述:返回指定轴上最小值的索引。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axis

attribute

int32

选取最小值所在的维度

[-r,r-1],r=rank(input),其中-r和0不支持

keepdims

attribute

bool

是否保留收缩的轴

支持(配置为false时转CPU实现)

select_last_index

attribute

bool

出现多个相同值为最小值的情况选择返回第一次出现或最后一次出现最小值的坐标(0为第一次出现)

支持

AveragePool

功能描述:平均池化。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

auto_pad

attribute

string

pad模式

支持

部分超出图像分析引擎规格的用CPU

图像分析引擎规格:

1 <= kernel <=255;

1 <= stride <=255;

若输出高度为1,stride_h <= input_height + pad_up + pad_down - kernel_h + 1

若输出宽度为1,stride_w <= input_width + pad_left + pad_right - kernel_w + 1

1 <= pad <= 7;

pad left < kernel width;

pad right < kernel width;

pad up < kernel height;

pad down < kernel height;

ceil_mode

attribute

int

计算输出形状时是用ceil还是floor

支持

count_include_pad

attribute

int

计算边沿值时是否包含填充的元素

支持

kernel_shape

attribute

int

kernel沿各轴的大小

支持

pads

attribute

int

每个轴的开始和结束位置

支持

strides

attribute

int

每个轴的stride

支持

X

input

float

数据

支持

BatchNormalization

功能描述:计算输入的batch normalization。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

仅支持shape为2d NC或4d NCHW,且N=1。

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

每次迭代滑动平均衰减系数

不支持配置

Ceil

功能描述:对输入X元素进行向上取整得到Y。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

Clip

功能描述:根据上下边界对数据进行裁剪。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

min

input(optional)

float

下边界

必须为离线,必须为scalar,可不配置

max

input(optional)

float

上边界

必须为离线,必须为scalar,可不配置

Compress

功能描述:从输入张量中沿给定轴根据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

功能描述:将多个输入在指定维度拼接。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

float

input

float

数据

可为多个。

如果全部输入为离线,走CPU实现

axis

attribute

int32

表示在某个维度拼接

[-r,r-1],r=rank(input)

Constant

功能描述:生成离线数据。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

sparse_value

attribute

不支持

离线数据

只支持整型和浮点型

value

attribute

binary

value_float

attribute

float

value_floats

attribute

float

value_int

attribute

int32

value_ints

attribute

int32

value_string

attribute

不支持

value_strings

attribute

不支持

ConstantOfShape

功能描述:生成离线数据。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

value

attribute

float

离线数据值

只支持整型和浮点型

input

input

int64

离线数据shape

Conv

功能描述:对输入做卷积计算。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

N×C×H×W,N须为1

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

inputc和outputC需要切分的大小

支持最大2048

kernel_shape

attribute

list of ints

卷积kernel的大小

大小为2,顺序为(height, width),配置范围为[1,64],受dilation、stride、输入数据类型和输出数据类型的影响

pads

attribute

list of ints

各轴起始位置补边的大小

格式为 [x1_begin, x2_begin...x1_end, x2_end,...],不可与auto_pad同时配置,配置范围为0~15

strides

attribute

list of ints

沿各轴stride的大小

大小为2,顺序为(height, width),配置范围为1~255

ConvTranspose

功能描述:对输入做反卷积计算。

规格约束:(dilations × (kernel_shape -1) 大于等于pads。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

必须为离线,C×M/group×kH×kW

W

input

float

权重

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

inputc和outputC需要切分的大小

支持最大2048

kernel_shape

attribute

list of ints

卷积kernel的大小

大小为2,顺序为(height, width),配置范围为[1,64],受dilation、stride、input_channel、输入数据类型和输出数据类型的影响

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同时配置,配置范围为0~127

strides

attribute

list of ints

沿各轴stride的大小

大小为2,顺序为(height, width),配置范围为1~255

Dropout

功能描述:pico中仅将输入复制到输出。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

ratio

input(optional)

float

数据

不支持配置

training_mode

input(optional)

bool

是否为traning模式

不支持配置

seed

attribute

int

随机数生成seed

不支持配置

Elu

功能描述:一种固定公式的激活函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

alpha

attribute

float

默认为1,公式中的alpha系数

支持

Equal

功能描述:逐点计算A中元素是否等于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

输入4维及以下的非广播场景或者有一路为离线输入的数据量为1使用图像引擎实现;输入4维及以下的广播场景满足以下要求使用图像引擎实现:

1. 在线输入的维度需一致

2. 在线输入不需要C轴H轴及W轴都广

3. 不需要N轴广播

4. 在线输入最多只有一路需要广播

不满足的场景使用CPU实现

B

input

float

数据

Exp

功能描述:计算exp。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

Expand

功能描述:将输入tensor广播成输出tensor。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持。

当满足以下条件中任意一个时,走CPU分支:

  • shape在线。
  • input离线。
  • shape的维度>input的维度。
  • 除了CHW以外的其余维度需要广播。

shape

input

int64

指示输出的形状

Erf

功能描述:一种固定公式的误差函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

Flatten

功能描述:将输入以指定轴为界两边分别拉伸成2D Matrix。

规格约束:输入数据至少为二维

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

-

axis

attribute

int32

指定分界轴

-

Gather

功能描述:将指定轴方向指定indices的数据聚合在一起。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持;默认N=1,当indices的维度为1时,支持N>1

indices

input

int32/int64

需要提取的indices

支持scalar/tensor输入

indices为在线输入时:

[0,s-1],s=shape(axis)

indices为离线输入时:

[-s,s-1],s=shape(axis)

当indices的数据量大于3072时走CPU

axis

attribute

int32

gather的轴

[-r,r-1],r=rank(input)

4维输入时,当indices维度大于1,axis不能取0或者-4

Gemm

功能描述:实现两个矩阵的乘积。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

alpha

attribute

float

A×B的乘数

支持

A和B仅支持二维输入。只有当transA为false,transB不做限制,C为一维向量,B和C都为离线输入时,即经过离线处理可以满足fc计算公式的[1,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

Gelu

功能描述:Transformer网络常用的高斯误差线性单元激活函数。onnx opset v20算子,opset v20以下需以自定义算子形式构造。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

approximate

attribute

string

gelu近似算法

  • 'fast_approximation': 高性能近似模式。
  • 'better_approximation': 高精度近似模式。
  • 支持官方'none', 'tanh',但统一转为'fast_approximation'近似实现。

GlobalAveragePool

功能描述:实现对同一channel的所有元素平均池化。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

X

input

float

数据

支持

部分超出图像分析引擎规格的用CPU

图像分析引擎规格:

1 <= input_h <=255;

1 <= input_w <= 255

GlobalMaxPool

功能描述:实现对同一channel的所有元素最大池化。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

X

input

float

数据

支持

部分超出图像分析引擎规格的用CPU

图像分析引擎规格:

1 <= input_h <=255;

1 <= input_w <= 255

Greater

功能描述:逐点计算A中元素是否大于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

输入4维及以下的非广播场景或者有一路为离线输入的数据量为1使用图像引擎实现;输入4维及以下的广播场景满足以下要求使用图像引擎实现:

1. 在线输入的维度需一致

2. 在线输入不需要C轴H轴及W轴都广

3. 不需要N轴广播

4. 在线输入最多只有一路需要广播

不满足的场景使用CPU实现

B

input

float

数据

GroupNorm

功能描述:计算 y = scale * (x - mean) / sqrt(variance + epsilon) + B。其中,mean和variance 是根据每个通道组的实例计算的,并且应为每组通道指定比例(scale)和偏差(B)。

规格约束:scale和B不支持在线输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

epsilon

attribute

float

避免除零

支持

num_groups

attribute

uint32

分组数

支持(大于0)

input

input

float

数据

支持

scale

input

float

缩放比例

支持

B

input

float

偏差

支持

GRU

功能描述:GRU循环处理。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

输入是否可选

约束

activation_alpha

attribute

float

激活函数的缩放值

不支持配置

不涉及

不涉及

支持两种输出格式:

1. 输出仅有1个参数:Y

2. 输出全部参数:Y,Y_h

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输出

支持

可选

Identity

功能描述:将数据复制到输出。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

If

功能描述:进行分支判断计算。当子图不包含CPU算子时,If为图像分析引擎算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

cond

input

bool

输入的条件

支持

是。不支持所有输入同时都为离线输入。

else_branch

attribute

graph

如果条件为真时执行的子图

支持

then_branch

attribute

graph

如果条件为假时执行的子图

支持

LRN

功能描述:计算Local Response Normalization。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

alpha

attribute

float

scaling系数

支持

beta

attribute

float

指数系数

支持

bias

attribute

float

偏置(偏置必须大于等于0)

支持

size

attribute

int32

local size

支持3、5、7,输入的通道数C不能小于size

说明: 向量:输入width <= 21840

LayerNormalization

功能描述:LayerNormalization为层归一化,可以对网络中的每个算子的输出进行归一化,使得网络中每一层的输出都具有相似的分布。当模型的type配置为LayerNormalization时支持的归一化维度为W,HW和CHW;当模型的type配置为LayerNorm或LayerNormal时,支持对单W轴和单C轴进行归一化,不支持对单H轴进行归一化。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线输入

X

input

float

数据

支持

Scale

input

float

scale tensor

支持

当Scale为离线输入时,如果存在B,B只支持离线输入

B

input

float

bias tensor

支持

axis

attribute

int32_t

归一化计算轴

选择运算开始的轴,支持配置C、H、W,不支持配置N轴

不涉及

epsilon

attribute

float

防止除0错误

支持

说明: 当type配置为LayerNormalization时:当axis==-3或1,Scale和B的shape必须是1*C*H*W;当axis==-2或2,Scale和B的shape必须是1*1*H*W;当axis==-1或3,Scale和B的shape必须是1*1*1*W。

LeakyRelu

功能描述:激活函数f(x) = alpha * x for x < 0, f(x) = x for x >= 0。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

alpha

attribute

float

leakage系数

支持

Log

功能描述:计算log。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

LogSoftmax

功能描述:根据指定公式计算LogSoftmax(input, axis) = Log(Softmax(input, axis=axis))。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

N=1;

axis

attribute

int32

指定softmax的轴

[-r,r-1],r=rank(input),

若r为4,axis不为-4和0

Loop

功能描述:对子图进行循环计算。当子图不包含CPU算子时,Loop为图像分析引擎算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

body

attribute

graph

循环执行的子图

迭代次数必须为离线值

是。不支持所有输入同时都为离线输入。

M

input

int64

迭代的次数

cond

input

bool

输入的真值

v_initial

input

variadic

迭代变量

说明: 不支持输出中含有scan_output的输出。

LSTM

功能描述:LSTM循环处理单元。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

输入是否可选

约束

activation_alpha

attribute

float

激活函数的缩放值

不支持配置

不涉及

不涉及

支持三种输出格式:

1. 输出仅有1个参数:Y

2. 输出2个参数:Y,Y_h

3. 输出全部参数:Y,Y_h,Y_c

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输出

支持

MatMul

功能描述:支持numpy-style的矩阵相乘。

opset version: 13

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

A

input

float

数据

支持二维及以上。

  1. 图像分析引擎不支持输入维度大于4维,用CPU实现
  2. 不支持n>1时且仅有c轴broadcast

B

input

float

数据

Max

功能描述:计算多输入element-wise的最大值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data_0

input

float

数据

支持多输入,至少为两路输入。不支持广播,不支持标量输入。

是。输入数(所有输入都离线)>2场景下不支持常量折叠。

MaxPool

功能描述:最大池化。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

其他约束

auto_pad

attribute

string

pad模式

支持

只支持dilation为1。

同时输出最大值索引(即算子有两路输出)时,仅支持接upsample算子。

部分超出图像分析引擎规格的用CPU

图像分析引擎规格:

1 <= kernel <=255;

1 <= stride <=255;

若输出高度为1,stride_h <= input_height + pad_up + pad_down - kernel_h + 1

若输出宽度为1,stride_w <= input_width + pad_left + pad_right - kernel_w + 1

1 <= pad <= 7;

pad left < kernel width;

pad right < kernel width;

pad up < kernel height;

pad down < kernel height;

ceil_mode

attribute

int

计算输出形状时是用ceil还是floor

支持

dilations

attribute

int

每个轴的dilation值

支持

kernel_shape

attribute

int

kernel沿各轴的大小

支持

pads

attribute

int

每个轴的开始和结束位置

支持

storage_order

attribute

int

存储序(row major、column major)

支持

strides

attribute

int

每个轴的stride

支持

X

input

float

数据

支持

Mean

功能描述:计算多输入element-wise的均值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data_0

input

float

数据

支持多输入,至少为两路输入。不支持广播,不支持标量输入。

支持部分输入离线,不支持所有输入都离线。

MeanVarianceNormalization

功能描述:计算mvn。

规格约束:仅支持4D输入。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

仅支持axes为(0,2,3)/(0,1,2,3)

Min

功能描述:计算多输入element-wise的最小值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data_0

input

float

数据

支持多输入,至少为两路输入。不支持广播,不支持标量输入。

是。输入数(所有输入都离线)>2场景下不支持常量折叠。

Mul

功能描述:计算两个输入element-wise的乘积。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

输入4维及以下的非广播场景或者有一路为离线输入的数据量为1使用图像引擎实现;输入4维及以下的广播场景满足以下要求使用图像引擎实现。

  1. 在线输入的维度需一致;
  2. 在线输入不需要C轴H轴及W轴都广;
  3. 不需要N轴广播;
  4. 在线输入最多只有一路需要广播。

不满足的场景使用CPU实现。

B

input

float

数据

Pad

功能描述:对输入的数据进行填充。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

mode

attribute

string

3种模式"constant"、"reflect"、"edge"

支持。

当mode为"constant",且只在H/W轴做padding,且padding的值在[0, 15]范围内时,走图像分析引擎,其余场景走CPU。

data

input

float

数据

pads

input

int64

指示各个轴填充或删除的元素个数

constant_value

input

float

如果mode为"constant",填充的值

说明: 当mode为"reflect",pads必须小于对应轴的元素个数。 当pads为负数,pads的绝对值必须小于或等于对应轴的元素个数。

PRelu

功能描述:带参数的ReLU激活函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

斜率仅支持C方向,不支持其他模式的广播,当前仅支持输入数据在线参数离线模式

slope

input

float

负数部分斜率

Pow

功能描述:计算f(x) = x^exponent。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

不支持广播,不支持多个指数

Y

input

float

指数

说明: 数据为张量时:width<=16384

ReduceMax

功能描述:对指定的轴求最大值。

规格约束:支持高维度,高维度走cpu实现。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)。

当输入为3维,所有轴情况都支持使用图像分析引擎;当输入为4维,除第一根轴外均支持使用图像分析引擎。

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceMean

功能描述:对指定的轴计算求平均值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

当输入为3维,所有轴情况都支持使用图像分析引擎;当输入为4维,除第一根轴外均支持使用图像分析引擎。

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceMin

功能描述:对指定的轴计算最小值。

规格约束:支持高维度,高维度走CPU实现。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input) 当输入为3维,所有轴情况都支持使用图像分析引擎;当输入为4维,除第一根轴外均支持使用图像分析引擎

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceProd

功能描述:对指定的轴计算乘积。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input) 当输入为3维,所有轴情况都支持使用图像分析引擎;当输入为4维,除第一根轴外均支持使用图像分析引擎

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceSumSquare

功能描述:对指定的轴计算平方和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input) 当输入为3维,所有轴情况都支持使用图像分析引擎;当输入为4维,除第一根轴外均支持使用图像分析引擎

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceSum/version<=12

功能描述:对指定的轴求和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axes

attribute

list of ints

reduce的轴

list中的每个axis[-r,r-1],r=rank(input)

keepdims

attribute

bool

是否保留reduce的轴

支持

ReduceSum/version13

功能描述:对指定的轴求和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

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

bool

是否保留reduce的轴

支持

Relu

功能描述:ReLU激活函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

Resize

功能描述:将输入按指定mode进行缩放。

规格约束:仅支持coordinate_transformation_mode为asymmetric且mode为nearest,coordinate_transformation_mode为align_corners且mode为linear。

mode为nearest时,scales仅支持(1,1,2,2)、(1,1,4,4)和(1,1,8,8)。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

coordinate_transformation_mode

attribute

string

坐标轴转换的方式

支持配置为asymmetric和align_corners

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时的取值方式

仅支持配置为floor

X

input

float

数据

支持

roi

input

float

roi区域

不支持配置

scales

input

float

沿各个轴的缩放倍数

必须且只能离线配置scales或者sizes中的一个,scales仅支持(1,1,2,2)、(1,1,4,4)和(1,1,8,8),sizes只支持hw扩大两倍,mode为linear时,输出width不支持大于2048。

sizes

input

int64

输出的shape

Reshape

功能描述:将输入的维度转换为指定维度。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

6维及6维以下使用图像引擎实现,其他场景使用CPU实现

shape

input

int64

输出的具体形状

shape必须为离线

RNN

功能描述:RNN循环处理单元。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

输入是否可选

约束

activation_alpha

attribute

float

激活函数的缩放值

不支持配置

不涉及

不涉及

支持两种输出格式:

1. 输出仅有1个参数:Y

2. 输出全部参数:Y,Y_h

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输出

支持

可选

Scan

功能描述:做需要有时序的计算。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线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

功能描述:替换输入数据指定位置的值。

参数名

参数/输入

数据类型

参数含义

规格

Aicore/Cpu规格

是否支持离线data输入

axis

attribute

int32

替换的轴面

支持

同时满足以下条件时(转OneHot)走aicore,否则走cpu。

  • data离线,indices在线,updates在线
  • data,indices, updates均为2D NC shape
  • axis等于1,indices的NC shape中C等于1
  • 离线data中所有元素值相等,离线updates中所有元素值相等

data

input

float

数据

支持

indices

input

float

要替换数据下标

支持

updates

input

float

要替换的值

支持

ScatterBEV

功能描述:沿H轴对first_input进行max操作,得到shape(P,1,C)的张量,一个(C)大小的向量就是一个“柱体特征”;根据坐标信息(包含在voxel_idxs中)将“柱体特征”以二维形式展开,得到BEV特征图。

规格约束:ScatterBEV算子融合了第二、三路输入,且这两路输入只给本算子使用;first_input可以没有batch维,有batch维时batch维只能为1,voxel_idxs、voxel_num不含batch维;voxel_num的数值必须是正整数,能取到的最大值为柱体数量P;voxel_idxs包含的是坐标信息,所有数值应是非负整数,y坐标值小于dense_shape[0],x坐标值小于dense_shape[1];dense_shape只能包含两个正整数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线输入

first_input

input

float

柱体特征张量。P是柱体数量,N是一个柱体最多包含多少个点,C是柱体特征的维度。

shape=(P,N,C)或(1,P,N,C)

voxel_idxs

input

int32

每个柱体的坐标。P是柱体数量,4是坐标向量的长度,其中前两个数据无效,后两个数对应y坐标、x坐标。只支持data层输入。

shape=(P,4)

voxel_num

input

int32

表示真正有效的柱体数量。只支持data层输入。

shape=(1)

dense_shape

attribute

int32[]

两个数分别为输出Shape的H、W大小

shape=(2)

是,必须是离线数据

Shape

功能描述:返回上层tensor的shape。

规格约束:不支持将shape层作为网络的最后一层。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

node

数据

支持

Sigmoid

功能描述:计算sigmoid。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

Size

功能描述:返回上层数据个数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

node

数据

支持

Slice

功能描述:将输入数据按照指定维度切割成多个数据。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

float

input

float

数据

一个

是。starts、ends、axes、steps必须为离线数据。

steps=1时,高维度场景下仅支持axis=-1或-2(包含对应的正数)。

axes

attribute

1-D 数据

表示切割的维度

[-r,r-1],r=rank(input)

starts

attribute

1-D 数据

表示切割的起始元素

[0, dims[axes])

ends

attribute

1-D 数据

表示切割的终结元素

[0, dims[axes])

steps

attribute

1-D 数据

表示切割的步长

缺省为1

SpaceToDepth

功能描述:重新排列空间数据块,将space数据转移到depth。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

  1. 仅支持4D shape NCHW。
  2. H/W必须是blocksize的整数倍。

blocksize

attribute

int

取空间的大小

Split

功能描述:在指定数据轴对数据进行拆分。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

axis

attribute

int64

指定拆分轴

支持

input

input

float

数据

支持

split

input

int64

拆分的长度

支持,切割点数小于等于32

Sqrt

功能描述:对输入数据求平方根。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

Squeeze

功能描述:删除指定下标轴的1。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axes

input

int64

删除轴的下标

支持

Sub

功能描述:tensor对应轴作减法。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

输入4维及以下的非广播场景或者有一路为离线输入的数据量为1使用图像引擎实现;输入4维及以下的广播场景满足以下要求使用图像引擎实现:

  1. 在线输入的维度需一致;
  2. 在线输入不需要C轴H轴及W轴都广播;
  3. 不需要N轴广播;
  4. 在线输入最多只有一路需要广播。

不满足的场景使用CPU实现。

B

input

float

数据

Sum

功能描述:对所有的tensor对应值求和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data_0

input

variadic

数据

支持多输入,至少为两路输入。

输入4维以下的非广播场景或者有一路为离线输入的数据量为1使用图像引擎实现;输入4维以下的广播场景满足以下要求使用图像引擎实现:

  1. 在线输入的维度需一致
  2. 在线输入不需要C轴H轴及W轴都广
  3. 不需要N轴广播
  4. 在线输入最多只有一路需要广播

不满足的场景使用CPU实现

Tanh

功能描述:求tanh。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

Tile

功能描述:对每一个轴的数据进行重复叠加。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

repeats

input

int64

指定轴重复几遍

必须为离线,size为InputDimNum的一维数组,且元素大于0。不支持除了CHW轴的重复,即除了CHW轴外,其他轴重复次数须等于1。

Transpose

功能描述:和numpy的transpose一样转置输入tensor。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

perm

attribute

int

permute轴

支持2,3,4,5,6维。

data

input

float

数据

Unsqueeze

功能描述:在指定下标轴插入1。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axes

input

int32

插入轴的下标

支持

Softmax

功能描述:

Opset version 11: 计算指定轴往后所有轴的softmax。

Opset version 13: 计算指定轴的softmax。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

axis

attribute

int32

指定softmax的轴

[-r,r-1],r=rank(input),

若r为4,axis不为-4和0

input

input

float

数据

N=1; 维度仅支持小于等于4

DepthToSpace

功能描述:重新排列空间数据块,将depth数据转移到space。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

  1. input仅支持4D shape NCHW。
  2. C必须是blocksize*blocksize的整数倍。

blocksize

attribute

int

取空间的大小

mode

attribute

string

排布方式

支持CRD和DCR

Sign

功能描述:计算输入tensor的元素符号。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

TopK

功能描述:沿指定轴检索最大或最小的K个元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

axis

attribute

int

排序的维度

支持,范围为[-r,r-1],r=rank(input)

满足以下要求使用图像引擎实现:largest为1,sorted为1,K值不超过65535,不满足的场景使用CPU实现

largest

attribute

int

决定是否返回最大或最小的元素

支持

sorted

attribute

int

决定是否返回已排好序的元素

无论sorted为true或false输出都是排序后的

X

input

float

数据

支持

K

input

int64

就是top元素的个数

支持,K值须大于0且小于等于数据输入X的axis轴对应的数据量

Warp

功能描述:根据运动矢量,把输入数据映射到输出数据上。运动矢量包含x和y方向的移动单位,在x方向上,正值表示像素点向左移动,负值表示像素点向右移动;在y方向上,正值表示像素点向上移动,负值表示像素点向下移动。假设src_x和src_y是原始的像素坐标,x和y是运动矢量,则映射后的坐标是dst_x=src_x-x,dst_y=src_y-y。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

只支持4维tensor

roi

input

float

data中需要根据motion vector做映射的平面范围

shape为1*4,4个值分别为[up_offset, bottom_offset, left_offset, right_offset];

当不配置roi时,默认按输入[0,0,0,0]处理

motion vector

input

int8

运动矢量,channel0表示x方向移动的单位;channel1表示y方向移动的单位。

只支持4维tensor,channel必须为2;mv这一路输入的值,范围必须在[-4, 4]之间

说明: warp支持2个或者3个在线输入;当有3个在线输入时,默认3个输入分别对应data、roi、motion_vector;当有2个在线输入时,默认2个输入分别是data、motion_vector。

Div

功能描述:对输入A、B进行除法运算得到输出C。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

输入4维及以下的非广播场景或者有一路为离线输入的数据量为1使用图像引擎实现;输入4维及以下的广播场景满足以下要求使用图像引擎实现:

1. 在线输入的维度需一致;

2. 在线输入不需要C轴H轴及W轴都广播

3. 不需要N轴广播;

4. 在线输入最多只有一路需要广播。

不满足的场景使用CPU实现。

B

input

float

数据

Sin

功能描述:逐点求sin。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

Cos

功能描述:逐点求cos。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

Neg

功能描述:逐点求相反数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

InstanceNormalization

功能描述:计算y = scale * (x - mean) / sqrt(variance + epsilon) + B。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

epsilon

attribute

float

避免除零

支持

是。

当scale离线,B在线时,走Cpu模式。

input

input

float

数据

支持,height必须小于65536。

scale

input

float

数据

支持

B

input

float

数据

支持

Where

功能描述:根据condition确定输出是X还是Y对应的元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

condition

input

bool

指示是输出元素是到X还是Y对应的元素

condition、X、Y都支持广播

满足以下要求使用图像引擎实现:

1. 所有输入(condition、X、Y)shape一致,无需广播;

2. condition 需要广播,且其 C/H/W 维度中至少有一维与输出相同;X 和 Y 中一方 shape 与输出一致,另一方为元素数量为 1;

3. X 和 Y 的元素数量均为 1。

X

input

float

condition为True时选定的值

Y

input

float

condition为False时选定的值

ScatterND

功能描述:根据 indices 将 updates 写入 data 的特定位置。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

被更新的原始张量

当data为离线输入时,使用CPU实现;其余场景使用图像引擎实现。

indices

input

int

表示要更新哪些位置

updates

input

float

要写入的数据

CPU

Acos

功能描述:逐点求arccosine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

Acosh

功能描述:逐点求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。

Asin

功能描述:逐点求arcsine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

Asinh

功能描述:逐点求hyperbolic arcsine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

Atan

功能描述:逐点求arctangent。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

Atanh

功能描述:逐点求hyperbolic arctangent。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

BitShift

功能描述:对输入的元素的二进制表示进行移位操作。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

direction

attribute

string

决定移位的方向

支持

X

input

int

数据

y

input

int

移动的数量

Celu

功能描述:一种固定公式的激活函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

alpha

attribute

float

公式里的alpha值

支持

X

input

float

数据

支持

Cosh

功能描述:逐点求hyperbolic cosine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

CumSum

功能描述:计算输入元素沿给定轴的累加和。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

exclusive

attribute

int

指示是否包含顶部元素的独占和

支持

reverse

attribute

int

指示求和的元素方向

x

input

float

数据

axis

input

int32, int64

指示求和的维度

Det

功能描述:求行列式。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

需2D或以上

Floor

功能描述:对输入X元素进行向下取整得到Y。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

GatherElements

功能描述:是一种索引操作,通过在由indices的元素确定的索引位置处对输入数据张量进行索引来生成其输出。它的输出形状与索引的形状相同。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线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

数据

GreaterOrEqual

功能描述:逐点计算A中元素是否大于等于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持

B

input

float

数据

支持

HardMax

功能描述:如果沿着axis,输入的点是最大的则为1,否则为0。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axis

attribute

int32

[-r,r-1],r=rank(input)

HardSigmoid

功能描述:根据公式进行计算y = max(0, min(1, alpha * x + beta))。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

alpha

attribute

float

系数

支持

beta

attribute

float

偏置

支持

If

功能描述:进行分支判断计算。当子图包含CPU算子时,If为CPU算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

cond

input

bool

输入的真值

支持

是。不支持所有输入同时都为离线输入。

else_branch

attribute

graph

如果为真执行的子图

支持

then_branch

attribute

graph

如果为假执行的子图

支持

Less

功能描述:逐点计算A中元素是否小于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持

B

input

float

数据

支持

LessOrEqual

功能描述:逐点计算A中元素是否小于等于B中元素。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持

B

input

float

数据

支持

Loop

功能描述:对子图进行循环计算。当子图包含CPU算子时,Loop为CPU算子。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

body

attribute

graph

循环执行的子图

迭代次数必须为离线值

是。不支持所有输入同时都为离线输入。

M

input

int64

迭代的次数

cond

input

bool

输入的真值

v_initial

input

variadic

迭代变量

LpNormalization

功能描述:对指定轴进行lp_norm计算。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

axis

attribute

int32

指定进行正则化的轴

[-r,r-1],r=rank(input)

p

attribute

float

归一化的顺序

支持

MatMul

功能描述:支持numpy-style的矩阵相乘。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

float

数据

支持二维及以上。

  1. 当输入维度大于4维及以上走aa cpu;
  2. 其它走aa core。

B

input

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

功能描述:对输入数据的元素进行取余。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

fmod

attribute

bool

指示进行fmod还是integer mod

支持

A

input

float

数据

B

input

float

数据

Neg

功能描述:对输入数据,进行符号翻转。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

NonMaxSuppression

功能描述:过滤掉与其它框有高的IOU的框。其输出shape 随在线数据变化,模型转换时按最大shape分配内存和推理。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

center_point_box

attribute

int

框数据的格式

支持

boxes

input

float

数据

支持

scores

input

float

数据

支持

max_output_boxes_per_class

input

int64

每类每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指示哪些位置为off_value

[-depth, depth-1]

depth

input

float

onehot编码的类数

支持

values

input

float

共有两个值,一个on_value,另一个为off_value

rank(input)=2

axis

attribute

int32

指定onehot编码的轴

[-r,r-1],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

坐标轴转换的方式

支持配置

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时的取值方式

支持floor,ceil

X

input

float

数据

仅支持4D

roi

input

float

roi区域

不支持配置

scales

input

float

沿各个轴的缩放倍数

必须且只能配置scales或者sizes中的一个

sizes

input

int64

输出的shape

支持

Reciprocal

功能描述:对每个点求倒数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

ReduceLogSum

功能描述:对指定的轴计算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

功能描述:对指定的轴计算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的轴

支持

Round

功能描述:对输入X求Round得到Y。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

X

input

float

数据

支持

Scatter

功能描述:替换输入数据指定位置的值。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

axis

attribute

int32

替换的轴面

支持

input

input

float

数据

支持

indices

input

float

要替换数据下标

支持

updates

input

float

要替换的值

支持

Selu

功能描述:Selu激活函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

alpha

attribute

float

系数

支持

gamma

attribute

float

系数

支持

X

input

float

数据

支持

Shrink

功能描述:Shrink激活函数。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

bias

attribute

float

给输出数据的偏转值

支持

lambd

attribute

float

Shrink公式的lambd值

支持

input

input

float

数据

支持

Sin

功能描述:计算sine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

Sinh

功能描述:逐点求hyperbolic sine。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

data

input

float

数据

支持

Softplus

功能描述:计算ln(exp(x) + 1)。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

Softsign

功能描述:计算(x/(1+|x|))。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

input

input

float

数据

支持

ThresholdedRelu

功能描述:作为激活函数实现数据变换: y=x for x > alpha, y=0 otherwise

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

alpha

attribute

float

数据分段激活阈值

支持,默认为1.0

不涉及

X

input

float

数据

支持

Transpose

功能描述:和numpy的transpose一样转置输入tensor。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

perm

attribute

int

permute轴

图像分析引擎支持:

0231、0312、0132、0213

CPU支持:

0321

data

input

float

数据

Xor

功能描述:对输入A、B进行elementwise逻辑异或计算得到输出C。

参数名

参数/输入

数据类型

参数含义

规格

是否支持离线data输入

A

input

bool

数据

输入A、B皆支持Numpy-style广播

B

input

bool

数据

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输入格式。

  1. 与标准Caffe/Onnx的输入格式保持一致;

  2. 与硬化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配置为batch(多张)模式时,板端的输入输出数据格式。

板端的输入格式

假设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配置为batch(多张)模式,针对LSTM层的continuous输入(Data层),板端需准备指定图片张数对应的数据量,并且数据排布等同于标准Caffe下,Prototxt首层N轴为batch_num时continuous的数据排布。以图1为例,板端准备的continuous数据应符合标准Caffe下continuous的shape为[18, batch_num]所对应的数据排布。

说明: 在ONNX框架下Recurrent网络的输入是X [T, N, D], sequence_lens [N], intial_h [num_directions, N, D]和intial_c [num_directions]。sequence_lens由于仅有batch轴,在准备时无需像上述continuous一样作出特殊输入规定,能保持与用户提供的输入一致。

板端的输出格式

当batch_num配置为batch(多张)模式时,板端的输出数据将按照图片顺序依次排列,即先排完第一张图片对应的全量数据,再依次排列后续各图片对应的全量数据。该排布可能和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]对应的数据排布,即不同图片对应的数据间存在交叉排列。

同理,板端在ONNX框架下的处理也与上述Caffe类似。以输出HT [T, num_directions, N, D]为例,多图片下的板端输出排布为输出第一张图片的HT后再紧接排布下一张图片的HT。