本文为 RKNN2 V2.5.0 对应平台的算子参考,供 ArmSoM 开发者选型与模型适配时查阅。不能据此认定所有 ArmSoM 板卡均支持这些算子;需按板卡 SoC、实际 Toolkit2、Runtime、NPU 驱动及 BSP 版本核对。原稿没有统一指定适用 Linux 内核,本文未进行 ArmSoM 硬件验证。
来源:本地中英文《RKNN2 算子支持与约束参考》V2.5.0。中文依中文稿;英俄德依英文稿。两稿分别为 374/384 页。各平台限制独立保留,不将一个平台的支持结论推广到另一个平台。英文稿 I/O 原图与输出表仍含中文,本文保留其来源并另附可编辑的本地化表格。ConvTranpose 等原稿拼写及 LSTM/GRU 原始公式保留;不要将本文公式视为 SDK 实现修正。
原稿页码: CN 175–184; EN 180–189.
算子参考系列目录
RKNN2 V2.5.0 · RK3566/RK3568:基础与卷积
RKNN2 V2.5.0 · RK3566/RK3568:循环网络、运算与池化
RKNN2 V2.5.0 · RK3566/RK3568:形状、切片与转置
RKNN2 V2.5.0 · RK3566/RK3568:激活、归一化与扩展算子
RKNN2 V2.5.0 · RK3588:循环网络、运算与池化
RKNN2 V2.5.0 · RK3588:形状、切片与转置
RKNN2 V2.5.0 · RK3588:激活、归一化与扩展算子
RKNN2 V2.5.0 · RK3562:循环网络、运算与池化
RKNN2 V2.5.0 · RK3562:形状、切片与转置
RKNN2 V2.5.0 · RK3562:激活、归一化与扩展算子
RKNN2 V2.5.0 · RV1103/RV1106:基础与卷积
RKNN2 V2.5.0 · RV1103/RV1106:循环网络、运算与池化
RKNN2 V2.5.0 · RV1103/RV1106:形状、切片与转置
RKNN2 V2.5.0 · RV1103/RV1106:激活、归一化与扩展算子
RKNN2 V2.5.0 · RK3576/RV1126B:基础与卷积
RKNN2 V2.5.0 · RK3576/RV1126B:循环网络、运算与池化
RKNN2 V2.5.0 · RK3576/RV1126B:形状、切片与转置
RKNN2 V2.5.0 · RK3576/RV1126B:激活、归一化与扩展算子
RKNN2 V2.5.0 · RK2118:循环网络、运算与池化
RKNN2 V2.5.0 · RK2118:形状、切片与转置
RKNN2 V2.5.0 · RK2118:激活、归一化与扩展算子
RKNN2 V2.5.0 · RV1103B/RV1106B:基础与卷积
RKNN2 V2.5.0 · RV1103B/RV1106B:循环网络、运算与池化
RKNN2 V2.5.0 · RV1103B/RV1106B:形状、切片与转置
RV1103/RV1106
Add
执行元素级二进制加法(C=A+B),支持多向Numpy样式的广播
输入列表
- A:T1,T2
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
- 广播支持
- 支持任意维度广播操作
- 广播约束同Expand算子
- B:T1,T2
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
- 广播支持
- 支持任意维度广播操作
- 广播约束同Expand算子
输出列表
- C:T1
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
数据类型约束
- T1:int8(Tensor)
- T2:float(constTensor)
AddRelu
Add与Relu融合计算,C=Relu(A+B)
输入列表
- 同Add
输出列表
- 同Add
其他支持
- 多核联合:支持
BatchNormalization
按照论文https://arxiv.org/abs/1502.03167中的描述对输入张量进行批量归一化计算
输入列表
- input:T1
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
输出列表
- output:T1
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
数据类型约束
- T1:int8(Tensor),float16(Tensor)
属性列表
- epsilon:float(默认值=1e-5)
- 除以标准差时加上防止除0的实数
- epsilon∈(0,∞]
- momentum:float
- 训练时的滑动平均参数
Concat
将一系列向量在axis指定的方向上组合成一个向量,所有向量除axis指定的方向外大小必须相同
输入列表
- input_tensor:T
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
输出列表
- output:T
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
数据类型约束
- T:int8(Tensor),float16(Tensor)
属性列表
- axisint64
- axis∈{0,1,2,3}
Convolution
卷积
输入列表
- input_tensor:T1
- shape:[batch,channel,height,width]
- width: 当dilated_kernel_h>1时,width<16383。此外,对首层输入width存在限制,详见模型输入说明。
- 量化支持
- per-layer
- shape:[batch,channel,height,width]
- weight:T1
- shape:[output_channel,input_channel,kernel_h,kernel_w]
- kernel_h∈[1,31]
- kernel_w∈[1,31]
- 量化支持
- per-layer
- per-channel
- shape:[output_channel,input_channel,kernel_h,kernel_w]
输出列表
- output:T1
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
属性列表
- strides:int(strides_h,strides_w)
- stride_h∈[1,7]
- stride_w∈[1,7]
- pads:int(pads_top,pads_left,pads_bottom,pads_right)
- pads_top∈[0,15]
- pads_left∈[0,15]
- pads_bottom∈[0,15]
- pads_right∈[0,15]
- group:int
- dilations:int(dilations_h,dilations_w)
- dilations_h∈[1,31]
- dilations_w∈[1,31]
数据类型约束
- T1:int8(Tensor)
Depthwise Convolution
深度可分离卷积
输入列表
- input_tensor:T1
- shape:[batch,channel,height,width]
- width: 当dilated_kernel_h>1时,width<16383。此外,对首层输入width存在限制,详见模型输入说明。
- 量化支持
- per-layer
- shape:[batch,channel,height,width]
- weight:T1
- shape:[output_channel,input_channel,kernel_h,kernel_w]
- kernel_h∈[1,8]
- kernel_w∈[1,8]
- 量化支持
- per-layer
- per-channel
- shape:[output_channel,input_channel,kernel_h,kernel_w]
输出列表
- output:T1
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
属性列表
- strides:int(strides_h,strides_w)
- stride_h∈[1,7]
- stride_w∈[1,7]
- pads:int(pads_top,pads_left,pads_bottom,pads_right)
- pads_top∈[0,15]
- pads_left∈[0,15]
- pads_bottom∈[0,15]
- pads_right∈[0,15]
- group:int
- dilations:int(dilations_h,dilations_w)
- dilations_h∈[1,32]
- dilations_w∈[1,32]
数据类型约束
- T1:int8(Tensor)
ConvolutionRelu
Convolution与Relu融合计算,Output=Relu(Conv(Input)) 说明及规格限制同Convolution
ConvolutionClip
Convolution与Clip融合计算,Output=Clip(Conv(Input)) 说明及规格限制同Convolution
ConvolutionPRelu/LeakyRelu
Convolution 与 PRelu/LeakyRelu 融合计算, Output = PRelu(Conv(Input)) 或者 Output =LeakyRelu(Conv(Input)) 说明及规格限制同Convolution
ConvolutionAdd
Convolution与Add融合计算,Output=Add(Conv(Input0),Input1) 说明及规格限制同Convolution
ConvolutionSigmoid
Convolution与Sigmoid融合计算,Output=Sigmoid(Conv(Input)) 说明及规格限制同Convolution
ConvolutionTanh
Convolution与Tanh融合计算,Output=Tanh(Conv(Input)) 说明及规格限制同Convolution
ConvolutionSoftplus
Convolution与Softplus融合计算,Output=Softplus(Conv(Input)) 说明及规格限制同Convolution
ConvolutionHardSigmoid
Convolution与HardSigmoid融合计算,Output=HardSigmoid(Conv(Input)) 说明及规格限制同Convolution
ConvolutionHardSwish
Convolution与HardSwish融合计算,Output=HardSwish(Conv(Input)) 说明及规格限制同Convolution
ConvolutionElu
Convolution与Elu融合计算,Output=Elu(Conv(Input)) 说明及规格限制同Convolution
ConvolutionSwish
Convolution与Swish融合计算,Output=Swish(Conv(Input)) 说明及规格限制同Convolution
ConvolutionMish
Convolution与Mish融合计算,Output=Mish(Conv(Input)) 说明及规格限制同Convolution
ConvolutionAddRelu
Convolution与Add及Relu融合计算,Output=Relu(Add(Conv(Input0),Input1)) 说明及规格限制同Convolution
ConvTranspose
转置卷积
输入列表
- input_tensor:T1
- shape:[batch,channel,height,width]
- width: 当dilated_kernel_h>1时,width<16383。此外,对首层输入width存在限制,详见模型输入说明。
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
- weight:T1
- shape:[output_channel,input_channel,kernel_h,kernel_w]
- kernel_h∈[1,31]
- kernel_w∈[1,31]
- 量化支持
- per-layer
- per-channel
- shape:[output_channel,input_channel,kernel_h,kernel_w]
输出列表
- output:T1
- shape:[batch,channel,height,width]
- 量化支持
- per-layer
属性列表
- strides:int(strides_h,strides_w)
- stride_h∈[1,8]
- stride_w∈[1,8]
- pads:int(pads_top,pads_left,pads_bottom,pads_right) 设置pad时注意: 不支持kernel_hdilations_h-dilations_h-pads_top<0 不支持kernel_wdilations_w-dilations_w-pads_left<0 不支持stride_h(height-1)-pads_top+1<output_h 不支持stride_w(width-1)-pads_left+1<output_w
- pads_top∈[0,15]
- pads_left∈[0,15]
- pads_bottom∈[0,15]
- pads_right∈[0,15]
- group:int
- group:仅支持1,当且仅当num_input=num_output时支持num_output
- dilations:int(dilations_h,dilations_w)
- dilations_h∈[1,32]
- dilations_w∈[1,32]
- 当dilation不等于(1,1)时,只支持kernel=(1,1)
数据类型约束
- T1:int8(Tensor)
ConvTranposeRelu
ConvTranpose与Relu融合计算,Output=Relu(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposeClip
ConvTranpose与Clip融合计算,Output=Clip(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposePRelu/LeakyRelu
ConvTranpose与PRelu/LeakyRelu融合计算,Output=PRelu(ConvTranpose(Input))或者Output=LeakyRelu(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposeAdd
ConvTranpose与Add融合计算,Output=Add(ConvTranpose(Input0),Input1) 说明及规格限制同ConvTranspose
ConvTranposeSigmoid
ConvTranpose与Sigmoid融合计算,Output=Sigmoid(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposeTanh
ConvTranpose与Tanh融合计算,Output=Tanh(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposeSoftplus
ConvTranpose与Softplus融合计算,Output=Softplus(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposeHardSigmoid
ConvTranpose与HardSigmoid融合计算,Output=HardSigmoid(ConvTranpose(Input))
ConvTranposeHardSwish
ConvTranpose与HardSwish融合计算,Output=HardSwish(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposeElu
ConvTranpose与Elu融合计算,Output=Elu(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposeSwish
ConvTranpose与Swish融合计算,Output=Swish(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
ConvTranposeMish
ConvTranpose与Mish融合计算,Output=Mish(ConvTranpose(Input)) 说明及规格限制同ConvTranspose
