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
- 功能描述
从输入图片中裁剪出小图再调整尺寸到指定大小,实现过程如下:
- roiNums决定一张图片裁剪多少次。
- cropParams 决定每次裁剪的坐标(x y w h)。
- 将各个裁剪得到的小图片调整到指定大小。
支持型号: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:输入张量的标识符数组,包含三个张量的标识符,存放顺序为:
- input:输入张量的标识符,形状为[input_n, input_h, input_w, input_c]。
- filter:输入权值的标识符,形状为[output_co, kernel_h, kernel_w, input_c]。
- 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网络后处理算子。
- 接收坐标、类别、置信度和topk的框索引号四个输入张量以及张量的形状参数。
- 将相应位置的数据解码成边界框的坐标。左上角位置的xy坐标以及框的长宽。
- 最后算子会对解码后生成的边界框进行非极大值抑制(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全连接层产生的数据进行处理,实现过程如下:
- 对于每个roi,根据bbox_pred进行坐标变换,得到真正的框的坐标。
- 对于每个类别,筛除score小于阈值的框,将其概率置为0。
- 按照类别,对剩下的框进行NMS操作。
- 按照类别,输出筛选得到有效的含有该类别物体的所有框的坐标及其分数。
支持型号: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,存放顺序为:
- 输入tensor,layout为[N,H_in,W_in, C]。
- 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:是一组输入数据的描述符,存放顺序为:
- 输入数据维度为[batch, time, input_size]。
- 隐藏层的描述,维度为[num_layer, batch, hidden_size]。
- 权重的描述符,其顺序为[num_layer, bidirectional, 6]。
- 张量的偏移,其顺序和权重顺序相同。
- 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的算子,实现过程如下:
- 将输入的anchor解码,得到cy cx h w。
- 根据box encoding微调 解码后的anchor坐标。
- 计算修正后的框的最大最小值,删掉面积为0的框。
- 对分数做softmax。
- 去掉softmax后物体概率小于0.01的框。
- 剩下的框即是输出。
支持型号: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的微调信息。
实现过程如下:
- feat map经过解码得到对x、y、w、h 的微调信息。
- 将微调信息应用到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格式图片的大小。
- 接收任意数量的图片的指针并读取数据。
- 通过双线性插值将图片调整到指定大小,支持放大和缩小功能。
- 将输出的图片按照输入时的顺序连续储存至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网络后处理算子。
- 接收坐标、类别、置信度这三个输入张量及其形状参数。
- 将相应位置的数据解码成边界框的坐标。左上角位置的XY坐标以及框的长宽。
- 算子对解码后生成的边界框进行非极大值抑制即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)区域做双线性插值,然后进行最大池化操作。
- 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(可能是经过归一化的)。
- 从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_ 输出池化后的宽度。
- 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)。
- roi数据形状是 [batch_size, rois_num, 1, roi_cols],其中roi_num表示一个batch经过proposal后生成候选框的个数,roi_cols包含框的x1、y1、x2、y2(可能是经过归一化的)。
- 根据roi坐标信息计算出其对应尺度的特征图(feature map)。
- 将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网络后处理算子,实现过程如下:
- 接收坐标、类别、置信度这三个输入张量及其形状参数。
- 将相应位置的数据解码成边界框的坐标,左上角位置的xy坐标以及框的长宽。
- 最后算子会对解码后生成的边界框进行非极大值抑制(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模块,通俗称为注意力层。实现运算如下:
- 生成QKV向量,QKV分别为Query、Key、Value,例如:
x=input,w=weight Q = matmul(x,w) K、V类似。
- 计算attention score:Z=QK^T。
- 归一化得分:S=softmax(Z)。
- Z归一化得分去联合Value:P=matmul(S, transpose(V))。
- 尾部接全连接层:F=FullyConnect(P)。
- 后置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网络后处理算子:
- 接收包含坐标、类别对应置信度、objscore和bias这些信息的输入张量及其形状参数。
- 将相应位置的数据解码成边界框的坐标。即bbox的中心点坐标和bbox的宽度与高度。
- 算子会对解码后生成的边界框进行非极大值抑制(NMS操作)。将不符合要求的边界框筛除,并输出剩余的边界框。
- 算子支持输入的特征图宽度和高度不同。
支持型号: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)。
- outputs[0]:yolov2的输出四维张量,形状是[batchNum, 256, 1, 7](NCHW)。每个batch存储在7*256长度的数据块中:
返回值:
正常返回值是CNML_STATUS_SUCCESS,其他为异常返回值。
- 规格限制
使用share memory的时候,默认每个核计算decode box之后数量不多于256个框。如果空间不够,可以通过宏文件里面的 SM_BOSNUM_PER_CORE 来配置大小。
Yolov3 Detection Output
- 功能描述
yolov3网络后处理算子,实现过程如下:
- 接收不超过七个的输入张量及其形状参数。
- 将相应位置的数据解码成边界框的坐标,左上角位置的xy坐标以及框的长宽。
- 最后算子会对解码后生成的边界框进行非极大值抑制(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网络后处理算子,实现过程如下:
- 接收不超过七个的输入张量及其形状参数。
- 将相应位置的数据解码成边界框的坐标,左上角位置的xy坐标以及框的长宽。
- 最后算子会对解码后生成的边界框进行非极大值抑制(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像素。