論文地址:
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