下载
中文
注册

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处理逻辑为:

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],其中:

  • Nx=Ny, Cx=Ck
  • Wx = (Wy-1)*stride_w - 2*pad_w + dilation_h*(Wk-1)+1
  • Hx = (Hy-1)*stride_h - 2*pad_h + dilation_w*(Hk-1)+1

则总体限制如下:

  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

        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

输入

  • x:
    • 是否必填: 必填
    • 数据类型: float16
    • 参数解释: 输入Tensor
    • 规格限制: 无
  • filter:
    • 是否必填: 必填
    • 数据类型: float16
    • 参数解释: 卷积核,shape为 [Nk, Ck, Hk, Wk ],Nk 必须与Cy相等
    • 规格限制:
      1. 如果Wx==Hx==1: Wy==Hy==Wk==Hk,且取值范围在1~11
      2. 不支持输出的W==1,输出的H不等于1的场景
      3. 其它场景: Wx和Hx配置范围在1~255
  • bias:
    • 是否必填: 非必填
    • 数据类型: float16
    • 参数解释: 无
    • 规格限制: 无

属性

  • pad:
    • 是否必填: 非必填
    • 数据类型: ListInt
    • 参数解释: 高和宽轴开始和结束的Padding,pad和pad_h/pad_w不能同时提供,默认值为0;pad List的长度最大为2
    • 规格限制: List长度为1时: pad<Hk&pad<Wk;List长度为2时: pad[0]<Hk,pad[1]<Wk
  • pad_h:
    • 是否必填: 非必填
    • 数据类型: int
    • 参数解释: 高和宽轴开始和结束的Padding,pad和pad_h/pad_w不能同时提供,默认值为0
    • 规格限制: pad_h<Hk
  • pad_w:
    • 是否必填: 非必填
    • 数据类型: int
    • 参数解释: 高和宽轴开始和结束的Padding,pad和pad_h/pad_w不能同时提供,默认值为0
    • 规格限制: pad_w<Wk
  • stride:
    • 是否必填: 非必填
    • 数据类型: ListInt
    • 参数解释: 高和宽轴的stride.stride和stride_h/stride_w不能同时提供,默认值为1;stride的List长度最大为2
    • 规格限制: List长度为1时: 0<=stride*stride<256;List长度为2时: 1<=stride[0]<=63, 1<=stride[1]<=63, 1<=stride[0]*stride[1]<256
  • stride_h:
    • 是否必填: 非必填
    • 数据类型: int
    • 参数解释: 高和宽轴的stride.stride和stride_h/stride_w不能同时提供,默认值为1
    • 规格限制: 1<=stride<=63
  • stride_w:
    • 是否必填: 非必填
    • 数据类型: int
    • 参数解释: 高和宽轴的stride.stride和stride_h/stride_w不能同时提供,默认值为1
    • 规格限制: 1<=stride<=63
  • dilation:
    • 是否必填: 非必填
    • 数据类型: ListInt
    • 参数解释: Filter的高和宽轴的放大系数,List长度最大为2,默认值为1
    • 规格限制: 支持1~255,配置后(kernel-1)*dilation+1<256
  • group:
    • 是否必填: 非必填
    • 数据类型: int
    • 参数解释: 无
    • 规格限制: group能被channel整除

输出

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