ShuffleNet:An Extremely Efficient Convolutional Neural Network for Mobile Devices一種非常有效的移動(dòng)設(shè)備卷積神經(jīng)網(wǎng)絡(luò)
小組成員:吳坤帥,薄雨蒙,黃麟舒,田磊
1. 簡介
近年來關(guān)于卷積模型的研究層出不窮,產(chǎn)生了如VGG、ResNet、Xception和ResNeXt等性能優(yōu)異的網(wǎng)絡(luò)結(jié)構(gòu),在多個(gè)視覺任務(wù)上超過了人類水平。現(xiàn)在的CNNs模型已經(jīng)具有很高的精度了,最精確的CNN往往需要幾百層和幾千個(gè)信道,因此需要billion級(jí)的FLOPS計(jì)算量,顯然這就限制了此類模型只能用于高性能的服務(wù)器集群,需要一個(gè)更大體積的計(jì)算設(shè)備來完成,而對(duì)于很多移動(dòng)端應(yīng)用無能為力。。當(dāng)我們需要在諸如手機(jī)、無人機(jī)或機(jī)器人等移動(dòng)設(shè)備上進(jìn)行神經(jīng)卷積操作時(shí),無法應(yīng)用這類型的模型。因此我們需要一個(gè)在能滿足足夠的精確計(jì)算得同時(shí)具有較小體積的模型。
解決這一難題的方法之一是設(shè)計(jì)更為輕量級(jí)的模型結(jié)構(gòu)。ShuffleNet 效率極高的CNN架構(gòu),專門應(yīng)用于計(jì)算能力受限的移動(dòng)設(shè)備上。這個(gè)新的架構(gòu)利用兩個(gè)新的操作:逐點(diǎn)的群卷積和信道混洗。這兩個(gè)操作可以有效地降低計(jì)算消耗,同時(shí)又能保證一定的精確度。群卷積操作可以減少由于1x1卷積引入的計(jì)算復(fù)雜度,信道混洗可以促進(jìn)信息在信道的流動(dòng)來減少群卷積引入的副作用。這樣我們就可以通過使用更少的信道,獲得盡量多的編碼信息。
在Imagenet分類和MSCOCO上做的實(shí)驗(yàn)證明了ShuffleNet 具有良好的效果,在基于ARM結(jié)構(gòu)的移動(dòng)設(shè)備上,ShuffleNet在保證計(jì)算精確度的同時(shí)能達(dá)到比AlexNet具有更高的速度。著可以證明,ShuffleNet在小型設(shè)備上的可用性。
2.理論基礎(chǔ)
2.1群卷積操作
現(xiàn)代的神經(jīng)卷積網(wǎng)絡(luò)通常包括了許多重復(fù)的模塊。比如最先進(jìn)的Xception和ResNeXt引入了有效的逐深度卷積的方式或是群卷積方式,在表達(dá)能力和計(jì)算復(fù)雜度中找到折中。但這兩種方法都存在一個(gè)缺點(diǎn),他們沒有充分優(yōu)化計(jì)算中的1x1逐點(diǎn)卷積(逐點(diǎn)卷積需要很大的復(fù)雜度)。例如,對(duì)于RexNeXt中的每個(gè)殘余單元,逐點(diǎn)卷積占用了93.4%的乘法和加法(multilplication-adds)(基數(shù)為32)。在小型網(wǎng)絡(luò)中,逐點(diǎn)卷積占據(jù)了許多信道,結(jié)果我們在使用信道去做其他計(jì)算時(shí)捉襟見肘,降低計(jì)算的精確度。
解決這個(gè)問題,最直接的方式是應(yīng)用信道稀疏連接(channel sparse connections),比如也對(duì)1x1的層也做群卷積。通過確定每個(gè)卷積操作僅發(fā)生在相應(yīng)的輸入信道組上,群卷積有效地減少了計(jì)算量。然而這樣會(huì)帶來一個(gè)新的問題,如果多個(gè)群卷積堆疊到一起,產(chǎn)生了副作用:信道的輸出僅由較少的輸入信息決定,如圖1(a)中所示,兩個(gè)棧道進(jìn)行群卷積,可以看到,一個(gè)信道的輸出只與該組輸入有關(guān)。這回阻斷信道之間的信息流動(dòng),降低信息的表達(dá)能力。
要解決這個(gè)問題,就要讓信息在不同棧道之間流動(dòng)起來。我們允許群卷積從不同的組中得到輸入信息,輸入和輸出的各信道將會(huì)緊密相關(guān)。如圖(b)所示。我們將進(jìn)行過一次卷積后得到的特征劃分成一些小的子組,然后在下一個(gè)層的各組中填充這些不同的子組。如同我們在圖中看到的,棧道的輸出信號(hào)將于各個(gè)輸入棧道相關(guān)。這個(gè)操作對(duì)于兩個(gè)卷積層有不同數(shù)量的組的情況也有效。另外,通道卷積也是可導(dǎo)的,這意味著它可以被嵌入到端到端訓(xùn)練(end to end training)的網(wǎng)絡(luò)結(jié)構(gòu)中。
我們可以使用信道混洗來實(shí)現(xiàn)與(b)一致的功能,如圖(c)所示。我們要做的是將第一次輸出的信息,分成幾個(gè)小組,并分別分配到下一層的輸入。這樣第二層的輸入就同時(shí)包含來自上一層的不同組的信息。
具體的混洗操作如下圖所示。假設(shè)一個(gè)卷積層有g(shù)個(gè)組,每組分成n信道。我們將輸入的棧道reshape成(g,n)維的矩陣,然后轉(zhuǎn)置,再重新分配作為輸出。
2.2.ShuffleNet單元
針對(duì)信道混洗,我們專門建立了小型的ShuffleNet單元。如圖(3)所示。
1).a中的是一個(gè)殘差模塊。對(duì)于其中的3x3卷積,我們使用逐深度卷積。剩下的兩個(gè)1x1卷積中,我們把第一個(gè)卷積替換成逐點(diǎn)群卷積,并對(duì)輸出信號(hào)進(jìn)行信道混洗。
2).b中是我們建立的ShuffleNet單元。我們把第二次1x1點(diǎn)卷積也替換群卷積,目的是匹配灰度通道的維度。我們不需要在第二個(gè)逐點(diǎn)卷積層后使用額外的信道混洗操作。
3).c中,我們在支線上添加了步長為2的3x3均值池化,并且用信道串聯(lián)替代了元素相加操作,這樣可以在只付出一點(diǎn)額外計(jì)算量的代價(jià)下擴(kuò)大信道的維度。
由于使用通道洗牌和逐點(diǎn)群卷積,ShuffleNet中的所有部件可以被有效地計(jì)算出來。在相同設(shè)置下,這個(gè)模型比ResNet和ResNeXt的復(fù)雜度低。比如,給定輸入尺寸c x h x w,瓶頸通道m(xù),卷積組數(shù)目為g,各模型需要的計(jì)算量分別為:
也就是說,對(duì)于給定的計(jì)算量限制,ShuffleNet可以使用更廣的特征譜。另外,在ShuffleNet中逐深度卷積只使用在瓶頸特征譜上。雖然逐深度卷積通常有很低的理論復(fù)雜度,它在低功耗的移動(dòng)設(shè)備上很難實(shí)現(xiàn),可能會(huì)導(dǎo)致與其它密集操作相比很差的計(jì)算復(fù)雜度。在ShuffleNet單元中,我們只在瓶頸單元處使用逐深度卷積
3.實(shí)驗(yàn)
實(shí)驗(yàn)的設(shè)置大多與ResNet相關(guān)實(shí)驗(yàn)相同,區(qū)別在于(1).權(quán)重衰減降低到了4e-5;(2).數(shù)據(jù)增強(qiáng)只使用了微量的aggressive scale augmentation。之所以做出這樣的改變是因?yàn)樵谛⌒途W(wǎng)絡(luò)中欠擬合問題比較突出。
4. 實(shí)驗(yàn)結(jié)果
4.1 群卷積的影響
作者對(duì)于計(jì)算復(fù)雜度為140MFLOPs 、 40MFLOPs、13MFLOPs的ShuffleNet模型,在控制模型復(fù)雜度的同時(shí)對(duì)比了分組化逐點(diǎn)卷積的組數(shù)在1~8時(shí)分別對(duì)于性能的影響。復(fù)雜度一致的情況下,改變組數(shù)來改變輸出的信道數(shù)量。結(jié)果如表1。從表1中看出,帶有分組(g>1)的網(wǎng)絡(luò)比不帶分組(g=1)的網(wǎng)絡(luò)錯(cuò)誤率低。錯(cuò)誤率首先隨著組數(shù)的提高下降這顯示了群卷積將獲得更多的信息。對(duì)于較小的網(wǎng)絡(luò),較大的分組會(huì)得到更好的結(jié)果,組數(shù)增加時(shí),每個(gè)卷積濾波器的輸入通道越來越窄,模型將會(huì)丟失一部分信息,較寬的通道對(duì)于小網(wǎng)絡(luò)尤為重要。所以移除了網(wǎng)絡(luò)第三階段的兩個(gè)結(jié)構(gòu)單元,將節(jié)省下來的運(yùn)算量用來增加網(wǎng)絡(luò)寬度后,網(wǎng)絡(luò)性能進(jìn)一步提高。
4.2 混洗的影響
有沒有進(jìn)行混洗顯然會(huì)對(duì)錯(cuò)誤率造成影響。表2顯示了模型在有/無混洗的情況下的錯(cuò)誤率區(qū)別。可以看到第一次群卷積后進(jìn)行信道混洗可以有效的減少錯(cuò)誤率。
4.3 與其他模型的比較
對(duì)比其他的模型,包括VGG,ResNet,GoogleNet,ResNeXt和Xception,發(fā)現(xiàn)ShuffleNet在兼顧計(jì)算準(zhǔn)確度和復(fù)雜度方面有著最好的表現(xiàn)。
5. 總結(jié)
ShuffleNet的整體網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)延續(xù)了ResNeXt的設(shè)計(jì)思路,主要的差異之處在于,ShuffleNet將瓶頸中的1*1點(diǎn)卷積換成了群卷積。因?yàn)閷?shí)際1x1點(diǎn)卷積也占據(jù)了很大一部分計(jì)算量,原本的3x3群卷積用最極端的深度卷積代替。為了解決逐點(diǎn)群卷積造成的上一層群卷積中特定的一些信息只作用于下一層一部分。群卷積帶來的弱表達(dá)問題,把上一層不同群卷積得到的特征做了一個(gè)信道混洗,來保證信息在不同信道之間的流動(dòng)。
ShuffleNet的實(shí)驗(yàn)結(jié)果優(yōu)于MobileNet,相比MobileNet提高了準(zhǔn)確率,突顯了分組卷積在運(yùn)算效率上的優(yōu)勢,特別是用在小模型上。
總體來說,ShuffleNet通過引進(jìn)了信道混洗解決了分組卷積的信道相關(guān)問題,并且也驗(yàn)證了其有效性。ShuffleNet具有著理論創(chuàng)新性和實(shí)用性。在理論上,ShuffleNet用了一種輕量級(jí)的方法結(jié)局了傳統(tǒng)意義上AlexNet原有的分組并行信息交互問題,而且ShuffleNet的網(wǎng)絡(luò)效率很高,適合體積小的嵌入式產(chǎn)品。但是現(xiàn)有的CPU對(duì)信道混洗也很難支持上,畢竟破壞了數(shù)據(jù)存儲(chǔ)的連續(xù)性后,SIMD的發(fā)揮差強(qiáng)人意,需要在實(shí)現(xiàn)上再下一點(diǎn)功夫。
參考文獻(xiàn):
[1].Zhang X, Zhou X, Lin M, et al. ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices[J]. 2017.