论文地址:
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MobileNet的核心就是Depthwise separable convolution(深度可分离卷积),它将一般的卷积过程分为了depthwise convolution(逐深度卷积)和pointwise convolution(逐点卷积),在损失一点精度的情况下,计算量大幅下降,速度更快,模型更小。
先来看看一般的卷积过程,如下图:

输入 的图像,即
,使用
的卷积核,
,无
,则卷积后,输出
的图像。
为了得到下图 的输出:

那么就需要256个卷积核(一个卷积核输出一个channel),因此总的计算量就为 ,即一个卷积核要在输入图像上滑动
个位置,每个位置进行
次运算,一共有
个卷积核。
如果用 表示卷积核的尺寸,
表示输入feature map的尺寸,
表示输入channel数,
表示输出channel数,那么在
且有
的情况下,总的计算量为:
Depthwise separable convolution的第一步是depthwise convolution,如下图:

将原来的 的卷积核变为了3个
的卷积核,
卷积核常被用来减少channel数。每个卷积核只在输入图像的一个channel上操作,最后得到一个
的输出。
这一步的计算量为
第二步是pointwise convolution,如下图:

它使用一个 的卷积核对depthwise convolution的输出图像进行逐点卷积,最终就得到了
的输出。
如果使用256个 的卷积核就能得到
的输出图像了。

这一步的计算量为
因此这两步的计算量之和就为 ,只有原来的
倍的计算量。
于是 ,用上面的符号来表示的话,那么在 且有
的情况下,
depthwise convolution的计算量为:
pointwise convolution的计算量为:
因此Depthwise separable convolution就为一般卷积计算量的:
现在的问题是,为什么这么做了只损失了一点精度呢?(当然,对于原本就较小的模型来说,使用Depthwise separable convolution的话参数就更少了,性能就会大幅下降而不是只下降一点了)但卷积的一些东西本来就是黑盒,我们并不知道它的详细原理,只知道这么做是有效的。
参考
https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728