本文作者專注於AI進階算法,正在推出AI瘋狂進階之基礎理論進階篇,如有興趣可持續關注我。
核心導讀:
1.Depthwise Separable Convolution為什麼高效?
2.Depthwise Separable Convolution比普通卷積差?
3.Depthwise Separable Convolution is all you need?
隨著深度學習的發展,卷積神經網絡變得越來越普遍。之前很長一段時間,大家都把注意力放在通過更深和更複雜的網絡來得到更高的精度,比如很多刷榜的算法都是運用了非常複雜的技巧(實際中可能毛用都沒,這裡鄙視下那些純粹為了刷榜而刷榜的,浪費時間和精力為了個虛名而已),但是這種網絡往往在模型大小和運行速度上沒多大優勢,在實際的工程應用中可能因為應用成本太大而很難大規模商用,例如一些嵌入式平臺上的應用比如機器人和自動駕駛,手機端的一些AI應用比如人臉識別或者文字識別,它們的硬體資源有限,就十分需要一種輕量級、低延遲的網絡模型,而本文所講得深度可分離卷積(Depthwise Separable Convolution)即是在這樣的背景下面應運而生。
1.Depthwise Separable Convolution為什麼高效?
Depthwise Separable Convolution將傳統的卷積分解為一個深度卷積(depthwise convolution)+ 一個 1×1的卷積(pointwise convolution)。如下圖所示,(a)是傳統卷積,(b)、(c)分別對應深度可分離卷積的深度卷積和 1×1的卷積:
假設輸入特徵圖大小為 D_F×D_F×M,輸出特徵圖大小為 D_F×D_F×N,卷積核大小為 D_K×D_K,則傳統卷積的計算量為:D_K×D_K×M×N×D_F×D_F
參數量為:D_K×D_K×M×N
深度可分離卷積的計算量為深度卷積和 1×1 卷積的計算量之和:D_K×D_K×M×D_F×D_F+M×N×D_F×D_F
參數量為:D_K×D_K×M+ M×N
當卷積核大小為 3×3的時候,深度可分離卷積的計算量縮減為傳統卷積的 1/8~1/9 ,參數量也減少較多,但精度下降很低,甚至不會下降。Depthwise Separable Convolution目前已經廣泛應用於各種輕量化卷積神經網絡中,如Mobilenet系列,Shufflenet系列,Nasnet系列,Efficientnet系列,MixNet等,幾乎已經成為一種標配或者潮流。
2.Depthwise Separable Convolution比普通卷積差?
Efficient系列的文章告訴了我們答案。《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》是谷歌2019年最新的研究,該文在mNasnet的基礎單元基礎上用AUTO ML搜索出一系列輕量化網絡B0-B7,具體精度如下圖,而mNasnet基礎單元主要是由Depthwise Separable Convolution和1*1 Convolution組成。從數據可以看出,最大的Efficient-B7僅僅只用了66M的參數就達到了大模型Gpipe 557M的精度,而我們常用的Resnet-50網絡,Efficient-B0僅僅只用5.3M的參數就可以達到同樣的精度。當然,數據如此驚悚的另一大原因就是用了TPU(炫富,不信去看看谷歌TPU的服務價格!)+AUTOML(有很多人認為這算是一種過擬合,但我想說的是,我們現在很多實際應用項目就是需要在特定的場景下面過擬合,根本就不太需要很高的泛化能力)。這數據背後其實可以反應出一個很明顯的問題,Depthwise Separable Convolution比普通卷積的精度會低嗎?答案很明顯,不會,並且本文作者認為隨著技術進一步的發展,普通卷積會慢慢消失,這種輕量化卷積將會成為主流。
3.Depthwise Separable Convolution is all you need?
本文作者目前基本已經不怎麼用普通卷積,而目前所有的項目中都是用的Depthwise Separable Convolution,通過AUTO ML經常能找到比普通卷積堆積的巨大網絡精度還高的小型網絡,當然,為什麼會出現這種情況,目前理論上還沒辦法證明,本文作者也在持續探索這一塊的內容,有進展會第一時間發出來。