AI算子列表
阅读原文时间:2023年07月09日阅读:5

AI算子列表

概述

目前只有部分算子可在一个库中同时运行在MLU220和MLU270平台。也就是用户使用 ./build_cnplugin.sh --mlu270 命令编译生成的 libcnplugin.so 文件可同时在MLU220和MLU270上运行,其余算子只能在MLU270上运行。支持MLU220和MLU270平台的算子列表如下:

  • Faster Rcnn Detection Output
  • Roi Pool
  • Proposal
  • Yolov3 Detection Output
  • Yolov2 Detection Output
  • SSD Detection Output
  • Resize Yuv To Rgba
  • Yuv To Rgb
  • Resize
  • Bert Pre

后续版本会完善其余算子对不同平台的支持。

Add Pad

  • 功能描述

给图片的右侧和下侧加边框。

支持型号:MLU220和MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体。
  • tensor:一个四维的张量,形状是[batchNum, 1 or 4, dst_h, dst_w](NCHW),目前只支持UINT8格式。
  • pad_value_tensor:一个四维的张量,形状是[1, 3, 1, 1](NCHW),目前只支持UINT8格式。

输出:

  • dst_tensor:经过padding的四维张量。形状是:[batchNum, 1 or 4, src_h, src_w](NCHW)。目前只支持UINT8格式。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • src_w和dst_w必须是32对齐,src_h和 dst_h必须是2对齐。
    • 输入的图片可以是YUV SP420或者RGB(RGBA),输入的通道也相应是1或者4。
    • pad value是要填充的值。如果通道的大小为3,通道的值应为是yuv或者rgb。

Anchor Generator

  • 功能描述

根据形状生成anchors。

算子接收feature shape、image shape、base achor size、scales、ratios几个参数,实现过程如下:

  • base anchor size是anchor的默认size。
  • scales和ratios在base anchor size的基础上对长宽、以及长宽比进行变形。
  • 一个点生成 scales.size() * ratios.size() 个anchor,整个算子生成 scales.size() * ratios.size() * feature_shape[0]* feature_shape[1] 个 anchor。

支持型号:MLU220和MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • feature_map_shape_mlu_tensor:维度是四维(NCHW)的张量。
  • param:参数描述结构体。

输出:

  • grid_anchors_mlu_tensors:四维张量,形状是[1, len(scales) * len(aspect_ratios) * 4, featuremap_height, featuremap_width](NCHW)。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入输出的张量仅支持FLOAT16类型。

Arange

  • 功能描述

根据给定的参数,生成一个大小为 size 的一维有序数组。

  • start:数组的开始数据。
  • step:数组步长。
  • repeat:数组中每个数据重复次数。
  • size:数组大小及数组中数据总个数。

支持型号:MLU270系列。支持MXNet。

  • 参数限制

输入:

  • param:输入参数结构体。
  • input:输入张量,无意义。这里是为了满足CNML算子输入要求。支持数据类型float16和float32。
  • start:数列的起始值。
  • stop:数列的结束值。算子中未用到。
  • step:有序数列的步长。
  • repeat:数列中每个数的重复次数。
  • size:数列大小,数据总个数。

输出:

  • output:输出张量,最后的有序数列。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Bert Base Encoder

  • 功能描述

任务类型为SQuAD1.1的BERT-Base网络。与pluginBertSquadOp算子不同的是,该算子不包含前后处理模块。

支持型号:MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • param:输入参数结构体。
  • cnml_input_ptr:一组描述BERT前处理后数据的四维张量。
  • cnml_output_ptr:一组描述encoder后数据输出的四维张量。
  • input_tensor:BERT前处理后的数据。
  • attr_mask:前处理后的mask输入。
  • attr_kernel_Q_ch0:query层的矩阵乘的权值。
  • attr_kernel_Q_ch1:query层的矩阵乘的权值。
  • attr_kernel_Q_ch2:query层的矩阵乘的权值。
  • attr_kernel_Q_ch3:query层的矩阵乘的权值。
  • attr_bias_Q:query层的矩阵乘的偏置。
  • attr_kernel_K_ch0:key层的矩阵乘的权值。
  • attr_kernel_K_ch1:key层的矩阵乘的权值。
  • attr_kernel_K_ch2:key层的矩阵乘的权值。
  • attr_kernel_K_ch3:key层的矩阵乘的权值。
  • attr_bias_K:key层的矩阵乘的偏置。
  • attr_kernel_V_ch0:value层的矩阵乘的权值。
  • attr_kernel_V_ch1:value层的矩阵乘的权值。
  • attr_kernel_V_ch2:value层的矩阵乘的权值。
  • attr_kernel_V_ch3:value层的矩阵乘的权值。
  • attr_bias_V:value层的矩阵乘的偏置。
  • attr_output_kernel_ch0:attention_output层的矩阵乘的权值。
  • attr_output_kernel_ch1:attention_output层的矩阵乘的权值。
  • attr_output_kernel_ch2:attention_output层的矩阵乘的权值。
  • attr_output_kernel_ch3:attention_output层的矩阵乘的权值。
  • attr_output_bias:attention_output层的矩阵乘的偏置。
  • attr_layernorm_beta:attention_output层的矩阵乘的beta。
  • attr_layernorm_gamma:attention_output层的矩阵乘的gamma。
  • inter_kernel_ch0:intermediate层的矩阵乘的权值。
  • inter_kernel_ch1:intermediate层的矩阵乘的权值。
  • inter_kernel_ch2:intermediate层的矩阵乘的权值。
  • inter_kernel_ch3:intermediate层的矩阵乘的权值。
  • inter_bias:intermediate层的矩阵乘的偏置。
  • output_kernel_ch0:output层的矩阵乘的权值。
  • output_kernel_ch1:output层的矩阵乘的权值。
  • output_kernel_ch2:output层的矩阵乘的权值。
  • output_kernel_ch3:output层的矩阵乘的权值。
  • output_bias:output层的矩阵乘的偏置。
  • output_layernorm_beta:output层的矩阵乘的beta。
  • output_layernorm_gamma:output层的矩阵乘的gamma。
  • fix_pos:网络中所有Matmul和BatchMatMul的position。
  • batch_num:输入的batch数。
  • seq_len:输入语句长度。

输出:

  • encoder_out:encoder的输出结果。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • batch_size值范围为1 - 8。
    • seq_len值范围为128 - 512并且 seq_len % 64 的余数为0。
    • batch_size * seq_len 的值应小于或等于1024。

Bert Emb Encoder

  • 功能描述

包含pre和encoder两个模块的bert_base网络,可以根据不同任务接入不同的后处理。根据用户使用需求,针对1batch和2batch做了专门的性能优化。

支持型号:MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • input ids:int32类型,形状为(batch, seqlen)。
  • input_mask:float16类型,形状为(batch, seqlen)。
  • token_type_ids:int32类型,形状为(batch, seqlen)。
  • 权值参数:
    • word_embedding_table:embedding层的词向量表。
    • segment_embedding_table:embedding层的词向量表。
    • position_embedding_table:embedding层的词向量表。
    • embedding_layernorm_beta:embedding层的layernorm参数beta。
    • embedding_layernorm_gamma:embedding层的layernorm参数gamma。
    • post_output_kernel:squad后处理中的矩阵乘的权值。
    • post_output_bias:squad后处理中的矩阵乘的偏置。
    • attr_kernel_Q_ch0:query层的矩阵乘的权值。
    • attr_kernel_Q_ch1:query层的矩阵乘的权值。
    • attr_kernel_Q_ch2:query层的矩阵乘的权值。
    • attr_kernel_Q_ch3:query层的矩阵乘的权值。
    • attr_bias_Q:query层的矩阵乘的偏置。
    • attr_kernel_K_ch0:key层的矩阵乘的权值。
    • attr_kernel_K_ch1:key层的矩阵乘的权值
    • attr_kernel_K_ch2:key层的矩阵乘的权值。
    • attr_kernel_K_ch3:key层的矩阵乘的权值。
    • attr_bias_K:key层的矩阵乘的偏置。
    • attr_kernel_V_ch0:value层的矩阵乘的权值。
    • attr_kernel_V_ch1:value层的矩阵乘的权值。
    • attr_kernel_V_ch2:value层的矩阵乘的权值。
    • attr_kernel_V_ch3:value层的矩阵乘的权值。
    • attr_bias_V:value层的矩阵乘的偏置。
    • attr_output_kernel_ch0:attention_output层的矩阵乘的权值。
    • attr_output_kernel_ch1:attention_output层的矩阵乘的权值。
    • attr_output_kernel_ch2:attention_output层的矩阵乘的权值。
    • attr_output_kernel_ch3:attention_output层的矩阵乘的权值。
    • attr_output_bias:attention_output层的矩阵乘的偏置。
    • attr_layernorm_beta:attention_output层的矩阵乘的beta。
    • attr_layernorm_gamma:attention_output层的矩阵乘的gamma。
    • inter_kernel_ch0:intermediate层的矩阵乘的权值。
    • inter_kernel_ch1:intermediate层的矩阵乘的权值。
    • inter_kernel_ch2:intermediate层的矩阵乘的权值。
    • inter_kernel_ch3:intermediate层的矩阵乘的权值。
    • inter_bias:intermediate层的矩阵乘的偏置。
    • output_kernel_ch0:output层的矩阵乘的权值。
    • output_kernel_ch1:output层的矩阵乘的权值。
    • output_kernel_ch2:output层的矩阵乘的权值。
    • output_kernel_ch3:output层的矩阵乘的权值。
    • output_bias:output层的矩阵乘的偏置。
    • output_layernorm_beta:output层的矩阵乘的beta。
    • output_layernorm_gamma:output层的矩阵乘的gamma。
    • fix_pos:网络中所有Matmul或BatchMatMul的position。
    • batch_num:输入的batch数。
    • input_seq_len:输入语句长度output层的矩阵乘的权值、偏置、beta和gamma。

输出:

  • 以下面方式计算的输出结果:

half * encoder_out / encoder

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • batch_size = 1~8
    • seq_len = 128 ~512 && seq_len % 64 =0
    • batch_size * seq_len <= 1024

BertPre

  • 功能描述

是BERT网络的前处理步骤。通过查表操作,对输入进行embedding操作。

支持型号:MLU220和MLU270系列。支持TensorFlow和PyTorch。

  • 参数限制

输入:

  • param:输入参数结构体。
  • cnml_static_ptr:一组描述输入权值的四维张量。
  • cnml_intput_ptr:一组描述输入数据的四维张量。

输出:

  • cnml_output_ptr:一组描述处理后数据的四维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

输入seq_len不得超过512。

Bert Squad

  • 功能描述

执行任务类型为SQuAD1.1的BERT-Base网络。

