Rockchip · AI & Linux Hub

AI 推理

RKNN2 V2.5.0 · RK2118:循环网络、运算与池化

RKNN2 V2.5.0 · RK2118:循环网络、运算与池化 · 完整算子参数与限制,按 V2.5.0 原稿整理。

· ArmSoM Editorial · Rockchip source documentation · 6 分钟阅读

本文为 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 285–296; EN 293–305.

Rockchip RKNN2

算子参考系列目录

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 · RK3588:激活、归一化与扩展算子

RKNN2 V2.5.0 · RK3562:基础与卷积

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 · RK2118:激活、归一化与扩展算子

RKNN2 V2.5.0 · RV1103B/RV1106B:基础与卷积

RKNN2 V2.5.0 · RV1103B/RV1106B:循环网络、运算与池化

RKNN2 V2.5.0 · RV1103B/RV1106B:形状、切片与转置

RKNN2 V2.5.0 · RV1103B/RV1106B:激活、归一化与扩展算子

RKNN2 V2.5.0 · CPU 算子支持与约束

RKNN2 V2.5.0 · GPU 算子支持与约束

RKNN2 V2.5.0 · 模型输入输出、对齐与卷积限制

Div

执行元素级二进制除法(C=A/B),支持多向Numpy样式的广播

输入列表

  • A:T1,T2
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer
    • 广播支持
      • [b,c,1,1]
      • [scalar]
  • B:T1,T2
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer
    • 广播支持
      • [b,c,1,1]
      • [scalar]

输出列表

  • C:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer

数据类型约束

  • T1:float16(Tensor)
  • T2:float(constTensor)

Expand

根据给定的 shape 和广播规则广播输入张量。广播规则类似于 numpy.array(input) *numpy.ones(shape):维度右对齐;两个对应维度必须具有相同的值,或者其中一个等于1

输入列表

  • input:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer
  • shape:T2
    • shape:[batch,channel,height,width]

输出列表

  • output:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer

数据类型约束

  • T1:float16(Tensor)
  • T2:int64(Tensor)

广播约束

  • [b,c,1,w]->[b,c,h,w],h∈[1,8192]
  • [b,1,1,w]->[b,c,h,w],h∈[1,8192]
  • [b,c,h,1]->[b,c,h,w],w ∈[1,8192]
  • [b,1,h,1]->[b,c,h,w],w ∈[1,8192]
  • [b,c,1,1]->[b,c,h,w],h∈[1,8192],w ∈[1,8192]

LSTM

长短期记忆网络(LSTM,Long Short-Term Memory) LSTM扩展以及变体命名为exLSTM算子,参数项中指明 (extern)的项为exLSTM独有的参数项。 计算公式如下:

Equations(Default:f=Sigmoid,g=Tanh,h=Tanh):
i_t = f(x_t · W_i + h_{t−1} · R_i + Wb_i + Rb_i)
f_t= f(x_t · W_f + h_{t−1} · R_f + Wb_f + Rb_f)
c_t = f(x_t · W_c + h_{t−1} · R_c + Wb_c + Rb_c)o_t = f(x_t · W_o + h_{t−1} · R_o + Wb_o + Rb_o)
C_t = f_t ⊙ C_{t−1} + i_t ⊙ c_t
h_t = o_t ⊙h(C_t)

输入列表

  • X:T1
    • shape:[seq_length,batch_size,input_size]
      • seqlength∈(0,8192]
      • batchsize∈(0,8192],大于1时仅支持4的倍数
      • inputsize∈(0,8192]
    • 量化支持
      • per-layer
  • W:T1
    • shape:[num_directions,4*hidden_size,input_size]
      • inputsize∈(0,8192]
      • hiddensize∈(0,8192]
      • numdirections:1or2
    • 量化支持
      • per-layer
      • per-channel
  • R:T1
    • shape:[num_directions,4*hidden_size,hidden_size]
      • hiddensize∈(0,8192]
      • numdirections:1or2
    • 量化支持
      • per-layer
      • per-channel
  • B:T2
    • shape:[num_directions,8*hidden_size]
      • hiddensize∈(0,8192]
      • numdirections:1or2
    • 量化支持
      • per-layer
      • per-channel
  • sequence_lens:T3(optional)
    • shape:[batch_size]
      • batchsize∈(0,8192],大于1时仅支持4的倍数
  • initial_h:T1(optional)
    • shape:[num_directions,batch_size,hidden_size]
      • numdirections:1or2
      • batchsize∈(0,8192],大于1时仅支持4的倍数
      • hiddensize∈(0,8192]
    • 量化支持
      • per-layer
  • initial_c:T1(optional)
    • shape:[num_directions,batch_size,hidden_size]
      • numdirections:1or2
      • batchsize∈(0,8192],大于1时仅支持4的倍数
      • hiddensize∈(0,8192]
    • 量化支持
      • per-layer

