Deconvolution

总体约束

设:

Ny, Cy, Hy, Wy [x1] = x.shape

Nk, Ck/group, Hk, Wk = filter.shape (k=kernel)

stride、stride_h、stride_w和pad、pad_h、pad_w处理逻辑为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
if stride.size() == 0:
   stride_h, stride_w
elif stride.size() == 1:
   stride_h, stride_w = stride[0]
else:
   stride_h = stride[0]
   stride_w = stride[1]

if pad.size() == 0:
   pad_h, pad_w
elif pad.size() == 1:
   pad_h = pad_w = pad[0]
else:
   pad_h = pad[0]
   pad_w = pad[1]
if dilation.size() == 1:
   dilation_h = dilation_w = dilation[0]
else:
   dilation_h = dilation[0]
   dilation_w = dilation[1]

设输出shape为[Nx,Cx,Hx,Wx],其中:

则总体限制如下:

  1. 1<=stride_h*stride_w<256
  2. Hy+2*pad_h>=dilation_h*(Hk-1)+1,Wy+2*pad_w>=dilation_w*(Wk-1)+1
  3. Hy*stride_h, Wy*stride_w范围为[2,4096]:
    • 当Hk==Wk==1时:

      限制加强为: Wy*stride_w*stride_h为[2,4096],并且当stride_h>1或者stride_w>1时: Wy<=2032。

    • Atlas 训练系列产品场景时: Hx!=Hk,Wx!=Wk支持Hy或Wy为1。
    • 当Hy=1, Hk=1, pad_h=0, stride_h=1, dilation_h=1时,支持Wx范围为[1,2147483647](int32可表示的范围)。
  4. AL1Size限制计算方式如下:

    设w_value = Wy*stride_w

    1
    2
    3
    4
    5
    6
    if Wx>16:
        h_value_max = Hk + 1
    else if 16% Wx== 0: 
        h_value_max = Hk + 16//Wx - 1
    else: 
        h_value_max = Hk + 16//Wx +1
    

    则,AL1Size= h_value_max*w_value*32Byte、BL1Size = Hk*Wk*512Byte

    AL1Size+BL1Size <= l1_size(l1_size见对应芯片的配置文件,例如platform_config/${soc_version}.ini)

    其中,Hy>=dilation*(Hk-1)+1,Wy>=dilation*(Wk-1)+1

    当Hy=1, Hk=1, pad_h=0, stride_h=1, dilation_h=1时,AL1Size = [15*stride_w+(Wk-1)*dilation_w+1]*32B

输入

属性

输出

y:
  • 是否必填: 必填
  • 数据类型: float16
  • 参数解释: 无
  • 规格限制: 无