开发者
下载
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:实现可变形卷积反向传播功能,计算输入梯度、权重梯度、偏置梯度和偏移量梯度。

  • 计算公式:

    输入input(N,Cin,Hin,WinN,C_{in},H_{in},W_{in})、输出out(N,Cout,Hout,WoutN,C_{out},H_{out},W_{out})和卷积步长(stridestride)、卷积核大小(kernelSizeKH,KWkernelSize,K_H,K_W)、膨胀参数(dilationdilation)、填充(paddingpadding)的关系是:

    Hout=Hin+padding[0]+padding[1]((KH1)dilation[2]+1)stride[2]+1H_{out}=\lfloor \frac{H_{in}+padding[0]+padding[1]-((K_H - 1) * dilation[2] + 1)}{stride[2]}+1 \rfloor Wout=Win+padding[2]+padding[3]((KW1)dilation[3]+1)stride[3]+1W_{out}=\lfloor \frac{W_{in}+padding[2]+padding[3]-((K_W - 1) * dilation[3] + 1)}{stride[3]}+1 \rfloor

    可变形卷积反向传播需要计算对卷积正向的输入张量 xx(对应函数原型中的input)、卷积核权重张量 ww(对应函数原型中的weight)、偏置 bb(对应函数原型中的bias)和偏移量 oo(对应函数原型中的offset)的梯度。

    对于可变形卷积,每个输出位置的采样位置由偏移量动态决定。设输出位置为(n,cout,i,j)(n, c_{out}, i, j),对应的偏移量为Δpn,cout,i,j\Delta p_{n,c_{out},i,j},则实际采样位置为pn,cout,i,j=(isH,jsW)+Δpn,cout,i,jp_{n,c_{out},i,j} = (i \cdot s_H, j \cdot s_W) + \Delta p_{n,c_{out},i,j},其中sHs_HsWs_W分别为高度和宽度方向的步长。

    • 对于 xx 的梯度 Lx\frac{\partial L}{\partial x}(对应函数原型中的gradInput参数):

      Lxn,cin,h,w=cout=1Couti=1Houtj=1WoutLyn,cout,i,jwcout,cin,p,qδ(pn,cout,i,j=(h,w))\frac{\partial L}{\partial x_{n, c_{in}, h, w}} = \sum_{c_{out}=1}^{C_{out}} \sum_{i=1}^{H_{out}} \sum_{j=1}^{W_{out}} \frac{\partial L}{\partial y_{n, c_{out}, i, j}} \cdot w_{c_{out}, c_{in}, p, q} \cdot \delta(p_{n,c_{out},i,j} = (h, w))

      其中,LL 为损失函数,Ly\frac{\partial L}{\partial y} 为输出张量 yyLL 的梯度(对应函数原型中的gradOutput参数),δ()\delta(\cdot) 为指示函数,当采样位置与输入位置(h,w)(h,w)重合时为1,否则为0。实际实现中通过双线性插值将梯度分配到邻近的像素位置。

    • 对于 ww 的梯度 Lw\frac{\partial L}{\partial w}(对应函数原型中的gradWeight参数):

      Lwcout,cin,p,q=n=1Ni=1Houtj=1Woutxn,cin,pn,cout,i,j.h,pn,cout,i,j.wLyn,cout,i,j\frac{\partial L}{\partial w_{c_{out}, c_{in}, p, q}} = \sum_{n=1}^{N} \sum_{i=1}^{H_{out}} \sum_{j=1}^{W_{out}} x_{n, c_{in}, p_{n,c_{out},i,j}.h, p_{n,c_{out},i,j}.w} \cdot \frac{\partial L}{\partial y_{n, c_{out}, i, j}}

      其中,pn,cout,i,j.hp_{n,c_{out},i,j}.hpn,cout,i,j.wp_{n,c_{out},i,j}.w分别表示采样位置的高度和宽度坐标,通过双线性插值从输入张量xx中采样得到。

    • 对于 bb 的梯度 Lb\frac{\partial L}{\partial b}(对应函数原型中的gradBias参数):

      Lbcout=n=1Ni=1Houtj=1WoutLyn,cout,i,j\frac{\partial L}{\partial b_{c_{out}}} = \sum_{n=1}^{N} \sum_{i=1}^{H_{out}} \sum_{j=1}^{W_{out}} \frac{\partial L}{\partial y_{n, c_{out}, i, j}}
    • 对于 oo 的梯度 Lo\frac{\partial L}{\partial o}(对应函数原型中的gradOffset参数):

      Lon,cout,i,j=cin=1CinLyn,cout,i,jwcout,cin,p,qxn,cin,pn,cout,i,j.h,pn,cout,i,j.won,cout,i,j\frac{\partial L}{\partial o_{n, c_{out}, i, j}} = \sum_{c_{in}=1}^{C_{in}} \frac{\partial L}{\partial y_{n, c_{out}, i, j}} \cdot w_{c_{out}, c_{in}, p, q} \cdot \frac{\partial x_{n, c_{in}, p_{n,c_{out},i,j}.h, p_{n,c_{out},i,j}.w}}{\partial o_{n, c_{out}, i, j}}

      其中,偏移量梯度的计算涉及双线性插值的反向传播,需要计算输入值对偏移量的偏导数,该偏导数反映了偏移量变化对采样点位置的影响。

[object Object]

每个算子分为,必须先调用"aclnnDeformableConv2dBackwardGetWorkspaceSize"接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用"aclnnDeformableConv2dBackward"接口执行计算。

[object Object]
[object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]
[object Object]
  • 参数说明:

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

[object Object]
  • 确定性计算:
    • aclnnDeformableConv2dBackward默认确定性实现。
[object Object]

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]