MobileNet V1 深度可分離卷積(depthwise & pointwise convolution)


 

論文地址:

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications​arxiv.org

 

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 

編輯於 2019-12-24
原文鏈接:https://zhuanlan.zhihu.com/p/99173115


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM