【AI不惑境】移动端高效网络,卷积拆分和分组的精髓
大家好,這是專欄《AI不惑境》的第六篇文章,講述卷積拆分和分組卷積的精髓。
進入到不惑境界,就是向高手邁進的開始了,在這個境界需要自己獨立思考。如果說學習是一個從模仿,到追隨,到創造的過程,那么到這個階段,應該躍過了模仿和追隨的階段,進入了創造的階段。從這個境界開始,講述的問題可能不再有答案,更多的是激發大家一起來思考。
作者&編輯 | 言有三
在移動端高效的模型設計中,卷積拆分和分組幾乎是不可缺少的思想,那么它們究竟是如何高效,本身又有哪些發展呢。
?
1 什么是卷積拆分
一個多通道的普通2D卷積包含了三個維度,分別是通道,長,寬,如下圖(a)。
?
然后將這個卷積的步驟分解為3個獨立的方向[1],即通道方向,X方向和Y方向,如上圖(b),則具有更低的計算量和參數量。
假如X是卷積核寬度,Y是卷積核高度,C是輸入通道數,如果是正常的卷積,那么輸出一個通道,需要的參數量是XYC,經過上圖的分解后,參數量變為X+Y+C,一般來說C>>X和Y,所以分解后的參數對比之前的參數約為1/(XY)。
對于3×3的卷積,相當于參數量降低一個數量級,計算量也是相當,可見這是很高效的操作。
當然,還可以只分解其中的某些維度,比如在Inception V3的網絡結構中,就將7×7的卷積拆分為1×7和7×1兩個方向。從另一個角度來看,這還提升了網絡的深度。
?
2 什么是通道分組
2.1 分組卷積的來源
標準的卷積是使用多個卷積核在輸入的所有通道上分別卷積提取特征,而分組卷積,就是將通道進行分組,組與組之間相關不影響,各自得到輸出。
通道分組的思想來自于Laurent Sifre在Google實習的時候提出的separable convolution,相關的內部報告可以參考YouTube視頻https://www.youtube.com/watch?v=VhLe-u0M1a8,具體的實現在它的博士論文[2]中,如下示意圖。
?
對于平移,旋轉等剛體運動來說,它們可以被拆分成不同的維度,因此使用上面的separable convolution,實現起來也很簡單,就是先進行通道的分組,這在AlexNet網絡中還被當作一個訓練技巧。
2.2 從Xception到MobileNet
隨著Google的Inception網絡提出,這一個相對于VGG更加高效的網絡也開始進化。到了Inception V2的時候,已經用上了上面的思想。
?
上面就是一個與Inception Module類似的模塊,只是每一個通道完全一樣,這就可以等價于通道分組了。
假如分組的個數與輸入通道數相等,Inception便成為了極致的inception(extreme inception,簡稱Xception[3])。
首先經過1×1卷積,然后通道分組進行卷積,這樣的一個結構隨Tensorflow的流行而流行,名為Depthwise Separable Convolution。
隨后Google的研究人員提出了MobileNets[4]結構,使用了Depthwise Separable Convolution模塊進行堆疊,與Xception中的不同是1×1卷積放置在分組卷積之后。因為有許多這樣的模塊進行堆疊,所以兩者其實是等價的。
畫成二維圖,示意圖如下:
?
畫成三維圖,示意圖如下:
使用Netscope可視化MobileNet的網絡如下,當我們看到這個28層的網絡,又經歷了殘差網絡的洗禮后,頓時有種返璞歸真的感覺。
2.3 分組卷積性能如何
令輸入blob大小為M×Dk×Dk,輸出為N×Dj×Dj,則標準卷積計算量為M×Dk×Dk×N×Dj×Dj,而轉換為Depthwise卷積加Pointwise卷積,Depthwise卷積計算量為M×Dk×Dk×Dj×Dj,Pointwise卷積計算量為M×N×Dj×Dj,計算量對比為:(M×Dk×Dk×Dj×Dj+M×N×Dj×Dj)/M×Dk×Dk×N×Dj×Dj= 1/N+1/(Dk×Dk),由于網絡中大量地使用3×3的卷積核,當N比較大時,上面卷積計算量約為普通卷積的1/9,從而降低了一個數量級的計算量。
性能上也沒有讓我們失望,在只有VGG16不到1/32的參數量和1/27的計算量的同時還能取得與之相當的性能。
?
關于更多細節的解讀和實驗對比,此處就不再做介紹了,可以閱讀以前的一篇文章。
【模型解讀】說說移動端基準模型MobileNets
2.4 分組卷積性能的進一步提升
對于MobileNet這樣的網絡結構,還可以從兩個方向進行提升,第一個是增加分組的信息交流,第二個是更加智能的分組。
簡單的分組使得不同通道之間沒有交流,可能會導致信息的丟失,Shufflenet[5]重新增加了通道的信息交換。具體來說,對于上一層輸出的通道,先做一個Shuffle操作,再分成幾個組進入到下一層,示意圖如下:
另一方面,MobileNet的分組是固定,ShuffleNet中的通道的打亂也是一個確定的映射,那是不是可以基于數據來學習到更加合適的分組呢?Condensenets[6]給出了確定的回答。
更多的解讀,我們已經放在了知識星球中,感興趣的可以關注。
?
3 分組卷積結構的發展
ResNet雖然不是殘差連接的發明者,但使得這一思想為眾人癡狂。MobileNet也不是分組卷積的發明者,但同樣是它使分組的思想深入人心,原來這樣的網絡結構不僅不降低準確率,還能大幅度提升計算效率,尤其適合硬件并行。
自此,分組的思想被不斷拓展研究,下面我們主要考慮分組的各個通道存在較大差異的研究。
3.1 多分辨率卷積核通道分組網絡
這一類網絡以SqueezeNet[7]為代表,它以卷積層conv1開始,接著是8個Fire modules,最后以卷積層conv10結束。
一個fire module的子結構下圖,包含一個squeeze模塊加上一個expand模塊。Squeeze模塊使用1×1卷積進行通道降維,expand模塊使用1×1卷積和3×3卷積用于通道升維。
Squeezenet的壓縮比率是驚人的,只有AlexNet 1/50的參數量,能達到相當的性能。
3.2 多尺度通道分組網絡
這一類結構采用不同的尺度對信息進行處理,對于分辨率大的分支,使用更少的卷積通道,對于分辨率小的分支,使用更多的卷積通道,以Big-Little Net[8]為代表,K個分支,尺度分別為1/2^(K-1),如下圖結構。
當然,如果兩個通道在中間的計算過程中還存在信息的交流,則可以獲得更高的性能,比如Octave Convolution[9]。
?
卷積核通過因子被分為了高分辨率和低分辨率兩部分,低分辨率具有較多的通道,被稱為低頻分量。高分辨率具有較少的通道,被稱為高頻分量,兩者各自學習,并且進行信息的融合。高分辨率通道通過池化與低分辨率通道融合,低分辨率通過上采樣與高分辨率通道融合。最終在22.2GFLOPS的計算量下,ImageNet Top-1的精度達到了82.9%。
3.3 多精度通道分組網絡
除了還分辨率和卷積核上做文章,還可以在計算精度上做文章,這一類結構以DSConv[10]為代表,它將卷積核分為兩部分,一部分是整數分量VQK,一部分是分數分量KDS,如下圖:
VQK(Variable Quantizes Kernel)只有整數值,不可訓練,它的權重值從預訓練模型中計算而來。KDS(kernel distribution shifter)是浮點數,包含一個kernel級別的偏移量,一個channel級別的偏移量。
這一個模型在ResNet50和ResNet34,AlexNet,MobileNet等基準模型上取得了14x參數量的壓縮,10x速度的提升。
除了上面這些思路外,還有很多可以做的空間,大家可以去多實驗寫論文填坑,有三就幫到這里了。
參考文獻
[1] Jin J, Dundar A, Culurciello E. Flattened convolutional neural networks for feedforward acceleration[J]. arXiv preprint arXiv:1412.5474, 2014.
[2] Sifre L , Mallat, Stéphane. Rigid-Motion Scattering for Texture Classification[J]. Computer Science, 2014.
[3] Chollet F. Xception: Deep Learning with Depthwise Separable Convolutions[J]. computer vision and pattern recognition, 2017: 1800-1807.
[4] Howard A G, Zhu M, Chen B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv:1704.04861, 2017.
[5] Zhang X, Zhou X, Lin M, et al. Shufflenet: An extremely efficient convolutional neural network for mobile devices[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 6848-6856.
[6] Huang G, Liu S, Van der Maaten L, et al. Condensenet: An efficient densenet using learned group convolutions[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 2752-2761.
[7] Iandola F N, Han S, Moskewicz M W, et al. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size[J]. arXiv preprint arXiv:1602.07360, 2016.
[8] Chen C F, Fan Q, Mallinar N, et al. Big-little net: An efficient multi-scale feature representation for visual and speech recognition[J]. arXiv preprint arXiv:1807.03848, 2018.
[9] Chen Y, Fang H, Xu B, et al. Drop an octave: Reducing spatial redundancy in convolutional neural networks with octave convolution[J]. arXiv preprint arXiv:1904.05049, 2019.
[10] Gennari M, Fawcett R, Prisacariu V A. DSConv: Efficient Convolution Operator[J]. arXiv preprint arXiv:1901.01928, 2019.
總結
分組卷積之所有有效,一個是因為網絡中的空間和通道的冗余計算使得其性能可以保持,而簡單的分組并行計算又非常適合于GPU等處理器,因此在移動端高效率模型中廣泛使用,是必須掌握的思想。
下期預告:深度學習中的尺度。
AI白身境系列完整閱讀:
第一期:【AI白身境】深度學習從棄用windows開始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】學AI必備的python基礎
第四期:【AI白身境】深度學習必備圖像基礎
第五期:【AI白身境】搞計算機視覺必備的OpenCV入門基礎
第六期:【AI白身境】只會用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】學深度學習你不得不知的爬蟲基礎
第八期:?【AI白身境】深度學習中的數據可視化
第九期:【AI白身境】入行AI需要什么數學基礎:左手矩陣論,右手微積分
第十期:【AI白身境】一文覽盡計算機視覺研究方向
第十一期:【AI白身境】AI+,都加在哪些應用領域了
第十二期:【AI白身境】究竟誰是paper之王,全球前10的計算機科學家
AI初識境系列完整閱讀
第一期:【AI初識境】從3次人工智能潮起潮落說起
第二期:【AI初識境】從頭理解神經網絡-內行與外行的分水嶺
第三期:【AI初識境】近20年深度學習在圖像領域的重要進展節點
第四期:【AI初識境】激活函數:從人工設計到自動搜索
第五期:【AI初識境】什么是深度學習成功的開始?參數初始化
第六期:【AI初識境】深度學習模型中的Normalization,你懂了多少?
第七期:【AI初識境】為了圍剿SGD大家這些年想過的那十幾招
第八期:【AI初識境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?
第九期:【AI初識境】如何增加深度學習模型的泛化能力
第十期:【AI初識境】深度學習模型評估,從圖像分類到生成模型
第十一期:【AI初識境】深度學習中常用的損失函數有哪些?
第十二期:【AI初識境】給深度學習新手開始項目時的10條建議
AI不惑境系列完整閱讀:
第一期:【AI不惑境】數據壓榨有多狠,人工智能就有多成功
第二期:【AI不惑境】網絡深度對深度學習模型性能有什么影響?
第三期:【AI不惑境】網絡的寬度如何影響深度學習模型的性能?
第四期:【AI不惑境】學習率和batchsize如何影響模型的性能?
第五期:【AI不惑境】殘差網絡的前世今生與原理
第六期:【AI不惑境】移動端高效網絡,卷積拆分和分組的精髓
感謝各位看官的耐心閱讀,不足之處希望多多指教。后續內容將會不定期奉上,歡迎大家關注有三公眾號 有三AI!
總結
以上是生活随笔為你收集整理的【AI不惑境】移动端高效网络,卷积拆分和分组的精髓的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【完结】12篇文章带你逛遍主流分割网络
- 下一篇: 【NLP】用于语音识别、分词的隐马尔科夫