本文简介轻量级网络中两种经典压缩方法:分组卷积(Group Convolution) 和 深度可分离卷积(depthwise separable convolution)
参考文献:
- 简短:zjc师兄的小短文
- 详细:R.JD的MobileNet分析
0. 卷积
对于普通卷积而言,卷积层的filters决定了参数量,其中
- 尺寸(h1,w1)与 input / output 的(H,W)有关
- 通道数c1与 input 的通道数相同
- 数量c2与 output 的通道数相同
从而,普通卷积层的参数量为:
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个通道信息了,从而参数量变为:
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
因此,
(若C2相对于k而言较大,那么
)
下图取自MobileNet-v1