MobileNet (Efficient Convolutional Neural Networks for Mobile Vision Applications)——Google CVPR-2017
MobileNet引入了傳統網絡中原先采用的group思想,即限制濾波器的卷積計算只針對特定的group中的輸入,從而大大降低了卷積計算量,提升了移動端前向計算的速度。
1.1 卷積分解
MobileNet借鑒factorized convolution的思想,將普通卷積操作分為兩部分:
- Depthwise Convolution,即逐通道的卷積,一個卷積核負責一個通道,一個通道只被一個卷積核濾波;其中M是輸入通道數,DK是卷積核尺寸,則這里有 M 個 DK*DK 的卷積核;

- Pointwise convolution,將 depth-wise convolution 得到的 feature map 再「串」起來,其實就是:輸出的每一個 feature map 要包含輸入層所有 feature map 的信息。然而僅采用 depth-wise convolution,是沒辦法做到這點,因此需要 pointwise convolution 的輔助。
其中輸入的 feature map 有 M 個,輸出的 feature map 有 N 個。

+Depthwise convolution的計算復雜度為 DKDKMDFDF,其中DF是卷積層輸出的特征圖的大小。
+Pointwise Convolution的計算復雜度為 MNDFDF
+上面兩步合稱depthwise separable convolution
+標准卷積操作的計算復雜度為DKDKMNDFDF
因此,通過將標准卷積分解成兩層卷積操作,可以計算出理論上的計算效率提升比例:
對於3x3尺寸的卷積核來說,depthwise separable convolution在理論上能帶來約8~9倍的效率提升。
1.2 模型架構
MobileNet的卷積單元如上圖所示,每個卷積操作后都接着一個BN操作和ReLU操作。在MobileNet中,由於3x3卷積核只應用在depthwise convolution中,因此95%的計算量都集中在pointwise convolution 中的1x1卷積中。而對於caffe等采用矩陣運算GEMM實現卷積的深度學習框架,1x1卷積無需進行im2col操作,因此可以直接利用矩陣運算加速庫進行快速計算,從而提升了計算效率。
小結
- 核心思想是采用 depth-wise convolution 操作,在相同的權值參數數量的情況下,相較於 standard convolution 操作,可以減少數倍的計算量,從而達到提升網絡運算速度的目的。
- depth-wise convolution 的思想非首創,借鑒於 2014 年一篇博士論文:《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》
- 采用 depth-wise convolution 會有一個問題,就是導致信息流通不暢,即輸出的 feature map 僅包含輸入的 feature map 的一部分,在這里,MobileNet 采用了 point-wise convolution 解決這個問題。在后來,ShuffleNet 采用同樣的思想對網絡進行改進,只不過把 point-wise convolution 換成了 channel shuffle,然后給網絡美其名曰 ShuffleNet,欲知后事如何,請看 2.3 ShuffleNet