支持型号:MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • input ids:数据类型为int32,形状为(batch, seqlen)。
  • input_mask:数据类型为float16,形状为(batch, seqlen)。
  • token_type_ids:数据类型为int32,形状为(batch, seqlen)。
  • word_embedding_table:embedding层的3个词向量表。
  • segment_embedding_table:embedding层的3个词向量表。
  • position_embedding_table:embedding层的3个词向量表。
  • embedding_layernorm_beta:embedding层的layernorm参数beta。
  • embedding_layernorm_gamma:embedding层的layernorm参数gamma。
  • post_output_kernel:squad后处理中的矩阵乘的权值。
  • post_output_bias:squad后处理中的矩阵乘的偏置。
  • attr_kernel_Q_ch0:query层的矩阵乘的权值。
  • attr_kernel_Q_ch1:query层的矩阵乘的权值。
  • attr_kernel_Q_ch2:query层的矩阵乘的权值。
  • attr_kernel_Q_ch3:query层的矩阵乘的权值。
  • attr_bias_Q:query层的矩阵乘的偏置。
  • attr_kernel_K_ch0:key层的矩阵乘的权值。
  • attr_kernel_K_ch1:key层的矩阵乘的权值。
  • attr_kernel_K_ch2:key层的矩阵乘的权值。
  • attr_kernel_K_ch3:key层的矩阵乘的权值。
  • attr_bias_K:key层的矩阵乘的偏置。
  • attr_kernel_V_ch0:value层的矩阵乘的权值。
  • attr_kernel_V_ch1:value层的矩阵乘的权值。
  • attr_kernel_V_ch2:value层的矩阵乘的权值。
  • attr_kernel_V_ch3:value层的矩阵乘的权值。
  • attr_bias_V:value层的矩阵乘的偏置。
  • attr_output_kernel_ch0:attention_output层的矩阵乘的权值。
  • attr_output_kernel_ch1:attention_output层的矩阵乘的权值。
  • attr_output_kernel_ch2:attention_output层的矩阵乘的权值。
  • attr_output_kernel_ch3:attention_output层的矩阵乘的权值。
  • attr_output_bias:attention_output层的矩阵乘的偏置。
  • attr_layernorm_beta:attention_output层的矩阵乘的beta。
  • attr_layernorm_gamma:attention_output层的矩阵乘的gamma。
  • inter_kernel_ch0:intermediate层的矩阵乘的权值。
  • inter_kernel_ch1:intermediate层的矩阵乘的权值。
  • inter_kernel_ch2:intermediate层的矩阵乘的权值。
  • inter_kernel_ch3:intermediate层的矩阵乘的权值。
  • inter_bias:intermediate层的矩阵乘的偏置。
  • output_kernel_ch0:output层的矩阵乘的权值。
  • output_kernel_ch1:output层的矩阵乘的权值。
  • output_kernel_ch2:output层的矩阵乘的权值。
  • output_kernel_ch3:output层的矩阵乘的权值。
  • output_bias:output层的矩阵乘的偏置。
  • output_layernorm_beta:output层的矩阵乘的beta。
  • output_layernorm_gamma:output层的矩阵乘的gamma。
  • fix_pos:网络中所有Matmul和BatchMatMul的position。
  • batch_num:输入的batch数 。
  • input_seq_len:输入语句长度。

输出:

  • start_logits:数据类型为float32,形状为(8, 128)。
  • end_logits:数据类型为float32,形状为(8, 128)。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • batch_size的值范围为 1 - 8。
    • seq_len的值范围为128 - 512并且 seq_len % 64 的余数为0。
    • batch_size * seq_len 的值应小于或者等于1024。

Box Coder

  • 功能描述

基于PaddlePaddle框架的box_coder()算子。

接收边界框坐标,先验框坐标和先验框坐标的方差,并对边界框坐标进行编码。

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • row:边界框的个数。
    • col:边界框类别的个数。
    • len:边界框坐标的维度,必须是4。
    • axis:先验框形状的参数。
    • normalized:输出结果是否需要归一化的标志位。
    • float_presicion:浮点数数据类型。
    • code_type:编码的方式。
    • core_version:运行的硬件平台。
    • input_tensors:一组四维输入张量。张量的个数为3,顺序为:target_box_tensor(边界框坐标), prior_box_tensor(先验框坐标),prior_box_var_tensor(先验框坐标方差)。

输出:

  • output_tensors:一组思维输出张量。张量的个数是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Clip Boxes

  • 功能描述

对超出边界的框进行裁剪。

支持型号:MLU220和MLU270系列。

  • 参数限制

参数

  • normalized:bool类型,表示是否对框进行归一化。
  • num_boxes: int类型,表示框的数量。
  • data_type:int类型,表示输入的数据类型。取值2代表half,取值4代表float。
  • core_num:int类型,表示可用的硬件核数。
  • core_version:硬件平台。

输入:

  • boxes:输入框,形状是[num_boxes, 4]。
  • image_shape:图片形状,形状是[4]。

输出:

输出形状是[num_boxes, 4]的四维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Combined NMS

  • 功能描述

支持多batch多class的NMS。

支持型号:MLU220和MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体。
  • box:一个3维tensor,描述输入的box。
  • score:一个3维tensor,描述输入的score。
  • 参数:
    • max_size_per_class:每个label的最大输出size。
    • total_size_per_batch:每个batch的最大输出size,为-1时等于num_boxes。
    • nms_topk:控制NMS前面的topk。
    • score_threshold:分数阈值。
    • iou_threshold:iou阈值。
    • pad_per_class:是否对每个class做pad。
    • clip_boxes:是否进行ClipToWindow。
    • normalized:是否正则化。
    • nms_eta:动态调整iou阈值。
    • background_label:背景的label。
    • batch_size:batch大小。
    • num_classes:输入class的数量。
    • num_boxes:输入box的数量。
    • box_size:box的维度。
    • data_type:数据类型,支持half和float32。

输出:

  • output_box:一个3维张量,描述输出box。
  • output_score:一个2维张量,描述输出box的score。
  • output_class:一个2维张量,描述输出box的class。
  • output_valid:一个1维张量,描述各bacth输出的有效box的数量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Conv3d

  • 功能描述

五维(NDHWC)卷积运算。

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • input_n:输入张量的batch维度。
    • input_d:输入张量的depth维度。
    • input_h:输入张量的height维度。
    • input_w:输入张量的weight维度。
    • input_c:输入张量的channel维度。
    • output_d:输出张量的depth维度。
    • output_h:输出张量的height维度。
    • output_w:输出张量的weight维度。
    • output_c:输出张量的channel维度。
    • kernel_d : 卷积核的depth维度。
    • kernel_h : 卷积核的hight维度。
    • kernel_w : 卷积核的weight维度。
    • stride_d: 卷积核在depth维度的步长。
    • stride_h: 卷积核在hight维度的步长。
    • stride_w: 卷积核在weight维度的步长。
    • dilation_d: 卷积核在depth维度的膨胀大小。
    • dilation_h: 卷积核在hight维度的膨胀大小。
    • dilation_w: 卷积核在weight维度的膨胀大小。
    • pad_d1: 输入在depth维度起始处的填充大小。
    • pad_d2: 输入在depth维度终末处的填充大小。
    • pad_h1: 输入在hight维度起始处的填充大小。
    • pad_h2: 输入在weight维度终末处的填充大小。
    • pad_w1: 输入在weight维度起始处的填充大小。
    • pad_w2: 输入在weight维度终末处的填充大小。
    • groups: 卷积在channel维度分组大小。
    • has bias:是否具有bias。
    • in_oc_pos:输入张量的量化position。
    • in_oc_scale:输入张量的量化scale。
    • filter_pos:权值的量化position。
    • filter_scale:权值的量化scale。
    • compute_dtpe :输入张量的片上计算类型。
    • input_tensors:输入数据的描述符,个数必须是1。
    • filter_tensors:权值数据的描述符,个数必须是1。
    • bias_tensors:bias数据的描述符,个数必须是1。

输出:

  • output_tensors:输出数据的描述符,个数必须是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Conv3d Bn Scale Active

  • 功能描述

在conv3d的输出上进行bn scale active运算。

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体。

    • input_n:输入张量的batch维度。
    • input_d:输入张量的depth维度。
    • input_h:输入张量的height维度。
    • input_w:输入张量的weight维度。
    • input_c:输入张量的channel维度。
    • output_d:输出张量的depth维度。
    • output_h:输出张量的height维度。
    • output_w:输出张量的weight维度。
    • output_c:输出张量的channel维度。
    • kernel_d : 卷积核的depth维度。
    • kernel_h : 卷积核的hight维度。
    • kernel_w : 卷积核的weight维度。
    • stride_d: 卷积核在depth维度的步长。
    • stride_h: 卷积核在hight维度的步长。
    • stride_w: 卷积核在weight维度的步长。
    • dilation_d: 卷积核在depth维度的膨胀大小。
    • dilation_h: 卷积核在hight维度的膨胀大小。
    • dilation_w: 卷积核在weight维度的膨胀大小。
    • pad_d1: 输入在depth维度起始处的填充大小。
    • pad_d2: 输入在depth维度终末处的填充大小。
    • pad_h1: 输入在hight维度起始处的填充大小。
    • pad_h2: 输入在weight维度终末处的填充大小。
    • pad_w1: 输入在weight维度起始处的填充大小。
    • pad_w2: 输入在weight维度终末处的填充大小。
    • groups: 卷积在channel维度分组大小。
    • has bias:是否具有bias。
    • in_oc_pos:输入张量的量化position。
    • in_oc_scale:输入张量的量化scale。
    • filter_pos:权值的量化position。
    • filter_scale:权值的量化scale。
    • compute_dtpe :输入张量的片上计算类型。
    • input_tensors:输入数据的描述符,个数必须是1。
    • filter_tensors:权值数据的描述符,个数必须是1。
    • bias_tensors:bias数据的描述符,个数必须是1。
    • bn_mean_tensor:bn_mean数据的描述符,个数必须是1。
    • bn_mean_tensor:bn_varn数据的描述符,个数必须是1。
    • scale_alpha_tensor:scale_alpha数据的描述符,个数必须是1。
    • scale_beta_tensor:scale_beta数据的描述符,个数必须是1。
    • active_type: 激活类型,只能是CNML_ACTIVE_RELU。

输出:

  • output_tensors:输出数据的描述符,个数必须是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Continuation Indicator

  • 功能描述

提供0或者1的输出数据。

支持型号:MLU220和MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • batch_size: 输出的通道数。
    • time_step: 输出的batch数。

输出:

无。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Convolution Forward

  • 功能描述

用于进行卷积计算。

支持型号:MLU270。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • pad_top: h维度的起始处的pad size。
    • pad_bottom: h维度终止处的pad size。
    • pad_left:w维度的起始处的pad size。
    • pad_right: w维度的终止处的pad size。
    • kh:kernel在h维度的大小。
    • kw:kernel在w维度的大小。
    • sh:在h维度的stride大小。
    • sw:在w维度的stride大小。
    • dh:在h维度的dilation大小。
    • dw:在w维度的dilation大小。
    • input_pos:输入的position量化参数。
    • weight_pos:权值的position量化参数。
    • input_scale:输入的scale量化参数。
    • weight_scale:权值的scale量化参数。
    • input_tensors: 输入数据的描述符,一共两个。输入第一个输入规模必须是 [batch_num, hi. wi, ci],layout为NHWC。 第二个输入规模必须是[1, 1, 1, 136],layout为NHWC。0-7的元素为 [batch_num, hi, wi, ci, ho, wo, co],8-134的元素为block_info的数据, 135的元素为kernel_type。block_info和kernel_type都通过调用接口获得。

输出:

  • output_tensors: 输出数据的描述符,一共一个输出。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入类型-权值类型-偏移类型-输出类型分别支持 float16、int8、float16、float16或者float16、int8、float16、uint8。
    • ci和co只能为3和64的排列组合。
    • pad size只能在ci = co =3 时,等于0。

