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

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

参考文献:

0. 卷积

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

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

从而,普通卷积层的参数量为: P 1 = h 1 × w 1 × C 1 × C 2 = k 2 C 1 C 2 P1 = 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个通道信息了,从而参数量变为: P 2 = P 1 / g P2 = 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

因此, P 3 = k 2 C 1 + C 1 C 2 = ( 1 / C 2 + 1 / k 2 ) P 1 P3=k^2C1+C1C2=(1/C2+1/k^2)P1
(若C2相对于k而言较大,那么 P 3 P 1 / k 2 P3≈P1/k^2
在这里插入图片描述
下图取自MobileNet-v1
在这里插入图片描述

3. 总结

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

猜你喜欢

转载自blog.csdn.net/qq_42191914/article/details/103491048