論文地址:
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MobileNet的核心就是Depthwise separable convolution(深度可分離卷積),它將一般的卷積過程分為了depthwise convolution(逐深度卷積)和pointwise convolution(逐點卷積),在損失一點精度的情況下,計算量大幅下降,速度更快,模型更小。
先來看看一般的卷積過程,如下圖:
輸入
的圖像,即
,使用
的卷積核,
,無
,則卷積后,輸出
的圖像。
為了得到下圖
的輸出:
那么就需要256個卷積核(一個卷積核輸出一個channel),因此總的計算量就為
,即一個卷積核要在輸入圖像上滑動
個位置,每個位置進行
次運算,一共有
個卷積核。
如果用
表示卷積核的尺寸,
表示輸入feature map的尺寸,
表示輸入channel數,
表示輸出channel數,那么在
且有
的情況下,總的計算量為:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1EX0srJUMyJUI3K0RfSyslQzIlQjcrTSslQzIlQjcrTislQzIlQjcrRF9GKyVDMiVCNytEX0Y=.png)
Depthwise separable convolution的第一步是depthwise convolution,如下圖:
將原來的
的卷積核變為了3個
的卷積核,
卷積核常被用來減少channel數。每個卷積核只在輸入圖像的一個channel上操作,最后得到一個
的輸出。
這一步的計算量為 ![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD04KyU1Q3RpbWVzKzgrJTVDdGltZXMrNSslNUN0aW1lcys1KyU1Q3RpbWVzKzErJTVDdGltZXMrMyUzRDQlMkM4MDA=.png)
第二步是pointwise convolution,如下圖:
它使用一個
的卷積核對depthwise convolution的輸出圖像進行逐點卷積,最終就得到了
的輸出。
如果使用256個
的卷積核就能得到
的輸出圖像了。
這一步的計算量為 ![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD04KyU1Q3RpbWVzKzgrJTVDdGltZXMrMSslNUN0aW1lcysxKyU1Q3RpbWVzKzMrJTVDdGltZXMrMjU2JTNENDklMkMxNTI=.png)
因此這兩步的計算量之和就為
,只有原來的
倍的計算量。
於是 ,用上面的符號來表示的話,那么在
且有
的情況下,
depthwise convolution的計算量為:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1EX0YrJUMyJUI3K0RfRislQzIlQjcrRF9rKyVDMiVCNytEX2srJUMyJUI3K00=.png)
pointwise convolution的計算量為:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1EX0YrJUMyJUI3K0RfRislQzIlQjcrTSslQzIlQjcrTg==.png)
因此Depthwise separable convolution就為一般卷積計算量的:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNmcmFjJTdCRF9GKyVDMiVCNytEX0YrJUMyJUI3K0RfayslQzIlQjcrRF9rKyVDMiVCNytNKyUyQitEX0YrJUMyJUI3K0RfRislQzIlQjcrTSslQzIlQjcrTiU3RCU3QkRfSyslQzIlQjcrRF9LKyVDMiVCNytNKyVDMiVCNytOKyVDMiVCNytEX0YrJUMyJUI3K0RfRiU3RCUzRCU1Q2ZyYWMlN0IxJTdEJTdCTiU3RCUyQiU1Q2ZyYWMlN0IxJTdEJTdCRF9LJTVFMiU3RA==.png)
現在的問題是,為什么這么做了只損失了一點精度呢?(當然,對於原本就較小的模型來說,使用Depthwise separable convolution的話參數就更少了,性能就會大幅下降而不是只下降一點了)但卷積的一些東西本來就是黑盒,我們並不知道它的詳細原理,只知道這么做是有效的。
參考
https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728