Crop And Resize

  • 功能描述

从输入图片中裁剪出小图再调整尺寸到指定大小,实现过程如下:

  1. roiNums决定一张图片裁剪多少次。
  2. cropParams 决定每次裁剪的坐标(x y w h)。
  3. 将各个裁剪得到的小图片调整到指定大小。

支持型号:MLU220和MLU270系列。

  • 参数限制

输入:

  • PluginCropAndResizeOp参数结构体:

    • src:四维张量用于描述原始图像。
    • cropParams:四维张量用于描述所有的分割参数和roi参数。
    • roiNums:四维张量用于描述每张图片的roi个数。

输出:

  • dst:四维张量用于描述目标图像。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。若返回异常则至少以下两项中有一项不满足要求:

  • 参数与输入张量相对应。
  • cropParams和roiNums一致。
  • 规格限制
    • 输入图像的宽度不超过8,192像素。
    • 输出图像的宽度不超过2,048像素(MLU270系列)。
    • 放大模式下的倍率不超过50(MLU270系列)。
    • 输入的batch数必须是1。
    • cropParams中储存的roi框描述方式均为左上角坐标以及框的宽和高,依次为roi_x、roi_y、roi_w、roi_h。

Crop Feature And Resize

  • 功能描述

对输入的feature map(N C H W),根据检测出的bbox的坐标位置,将对应位置的feature map(N C H W)片段截取出来,然后所有截取的feature map都改变大小为固定的大小。

  • box_number表示对feature map进行多少次剪裁。
  • boxes_gdrm表示每次剪裁的坐标(x, y, w, h)。

支持型号:MLU220和MLU270系列。支持TensorFlow。

  • 参数限制

输入:

PluginCropFeatureAndResizeOp参数结构体:

  • src_gdrm:四维张量用于描述输入feature map。
  • boxes_gdrm:四维张量用于描述输入剪裁的坐标。
  • box_index_gdrm:四维张量用于描述输入boxes的索引。
  • batchNum:batch的大小。
  • depth:输入的channel。
  • image_height:输入feature map的高度。
  • imgae_width:输入feature map的宽度。
  • crop_height:调整的高度。
  • crop_width:调整的宽度。
  • box_number:需要对输入的feature map进行多少次剪裁,即bbox的个数。

输出:

  • dst_gdrm:四维张量用于描述输出的feature map。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。若为异常至少以下两项中有一项不满足要求:

  • 参数与输入张量相对应。
  • boxes_gdrm 和box_number应该一致。
  • 规格限制
    • 输入图像的宽度不超过8,192像素。
    • 输出图像的宽度不超过2,048像素。
    • 放大模式下的倍率不超过50。
    • 输入的batch数必须是1。

Ctc Greedy Decoder

  • 功能描述

此算子用于推理过程,对输入的序列进行解码:对出入的序列数据中的每个序列单元查找概率最大的索引,然后按照分隔符的位置对得到的索引序列进行去重,输出去重后的标签结果。

支持型号:MLU270系列。支持caffe。

  • 参数限制

输入:

  • param: 输入参数结构体,包括:

    • batch_size: 输入张量的batch维度。
    • seq_len:输入数据时间序列的长度,对应输入张量的H维度。
    • class_num:输入数据类别的个数,对应输入张量的W维度,也是一个单元数据的个数。
    • merge_repeated:表示是否进行重复数据归并的标志位。false代表不归并,true代表归并。
    • input:唯一输入张量的描述符,形状为[batch_size, seq_len, class_num, 1]。

输出:

  • output:唯一输出数据的描述符,形状为[batch_size, seq_len, 1, 1]。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入输出tensor数据类型只支持float16。

Deconv3d

  • 功能描述

五维(NDHWC)反卷积运算。

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • input_n:输入张量的batch维度。
    • input_d:输入张量的depth维度。
    • input_h:输入张量的height维度。
    • input_w:输入张量的weight维度。
    • input_c:输入张量的channel维度。
    • output_d:输出张量的depth维度。
    • output_h:输出张量的height维度。
    • output_w:输出张量的weight维度。
    • output_c:输出张量的channel维度。
    • kernel_d : 卷积核的depth维度。
    • kernel_h : 卷积核的hight维度。
    • kernel_w : 卷积核的weight维度。
    • stride_d: 卷积核在depth维度的步长。
    • stride_h: 卷积核在hight维度的步长。
    • stride_w: 卷积核在weight维度的步长。
    • dilation_d: 卷积核在depth维度的膨胀大小。
    • dilation_h: 卷积核在hight维度的膨胀大小。
    • dilation_w: 卷积核在weight维度的膨胀大小。
    • pad_d1: 输入在depth维度起始处的缩减大小。
    • pad_d2: 输入在depth维度终末处的缩减大小。
    • pad_h1: 输入在hight维度起始处的缩减大小。
    • pad_h2: 输入在weight维度终末处的缩减大小。
    • pad_w1: 输入在weight维度起始处的缩减充大小。
    • pad_w2: 输入在weight维度终末处的缩减大小。
    • groups: 卷积在channel维度分组大小。
    • out_padding_d:输出张量在depth维度的填充大小。
    • out_padding_h:输出张量在hight维度的填充大小。
    • out_padding_w:输出张量在weight维度的填充大小。
    • has bias:是否具有bias。
    • in_oc_pos:输入张量的量化position。
    • in_oc_scale:输入张量的量化scale。
    • filter_pos:权值的量化position。
    • filter_scale:权值的量化scale。
    • compute_dtpe :输入张量的片上计算类型。
    • input_tensors:输入数据的描述符,个数必须是1。
    • ilter_tensors:权值数据的描述符,个数必须是1。
    • ias_tensors:bias数据的描述符,个数必须是1。

输出:

  • output_tensors:输出数据的描述符,个数必须是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Deconv3d Bn Scale Active

  • 功能描述

在deconv3d的输出上进行bn scale active运算。

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体。

    • input_n:输入张量的batch维度
    • input_d:输入张量的depth维度
    • input_h:输入张量的height维度。
    • input_w:输入张量的weight维度。
    • input_c:输入张量的channel维度。
    • output_d:输出张量的depth维度。
    • output_h:输出张量的height维度。
    • output_w:输出张量的weight维度。
    • output_c:输出张量的channel维度。
    • kernel_d:卷积核的depth维度。
    • kernel_h:卷积核的hight维度。
    • kernel_w:卷积核的weight维度。
    • stride_d:卷积核在depth维度的步长。
    • stride_h:卷积核在hight维度的步长。
    • stride_w:卷积核在weight维度的步长。
    • dilation_d:卷积核在depth维度的膨胀大小。
    • dilation_h:卷积核在hight维度的膨胀大小。
    • dilation_w:卷积核在weight维度的膨胀大小。
    • pad_d1:输入在depth维度起始处的缩减大小。
    • pad_d2:输入在depth维度终末处的缩减大小。
    • pad_h1:输入在hight维度起始处的缩减大小。
    • pad_h2:输入在weight维度终末处的缩减大小。
    • pad_w1:输入在weight维度起始处的缩减充大小。
    • pad_w2:输入在weight维度终末处的缩减大小。
    • groups:卷积在channel维度分组大小。
    • out_padding_d:输出张量在depth维度的填充大小
    • out_padding_h:输出张量在hight维度的填充大小。
    • out_padding_w:输出张量在weight维度的填充大小。
    • has bias:是否具有bias。
    • in_oc_pos:输入张量的量化position。
    • in_oc_scale:输入张量的量化scale。
    • filter_pos:权值的量化position。
    • filter_scale:权值的量化scale。
    • compute_dtpe:输入张量的片上计算类型。
    • input_tensors:输入数据的描述符,个数必须是1。
    • filter_tensors:权值数据的描述符,个数必须是1。
    • bias_tensors:bias数据的描述符,个数必须是1。
    • bn_mean_tensor:bn_mean数据的描述符,个数必须是1。
    • bn_mean_tensor:bn_varn数据的描述符,个数必须是1。
    • scale_alpha_tensor:scale_alpha数据的描述符,个数必须是1。
    • scale_beta_tensor:scale_beta数据的描述符,个数必须是1。
    • active_type:激活类型,只能是CNML_ACTIVE_RELU。

输出:

  • output_tensors:输出数据的描述符,个数必须是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Density Prior Box

  • 功能描述

基于PaddlePaddle框架的desity_prior_box()算子。

基于输入参数 densities、fixed_size,以及 fixed_ratio,为输入图片生成density prior box。

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • feat_width:特征图宽度。
    • feat_height:特征图高度。
    • image_width:网络输入图片宽度。
    • image_height:网络输入图片高度。
    • variances_ptr:先验框坐标方差数据指针。
    • variances_num:先验框坐标的维度,必须是4。
    • densities_ptr:密度数据指针。
    • densities_num:密度数据的维度。
    • fixed_sizes_ptr:fixed_size数据指针。
    • fixed_size_num:fixed_size数据的个数。
    • fixed_ratio_ptr:fixed_ratio数据指针。
    • fixed_rario_num:fixed_ratio数据个数。
    • clip:是否对边界框坐标进行[0,1]区间内的裁剪。
    • step_w:先验框W方向的步长。
    • step_h:先验框w方向的步长。
    • offset:先验框中心相对于网格框中心的偏移。
    • float_precision:浮点数数据类型。
    • core_version:运行的硬件平台。
    • input_tensors:一组四维输入张量。张量的个数为2,顺序为:feat_tensor,img_tensor。

输出:

  • output_tensors:一组思维输出张量。张量的个数是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Depth to Space

  • 功能描述

将输入的depth维度(C)按照 block_size 的尺寸重新排列到 spatial 维度(HW)。

支持型号:MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • input:一个摆数为NHWC的四维张量。
  • block_size:HW维度的块状尺寸。
  • input_n/input_h/input_w/input_c:输入张量的形状。其中,input_c必须是 block_size 的平方的整数倍。

输出

  • output:一个摆数为HHWC的四维张量,形状是[N, H*block_size, W*block_size, C/(block_size*block_size)]。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Depthwise Conv

  • 功能描述

用于深度可分卷积(Depthwise-Separable Convolution)第一部分的计算,相较于通常的卷积,不会在channel维度上进行累加。

支持型号:MLU220和MLU270系列。仅支持4核(Union1)的运行场景。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • kernel_h:权值的height维度。
    • kernel_w:权值的width维度。
    • stride_h:权值在height方向上的stride大小。
    • stride_w:权值在width方向上的stride大小。
    • dilation_h:权值在height方向的dilation大小。
    • dilation_w:权值在width方向的dilation大小。
    • pad_h_back:在height维度末尾额外补充的0的个数。
    • pad_h_front:在height维度开头额外补充的0的个数。
    • pad_w_back:在width维度末尾额外补充的0的个数。
    • pad_w_front:在width维开头额外补充的0的个数。
    • group_count:channel维度进行group拆分的个数。
    • bias_flag:标识Convolution算子计算后是否加上权值的标志位bias。false代表不加bias,true代表加上bias。
    • input_tensors:输入张量的标识符数组,包含三个张量的标识符,存放顺序为:
  1. input:输入张量的标识符,形状为[input_n, input_h, input_w, input_c]。
  2. filter:输入权值的标识符,形状为[output_co, kernel_h, kernel_w, input_c]。
  3. bias:输入偏置的标识符,形状为[output_c, 1, 1, 1]。

