Rockchip · AI & Linux Hub

AI-инференс

RKNN2 V2.5.0 · RK2118:Активации, нормализация и расширения

RKNN2 V2.5.0 · RK2118:Активации, нормализация и расширения · Полные параметры и ограничения операторов по оригиналу V2.5.0.

· ArmSoM Editorial · Rockchip source documentation · 9 мин чтения

Этот справочник платформ RKNN2 V2.5.0 предназначен для разработчиков ArmSoM при выборе и адаптации моделей. Он не подтверждает поддержку на всех платах ArmSoM: проверьте SoC платы, фактические версии Toolkit2, Runtime, драйвера NPU и BSP. В оригинале не задана единая версия ядра Linux. Аппаратная проверка на ArmSoM не выполнялась.

Источник: предоставленные китайская и английская редакции RKNN2 Supported Operators and Constraints Reference V2.5.0, 374 и 384 страницы. Китайский текст следует китайской редакции; английский, русский и немецкий — английской. Ограничения платформ не объединяются. В английском PDF рисунки и таблицы I/O содержат китайские подписи; их происхождение сохранено, добавлены редактируемые локализованные таблицы. Написание ConvTranpose и исходные уравнения LSTM/GRU сохранены; эти формулы не являются исправлениями реализации SDK.

Страницы источника: CN 307–317; EN 316–326.

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 · Ввод/вывод модели, выравнивание и ограничения свёрток

Sigmoid

Функция y=1/(1+exp(-x)) применяется поэлементно к входному тензору для получения выходного тензора.

Входы

  • input:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Выходы

  • output:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Ограничения типов данных

  • T1:float16(Tensor)

Tanh

Вычисляет гиперболический тангенс элементов входного тензора.

Входы

  • X:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Выходы

  • Y:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Ограничения типов данных

  • T1:float16(Tensor)

Softplus

Поэлементно применяет Softplus, y=ln(exp(x)+1).

Входы

  • X:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Выходы

  • Y:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Ограничения типов данных

  • T1:float16(Tensor)

HardSigmoid

Функция y=max(0,min(1,alpha*x+beta)) применяется поэлементно к входному тензору для получения выходного тензора, где alpha=1/6, beta=0.5.

Входы

  • input:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Выходы

  • output:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Ограничения типов данных

  • T1:float16(Tensor)

HardSwish

Функция y = x * max(0, min(1, alpha * x + beta)) = x * HardSigmoid(x) применяется поэлементно к входному тензору для получения выходного тензора, где alpha=1/6, beta=0.5.

Входы

  • X:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Выходы

  • Y:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Ограничения типов данных

  • T1:float16(Tensor)

Elu

Функция f(x)=alpha*(exp(x)-1.) for x<0; f(x)=x for x>=0 применяется поэлементно к входному тензору для получения выходного тензора, где alpha=1.

Входы

  • input:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Выходы

  • output:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Ограничения типов данных

  • T1:float16(Tensor)

exSwish

Поэлементно применяет линейный блок Sigmoid. Swish также называется SiLU: y=x*sigmoid(x).

Входы

  • X:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Выходы

  • Y:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Ограничения типов данных

  • T1:float16(Tensor)

exMish

Функция mish(x)=xtanh(softplus(x))=xtanh(ln(1+e^{x})) применяется поэлементно к входному тензору для получения выходного тензора.

Входы

  • input:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Выходы

  • output:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Ограничения типов данных

  • T1:float16(Tensor)

exGelu

Функция y = x*Φ(x) применяется поэлементно к входному тензору для получения выходного тензора. При выборе tanh для Φ(x): y = 0.5*x*(1+Tanh(sqrt(2/π)*(x+0.044715*x^3))).

Входы

  • input:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Выходы

  • output:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Ограничения типов данных

  • T1:float16(Tensor)

Where

Выбирает значения x_tensor или y_tensor по mask_tensor: при True берётся соответствующее значение x_tensor, иначе y_tensor.

Входы

  • mask_tensor:T1
    • shape:[batch,channel,height,width]
    • Поддержка расширения размерностей
      • Поддерживается расширение по любой размерности.
    • Ограничения расширения размерностей
      • Ограничения расширения совпадают с оператором Expand.
  • x_tensor:*T2
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer
    • Поддержка расширения размерностей
      • Поддерживается расширение по любой размерности.
    • Ограничения расширения размерностей
      • Ограничения расширения совпадают с оператором Expand.
  • y_tensor:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer
    • Поддержка расширения размерностей
      • Поддерживается расширение по любой размерности.
    • Ограничения расширения размерностей
      • Ограничения расширения совпадают с оператором Expand.

