本文简介轻量级网络中两种经典压缩方法:分组卷积(Group Convolution)深度可分离卷积(depthwise separable convolution)

参考文献:

0. 卷积

对于普通卷积而言,卷积层的filters决定了参数量,其中

  • 尺寸(h1,w1)与 input / output 的(H,W)有关
  • 通道数c1与 input 的通道数相同
  • 数量c2与 output 的通道数相同

从而,普通卷积层的参数量为:P1=h1×w1×C1×C2=k2C1C2P1 = h1×w1×C1×C2 = k^2C1C2
轻量级网络:分组卷积&深度可分离卷积

1. 分组卷积(Group Conv)

分组卷积的概念最先来源于AlexNet,其基本原理如下图。

当时是由于GTX580仅有3GB的memory,因此AlexNet在两块GPU上运行,才能满足其大参数量的需求

轻量级网络:分组卷积&深度可分离卷积

  • 将input/output按channels分成g组,每组维度即为(H1,W1,C1/g)和(H2,W2,C2/g)
  • 从而filters也为g组,每组C2/g个维度为(h1,w1,C1/g)的filters

其实就相当于将原来的卷积层拆分成了g个并行卷积层,其实我们的filters数量没有变化,只是每一个filter仅负责C1/g个通道信息了,从而参数量变为:P2=P1/gP2 = P1/g

2. 深度可分离卷积(Depthwise Seperable Conv)

MobileNet中,将深度可分离卷积描述为两个步骤: 深度卷积(Depthwise Conv)和逐点卷积(Pointwise Conv)

  • 深度卷积,其实是上文中分组卷积的一个特例,令C2=C1,g=C1,分组卷积便变成了深度卷积。说白了,深度卷积就是对input的每一个通道单独做卷积,使(H1,W1, C1)→(H2,W2, C1)
  • 逐点卷积,其实就是普通卷积的一个特例,只是卷积核尺寸为1×1而已;说白了就是用1×1 filters做一次通道调整,使(H2,W2,C1)→(H2,W2,C2)

参数量计算:

  • 深度卷积参数量:h1×w1×1×C1
  • 驻点卷积参数量:1×1×C1×C2

因此,P3=k2C1+C1C2=(1/C2+1/k2)P1P3=k^2C1+C1C2=(1/C2+1/k^2)P1
(若C2相对于k而言较大,那么P3P1/k2P3≈P1/k^2
轻量级网络:分组卷积&深度可分离卷积
下图取自MobileNet-v1
轻量级网络:分组卷积&深度可分离卷积

3. 总结

  • 分组卷积:压缩效果 \propto g
  • 深度可分离卷积:压碎效果 \propto k2k^2
  • 深度可分离卷积相当于分组卷积和普通卷积的结合,前者负责二维卷积,后者负责通道调整
  • 1×1 filter的使用应该可以追溯到NIN(2013),后来众多网络(包括GoogleNetResNet)将这种设计用到网络设计中(比如压缩参数量)
  • MoblieNet从V1到V3,对结构有所调整,具体请参见相关论文

相关文章:

  • 2021-05-30
  • 2022-01-07
  • 2021-08-04
  • 2021-08-31
  • 2022-01-30
猜你喜欢
  • 2021-09-15
  • 2021-05-16
  • 2021-09-24
  • 2021-09-24
  • 2021-08-10
  • 2021-12-16
  • 2021-12-05
相关资源
相似解决方案