深度可分卷積(MobileNet中的depthwise separable convolutions)

MobileNet   

    做圖像算法最經常用的模型是restNet系列,但是訓練好的模型太大。拿restNet50來說,訓練好的模型有280M,參數7千萬,運行起來非常慢。

    MobileNet是一個基於depthwise separable convolutions的網絡結構,優點是模型非常小,訓練完模型11M,參數200多萬,準確率比restNet下降的幅度很小,更適合於移動端。

depthwise separable convolutions

先看一個普通的CNN網絡,這個操作進行了一次卷積並將channel增加一倍:
這個網絡輸入是2個channel,輸出時4個channel,卷積核是3X3,需要的參數是2X3X3X4=72個。

圖片來自於李宏毅老師的深度學習教程:https://www.bilibili.com/video/av48285039/?p=89

 

上面的卷積操作其實做了2件事情,1.進行了一次3X3的卷積,2:將channel擴大爲2倍

用depthwise separable convolutions實現一個同樣的操作分爲兩步:

1.只進行卷積,channel不變

2.第二步,使用1X1卷積核,channel翻倍

最終結果和上述方式一樣,參數數量爲2X3X3+4X2)=26個

和第一種方式的參數相比,得到比例爲:

 其中O爲outchannel,k爲kernel size。在實際應用中,O一般很大(例如512,1024),所以最終的參數數量大約等於:

 如一般常用的3*3的卷積核,參數縮小爲1/9,4*4的卷積核,則縮小爲1/16

原理

爲什麼會出現這種情況,原因很簡單,depthwise separable convolutions利用到了更多的權值共享(這跟CNN之所以如此優秀的原理一樣)。第一個網絡,共用了8個3*3的卷積核,但是後者只用了2個;若是output channel爲256,則需要512個3X3的卷積核,但後者還是2個;這就是祕密所在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章