0.背景
這個模型是《Deep Learning高質量》群里的牛津大神Weidi Xie在介紹他們的VGG face2時候,看到對應的論文《VGGFace2: A dataset for recognising faces across pose and age》中對比實驗涉及到的SENet,其結果比ResNet-50還好,所以也學習學習。
github上的SENet
CNN是通過用局部感受野,基於逐通道基礎上,去融合空間信息來提取信息化的特征,對於圖像這種數據來說很成功。不過,為了增強CNN模型的表征能力,許多現有的工作主要用在增強空間編碼上,比如ResNet,DenseNet。
Jie Hu等人(momenta公司,很厲害的一公司)另辟蹊徑,主要關注通道上可做點。為了與這些基於增強空間編碼的方法對比,通過引入一個新的結構單元,稱之為“擠壓和激勵模塊”(Squeeze-and-Excitation),就是通過顯示的對卷積層特征之間的通道相關性進行建模來提升模型的表征能力;並以此提出了特征重校准機制:通過使用全局信息去選擇性的增強可信息化的特征並同時壓縮那些無用的特征。
1.SE構建塊

圖1.1 SE模塊結構圖
如圖1.1所示,其實SE網絡就是通過不斷的堆疊這個SE模塊而成的網絡,就如
- Googlenet是基於Inception模塊;
- ResNet 網絡是基於ResNet模塊:
- DenseNet是基於DenseNet模塊一樣。
從圖1.1中,假設張量\(X\in R^{W'\times H'\times C'}\),卷積操作為\(F_{tr}\),從而得到新的張量\(U\in R^{W\times H\times C}\)。到這里都是傳統的卷積過程而已,然后基於\(U\),接下來開始擠壓和激勵:
- 擠壓:將\(U\)固定通道維度不變,對每個feature map進行處理,從而得到一個基於通道的描述符\(1\times 1\times C\),即用一個標量來描述一個map;
如圖1.2所示,作者提出的所謂擠壓就是針對每個通道的feature map,進行一次GAP(全局平均池化):
即將這個feature map表示的矩陣所有值相加,求其平均值
- 激勵:(個人覺得有點attention的意思),將擠壓得到的通道描述符\(1\times 1\times C\)作為每個通道的權重,基於\(U\)重新生成一個\(\widetilde{X}\).
如圖1.2所示,就是先對擠壓后得到的\(1\times 1\times C\)的向量基礎上先進行一次FC層轉換,然后用ReLU激活函數層,然后在FC層轉換,接着采用sigmoid激活函數層,該層就是為了模仿LSTM中門的概念,通過這個來控制信息的流通量
其中,\(\delta\)是ReLU函數,\(W_1\in R^{\frac{C}{r}\times C}\),\(W_2\in R^{C\times \frac{C}{r}}\),為了限制模型的復雜程度並且增加泛化性,就通過兩層FC層圍繞一個非線性映射來形成一個"瓶頸",其中\(r\)作者選了16,最后在得到了所謂的門之后,只要簡單的將每個通道的門去乘以原來對應的每個feature map,就能控制每個feature map的信息流通量了
從上述描述就可以看出,這其實算是一個構建網絡塊的方法,可以應用到inception和resnet等網絡上,從而具有普適性,如圖1.2所示.

圖1.2 將SE方法用在Inception模塊和ResNet模塊上的改進對比圖
在后續的實驗中,作者也發現了SE機制可以在網絡的不同層上自適應對應所扮演的角色,例如:
- 泛化性:在較低的層上,它可以學習去激勵可信息化的特征,從而加強較低層級表征的信息共享質量;
- 具像性:在較高的層上,SE模塊變得越來越具體化,對不同的輸入有高度的具體類別響應。
所以,通過SE模塊進行特征重校准的好處是可以基於整個網絡不斷的累加下去。
2. 實驗結果
通過將SE模塊這個概念用在Inception、ResNet、ResNeXt(見最下面參考文獻)、Inception-ResNet-V2等模塊上,就能很簡單快速的得到對應的改變模型,如圖1.2(只有inception和resnet對應模塊)。當然引入了新的部分,在所需要的浮點數操作、計算時間以及參數量上就有負擔了,通過對ResNet-50進行對比:
- 對於浮點數操作來說,基於\(224*224\)大小的輸入基礎上,一次前向傳播,ResNet-50大致需要3.86 GFlops,而SE-ResNet-50大致需要3.87GFlops;
- 對於所需要時間來說,假設minibatch為256,圖片大小還是\(224*224\)則ResNet-50需要164ms,而SE-Resnet
-50大致需要167ms;- 對於額外的參數量,也就是通過兩個FC層引入的參數量\(\frac{2}{r}\sum^S_{s=1}N_s\cdot C^2_s\),假設r=16,則ResNet-50需要大致25百萬的參數量;而SE-ResNet-50大致需要額外增加2.5百萬的參數量。
綜上所述,增加的負擔還是不大的。
下面po下具體的模型結構和對應的結果

圖2.1 ResNet-50,SE-ResNet-50,SE-ResNeXt-50的結構圖

圖2.2 不同模型下的結果對比
2.1. r的值的影響

圖2.1.1 不同r的值的結果
2.2 基於imagenet數據集上的結果

圖2.2.1 不同模型在imagenet下的結果,其中SENet是SE-ResNeXt
2.3 不同層下SE的表現

圖2.3.1 不同層下SE的作用
如圖2.3.1所示,在較低層上,SE的表現是讓信息更有共享性,不同類型下,該層的神經元激活值基本相同,即泛化性;而到了高層,越來越趨向於分開不同的類別,不同類型下,該層的神經元激活值明顯不同,即具像性。
參考文獻:
[ResNeXt] - S. Xie, R. Girshick, P. Dollar, Z. Tu, and K. He. Aggregated residual transformations for deep neural networks. In CVPR, 2017.