输出:

  • output_tensor:输出张量的标识符,形状为[output_n, output_h, output_w, output_c]。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • kernel_h * kernel_w 不能超过1024。
    • dilation_h 和 dilation_w必须是1。
    • 输入-权值-输出的数据类型组合目前只支持:
      • float16-float16-float16
      • float32-float32-float32

Det Retina Detection Output

  • 功能描述

Det网络后处理算子。

  1. 接收坐标、类别、置信度和topk的框索引号四个输入张量以及张量的形状参数。
  2. 将相应位置的数据解码成边界框的坐标。左上角位置的xy坐标以及框的长宽。
  3. 最后算子会对解码后生成的边界框进行非极大值抑制(NMS)操作,将不符合要求的边界框筛除,并输出剩余的边界框。

支持型号:MLU220和MLU270系列。支持PyTorch。

  • 参数限制

输入:

  • inputs:一组detretina的输入张量,维度是四维。
  • detretina_static_tensors:当标志位 CONST_PRIOR_TENSOR 为true时,需要传入先验框张量的指针(priorbox and variance),否则置为nullptr即可。

输出:

  • outputs:一组retina的输出张量,维度是四维,形状是 [batchNum, 64 + 7 * numMaxBox, 1, 1](NCHW)。目前仅支持FLOAT16类型。每个batch的前两个数字存储检框,每个检测框的数据从第65个数字开始,以[batchId, classId, score, x1, y1, x2, y2]的顺序存储,(x1, y1) 和(x2, y2)代表左上和右下检测框的坐标值。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Faster Rcnn Detection Output

  • 功能描述

对Faster-RCNN全连接层产生的数据进行处理,实现过程如下:

  1. 对于每个roi,根据bbox_pred进行坐标变换,得到真正的框的坐标。
  2. 对于每个类别,筛除score小于阈值的框,将其概率置为0。
  3. 按照类别,对剩下的框进行NMS操作。
  4. 按照类别,输出筛选得到有效的含有该类别物体的所有框的坐标及其分数。

支持型号:MLU220和MLU270系列。支持Caffe。

  • 参数限制

输入:

  • PluginFasterRcnnDetectionOutput参数结构体:

    • bbox_pred:一组四维张量,形状是[num_class * 4, box_num, 1, 1](NCHW),支持类型是FLOAT16和FLOAT32。
    • scores_pred:一组四维张量,形状是[num_class, box_num, 1, 1](NCHW),支持类型是FLOAT16和FLOAT32。
    • rois_pred:一组四维张量,形状是[1, box_num, 1, 5](NCHW),支持类型是FLOAT16和FLOAT32。
    • batch_num:batch的个数。
    • box_num:检测框个数。
    • im_h:backbone网络的输入图像的高度。
    • im_w:backbone网络的输入图像的宽度。
    • score_thresh:得分的阈值。
    • fix8:输入张量的类型是否为int8。如果该参数设为1,输入张量的类型是int8类型。如果该参数设为0,输入张量的类型是FLOAT或者HALF类型。
    • scale:图片的缩放比例。

输出:

  • new_box:一组四维张量,形状是[1, box_num * num_class, 1, 6](NCHW),支持类型是FLOAT16和FLOAT32。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Gemm Topk

  • 功能描述

对量化后的特征查询向量与底库进行矩阵乘,求得内积相似度,再输出相似度的topk以及索引。

支持型号:MLU270和MLU220系列。支持PyTorch。

  • 参数限制

输入:

  • Param参数结构体包括:

    • m:查询特征向量的batch数。
    • k:特征向量的特征长度。
    • n:底库中向量的数量。
    • topk:输出相似度最高的特征向量的个数。
    • recip_scale: 数据的量化参数Scale的数据。
    • pos:数据的量化参数Position的数据。
    • input_tensors:输入数据的描述符,个数必须为2。第一个张量代表查询向量,形状为 [m, k, 1, 1]。第二个张量代表库向量,形状为 [k, n, 1, 1]。

输出:

  • output_tensors:输出数据的描述符个数必须为3,第一个张量代表查询向量与所有库向量的相似度,形状为 [m, n, 1, 1]。第二个张量代表前topk个内积相似度的值,形状为 [m, topk, 1, 1]。第三个张量代表前topk个内积相似度的索引,形状为 [m, topk, 1, 1]。
  • 规格限制

无。

Grid Sample

  • 功能描述

此算子需要输入一个input以及对应的flow-filed网格,比如光流、体素流等,根据流场grid中每个位置提供的坐标信息(这里指input中的pixel坐标),将input中对应位置的像素值双线性插值到grid指定的位置,得到最终输出。

支持型号:MLU270和MLU220系列。

  • 参数限制

输入:

  • Param参数结构体包括:

    • batch_size:输入batch的数目。
    • channels:输入c维度的大小。
    • input_width:输入width的大小。
    • input_height:输入height的大小。
    • output_width:输出width的大小。
    • output_height:输出height的大小。
    • input_tensors:包含两个tensor,存放顺序为:
  1. 输入tensor,layout为[N,H_in,W_in, C]。
  2. grid tensor,layout为[N,H_out,W_out,2]。

输出:

  • output_tensors:输出tensor,共一个,layout为[N,H_out, W_out,C]。
  • 规格限制
    • 支持float和half两种数据类型,但是精度会随着输入shape的增长而下降,因此建议使用float模式(half模式与float模式性能一致,且精度较差)。
    • float模式:支持1080P以下常用规模,channels需要小于30,batch_size需要小于15。
    • half模式:不建议使用。

Gru

  • 功能描述

GRU (Gated Recurrent Unit) 是 LSTM 网络的一种效果很好的变体,算子根据时间循环,每个时间片对 input 和 state 分别进行三次矩阵乘和激活,计算得到新的 state,作为下一个时间片的state。同时支持多层与双向功能。

支持型号:MLU220和MLU270系列。支持pytorch。

  • 参数限制

输入:

  • Param参数结构体包括:

    • batch:输入的 N 维度大小。
    • time:输入的 T 维度大小。
    • input_size:输入的 C 维度大小。
    • hidden_size:state 和输出的 C 维度大小。
    • algo:计算模式。
    • num_layer:层数。
    • layout:数据摆放格式。取值1表示NTC;取值0表示TNC。
    • input_tensors:是一组输入数据的描述符,存放顺序为:
  1. 输入数据维度为[batch, time, input_size]。
  2. 隐藏层的描述,维度为[num_layer, batch, hidden_size]。
  3. 权重的描述符,其顺序为[num_layer, bidirectional, 6]。
  4. 张量的偏移,其顺序和权重顺序相同。
  • gru_static_tensors:用于存储权重量化的poition和scale参数。

输出:

  • output_tensors:三个输出数据的描述符,第一个是workspace描述符,第二个为每个时间片的输出,规模为[batch, time, bi * hidden_size],第三个为每层每个方向最后一个的state,规模为[num_layer, bi * hidden_size],其中bi = is_bidirectional ? 2 : 1。
  • 规格限制
    • 对于time或者num_layer太大有可能导致累积误差过大,精度越界的问题。

Lstm

  • 功能描述

LSTM是一类用于处理序列数据的神经网络,它解决了传统神经网络不能从数据中共享位置的特征的问题。

支持型号:MLU270系列。支持pytorch。

  • 参数限制

输入:

  • Param参数结构体包括:

    • t_max:最大RNN输入输出序列的长度。
    • n:输入输出序列的数量。
    • input_size:输入张量的大小。
    • hidden_size:隐藏层的大小。
    • layer_num:堆叠层的数量。
    • direction:选择的循环模式(0表示单向网络,1表示输出压缩在一层)。
    • bias_mode:RNN偏移向量的数据。
    • x_order:RNN输入数据的顺序。
    • y_order:RNN输出输入的顺序。
    • x_qt:RNN输入数据量化的数据类型。
    • x_pos:RNN对应输入数据类型的量化参数position。
    • x_scale:RNN对应输入数据类型的量化参数scale。
    • hx_qt:隐藏层的量化数据类型(目前仅支持与RNN输入数据量化类型相同)。
    • hx_pos:隐藏层的量化参数position。
    • hx_scale:隐藏层的量化参数scale。
    • input_tensors:一个tensor数组,数组个数为五个或四个(无bias时为四个)。
    • static_tensors:一个tensor数组,个数为两个,第一个只支持为整形,第二个只支持为浮点型。

输出:

  • output_tensors:一个tensor数组,个数为四个。数据类型只支持浮点型。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • Weight bytes = qtp_dw * 4 * ALIGN_UP(hidden, 64) * (ALIGN_UP(hidden, 64) + ALIGN_UP(vector_size, 64)) <= 4MB。
    • ALIGN_CI = (128 / out_dw) >= (64 / qtp_dw) ? (128 / out_dw) : (64 / qtp_dw)。 当权重大小小于1M时,需要满足:
    • 374KB <= n * (CEIL_ALIGN(hidden_size, ALIGN_CI) * (out_dw + qtp_dw) +
    • CEIL_ALIGN(vector_size, ALIGN_CI) * (out_dw + qtp_dw) +
    • CEIL_ALIGN(hidden_size, ALIGN_CO) * (out_dw * 6))
    • + 8 * CEIL_ALIGN(hidden_size, ALIGN_CO) * out_dw。

当权重大小大于1M且小于4M时,需要满足:

temp = CEIL_ALIGN(CEIL_ALIGN(hidden_size, 64) / 64, 4) / 4。

374KB <= batch * (temp * (out_dw + qtp_dw) +

ALIGN_UP(vector_size, 64) * (out_dw + qtp_dw) +

temp * (out_dw * 6)) + 8 * temp * out_dw  < 374KB。

Mean Std

  • 功能描述

对于输入进行减均值除方差。

支持型号:MLU270系列。

  • 参数限制

输入:

  • input_tensors:输入数据的描述符,个数必须为1,形状是[n,h,w,c]。
  • static_tensors: 输入的常量数据描述符,个数为2。第一个代表均值,形状是[1, 1, 1, c * 64]。第二个代表方差,形状是[1, 1, 1, c * 64]。

输出:

output_tensors:输出数据的描述符个数必须为1,形状为 [n, h, w, c],

  • 规格限制

    • 输入数据是UINT8的时候,(w + 64) * c < 224 * 1024。
    • 输入数据是INT16的时候,(w + 64) * c < 112 * 1024。

Mean Variance Normalize

  • 功能描述

按照一定规则计算输入数据的均值和方差,并使用均值和方差对相应的数据进行归一化。该算子相较于普通的归一化,不使用训练时学习到的mean和std,而是使用输入数据的mean和std进行归一化。

支持型号:MLU270系列和MLU220系列,使用的核数必须是4。

  • 参数限制

    • across_channels:是否分通道进行归一化。当取值为0是,对每一个通道的数据进行归一化,当取值为1时,对整个batch的数据进行归一化。当前仅支持取值为0。

输入:

  • input_tensor:四维非零张量,输入数据的描述符。数据类型必须是UINT8,数据排布顺序必须是NCHW。

