填充和膨胀会影响卷积层中FLOP的数量吗?

时间:2019-02-14 13:03:46

标签: deep-learning conv-neural-network

据我所知,只有输出大小,内核大小,输入通道数,输出通道数和批处理大小会影响卷积层中FLOP的数量。

但是有人告诉我填充和膨胀也会影响FLOP。

是真的吗?如果是真的,为什么?

1 个答案:

答案 0 :(得分:0)

填充直接更改输入大小,因此内核必须与更大数量的输入值进行卷积,从而导致更多的FLOP。

扩张更有趣:增加操作数不会改变。但是,卷积核变得更大,并且更少的运算适合输入。因此,FLOP的数量减少了。从这个意义上讲,膨胀是填充的对应物。

您可以使用Netscope CNN analyzer了解填充和膨胀参数如何改变MACC的数量(多次累加= 2FLOP)。

例如,默认配置:

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { 
    shape: { dim: 1 dim: 3 dim: 227 dim: 227 } 
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  convolution_param {
    num_output: 96
    kernel_size: 3
  }
}

估计有131.22M个MACC。使用pad: 1(“相同”填充)为133.56M。仅使用dilation: 2时,它变为128.9M。但是,如果您通过填充来补偿膨胀,则:

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { 
    shape: { dim: 1 dim: 3 dim: 227 dim: 227 } 
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  convolution_param {
    num_output: 96
    kernel_size: 3
    dilation: 2
    pad: 1
  }
}

又是131.22M。