首先观察普通卷积神经网络,当输入为6x6x3, 卷积核为3x3x3x5时,如果不采用padding,且stride步长=1,那么此时得到的输出结果为4x4x5。
这个过程中,所需的计算次数为:3x3x3x4x4x5=2160.
深度可分离卷积(Depthwise Separable Convolution)由两个部分组成,包括Depthwise(DW)和Pointwise(PW)。
Depthwise Convolution深度卷积
深度卷积,一个卷积核只负责一个通道,一个通道只被一个卷积核卷积。
该例输入为6x6x3,3为channel数,使用的卷积核为3个3*3的卷积核,如图所示,红色的卷积核只对输入的红色channel进行卷积,得到4*4的输出,同理,绿色对绿色,蓝色对蓝色,从而得到4x4x4的输出。
这个过程,所需的计算次数为:3*3*4*4*4 = 432.
但由于我们想要它的输出结果和普通的卷积一样,都是4x4x5,所以接下来我们对它进行逐点卷积。
Pointwise Convolution
PW的过程与普通的卷积过程相似,区别在于卷积核 类型为 1x1xM,M代表输入的channel数,如上述例子, 输入为4x4x3,通过五个1x1x3的卷积核,使得输出变成4x4x5的feature map。
这个过程的计算次数为:1x1x3x4x4x5 = 240。
经过深度可分离卷积(深度卷积和逐点卷积),我们得到了与普通卷积相同的输出,对比一下两者在计算次数上的区别:
普通卷积的计算次数为2160次,深度可分离卷积的计算次数为432+240 = 672次。相比之下深度可分离卷积减少了计算次数。