输出:

  • output:输出数据的描述符。维度和输入张量相同的输出张量,数据类型必须是FLOAT32,数据排布顺序必须是NHWC。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 256 <= h * w <= 57600。
    • h * w * c < 524288。

Mish

  • 功能描述

Yolov4特有算子,等价于x*tanh(ln(1+exp(x)))。

支持型号:MLU270系列。支持TensorFlow。

  • 参数限制

参数

  • len:输入数据长度。
  • data_type:输入数据类型,2表示half,4表示float。
  • core_version:硬件平台。
  • precision_level: 算子精度水平,可设置0和1,默认是0。

输入:

  • input_tensor:任意维度非零张量。

输出:

  • output:维度等于输入维度的输出张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入张量任意维度非零。

Nms

  • 功能描述

MXNet框架NMS (Non Maximum Suppression)算子。对监测网络中bounding box进行预选框的筛选。

根据overlap_thresh和valid_thresh来对score降序排列的前K个items进行NMS操作。

支持型号:MLU270系列。支持MXNet。

  • 参数限制

输入:

  • param:输入参数结构体。
  • input:输入数据。一个3维张量。形状为[batch_size, num_items, item_size]。其中每个item中必会包含box坐标和score,也可能包含class_id和其他元素。
  • tmp_buff:存放中间结果的张量,形状为(num_items, topk)。
  • score_buff:存放中间结果的张量,形状为(core_num * ALIGN_SIZE)。
  • batch_size(n):batch数。
  • num_items(c):每个batch中item个数。
  • item_size(h):每个item中元素个数,最大支持16个。
  • overlap_thresh:IOU阀值。
  • valid_thresh:分数阀值,会筛选出大于该阀值的item。
  • topk:按分数排序,选取前k个,进行NMS操作。
  • coord_start:box坐标开始的下标,box坐标应该是连续存放的。
  • score_index:score下标。这里的下标都是在item中的下标。
  • id_index:class_id下标。
  • background_id:背景的class_id。
  • force_suppress:bool类型。设为True时,会对所有item进行NMS操作。设为False时,只会对同种类别的item进行NMS操作。
  • in_format:输入box坐标数据格式。
  • out_format:输出box坐标数据格式。0表示corner(xmin,ymin,xmax,ymax),1表示center(x, y, w, h)。

输出:

  • output:输出数据。一个3维张量。与输入数据有相同形状。每个batch前面有效数据是筛选后留下的数据,其余部分置位-1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • item_size不可超过16。

Non Max Suppression

  • 功能描述

按照参数scores的降序来选择边界框的子集。

支持型号:MLU220和MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • param:输入参数结构体。
  • boxes:一个2维张量,描述输入的box。
  • scores:一个1维张量,描述输入的score。
  • len:一个整型值,表示输入box数量。
  • max_num:一个整型值,表示可以利用NMS选中的最大边框数。
  • iou_threshold:一个float值,表示选中框的IOU阈值。
  • score_threshold:一个float值,表示选中框的分数阈值。

输出:

一个描述选中框索引的一维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

OneHot

  • 功能描述

One-Hot编码算子,用N位状态寄存器对N个状态进行编码。

支持型号:MLU220和MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • indices:需要进行编码的目标张量。
  • N、H、W、C:indices的维度信息。
  • depth:编码的深度。
  • onvalue:编码的开值。
  • offvalue:编码的闭值。
  • axis:输出矩阵的扩充轴。

输出:

  • 编码之后的张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 最高支持四维输入。

Op Tensor

  • 功能描述

用于进行简单双目类型的计算。

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • alpha1: input1的标量缩放系数。
    • alpha2: input2的标量缩放系数。
    • beta: output的标量缩放系数,该算子的输出矩阵同时也作为输入使用。
    • op_type: 用于指定算子模式的标志位,0:加法模式;1:减法模式;2:乘法模式。
    • input_tensors: 输入数据的描述符,个数必须是3,前两个分别为两个形状一致的输入矩阵 (即input1,input2)。最后一个输入矩阵用于储存上述两个输入数据的形状,即形状为 [4,1,1,1]的向量,按照NCHW的顺序进行储存。

输出:

  • output_tensors: 输出数据的描述符,个数必须是1,形状必须和两个输入矩阵相同。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入数据支持float32/float16。
    • 输入输出张量的元素个数分别不能超过UINT32数据的上界。

Pad

  • 功能描述

pad算子的功能是将给定值填充到张量外围,其中张量扩展大小是由paddings参数指定的。paddings是形状为[n,2]的整数张量,其中n为张量的秩。对于输入的每个维度dim,paddings[dim, 0]表示的是在张量的dim维度的前端添加的数值个数。paddings[dim, 1]表示的是在张量的dim维度的后端添加的数值个数。因此输出的第k维大小是:paddings[k,0] + tensor.dim_size(k) + paddings[k,1]。

支持型号:MLU220和MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • param:输入参数结构体。
  • input_tensor:一个N维的的张量,1-8维。
  • paddings(dims,2):一个2维const tensor,dims和input_tensor的dims保持一致。

输出:

  • output_tensor:维度和input_tensor保持一致。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Post Process Rpn

  • 功能描述

根据rpn的输出生成region proposal的算子,实现过程如下:

  1. 将输入的anchor解码,得到cy cx h w。
  2. 根据box encoding微调 解码后的anchor坐标。
  3. 计算修正后的框的最大最小值,删掉面积为0的框。
  4. 对分数做softmax。
  5. 去掉softmax后物体概率小于0.01的框。
  6. 剩下的框即是输出。

支持型号:MLU220和MLU270系列。支持TensorFlow。

  • 参数限制

输入:

  • param:输入参数结构体。
  • rpn_box_encodings_batch:描述bounding box的张量。
  • rpn_objectness_predictions_with_background_batc:预测前景和背景的分数值。
  • anchors:描述anchor的张量。
  • tmp_tensor:用于在MLU上分配临时空间的张量。

输出:

  • proposal_box:输出张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Proposal

  • 功能描述

根据anchor和feat map经过NMS操作得到框。

两个主要输入anchors和feat map:

  • anchors是anchor generators算子的输出。对于一个固定网络,anchors是常数,所以也可以用CPU生成后作为const张量传入。
  • feat map一般是从卷积中得到,包含对anchor的微调信息。

实现过程如下:

  1. feat map经过解码得到对x、y、w、h 的微调信息。
  2. 将微调信息应用到anchors上得到算子输出。

支持型号:MLU220和MLU270系列。支持Caffe。

  • 参数限制

输入:

  • param:ProposalOp参数结构体。
  • cnml_input_tensor:两个四维张量组成的数组:
    • bbox:[batch_size,AHW, 1, 4](NCHW)。
    • score:[batch_size,AHW, 1, 4](NCHW)。

输出:

  • cnml_output_tensor:两个四维张量组成的数组,
  • 第一个是算子的正式输出:[batch_size,nms_num, 1, 5](NCHW)
  • 第二个是算子使用的临时空间:[batch_size,AHW * 6, 1, 1](NCHW)

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

PS ROI Pool

  • 功能描述

position sensitive的roi pooling算子。该算子接收代表score与bbox的特征图以及对应的ROI信息,对于每一个ROI,输出一个由所有grid cell平均池化的结果堆叠而来的特征图。

支持型号:MLU220和MLU270系列。支持Caffe。

  • 参数限制

输入:

PluginPsRoiPoolOp参数结构体:

  • proposal_input_tensors:一组四维张量,长度为2。输入张量bbox的形状是[batchNum,AWH, 1, 4](NCHW)、ROI框的形状是[batch_num, num_rois, rois_offset, 1]。支持类型是FLOAT16。

输出:

  • proposal_output_tensors:一组四维张量,形状是[batchNum * num_rois, outputdim, pooled_height, pooled_width](NCHW)。如果需要转数输出,那么就需要初始化该向量的position和scale。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回。

Pyramid ROI Align

  • 功能描述

根据rois的面积,对roi进行分级,不同级的roi选择不同的feature输入进行CropAndResize操作。

支持型号:MLU220和MLU270系列。

  • 参数限制

参数

  • batch_size:当前实现仅支持batch_size=1。
  • roi_nums:roi框的数量。
  • roi_cols:表示每个roi框所使用的数字个数。
  • features_channel:输入特征的channel数。
  • feature_1_height和feature_1_width:第一个特征张量的height和width。
  • feature_2_height和feature_2_width:第二个特征张量的height和width。
  • feature_3_height和feature_3_width:第三个特征张量的height和width。
  • feature_4_height和feature_4_width:第四个特征张量的height和width。
  • image_meta_len:描述输入图片的元数据长度。
  • crop_height和crop_width:crop框的height和width。
  • data_type:输入数据的字节数,取值2代表half,取值4代表float。

输入:

  • boxes:存储roi框的张量,形状是(batch_size, roi_nums, roi_cols]。
  • input_image_meta:存储描述图片元数据的张量,形状是(1,14)。
    • 形状为[0]:表示图片ID。
    • 形状为[1:4):表示原始图片形状。
    • 形状为[4:7):表示图片形状。
    • 形状为[7:11):表示图片窗口。
    • 形状为[11):表示规模。
    • 形状为[12:]:表示前景类别序号。
    • featrue_map_fp1:一共四组feature输入,该输入保存第一组feature,形状是(batch_size, feature_1_height, feature_1_width, feature_channels)。
    • featrue_map_fp2:一共四组feature输入,该输入保存第二组feature,形状是(batch_size, feature_2_height, feature_2_width, feature_channels)。
    • featrue_map_fp3:一共四组feature输入,该输入保存第三组feature,形状是(batch_size, feature_3_height, feature_3_width, feature_channels)。
    • featrue_map_fp4:一共四组feature输入,该输入保存第四组feature,形状是(batch_size, feature_4_height, feature_4_width, feature_channels)。

输出:

输出形状是(batch_size, roi_nums, crop_heitght, crop_width, feature_channels)的一个四维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回。

  • 规格限制

当前实现仅支持batch_size等于1。

Range

  • 功能描述

创建数字序列。

支持型号:MLU220和MLU270系列。支持TensorFlow。

  • 参数限制

输入:

输入为三个张量,维度为都为1:

  • start:序列范围的起始值。
  • limit:序列上限。
  • delta:递增start的数字。

输出:

  • 生成序列的一维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Refine Detections

  • 功能描述

筛选出每个类别得分最高的框,然后对得分最高的框进行校准。

支持型号:MLU220和MLU270系列。

  • 参数限制

参数

  • batch_size:int类型,目前只支持取值为1。
  • num_boxes:int类型,表示框的数量。
  • num_classes:int类型,表示类别数量。
  • meta_length:int类型,表示输入图片的元数据长度。
  • box_std0:float类型,标准差。校准框时乘的一个系数。
  • box_std1:float类型,标准差。校准框时乘的一个系数。
  • box_std2:float类型,标准差。校准框时乘的一个系数。
  • box_std3:float类型,标准差。校准框时乘的一个系数。
  • data_type:int类型,表示输入的数据类型。取值2代表half,取值4代表float。
  • core_num:int类型,表示可用的硬件核数。
  • core_version:硬件平台。

