輕量級網(wǎng)絡(luò)之ShuffleNet v2
原論文——ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design, ECCV2018
介紹
論文指出目前的輕量級模型主要根據(jù)間接的(undirect)指標(biāo)FLOPs來設(shè)計(jì),而直接的指標(biāo)如速度(speed),在相同F(xiàn)LOPs的速度也會(huì)不一樣。如下圖中的(c)(d).

速度不僅跟FLOPs有關(guān),也依賴于其他因素如內(nèi)存訪問的損耗(memory access cost,MAC),并行度,硬件平臺(操作的優(yōu)化不同)。如下圖是shifflenet和mobilenet v2在GPU和ARM上各個(gè)操作所占用的時(shí)間對比,可以看出不同平臺的時(shí)間差異,卷積在ARM上占了將近90%的時(shí)間,同時(shí)也說明時(shí)間跟許多因素相關(guān)。

因此,論文將speed也作為一個(gè)metric來衡量模型,并在不同硬件平臺上做比較。同時(shí)提出了四條guidelines來指導(dǎo)輕量級模型的設(shè)計(jì)。基于這些guidelines,提出了ShuffleNet v2,在準(zhǔn)確率和速度上都取得了不錯(cuò)的效果。
Guidelines
G1: Equal channel width minimizes memory access cost (MAC).
假設(shè)輸入map為h w c1, 一個(gè)1x1卷積,輸出通道c2。那么FLOPs , 假定內(nèi)存夠用,那么mac為
。論文給了MAC的下界:
推導(dǎo): 當(dāng)且僅當(dāng)c1等于c2時(shí)等號成立,因此印證了guideline:在同等計(jì)算量B的條件下,c1=c2時(shí)MAC最小。
論文也做了實(shí)驗(yàn),如下表所示,在c1:c2=1:1時(shí)batches/sec是最大的。

G2: Excessive group convolution increases MAC.
和上面G1一樣的輸入,那么一個(gè)1x1的group conv(不了解可見輕量級網(wǎng)絡(luò)之ShuffleNet)的B, MAC為
公式說明在輸入確定,B相同時(shí),MAC會(huì)隨g增大而變大。
下表是對應(yīng)的實(shí)驗(yàn)

在shufflenet中使用了分組卷積,減少計(jì)算量,雖然可以使用更大的channel,但是MAC卻隨之增加了,因此,group的選擇也需要做衡量,不能太大,不過這篇論文已經(jīng)不用group conv了。
G3: Network fragmentation reduces degree of parallelism.
網(wǎng)絡(luò)分段太多會(huì)減少并行度,因?yàn)榉侄啻尉鸵愣啻?,?huì)有額外的overhead等而一次更好地利用并行計(jì)算。下表是實(shí)驗(yàn)結(jié)果,k-fragment是k個(gè)1x1卷積,parallel版的就是分支。我們發(fā)現(xiàn)parallel的比fragment慢些,這應(yīng)該是add操作導(dǎo)致的(論文沒提這點(diǎn))。

G4: Element-wise operations are non-negligible.
從上面的Fig2可以看見element-wise操作占據(jù)15%,23%的時(shí)間,是不可忽略的。這種操作有Relu,addtensor, addbias等。下表為實(shí)驗(yàn)結(jié)果

Conclusion
用原文的話來說吧
Based on the above guidelines and empirical studies, we conclude that an efficient network architecture should 1) use "balanced convolutions (equal channel width); 2) be aware of the cost of using group convolution; 3) reduce the degree of fragmentation; and 4) reduce element-wise operations. These desirable properties depend on platform characterics (such as memory manipulation and code optimization) that are beyond theoretical FLOPs. They should be taken into accout for practical network design.
ShuffleNet v2
根據(jù)四條原則,作者提出了shufflenet v2,先看看模型的block(如下圖)。ab是第一版本的,cd是v2的。首先,group conv去掉,滿足G2; 三個(gè)conv相同channel大小,滿足G1;多了個(gè)channel split:將輸入的c個(gè)channel劃分為c-c' 和c' ,一個(gè)是identity,一個(gè)經(jīng)過三個(gè)conv,然后concat到一起,這個(gè)滿足G4,取替了element-wise操作add。最后經(jīng)過channel shuffle將兩個(gè)分支的信息進(jìn)行交流。

channel split的作用:
第一,劃分一半到右分支,意味著右邊計(jì)算量減少,從而可以提高channel數(shù),提高網(wǎng)絡(luò)capacity。
第二,左分支相當(dāng)于一種特征重用(feature reuse), 跟DenseNet和CondenseNet一樣的思想。
下圖(a)為DenseNet的從source layer到target layer連接的權(quán)重的大小,可見target層前1-3層的信息對當(dāng)前層幫助較大,而越遠(yuǎn)的連接比較多余。圖(b)為ShuffleNet v2的情況,因?yàn)閟huffle操作會(huì)導(dǎo)致每次會(huì)有一半的channel到下一層。因此,作者認(rèn)為shufflenet跟densenet一樣的利用到了feature reuse,所以有效。

整個(gè)結(jié)構(gòu)定義:

Experiment
實(shí)驗(yàn)的表格太長了,所以只列出一部分,可以看出準(zhǔn)確率和速度都是很好的,其中speed沒有mobilenet快是因?yàn)閙obilenet的fragment較少(G3)(我數(shù)了下確實(shí)是)。

這次論文還展示它在大模型時(shí)也能取得很好的效果,如下表,加上SE之后甚至比SENet好一些,同時(shí)計(jì)算量小。

Detection:用了一個(gè)light-head rcnn, 把backbone替換為自己的,結(jié)果:

注意這里的FLOPS是輸入224x224下的計(jì)算量,而真實(shí)輸入為800x1200,故應(yīng)乘上19倍左右。比較有趣的點(diǎn)是作者發(fā)現(xiàn)Xception效果不錯(cuò),然后發(fā)現(xiàn)是因?yàn)樗母惺芤氨容^大(兩個(gè)3x3,相當(dāng)于7x7)。因此,作者加多了一個(gè)3x3在第一個(gè)1x1conv之前,這就是表中的v2*。有了進(jìn)一步的提升。
總結(jié)
這篇論文我覺得是一篇很不錯(cuò)的論文,提出了speed的重要性,以及四點(diǎn)guidelines,和大部分遵守這些準(zhǔn)則的shufflenet v2。當(dāng)然沒有什么是十全十美的,不知會(huì)不會(huì)有下一個(gè)v3呢。