1.背景:
? ? 深度學習以及大規(guī)模卷積神經(jīng)網(wǎng)絡已經(jīng)成為目前解決視覺識別任務最常見的辦法。我們發(fā)現(xiàn)許多精確的卷積神經(jīng)網(wǎng)絡在進行精確計算時,需要幾百個卷積層以及上千條通道,因此需要數(shù)以百萬計的FLOPs計算。
? ? 但是隨著近些年來在一些計算機視覺領域中,嵌入式設備對深度神經(jīng)網(wǎng)絡的需求日益增多,這更加鼓勵了我們對高效模型的設計靈感:如何在有限的計算能力范圍以內(nèi)(10或者100個MFLOPs)能達到最好的準確率以及最高的精確度,特別是實現(xiàn)在一些智能手機的平臺上。而這篇文章就是探索和設計一種高效率的基礎架構并將其作為一種計算能力的延伸。
2.模型對比:
? ? 在深度神經(jīng)網(wǎng)絡的模型設計過程中,相比于僅僅對卷積層進行累加,GoogleLeNet是選擇了增加卷積神經(jīng)網(wǎng)絡的深度從而降低計算復雜度。而Squeeze Net是在保持準確率的情況下減少了大規(guī)模的參數(shù)以及計算量。ResNet利用了高效的障礙物結構從而獲取出色的性能。另外SENet介紹了一種體系結構單元使用了較少的計算開銷從而提高性能。
? ? 因此基于之前的模型和算法,本文就是致力于為手機移動端這種只具備有限計算能力的設備,探索一種高效的設計模型。雖然mobile NASNet模型作為shuffeNet模型副本取得了客觀的性能(與ImageNet 錯誤分類的百分比相似)。但是其并沒有報導在微小模型上的結果,也沒有評估手機設備真實的推理時間。因此本文在其基礎上進行了改良并提供了實現(xiàn)辦法。
3.技術實現(xiàn):
3.1 Group Convolution(組卷積)? ?
? ? ?卷積神經(jīng)網(wǎng)絡通常是由一些重復的組成結構所建立的。其中,最先進的網(wǎng)絡例如Xception和ResNeXt引入了一些高效的深度可分卷積和組卷積,在結構模型層面上達到表現(xiàn)能力以及計算開銷之間完美的交互。
? ? ?但是在輕量級網(wǎng)絡中,昂貴的逐點卷積運算限制了許許多多具有復雜性約束的通道,而這些都將會嚴重損害準確度。為了解決這些問題,最直接的解決方案是稀疏通道連接,如圖(a),但是這個過程阻礙了信息流在通道組之間的交換,并削弱了它的性能表現(xiàn)。
? ? 所以本文決定允許組卷積從不同的群體中獲取輸入信息 ,如圖(b),這樣輸入與輸出通道可以徹底被聯(lián)系起來,另外特別的,對于之前組層產(chǎn)生的特征圖譜,此操作還可以將每一個組通道拆分成幾個子組,然后這些子組數(shù)據(jù)在下一層流入不同的組,這就有效且優(yōu)美的應用了通道重排操作。
? ? 如圖(c),假設一個卷積層中有g個組,且它的輸出有g*n個通道,我們可以重新改變輸出通道維度到(g,n),然后進行置換并整合作為下一層的輸入。注意到這個操作盡管這兩個卷積有許許多多的組,但依然會產(chǎn)生一些副作用,通道重排是可區(qū)分的,這就意味著在訓練的過程中可以很好的融合在網(wǎng)絡結構中。
3.2 Channel Shuffle Operation(通道重排操作)??
? ? 據(jù)我們所知,在很早以前的高效率模型設計的工作中,通道重排操作的理念被很少的提及,卷積神經(jīng)網(wǎng)絡庫cuda-convnet庫(是?Alex Krizhevsky?公開的一套CNN代碼,運行于Linux系統(tǒng)上,使用GPU做運算,)就倡導過“隨機稀疏卷積”操作。而通道重排的目的是使得組間信息能夠互相交流。
? ? 因此利用通道重排操作給我們帶來的優(yōu)勢,本文打算為一個小型網(wǎng)絡設計一個新穎的重排單元。本文的設計原理開始于瓶頸單元,如圖(a),他是一些殘余的小模塊。這些殘余分支,是一個3*3層的結構,我們應用了一種合理經(jīng)濟的3*3深度卷積計算模式在瓶頸特征圖譜上。
? ? 緊接著本文將原先1*1層的逐點組卷積替換成通道重排操作,然后建立通道重排單元,如圖(b),第二個組卷積的目的是恢復頻道維度以匹配快捷路徑。為了簡單起見,我們不會在第二個逐點卷積層下再次應用通道重排操作,這樣可以得到可比較的結果。通過使用BN(分批標準化)和非線性特征。在一些大幅度應用重排網(wǎng)絡的案例中,本文簡單的做了兩個修改,如圖(c):在快速匹配路徑的過程中加入了3*3的平均池化;用通道連接替換元素方式的添加,可以很容易地擴大通道尺寸,而不需要額外增加計算成本。
? ? 在一些輕量級的網(wǎng)絡工作中通常會沒有充足的通道來處理信息。而逐點組卷積正是運用了通道重排技術,使得在重排網(wǎng)單元里每一個元素都能被高效的計算,相比于ResNet和ResNeXt,在相同的設置下ShuffleNet結構具有較低的復雜度。
3.3 Model Acceleration(模型加速)
? ? 這個方向旨在保留預先訓練好的模型精確度的情況下加快速率。在之前訓練好的模型中通過修剪網(wǎng)絡連接以及減少通道冗余連接從而提升性能。在不改變參數(shù)的情況下,最優(yōu)化卷積算法被應用在快速傅里葉變換以及減少實踐生活中時間消耗的理論。提取大模型中的理論,有利于更加簡單的訓練小的模型。
? ? 模型加速的方法有:
1)? 修剪網(wǎng)絡,減少分支(pruningnetwork connections)。
2)? 對于一個訓練好的網(wǎng)絡(pre-trainedmodel),在性能不下降的情況下減少冗余的分支。
3)? 量化(quantization)和因式分解(factorization)加速。
4)? 在不改變參數(shù)的情況下,使用FFT算法對卷積進行加速。
5)? 提取網(wǎng)絡的精華部分,減小網(wǎng)絡模型。
4.實驗結果:
? ? 本文還通過做不同的對比性試驗,并以表格的形式說明了以下幾點:
? ? (1)在限定complexity的情況下,通過改變group(g)的數(shù)量來改變output channel的數(shù)量,更多的output channel一般而言可以提取更多的特征。
? ? (2)ShuffleNet可以使用更多的feature map不同大小的ShuffleNet在不同group數(shù)量情況下的分類準確率比較。其中一個重要結論是group個數(shù)的線性增長并不會帶來分類準確率的線性增長。但是發(fā)現(xiàn)ShuffleNet對于小的網(wǎng)絡效果更明顯,因為一般小的網(wǎng)絡的channel個數(shù)都不多,在限定計算資源的前提下,ShuffleNet可以使用更多的feature map。
? ? (3)channel shuffle的重要性。
? ? (4)幾個流行的分類網(wǎng)絡的分類準確率對比。
5. 評估:
5.1 逐點組卷積
較小的模型傾向于從團體中獲益更多。請注意,組卷積允許更多特征映射通道用于給定的復雜性約束,所以我們假設性能增益來自更寬的特征映射,這有助于編碼更多信息。 另外,較小的網(wǎng)絡涉及更薄的特征映射,這意味著它可以從放大的特征映射中獲益更多。
隨著組數(shù)的增加(具有更寬的特征圖譜),每個卷積濾波器的輸入通道變得更少,這可能損害表示能力。 有趣的是,我們還注意到對于ShuffleNet 0.25等較小的模型, 更大的群體數(shù)量趨于更好的結果一致,這表明更廣泛的功能圖譜為小型模型帶來更多好處。
5.2 通道重排VS無重排
重排操作的目的是為多組卷積層啟用交叉組信息流。很明顯,通道重排在不同的設置下都一直在提升分類的評分。 尤其是,當組號相對較大時(例如g = 8),帶有通道重排的模型表現(xiàn)優(yōu)于對手,顯示了跨組信息交換的重要性。
5.3 與其他模型對比
在本節(jié)中,我們調(diào)查各種構建塊例如convolutional units in VGG ,ResNet, GoogleNet , ResNeXt and Xception,并在相同的復雜性約束條件下與ShuffleNet進行比較。
5.4 與mobilenet和其他框架比較
結果表明,較簡易的模型shufflenet 仍然明顯優(yōu)于相應的MobileNet,這意味著ShuffleNet的有效性主要來自其有效結構,而不是深度。
6.總結
? ? ShuffleNet的核心就是用逐點組卷積,通道重排和深度分離卷積代替ResNet block的相應層構成了ShuffleNet 單元,達到了減少計算量和提高準確率的目的。channel shuffle解決了多個group convolution疊加出現(xiàn)的邊界效應,逐點組卷積和深度分離卷積主要減少了計算量。
? ? 伴隨著巨大的計算復雜度,更寬的通道(如ShuffleNet 1x),較大的分組對于移動端應用(只能進行有限的浮點操作,且具有并不高效的服務器集群)尤其重要。