Выходы

  • output:T2
    • shape:[batch,channel,height,width]
    • Поддержка квантования
      • per-layer

Ограничения типов данных

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

exConvStreaming

Для снижения задержки речевых моделей вход исходной свёртки делится на временные фрагменты. Каждый фрагмент обрабатывается свёрткой, а результаты кэшируются для следующих кадров, обеспечивая потоковую обработку аудио.

Входы

  • input_tensor:T1
    • shape:[batch,channel,height,width]
      • width: сейчас поддерживается width=1.
    • Поддержка квантования
      • 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

Выходы

  • 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:float16(Tensor)

Прочие возможности

  • Совместная работа нескольких ядер: ещё не поддерживается.

exConvStreamingPRelu/LeakyRelu

Объединённое вычисление exConvStreaming и PRelu/LeakyRelu, Output = PRelu(exConvStreaming(Input)) или Output= LeakyRelu(exConvStreaming(Input)). Описание и ограничения спецификации совпадают с exConvStreaming.

exGlu

Функция управляемого линейного блока (Gated Linear Unit), где a — первая половина входной матрицы, b — вторая: GLU(a,b)=a⊗σ(b).

Входы

  • Input:T1
    • shape:[batch,channel,height,width]
    • Поддержка квантования: per-layer

Выходы

  • Output:T1
    • shape:[batch,channel/2,height,width]
    • Поддержка квантования: per-layer

Ограничения типов данных

  • T1:float16(Tensor)

Атрибуты

  • axis:int(по умолчанию=1)
    • Размерность разделения входа.
    • Ограничение: поддерживается только 1.

exMatMul

Матричное умножение

Y = A·B + C    if c_type = "add"
Y = A·B * C    if c_type = "mul"

Входы

  • A:T1
    • shape:[b,k,1,n]
      • k ∈(0,8192]
    • Поддержка квантования
      • per-layer
  • B:T1
    • shape:[b,k,1,m]
    • Поддержка квантования
      • per-layer
  • C(optional):T1,T2
    • shape:[b,n,1,m]
    • Поддержка квантования
      • per-layer
    • Поддержка расширения размерностей
      • Поддерживается расширение по любой размерности.
      • Ограничения расширения совпадают с оператором Expand.

Выходы

  • Y:T1
    • shape:[b,n,1,m]
    • Поддержка квантования
      • per-layer

Ограничения типов данных

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

Атрибуты

  • c_type:strings(по умолчанию “add”)
    • Выбор add или mul задаёт сложение или умножение с C.

exWindow

exWindow основан на window_partition и window_reverse из swin_transformer. В исходной статье входные признаки делятся на непересекающиеся окна window_size×window_size. Входные и выходные признаки должны иметь 4-мерный shape с разбиением по высоте и ширине. Ниже реализация PyTorch:

def window_partition(x, window_size):
    """
    Args:
        x: (B, C, H, W)
        window_size (int): window size
    Returns:
        windows: (B, C, num_windows * num_windows, window_size * window_size)
    """
    B, C, H, W = x.shape
    x = x.view(B, C, H // window_size, window_size, W // window_size, window_size)
    windows = x.permute(0, 1, 2, 4, 3, 5).contiguous().view(B, C, -1, window_size * window_size)
    return windows

def window_reverse(windows, window_size, H, W):
    """
    Args:
        windows: (B, C, num_windows * num_windows, window_size * window_size)
        window_size (int): Window size
        H (int): Height of image
        W (int): Width of image
    Returns:
        x: (B, C, H, W)
    """
    B, C, _, _ = windows.shape
    x = windows.view(B, C, H // window_size, W // window_size, window_size, window_size)
    x = x.permute(0, 1, 2, 4, 3, 5).contiguous().view(B, C, H, W)
    return x

Входы

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

Выходы

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

Ограничения типов данных

  • T1:float16(Tensor)

Атрибуты

  • mode:string
    • Поддерживаемые режимы:partition,reverse,partition_num_first.
      • partition: см. реализацию window_partition.
      • reverse: см. реализацию window_reverse.
      • partition_num_first отличается от partition тем, что H,W делятся согласно num_windows, тогда как partition делит H,W согласно window_sizes.
  • window_sizes:listofints
    • 2-мерный вектор размера окна, задающий высоту и ширину каждого окна. На этом размере основаны вычисление внимания и извлечение признаков внутри окна.
  • num_windows:listofints
    • 2-мерный вектор числа окон, задающий количество окон по высоте и ширине входных признаков.

Прочие возможности

  • Совместная работа нескольких ядер: ещё не поддерживается.

Другие статьи по теме → · Учебные маршруты →