1. 常规卷积运算
假设输入层为一个大小为64×64像素、三通道彩色图片。经过一个包含4个Filter的卷积层,最终输出4个Feature Map,且尺寸与输入层相同。整个过程可以用下图来概括:
卷积层共有4个Filters,每个Filter有3个kernel,每个Kernel的大小为3x3,因此卷积层的参数数量为:4 x 3 x 3 x 3 = 108
2. 深度可分离卷积
深度可分离卷积将常规卷积分成两步(Depthwise Convolution与Pointwise Convolution)来提取Feature Map,其优点是通过减少参数量,降低运行成本。
2.1 Depthwise Convolution
一个大小为64×64像素、三通道彩色图片首先经过第一次卷积运算,不同之处在于此次的卷积完全是在二维平面内进行,且Filter的数量与上一层的Depth相同。相当于对每个Channel先进行一次卷积运算,所以一个三通道的图像经过运算后生成了3个Feature map,如下图所示:
其中,一个Filter只有一个kernel,每个kernel的大小为3 x 3,经过DepthWise Convolution后的Feature Map数量与输入层的Depth相同,这种运算对输入层的每个Channel进行一次单独的卷积运算,没有有效利用不同Map在相同空间位置上的有效信息,因此需要经过Pointwise Convolution来将这些Map组合成新的Feature Map。
2.2 Pointwise Convolution
Pointwise Convolution的卷积核尺寸为1 x 1 x M,M为前一层的Depth,因此该层卷积会将上一层的Feature在深度上进行加权组合,生成新的Feature Map,有几个Filter就有几个Feature Map。
2.3 参数对比
普通卷积参数量:4 x 3 x 3 x 3 = 108;
深度可分离卷积参数量:3 x 3 x 3 + 4 x 3 = 39;
使用深度可分离卷积参数量大概为普通卷积的三分之一。
3. 实际应用
在产品上适配MobileNetv2时,遇到了大量的深度可分离卷积操作。MobileNet通过使用深度可分离卷积在牺牲部分精度的情况下,极大的降低了参数量。
产品源码似乎是通过将group参数从1改为输入通道数来实现的深度可分离卷积。但是编译过程中,由于修改group参数的值,该层的权重数据也扩大了group倍,导致实际编译出来的模型比原始模型大了三倍左右,后续可能需要进行优化。
深度可分离卷积部分参考了:https://yinguobing.com/separable-convolution/#fn2,本文只做个人参考,侵删。