输入:

  • boxes:候选框,形状是[batch_size,num_boxes,4]。
  • probs:候选框对应类别得分,形状是[batch_size,num_boxes,num_classes]。
  • delta boxes:候选框的偏移值,形状是[batch_size,num_boxes,num_classes,4]。
  • image_meta:图片元数据,形状是[batch_size,14]。
    • 形状为[0]:表示图片ID。
    • 形状为[1:4):表示原始图片形状。
    • 形状为[4:7):表示图片形状。
    • 形状为[7:11):表示图片窗口。
    • 形状为[11):表示规模。
    • 形状为[12:]:表示前景类别序号。

输出:

  • output_boxes:输出框,形状是[batch_size,num_classes,num_boxes,4]。
  • output_probs:形状是[batch_size,num_classes,num_boxes]。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

当前实现仅支持batch_size等于1。

Reflection Pad

  • 功能描述

镜像补pad操作,基于PyTorch中的同名接口的实现。

支持型号:MLU220和MLU270系列。支持PyTorch。

  • 参数限制

参数

  • core_version:硬件平台。
  • n:int类型,输入的batch数。
  • c:int类型,输入的通道数。
  • h:int类型,输入的高度。
  • w:int类型,输入的宽度。
  • pad_left:int类型,左边补pad的大小。
  • pad_right:int类型,右边补pad的大小。
  • pad_top:int类型,上面补pad的大小。
  • pad_bottom:int类型,下面补pad的大小。
  • dtype:int类型,表示输入的数据类型。0表示half类型,1表示float类型。

输入:

  • input_tensor:一个四维张量,各个维度均为非零正整数。

输出:

  • output_tensor:一个四维张量,各个维度均为非零正整数,输出张量的周围会带上通过pad_left,pad_right,pad_top,pad_bottom四个参数定义的pad数据。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。如果返回异常,则以下两种条件至少有一种没有满足:

  • 规格限制

输出的通道co和宽度wo:

  • float 类型:wo * co < 1024 * 112
  • half类型:wo * co <1024 * 224

Residual In Residual

  • 功能描述

RCAN超分网络的ResidualInResidual模块的融合算子,融合了两个ResidualInResidual模块。

  • 参数限制

输入:

  • param:输入参数结构体。

    • input0_pos: conv0输入数据的Position量化参数。
    • input1_pos: conv1输入数据的Position量化参数。
    • input2_pos: conv2输入数据的Position量化参数。
    • input3_pos: conv3输入数据的Position量化参数。
    • post_pos: 算子输出数据的Position量化参数。
    • weight0_pos: conv0权值数据的Position量化参数。
    • weight1_pos: conv1权值数据的Position量化参数。
    • weight2_pos: conv2权值数据的Position量化参数。
    • weight3_pos: conv3权值数据的Position量化参数。
    • input0_scale: conv0输入数据的Scale量化参数。
    • input1_scale: conv1输入数据的Scale量化参数。
    • input2_scale: conv2输入数据的Scale量化参数。
    • input3_scale: conv3输入数据的Scale量化参数。
    • post_scale: 算子输出数据的Scale量化参数。
    • weight0_scale: conv0权值数据的Scale量化参数。
    • weight1_scale: conv1权值数据的Scale量化参数。
    • weight2_scale: conv2权值数据的Scale量化参数。
    • weight3_scale: conv3权值数据的Scale量化参数。
    • post_cvt: 用于表示是否进行输出数据量化的标志位,0:不进行输出量化;1:进行输出量化。
    • relu_mode: 用于表示激活函数类型的标志位,目前仅支持0,即ReLU激活函数。
    • input_tensors:输入数据的描述符,包含的描述符个数必须是2。第一个描述符代表输入数据, 形状为【N H W 64】,顺序是NHWC。第二个描述符代表输入数据的形状,形状为【4 1 1 1】, 并按照NHWC的顺序储存输入张量的形状数据。
    • static_tensors: 静态数据的描述符,包含的描述符个数必须是8。其中第一,三,五, 七个描述符代表conv0到conv3的权值,形状均为【64 3 3 64】,顺序是NHWC。第二,四,六, 八个描述符代表conv0-conv3的偏置,形状均为【1 1 1 64】,顺序是NHWC。

输出:

  • output_tensors:输出数据的描述符,个数必须是1。形状为【N H W 64】的张量。形状必须和输入张量相同。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

  • 偏置:数据类型为float16,形状必须为[1 1 1 64]。

  • 输出:输出数据类型为float16。

  • 输入和输出:H和W维度都必须大于等于16。H维度必须小于等于1080, W维度必须小于等于1920。C维度必须是64。

  • 权重:形状必须是[64 3 3 64]。

Resize

  • 功能描述

对四通道图片RGBA等进行resize。

支持型号:MLU220和MLU270系列。支持Caffe。

  • 参数限制

输入:

  • param:输入参数结构体。
  • cnml_input_ptr:一组描述原始图像的四维张量。

输出:

  • cnml_output_ptr:一组描述处理后图像的四维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。如果返回异常,则以下两种条件至少有一种没有满足:

  • param与输入张量一致。
  • 输入张量没有满足YUV420SP格式。
  • 规格限制
    • 输入图像的宽度不超过4,096像素。
    • 输出图像的宽度不超过2,048像素。
    • 放大模式下的倍率不超过50。

Resize Yuv To Rgba

  • 功能描述

接受YUV图片(420SP),先转换成RGBA,再调整到指定大小后输出。

支持型号:MLU220和MLU270系列。支持Caffe。

  • 参数限制

输入:

  • param:输入参数结构体:

    • s_row:原图像的高(V1接口有效)。
    • s_col:原图像的宽(V1接口有效)。
    • d_row:目标图像的高。
    • d_col:目标图像的宽。
    • roi_x:roi左上角x坐标(V1接口有效)。
    • roi_y:roi左上角y坐标(V1接口有效)。
    • roi_w:roi的宽度(V1接口有效)。
    • roi_h:roi的高度(V1接口有效)。
    • mode:输入YUV图像的格式。
    • batchNum:图像数量。
    • keepAspectRatio:图像缩放时是否保持纵横比(V2、V3接口有效)。
    • padMethod:图像缩放保持纵横比是,边界填充的模式,0为两边填充边界,1为右边或下边填充边界(V3接口有效)。
    • cnml_input_ptr:一组描述原始图像的四维张量:
      • 描述原始图像Y通道数据的四维张量。
      • 描述原始图像UV通道数据的四维张量。
      • 描述原始图像尺寸的四维张量(V2接口有效)。
      • 描述原始图像roi坐标的四维张量(V2接口有效)。

输出:

  • cnml_output_ptr:一组描述处理后图像的四维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。如果返回异常,则以下两种条件至少有一种没有满足:

  • param与输入张量一致。
  • 输入张量没有满足YUV420SP格式。
  • 规格限制
    • 输入图像的宽度不超过8,192像素。
    • 输出图像的宽度不超过2,048像素。
    • roi的右侧边界不应该超过原图像的宽度。
    • roi的下方边界不应该超过原图像的高度。
    • 在横向放大倍数不应该超过64。

Resize Yuv To Yuv

  • 功能描述

调整Yuv420SP_NV12/NV21格式图片的大小。

  1. 接收任意数量的图片的指针并读取数据。
  2. 通过双线性插值将图片调整到指定大小,支持放大和缩小功能。
  3. 将输出的图片按照输入时的顺序连续储存至DDR的给定位置。

支持型号:MLU220和MLU270系列。

  • 参数限制

输入:

  • y_ptr:一组代表了输入图片Y通道数据的指针。指针指向的地址空间并不需要连续。Y通道数据的顺序必须和UV通道数据的顺序一一对应。
  • uv_ptr:一组代表了输入图片UV通道数据的指针。指针指向的地址空间并不需要连续。UV通道数据的顺序必须和Y通道数据的顺序一一对应。
  • s_col:输入图片的宽度,必须为8像素对齐。
  • s_row:输入图片的高度,必须为8像素对齐。
  • d_col:输出图片的宽度,必须为8像素对齐。
  • d_row:输出图片的高度,必须为8像素对齐。
  • batch_num:图片的张数。

输出:

dst_ptr:一整块连续排布的数据块,大小为 batch_num * d_col * d_row。

cnmlCreatePluginResizeYuvToYuvOp_V2和cnmlCreatePluginResizeYuvToYuvOpParam_V3接口支持算子的放大和缩小功能:

  • 输入:

    • param:cnmlPluginResizeAndColorCvtParam_t参数结构体
    • cnml_input_ptr:5个四维度张量组成的数组,大小都是[batchNum, 1, ,1 ,1],
    • Ysrc_gdram:用于存储Y通道输入数据的二级指针,第一维度是batchId,第二维度是每一个batch的Y通道的数据。
    • UVsrc_gdram:用于存储UV通道输入数据的二级指针,第一维度是batchId,第二维度是每一个batch的UV通道的数据。
    • srcWH_gdram:用于存储原始图片的宽度和高度的数据的二级指针,第一维度为batchId,第二维度两个数分别是当前batch的width,heigth
    • roiRect_gdram:用于存储roi描述的二级指针,第一维度为batchId,第二维度为roi_x,roi_y, roi_w, roi_h(每一个batch可以有多个roi)
    • 输出:
      • Ydst_gdram:用于存储Y通道结果的二级指针,第一维度是batchId,第二维度是每一个batch的Y通道的结果
      • UVdst_gdram:用于存储UV通道结果的二级指针,第一维度是batchId,第二维度是每一个batch的Y通道的结果

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 不支持单核情况下运行,最小粒度为1个集群(cluster)。
    • 由于YUV格式的限制,图片的长宽必须都是偶数,roi_x和roi_y也必须是偶数。
    • roi的右侧边界不应该超过原图像的宽度。
    • roi的下方边界不应该超过原图像的高度。
    • 目前V1和V2接口只支持down scale,有效图片的有效宽度应小于4096,且只支持MLU270。V3接口支持放大,最大放大61倍,支持MLU220和MLU270。
    • 在一些规模下,如果MLU端用half存储小数部分,CPU端用double存储小数部分,会导致双线性插值的权重计算精度有一定的误差,最终导致部分像素点结果有所误差。

Retina Detection Output

  • 功能描述

Retina网络后处理算子。

  1. 接收坐标、类别、置信度这三个输入张量及其形状参数。
  2. 将相应位置的数据解码成边界框的坐标。左上角位置的XY坐标以及框的长宽。
  3. 算子对解码后生成的边界框进行非极大值抑制即NMS操作。将不符合要求的边界框筛除,并输出剩余的边界框。

支持型号:MLU220和MLU270系列。支持Pytorch。

  • 参数限制

参数

  • num_rois:输入ROI的数量。
  • spatial_scale:原始图片与特征图的比值。
  • channels:特征图通道数。
  • height:特征图高度。
  • width:特征图宽度。
  • pooled_height:输出池化后的高度。
  • pooled_width:输出池化后的高度。
  • sampling_ratio:每个池化单元划分的格子数。
  • roi_cols:一个ROI单元长度。
  • batch_size:输入特征图batch值。

输入:

  • input_tensors:四维输入张量,ROIS为2维张量。

输出:

  • output_tensor:4维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

ROI Align

  • 功能描述

对region of interest (ROI)区域做双线性插值,然后进行最大池化操作。

  1. ROI数据形状是 [batch_size, rois_num, 1, roi_cols], 或者 [batch_size, roi_cols, rois_num, 1]。其中roi num表示一个batch经过proposal后生成候选框的个数;roi_cols包含框的x1、y1、x2、y2(可能是经过归一化的)。
  2. 从ROI中获取的框的坐标在特征图上均分为画成pooled_height、pooled_width大小的区域,对区域内的值做双线性插值,然后进行最大池化操作得到算子的输出。

