首页 > 解决方案 > 填充和膨胀会影响卷积层中的 FLOP 数量吗?

问题描述

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

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

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

标签: deep-learningconv-neural-network

解决方案


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

膨胀更有趣:操作的数量不会随着你的增加而改变。然而,卷积核变得更大,适合输入的操作更少。因此,FLOP 的数量下降了。从这个意义上说,膨胀是填充的对应物。

您可以使用Netscope CNN 分析器查看填充和膨胀参数如何更改 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
  }
}

估计有 1.3122 亿个 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。


推荐阅读