FilesLast commitLast update
3 months ago
4 months ago
3 months ago
4 months ago
3 months ago
3 months ago
3 months ago
10 months ago
3 months ago
README

MultiScaleDeformableAttnFunction

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT √
Atlas A3 训练系列产品/Atlas A3 推理系列产品 √
Atlas A2 训练系列产品/Atlas A2 推理系列产品 √
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 √
Atlas 训练系列产品 ×

功能说明

  • 算子功能: 通过采样位置(sample location)、注意力权重(attention weights)、映射后的value特征、多尺度特征起始索引位置、多尺度特征图的空间大小(便于将采样位置由归一化的值变成绝对位置)等参数来遍历不同尺寸特征图的不同采样点。

  • 计算公式:

    将采样点的归一化坐标 (u,v)∈[0,1](u,v)\in[0,1] 映射到第 ℓ\ell 层特征图的像素坐标系:

    x=u⋅Wℓ−0.5,y=v⋅Hℓ−0.5x = u \cdot W_\ell - 0.5, \qquad y = v \cdot H_\ell - 0.5

    确定采样点落在哪四个整数网格点之间:

    x0=⌊x⌋,x1=x0+1,y0=⌊y⌋,y1=y0+1x_0 = \lfloor x \rfloor,\quad x_1 = x_0 + 1,\qquad y_0 = \lfloor y \rfloor,\quad y_1 = y_0 + 1

    计算采样点相对于左上角网格点的偏移,用于插值权重:

    αx=x−x0,αy=y−y0\alpha_x = x - x_0, \qquad \alpha_y = y - y_0

    计算双线性插值权重,四个邻点的和为1

    w00=(1−αy)(1−αx),w10=(1−αy)αx,w01=αy(1−αx),w11=αyαx\begin{aligned} w_{00} &= (1-\alpha_y)(1-\alpha_x), \\ w_{10} &= (1-\alpha_y)\alpha_x, \\ w_{01} &= \alpha_y(1-\alpha_x), \\ w_{11} &= \alpha_y\alpha_x \end{aligned}

    计算得到采样点对应的特征向量(长度为 DD):

    bilinear⁡(V; b,h,ℓ,x,y)=w00 Vb,ℓ,y0,x0,h,:+w10 Vb,ℓ,y0,x1,h,:+w01 Vb,ℓ,y1,x0,h,:+w11 Vb,ℓ,y1,x1,h,:\operatorname{bilinear}(V;\,b,h,\ell,x,y) = w_{00} \, V_{b,\ell,y_0,x_0,h,:} + w_{10} \, V_{b,\ell,y_0,x_1,h,:} + w_{01} \, V_{b,\ell,y_1,x_0,h,:} + w_{11} \, V_{b,\ell,y_1,x_1,h,:}

    所有层、所有采样点的双线性采样结果,加权求和得到最终输出:

    Ob,q,h,:=∑ℓ=0L−1∑p=0Np−1Ab,q,h,ℓ,p⋅bilinear⁡ ⁣(V; b,h,ℓ,xb,q,h,ℓ,p,yb,q,h,ℓ,p)O_{b,q,h,:} = \sum_{\ell=0}^{L-1} \sum_{p=0}^{N_p-1} A_{b,q,h,\ell,p} \cdot \operatorname{bilinear}\!\left(V;\,b,h,\ell, x_{b,q,h,\ell,p}, y_{b,q,h,\ell,p}\right)

参数说明

参数名 输入/输出/属性 描述 数据类型
u, v输入采样点的归一化坐标,范围 [0,1]FLOAT
Wℓ, Hℓ输入第 ℓ 层特征图的宽、高INT32
V(b,ℓ,y,x,h,:)输入Value特征向量:第b个batch、第 ℓ 层、坐标(y,x)、head hFLOAT
A(b,q,h,ℓ,p)输入注意力权重:query q在第 ℓ 层第p个采样点上的权重FLOAT
x, y中间量映射到像素坐标系下的采样点位置FLOAT
x₀, x₁, y₀, y₁中间量四邻点整数坐标INT32
αx, αy中间量采样点相对于左上角网格点的偏移量FLOAT
w₀₀, w₁₀, w₀₁, w₁₁中间量双线性插值权重,和为1FLOAT
bilinear(V;·)中间量插值得到的采样向量FLOAT
O(b,q,h,:)输出最终输出向量:query q在head h的结果FLOAT
b属性batch索引INT32
q属性query索引INT32
h属性head索引INT32
ℓ属性特征层索引INT32
p属性采样点索引INT32
D属性每个head的嵌入维度INT32
Nq(num_queries)属性每个batch的query数INT32
Nh(num_heads)属性注意力head数INT32
L(num_levels)属性特征层数INT32
Np(num_points)属性每层每个query的采样点数INT32
  • Atlas 推理系列产品:不支持BFLOAT16

约束说明

  • Atlas 推理系列产品:
    • 通道数channels%32 = 0,且channels <= 256
    • 查询的数量32 <= num_queries< 500000
    • 特征图的数量num_levels <= 16
    • 头的数量num_heads = [2, 4, 8]
    • 采样点的数量num_points = [4, 8]
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品、Ascend 950PR/Ascend 950DT:
    • 通道数channels%8 = 0,且channels <= 256
    • 查询的数量32 <= num_queries < 500000
    • 特征图的数量num_levels <= 16
    • 头的数量num_heads <= 16
    • 采样点的数量num_points <= 16

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_multi_scale_deformable_attn_function 通过aclnnMultiScaleDeformableAttnFunction接口方式调用aclnnMultiScaleDeformableAttnFunction算子。