支持型号:MLU220和MLU270系列。支持PyTorch。

  • 参数限制

输入:

  • param:RoiPoolOp参数结构体。
  • roiPool_input_tensors:两个四维张量组成的数组,一个形状是[batch_size, channels, height, width](NCHW)。另一个形状是[batch_size, rois_num, 1, roi_cols](NCHW)。支持FLOAT32 和 FLOAT16。
  • roiPool_output_tensors:一组四维张量,形状是[batch_size * rois_num, channels, pooled_height, pooled_width](NCHW)。

输出:

指向BaseOp的指针。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 当前只支持batch=1。

ROI Align For Fpn

  • 功能描述

根据rois的面积,对roi进行分级,对不同级的rois区域分别做双线性插值,然后进行max pooling。最后得到一组尺度统一的归一化后的特征图。

支持型号:MLU220和MLU270系列。

  • 参数限制

    • channels: 输入特征图的通道数。
    • pooled_height: 输出池化后的高度。
    • pooled_width: 输出池化后的宽度。
    • sampling_ratio: 每个池化单元划分的格子数。
    • num_rois: 输入的roi的数量。
    • roi_offset: 每个roi的尺寸,目前必须是4。roi表示形式为[x1,y1,x2,y2]。
    • batch_size: batch size大小。
    • canonical_scale: roi正则面积,用于划分每个roi属于哪一级的特征图。由网络训练时得到的参数。
    • canonical_level: roi正则级数,用于划分每个roi属于哪一级的特征图。由网络训练时得到的参数。
    • num_level: 输入的特征图的级数,根据官网模型文档和该算子接口设计,最大不能超过7。
    • img_h: 输入图片的高度。
    • img_w: 输入图片的宽度。

输入:

  • input_tensors: 输入数据的描述符,个数为num_level加1:

    • 前num_level个为不同级数的特征图, 形状分别是[batch_size, channels, H(n), W(n)],n为第几级的特征图。
    • 最后一个为rois, 形状为[batch_size*num_rois, roi_offset, 1, 1]。
    • static_tensors: 输入的常量数据描述符,个数为1。该常量数据表示了每个级数的特征图的宽高信息。形状为[1, num_level*2, 1, 1],数据排布是[h1, w1, h2, w2, …, hn, wn]。

输出:

  • output_tensors: 输出数据的描述符,个数为1。形状为 [batch_size * rois_num, channels, pooled_height, pooled_width]。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

ROI Pool

  • 功能描述

对region of interest区域进行最大池化,实现过程如下:

  • roi数据的形状为[batch_size, rois_num, 1, roi_cols]。其中roi_num表示一个batch经过proposal后生成候选框的个数,roi_cols包含框的x1 y1 x2 y2(可能是经过归一化的)。
  • 从roi中获取的框的坐标在feature map上均分为pooled_height、pooled_width大小的区域,进行最大池化得到算子的输出。

支持型号:MLU220和MLU270系列。支持Caffe。

  • 参数限制

输入:

  • param:RoiPoolOp参数结构体。
  • roiPool_input_tensors:两个四维张量组成的数组,一个形状是[batch_size, channels, height, width](NCHW)。另一个形状是[batch_size, rois_num, 1, roi_cols](NCHW)。支持FLOAT32 和 FLOAT16。
  • roiPool_output_tensors:一组四维张量,形状是[batch_size * rois_num, channels, pooled_height, pooled_width](NCHW)。

输出:

指向BaseOp的指针。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

ROI Pool For Fpn

  • 功能描述

多尺度RoIPooling。用于特征金字塔网络(FPN),对不同尺度中感兴趣区域(region of interest)进行最大池化(max pooling)。

  1. roi数据形状是 [batch_size, rois_num, 1, roi_cols],其中roi_num表示一个batch经过proposal后生成候选框的个数,roi_cols包含框的x1、y1、x2、y2(可能是经过归一化的)。
  2. 根据roi坐标信息计算出其对应尺度的特征图(feature map)。
  3. 将roi中获取的框的坐标在上一步中所得到的feature map上均分为画成pooled_height和pooled_width大小的区域,进行最大池化得到算子的输出。

支持型号:MLU270系列。支持PyTorch。

  • 参数限制

输入:

  • param:RoiPoolForFpnOp参数结构体。
  • roiPoolForFpn_input_tensors:八个四维张量组成的数组。前七个张量的形状是[batch_size, channels, height, width](NCHW)。不同尺度对应不同的height和width,最多支持7个尺度输入。另一个形状是:[batch_size, rois_num, 1, roi_cols](NCHW)。支持FLOAT32和FLOAT16数据类型。
  • roiPoolForFpn_static_tensors:两个四维张量组成的数组。一个张量用于存放图像信息,形状是[batch_size, 3, 1, 1]。另一个张量存放多尺度feature map的高和宽,形状是[1, 2 * num_level, 1, 1]。

输出:

  • roiPool_output_tensors:一组四维张量,形状是[batch_size * rois_num, channels, pooled_height, pooled_width](NCHW)。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Scatter

  • 功能描述

将src中的数据根据index中的索引按照dim方向填进输入中。

支持型号:MLU220和MLU270系列。支持PyTorch。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • core_version:运行的硬件平台。
    • input_n:输入input的batch。
    • input_h:输入input的height。
    • input_w:输入input的width。
    • input_c:输入input的channel。
    • index_n:输入index的batch。
    • index_h:输入index的height。
    • index_w:输入index的width。
    • index_c:输入index的channel。
    • src_n:输入src的batch。
    • src_h:输入src 的height。
    • src_w:输入src的width。
    • src_c:输入src的channel。
    • axis:scatter的参数表示轴。
    • scalar:表示src是否是标量。src是表示标量,设置为1。否则设置为0。
    • dtype:输入的类型。支持的值:
      • 1:表示float32。
      • 0:表示float16。
      • input_tensors:输入数据的描述符,个数必须是1。

输出:

output_tensors:输出数据的描述符,个数必须是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入的index类型是int32, 输入input和src是float32或float16。
    • 输入和输出的tensor_shape为NHWC。。

SR Basic Block

  • 功能描述

输入特征地图、权值以及量化参数,输出新的特征地图。支持输入可变。

支持型号:MLU270系列。支持PyTorch。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • weight_tensor:输入权值的描述符。
    • weight_float:输入权值的数据,类型是FLOAT32。
    • bias_tensor:输入偏置的描述符。
    • bias_tensor:输入偏置的数据,类型是FLOAT32。
    • input_pos_tensor:输入数据的量化参数Position的描述符。
    • input_pos:输入数据的量化参数Position的数据。
    • input_scale_tensor:输入数据的量化参数Scale的描述符。
    • input_scale:输入数据的量化参数Scale的数据。
    • weight_pos_tensor:权值数据的量化参数Position的描述符。
    • weight_pos:权值数据的量化参数Position的数据。
    • weight_scale_tensor:权值数据的量化参数Scale的描述符。
    • weight_scale:权值数据的量化参数Scale的数据。
    • input_tensors:输入数据的描述符,个数必须是1。

输出:

output_tensors:输出数据的描述符,个数必须是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入数据形状必须是[N 64 360 640](对应NCHW)。
    • 输入权值的形状必须是[64 64 3 3],[64 64 3 3],[64 4 1 1],[4 64 1 1](对应NCHW)。

SR Last Block

  • 功能描述

基于某公司超分辨率网络模型的一部分编写而成的算子。

输入特征地图、权值以及量化参数,输出新的特征地图。

S实现网络中最后的conv+add+deconv模块。实现运算:

output = deconv(conv(input1, weight1) +input2, weight2)

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • weight_tensor:输入权值的描述符,个数必须是3。
    • weight_float:输入权值的数据,类型是FLOAT32。
    • bias_tensor:输入偏置的描述符,个数必须是3。
    • bias_tensor:输入偏置的数据,类型是FLOAT32。
    • input_pos_tensor:输入数据的量化参数Position的描述符。
    • input_pos:输入数据的量化参数Position的数据。
    • input_scale_tensor:输入数据的量化参数Scale的描述符。
    • input_scale:输入数据的量化参数Scale的数据。
    • weight_pos_tensor:权值数据的量化参数Position的描述符。
    • weight_pos:权值数据的量化参数Position的数据。
    • weight_scale_tensor:权值数据的量化参数Scale的描述符。
    • weight_scale:权值数据的量化参数Scale的数据。
    • num_conv:由于deconv会被拆成2个conv,所以num_of_conv必须为3。
    • batch_num:输入的batch大小。
    • hi:输入的height大小。
    • wi:输入的width大小。
    • ho:输出的height大小。
    • wo:输入的width大小。
    • input_tensors:输入数据的描述符,个数必须是2。

输出:

output_tensors:输出数据的描述符,个数必须是1。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • weight的权值大小固定[co, kh, kw ,ci]:

[64, 3, 3, 64 ]

[128, 3, 3, 64 ]

[128, 3, 3, 64 ]

  • bias大小固定分别为:64、128、128。
  • ho = 2 * hi并且wo = 2 * wi。
  • wi <= 1096。

SSD Detection Output

  • 功能描述

Ssd网络后处理算子,实现过程如下:

  1. 接收坐标、类别、置信度这三个输入张量及其形状参数。
  2. 将相应位置的数据解码成边界框的坐标,左上角位置的xy坐标以及框的长宽。
  3. 最后算子会对解码后生成的边界框进行非极大值抑制(NMS操作),将不符合要求的边界框筛除,并输出剩余的边界框。

支持型号:MLU220和MLU270系列。仅支持Caffe和Pytorch框架。

  • 参数限制

输入:

  • inputs:一组ssd的输入张量,维度是四维,形状为[batchNum, (5 + classNum) * numMaskGroup, inputH, inputW](NCHW)。目前仅支持FLOAT16类型。
  • ssd_static_tensors:当标志位 CONST_PRIOR_TENSOR 的值为真时,用户需要在计算前设置 ssd_static_tensors 参数的值为prior_tensor,否则 ssd_static_tensors 参数会被设为空指针。prior_tensor包括priorbox和variance。

输出:

outputs:

  • 一组yolov3的输出张量,维度是四维,形状是 [batchNum, 64 + 7 * numMaxBox, 1, 1](NCHW)。
  • 仅支持FLOAT16类型。
  • 每个batch的前两个数字存储检框的个数,每个检测框的数据从输出张量中每个batch的第65个数字开始,以[batchId, classId, score, x1, y1, x2, y2]的顺序存储,(x1, y1) 和(x2, y2)代表左上和右下检测框的坐标值。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Topk

  • 功能描述

获取每一个Batch的前k个最大值以及该数据在原始数据中对应的下标,最大值按照从大到小的顺序进行排列。

支持型号:MLU220和MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • batch_size:输入的batch数。
    • channels:每一个batch中channel的个数。
    • topk_num:每一个batch中选出前topk_num个最大值。
    • topk_data_type:表述数据输入类型,0:float32,1:float16。
    • topk_index_type: 输入数据下标的类型,0:int32,1:uint32。
    • input_tensors:输入数据的描述符,个数必须是1,只包含输入数据,数据维度只有NC。
    • static_tensors:输入的数据下标描述符,个数必须是1包含输入数据的下标,每一个batch都是从[0,1,…,channels-1]。