输出列表

  • Y:T1
    • shape:[seq_length,num_directions,batch_size,hidden_size]
      • seqlength∈(0,8192]
      • numdirections:1or2
      • batchsize∈(0,8192],大于1时仅支持4的倍数
      • hiddensize∈(0,8192]
    • 量化支持
      • per-layer
  • Y_h:T1(optional)
    • shape:[num_directions,batch_size,hidden_size]
      • numdirections:1or2
      • batchsize∈(0,8192],大于1时仅支持4的倍数
      • hiddensize∈(0,8192]
    • 量化支持
      • per-layer
  • Y_c:T1(optional)
    • shape:[num_directions,batch_size,hidden_size]
      • numdirections:1or2
      • batchsize∈(0,8192],大于1时仅支持4的倍数
      • hiddensize∈(0,8192]
    • 量化支持
      • per-layer

属性列表

  • direction(extern):string
    • 指定LSTM的运算方向
    • forward:指定LSTM的运算方向为前向
    • reverse:指定LSTM的运算方向为反向
    • bidirectional:指定LSTM的运算方向为双向
  • sequence_size(extern):int
    • 指定LSTM输入的seqsize,无限制,建议4对齐
  • hidden_size(extern):int
    • LSTM单元中的hiddensize,无限制,建议8对齐
  • proj_size(extern):int
    • projection时的proj_size,projsize∈[0,hiddensize]
    • 目前限定0,即尚不支持projection功能
  • input_forget(extern):int
    • cifg变种的选择:1(T)or0(F)目前限定0,即尚不支持
  • has_projection(extern):int
    • projection变种:1(T)or0(F)目前限定0,即尚不支持
  • input_layout(extern):int
    • 指定与对应输入shape含义一致的layout
    • 要求填写指定的layout,同时要求填写该op实际对应的batch_size、sequence_size、hidden_size。
    • snc:指定layout对应的输入shape为[seqs,batches,input_size]
    • (sn)c:指定layout对应的输入shape为[seqs*batches,input_size,1,1]
  • output_layout(extern):int
    • 指定与对应输出shape含义一致的layout
    • 要求填写指定的layout,同时要求填写该op实际对应的batch_size、sequence_size、hidden_size、directions。
    • sbnc:指定layout对应的输出shape为[seqs,directions,batches,hidden_size]
    • (sn)c:指定layout对应的输出shape为[seqsbatches,directionsinput_size,1,1]

数据类型约束

  • T1:float16(Tensor)
  • T2:float(Tensor)
  • T3:float(Scalar)

其他支持

  • 多核联合:暂不支持

Max

计算输入张量的元素级最大值

输入列表

  • A:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer
    • 广播支持
      • 支持任意维度广播操作
      • 广播约束同Expand算子
  • B:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer
    • 广播支持
      • 支持任意维度广播操作
      • 广播约束同Expand算子

输出列表

  • C:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer/per-channel

数据类型约束

  • T1:float16(Tensor)

其他支持

  • 多核联合:暂不支持

Mul

