SKNet——SENet孿生兄弟篇

Selective Kernel Networks 啓發自皮質神經元根據不同的刺激可動態調節其自身的receptive field,是結合了SE operatorMerge-and-Run Mappings,以及 attention on inception block 思想的產物。從設計理念上來講也比較simple,即對所有的 > 1 的卷積kernel進行 Selective Kernel 改造,充分利用group/depthwise卷積帶來的較小的理論parameters和flops的紅利,從而使增加多路與動態選擇的設計也不會帶來很大的overhead(但實際group/depthwise的加速優化目前還不是特別好,導致實際速度還是略有一些慢的),具體可以參考如下的結構表格。這樣的設計使得任何網絡進行Selective Kernel化就變得非常容易,只需要對 > 1的卷積進行無腦切換即可。經師弟 

@opteroncx

 實測目前在超分辨的任務上有明確的提升,擴展應用前景還是值得期待的~

大家知道拋開attention的引入,此前比較plain並且work的兩大架構:ResNeXt 和 Inception。前者特點是用group卷積輕量化了>1 kernel的卷積核;後者特點是多路的multiple kernel設計。我們設計的一大出發點就是看是否能夠combine兩者的特色。那麼從哪裏入手呢?我們且看從ResNet到ResNeXt中的計算量分佈:

非常驚人的是,從ResNet到ResNeXt,> 1 kernel的計算量從原來52.9%的佔比下降到了6.6%,幾乎下降了一個數量級,但卻讓ResNeXt的分類性能提升了。從這個觀察出發,我們可以引申出這麼幾個點:

1) 計算量佔比下降到這種程度都能夠有明顯提升,是否在稍微召回一些 > 1 kernel的計算量也能得到進一步的增強,得到更好的trade-off?

2) 因爲本身計算量佔比已經非常小,所以可以在這個部分嘗試引入同樣輕量的多路(multiple path)的設計去召回這些計算量;

3) 再結合之前動態的receptive field的啓示以及目前普遍的attention的操作,完全可以在這個module中實現用動態attention機制建模multiple kernel selection,並且只會帶來很小的理論計算overhead

 

那麼這麼一總結,Selective Kernel的模塊基本就成型了,整個過程還是比較有跡可循的,設計圖如下,簡單一句話總結一下,即是用multiple scale feature彙總的information來channel-wise地指導如何分配側重使用哪個kernel的表徵:

實操中會將kernel 5x5近似爲dilation=2的kernel 3x3。實驗下來效果還是比較明顯的,同樣的實驗setting基本上能夠到達最優的性能複雜度trade-off:

另外有一點沒有反映在論文中,top-1的確是有明確的提升,不過top-5只能與原來較強的模型持平,這一點目前還不是特別clear原因。

SK module對一些輕量模型如ShuffleNetV2的增益還是很明顯的:

不過在遷移到MobileNetV2的時候存在一些問題,MobileNetV2是反residual的設計,中間粗兩邊細,之前分析到的利用中間計算輕量的特點就不存在了,所以漲點肯定有,但是帶來額外的參數和計算量的增長就不是特別能接受了。

比較有意思的是在統計分析的時候我們驚人地發現了有一個middle level 的layer學到了非常魯棒地指導attention selection的pattern——SK_3_4。幾乎對於所有的測試樣本(1000類,每類50個,共50000個),只要對其進行1.5倍的放大,SK_3_4一定會分配更多的selection weights給更大的kernel 5x5,相應地,更小的selection weights給到kernel 3x3(如下圖)。個人認爲這樣的背後存在這麼一種合理的趨勢:對於不同scale的物體,網絡可以自主地決定從底層到高層用不同大小的kernel作爲一個整體的組合去extract這些物體的feature,使得在一個相同的較高層中不同scale的物體能夠得到一個相同scale的feature representation,從而把scale decompose掉,讓feature變得scale-insensitive,能夠更加魯棒地表徵物體類別屬性。(不過從這個角度來講的話,似乎對detection迴歸框沒有優勢,因爲迴歸框是需要feature裏encode住scale信息的)

以上的這個特性對於low level的SK_2_3也是成立的,只不過差別沒有SK_3_4明顯,它整體上也是kernel 5x5較大地assign給較大的物體(如下圖)。

然後在最高層SK_5_3這個pattern消失了(如下圖),大家基本比較接近,從一定程度上也暗示着此時feature已經被decompose掉了scale,所以1.0x與1.5x沒有明確的傾向去選擇更大或更小的kernel。

最後是一些specific cases的attention distribution:

SKNet50和SKNet101的caffe code和model在 https://github.com/implus/SKNet,另外實驗中cifar數據集的setting爲了防止過擬合有一些結構的調整,具體在paper附錄中。

最後期待在Kaggle,天池等比賽中能夠看到SKNet的身影~

最後取名SKNet,致敬胡組長的SENet~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章