输出:

  • output_tensors:输出数据的描述符,个数必须是2。其中的一个tensor为每一个batch中前topk_num个最大值。另一个tensor为每一个最大值对应在原始数据中的下标,两个tensor的维度必须都是NC。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。如果返回异常,则以下至少有一种没有满足:

  • param与输入张量一致。
  • input_tensors的个数为1。
  • static_tensors个数为1。
  • output_tensors个数为2。
  • topk_num <= channels。
  • channels大于等于1,小于int32的最大数据表示范围。
  • 规格限制
    • batch_size支持任意非零整数。
    • channels支持任意非零整数。

Transformer Enc Attn

  • 功能描述

Transformer或Bert网络中的self-atten模块,通俗称为注意力层。实现运算如下:

  1. 生成QKV向量,QKV分别为Query、Key、Value,例如:

x=input,w=weight Q = matmul(x,w) K、V类似。

  1. 计算attention score:Z=QK^T。
  2. 归一化得分:S=softmax(Z)。
  3. Z归一化得分去联合Value:P=matmul(S, transpose(V))。
  4. 尾部接全连接层:F=FullyConnect(P)。
  5. 后置layernorm归一化:Result = Layernorm(P)。

支持型号:MLU270系列。

  • 参数限制

输入:

  • cnml_static_ptr:一组描述输入权值的四维张量,具体如下:

    • 0-layernormbias。
    • 1-layernormscale。
    • 2-QKV权值偏置。
    • 3-尾部权值偏置。
    • 4-Q权值。
    • 5-K权值。
    • 6-V权值。
    • 7-尾部权值。
    • cnml_intput_ptr:一组描述输入数据的四维张量,其中0-输入,1-mask输入。
    • query_factor:Q因子系数。
    • Normalization:是否进行layernorm,0不进行,1进行。
    • batch_size:输入batch数。值必须大于0。
    • token:token数目,支持值在[1, 128]区间内。
    • seq_len:词典长度,仅支持512。
    • dim_k:K向量维度,仅支持64。
    • dim_v:V向量维度,仅支持64。
    • head_size:头部数据,仅支持8。
    • q_weight_pos:Q权值量化pos值。
    • k_weight_pos:K权值量化pos值。
    • v_weight_pos:V权值量化pos值。
    • out_fc_weight_pos:尾部权值量化pos值。
    • q_weight_scale:Q权值量化scale值。
    • k_weight_scale:K权值量化scale值。
    • v_weight_scale:V权值量化scale值。
    • out_fc_weight_scale:尾部权值量化scale值。
    • MASK:是否进行词典掩盖,0不进行,1进行。
    • is_input_quant:输入是否量化。
    • is_input_online_quant:输入是否在线量化。
    • qkv_online_quant:qkT结果是否在线量化。
    • isZout_online_quant:softmax dot v结果是否在线量化。
    • qkv_out_type:QKV输出类型。

输出:

cnml_output_ptr:一组描述处理后数据的四维张量。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

Transformer FFN

  • 功能描述

Transformer或Bert网络中的FFN模块。实现运算如下:

Y=active(X*W1+b1)*W2+b2

active的激活类型一般包括ReLU和GELU。

该算子中还集成了layernorm,包括前置layernorm和后置layernorm。

后置运算为:Y=Layernorm(X + FFN(X))

前置运算为:Y=X+FFN(Layernorm(X))

支持型号:MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体:

    • batch_num:batch数量。支持任意非零整数。
    • seq_len:句子长度。支持任意非零整数。
    • hidden_size:编码向量长度。支持值为256、512、768、1024。
    • filter_size:FFN中间扩维长度。支持值为1024、2048、4096、5120、6144、7168、8192。
    • online_quantify:是否采用在线量化。
    • output_quantify:输出是否提前转数。
    • add_flag:前置layernorm时后面是否采用相加操作。
    • active_mode:激活函数类型。
    • layernorm_mode:采用什么形式的layernorm。
    • input_quantify_pos:输入数据的pos量化参数。
    • input_quantify_scale:输入数据的scale量化参数。
    • inter_quantify_pos:中间结果的pos量化参数。
    • inter_quantify_scale:中间结果的scale量化参数。
    • output_quantify_pos:输出结果的pos量化参数。
    • output_quantify_scale:输出结果的scale量化参数。
    • inter_weights_quantify_pos:内侧权值的pos量化参数。
    • inter_weights_quantify_scale:内侧权值的scale量化参数。
    • outer_weights_quantify_pos:外侧权值的pos量化参数。
    • outer_weights_quantify_scale:外侧权值的scale量化参数。
    • cnml_input_ptr:一组描述输入数据的四维张量。描述输入句子的四维张量[batch_num, seq_len, hidden_size]。

输出:

cnml_output_ptr:一组描述输出数据的四维张量。描述输入句子的四维张量[batch_num, seq_len, hidden_size]。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。返回为异常值的时候,至少有一下两种中的一种情况没有满足:

  • param与输入张量一致。
  • 输入张量没有满足YUV420SP格式。
  • 规格限制
    • batch_num支持任意非零整数。
    • seq_len支持任意非零整数。
    • hidden_size支持256、512、768、1024。
    • filter_size支持1024、2048、3072、4096、5120、6144、7168、8192。

Warp Affine

  • 功能描述

对输入张量进行仿射变换(warp-affine),输入为输入张量以及仿射变换矩阵,输出为仿射变换后的张量。

支持型号:MLU220和MLU270系列。

  • 参数限制

输入:

  • param:输入参数结构体,包括:

    • src:输入张量数据。
    • mat:仿射变换矩阵。
    • batch_size:输入的batch数。
    • dst_h:输出图片的高。
    • dst_w:输出图片的宽。
    • src_h:输入图片的高。
    • src_w:输入图片的宽。
    • c:输入图片以及输出图片的通道数。

输出:

dst:输出tensor数据。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

输入和输出数据类型必须为uint8_t类型。输入和输出的tensor_shape为NHWC。仿射矩阵的数据类型为float32。

Yolov2 Detection Output

  • 功能描述

Yolov2网络后处理算子:

  1. 接收包含坐标、类别对应置信度、objscore和bias这些信息的输入张量及其形状参数。
  2. 将相应位置的数据解码成边界框的坐标。即bbox的中心点坐标和bbox的宽度与高度。
  3. 算子会对解码后生成的边界框进行非极大值抑制(NMS操作)。将不符合要求的边界框筛除,并输出剩余的边界框。
  4. 算子支持输入的特征图宽度和高度不同。

支持型号:MLU220和MLU270系列。支持Caffe。

  • 参数限制

输入:

  • paramYolov2DetectionOutput:参数结构体。
  • inputs:Yolov2的输入四维张量,形状是 [batchNum,5*width*height , 1,5 + classNum](NCHW),支持FLOAT32和FLOAT16。

输出:

  • outputs:两个四维张量,分别为:

    • outputs[0]:yolov2的输出四维张量,形状是[batchNum, 256, 1, 7](NCHW)。每个batch存储在7*256长度的数据块中:

      • 0*256范围内存放batch id。
      • 1*256范围内存放class id。
      • 2*256范围内存放confidence。
      • 3*256范围内存放xc。
      • 4*256范围内存放yc。
      • 5*256范围内存放w。
      • 6*256范围内存放h。
      • outputs[1]:临时空间,维度四位,形状是[batchNum, anchornum * width * height, 1, (paramnum + 5)](NCHW)。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

使用share memory的时候,默认每个核计算decode box之后数量不多于256个框。如果空间不够,可以通过宏文件里面的 SM_BOSNUM_PER_CORE 来配置大小。

Yolov3 Detection Output

  • 功能描述

yolov3网络后处理算子,实现过程如下:

  1. 接收不超过七个的输入张量及其形状参数。
  2. 将相应位置的数据解码成边界框的坐标,左上角位置的xy坐标以及框的长宽。
  3. 最后算子会对解码后生成的边界框进行非极大值抑制(NMS操作)。将不符合要求的边界框筛除,并输出剩余的边界框。

支持型号:MLU220和MLU270系列。支持Caffe和PyTorch。

  • 参数限制

输入:

paramYolov3DetectionOutput 参数结构体:

  • inputs:一组yolov3的输入张量,维度是四维,形状是 [batchNum, (5 + classNum) * numMaskGroup, inputH, inputW](NCHW),目前仅支持FLOAT16类型。

输出:

  • outputs:一组yolov3的输出张量,维度是四维,形状是[batchNum, 64 + 7 * numMaxBox, 1, 1](NCHW),目前仅支持FLOAT16类型。每个batch的第一个数字存储检框,每个检测框的数据从第65个数字开始,以[batchId, classId, score, x1, y1, x2, y2]的顺序存储,(x1, y1) 和(x2, y2)代表左上和右下检测框的坐标值。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入张量的HW乘积之和不超过32,768。
    • 输入张量使用相同数量的anchor。
    • 输入的confidence_thresh可以筛去绝大部分的非物体边界框。
    • 输入输出张量的数据类型支持FLOAT16和FLOAT32。

Yolov5 Detection Output

  • 功能描述

yolov5网络后处理算子,实现过程如下:

  1. 接收不超过七个的输入张量及其形状参数。
  2. 将相应位置的数据解码成边界框的坐标,左上角位置的xy坐标以及框的长宽。
  3. 最后算子会对解码后生成的边界框进行非极大值抑制(NMS操作)。将不符合要求的边界框筛除,并输出剩余的边界框。

支持型号:MLU220和MLU270系列。支持Caffe和PyTorch。

  • 参数限制

输入:

paramYolov5DetectionOutput 参数结构体:

  • inputs:一组yolov5的输入张量,维度是四维,形状是 [batchNum, (5 + classNum) * numMaskGroup, inputH, inputW](NCHW),目前仅支持FLOAT16类型。

输出:

  • outputs:一组yolov5的输出张量,维度是四维,形状是[batchNum, 64 + 7 * numMaxBox, 1, 1](NCHW),目前仅支持FLOAT16类型。每个batch的第一个数字存储检框,每个检测框的数据从第65个数字开始,以[batchId, classId, score, x1, y1, x2, y2]的顺序存储,(x1, y1) 和(x2, y2)代表左上和右下检测框的坐标值。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

    • 输入张量的HW乘积之和不超过32,768。
    • 输入张量使用相同数量的anchor。
    • 输入的confidence_thresh可以筛去绝大部分的非物体边界框。
    • 输入输出张量的数据类型支持FLOAT16和FLOAT32。

Yuv To Rgb

  • 功能描述

接收yuv图片(420SP),输出RGBA等四通道类型的图片。

支持型号:MLU220和MLU270系列。

  • 参数限制

输入:

  • param:PluginYuvToRgbOp参数结构体。
  • yuv2rgb_input_tensors:一组四维张量,形状是[batchNum, channelIn, rows, cols](NCHW),支持类型是FLOAT16和UINT8。

输出:

  • outputs:一组四维张量,形状是[batchNum, channel, rows, cols](NCHW),支持类型是FLOAT16和UINT8。

返回值:

正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。

  • 规格限制

输入图像宽度不超过32,768像素。