今天看到深度可分离卷积,我记得之前看过一篇文章
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications,这篇文章首次提出可分离卷积,减少参数,减少计算。
深度可分离卷积提出了一种新的思路:它将普通的卷积操作分解为两个过程:Depthwise过程和Pointwise过程。
假设有一个12x12x3像素的输入图像,即一个大小为12x12的RGB图像,用5×5×3的卷积核进行卷积,并想要获得通道数为256的图像输出。
标准卷积:(使用256个卷积核)
所以上述例子的卷积参数的总数=256x5×5×3=19200。
深度可分离卷积:
- Depthwise过程
使用3个5x5x1的卷积核对输入分别卷积,每个得到一个8x8x1图像,叠加
得到8x8x3的图像。 - Pointwise过程
此时输入是8x8x3的图像,使用256个1x1x3的卷积核进行卷积,输出为8x8x256的最终图像。
深度可分离卷积结构图:
深度可分离卷积的卷积参数:5x5×1×3+1×1×3×256=843。
而19200/843=23,由此可见,标准卷积参数是深度可分离卷积卷积参数的23倍,参数少,计算量也超级少。
在普通卷积中,我们对图像进行了256次变换。每个变换都要用到5x5x3x8x8=4800次乘法。在可分离卷积中,我们只对图像做一次变换——在深度卷积中。然后,我们将转换后的图像简单地延长到256通道。不需要一遍又一遍地变换图像,我们可以节省计算能力。
值得注意的是,在Keras和Tensorflow中,都有一个称为“深度乘法器”的参数。默认设置为1。通过改变这个参数,我们可以改变深度卷积中输出通道的数量。例如,如果我们将深度乘法器设置为2,每个5x5x1内核将输出8x8x2的图像,使深度卷积的总输出(堆叠)为8x8x6,而不是8x8x3。有些人可能会选择手动设置深度乘法器来增加神经网络中的参数数量,以便更好地学习更多的特征。
深度可分离卷积的缺点是什么?当然!因为它减少了卷积中参数的数量,如果你的网络已经很小,你可能会得到太少的参数,你的网络可能无法在训练中正确学习。然而,如果使用得当,它可以在不显著降低效率的情况下提高效率,这使得它成为一个非常受欢迎的选择。
参考:https://www.cnblogs.com/jins-note/p/11342947.html