执行元素级二进制乘法(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:float16(Tensor)
  • T2:float(constTensor)

MulRelu

Mul与Relu融合计算,C=Relu(A*B)

输入列表

  • 同Mul

输出列表

  • 同Mul

其他支持

  • 多核联合:支持

Pad

给定一个包含要填充的数据的张量(data),包含轴的开始和结束填充数值的张量(pads),模式(mode),常 量数值(constant_value),生成一个填充张量(output)

输入列表

  • data:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer
  • pads:T2
    • shape : [batch_begin, channel_begin, height_begin, width_begin, batch_end, channel_end,height_end,width_end]
  • constant_value(optional):T3
    • shape:[1]
    • 量化支持
      • per-layer

输出列表

  • output:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer

数据类型约束

  • T1:float16(Tensor)
  • T2:int64(Tensor)
  • T3:float(Scalar),int8(Scalar),float16(Scalar)

属性列表

  • mode:string(默认值constant)
    • 支持模式:constant,reflect
      • constant无限制
      • reflectchannel∈(0,8192],height∈(0,8192],width∈(0,8176]

其他支持

  • 多核联合:尚不支持

MaxPool

MaxPool消耗输入张量X并根据内核大小、步幅大小和pad 长度在张量上应用最大池化。最大池化包括根据内核大小计算输入张量子集的所有值的最大值,并将数 据下采样到输出张量Y 中以进行进一步处理。输出空间形状的计算方式有所不同,具体取决于是否使用显式填充(在使用pads 的情况下)或使用自动填充(在使用auto_pad的情况下)。仅使用显式填充

输入列表

  • input:T1
    • shape:[batch,channel,height,width]
      • channel∈(0,8192]
      • height∈(0,8192]
      • width∈(0,8192]

输出列表

  • output:T1
    • shape:[batch,channel,height,width]

属性列表

  • kernel_shape:int64(kernel_h,kernel_w)
    • kernel_h∈(0,7]
    • kernel_w∈(0,7]
    • 注,不支持kernel_h=1且kernel_w=1
  • auto_pad:string
    • pad的方式:仅支持NOTSET
  • ceil_mode:int64
    • 使用ceil或floor的方式计算输出的shape:不支持
  • strides:int64(strides_h,strides_w)
    • strides_h∈(0,8]
    • strides_w∈(0,8]
  • count_include_pad:int64[]
    • count_include_pad是否包含pad数值进行计算:1
  • pad:int64(pad_top,pad_left,pad_bottom,pad_right)
    • pad_top∈[0,7]
    • pad_left∈[0,7]
    • pad_bottom∈[0,7]
    • pad_right∈[0,7]

数据类型约束

  • T1:float16(Tensor)
  • T2:float(Tensor)
  • T3:float(Scalar)

GlobalMaxPool

GlobalMaxPool使用输入张量X并对同一通道中的值应用最大池化。这相当于MaxPool的kernel_shape 大小等于input的空间维度。

输入列表

  • input:T1
    • shape:[batch,channel,height,width]
      • channel∈(0,8192]
      • height∈(0,7]
      • width∈(0,7]

输出列表

  • output:T1
    • shape:[batch,channel,height,width]

属性列表

  • kernel_shape:int64(kernel_h,kernel_w)
    • kernel_h∈(0,7]
    • kernel_w∈(0,7] 注,不支持kernel_h=1且kernel_w=1
  • auto_pad:string
    • pad的方式:仅支持NOTSET
  • ceil_mode:int64
    • 使用ceil或floor的方式计算输出的shape:不支持
  • strides:int64(strides_h,strides_w)
    • strides_h∈(0,8]
    • strides_w∈(0,8]
  • count_include_pad:int64[]
    • count_include_pad是否包含pad数值进行计算:1
  • pad:int64(pad_top,pad_left,pad_bottom,pad_right)
    • pad_top∈[0,7]
    • pad_left∈[0,7]
    • pad_bottom∈[0,7]
    • pad_right∈[0,7]

数据类型约束

  • T1:float16(Tensor)
  • T2:float(Tensor)
  • T3:float(Scalar)

AveragePool

  • 不支持(工具端转换成卷积实现)

GlobalAveragePool

  • 不支持(工具端转换成卷积实现)

Pow

Z = X^Y 指数运算,采用输入数据(张量)和指数,并产生一个输出数据(张量)

输入列表

  • X:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer
  • Y:T2
    • shape:[1]
      • 当前仅支持0、1、2、3、0.5、-0.5

输出列表

  • Z:T1
    • shape:[batch,channel,height,width]
    • 量化支持
      • per-layer

数据类型约束

  • T1:float16(Tensor)
  • T2:int8(Tensor),int32(Tensor),int64(Tensor),float16(Tensor),float(Tensor)

其他支持

  • 多核联合:尚不支持

浏览此主题 → · 入门路线 →