SENET——imageNet冠军解读
我是Momenta高級研發工程師胡杰,很高興可以和大家分享我們的SENet。借助我們提出 SENet,我們團隊(WMW)以極大的優勢獲得了最后一屆ImageNet 2017競賽 Image Classification任務的冠軍,并被邀請在CVPR 2017的workshop(Beyond ImageNet)中給出算法介紹。下面我將介紹我們提出的SENet,論文和代碼會在近期公布在arXiv上,歡迎大家follow我們的工作,并給出寶貴的建議和意見。
我們從最基本的卷積操作開始說起。近些年來,卷積神經網絡在很多領域上都取得了巨大的突破。而卷積核作為卷積神經網絡的核心,通常被看做是在局部感受野上,將空間上(spatial)的信息和特征維度上(channel-wise)的信息進行聚合的信息聚合體。卷積神經網絡由一系列卷積層、非線性層和下采樣層構成,這樣它們能夠從全局感受野上去捕獲圖像的特征來進行圖像的描述。
然而去學到一個性能非常強勁的網絡是相當困難的,其難點來自于很多方面。最近很多工作被提出來從空間維度層面來提升網絡的性能,如Inception結構中嵌入了多尺度信息,聚合多種不同感受野上的特征來獲得性能增益;在Inside-Outside網絡中考慮了空間中的上下文信息;還有將Attention機制引入到空間維度上等等。這些工作都獲得了相當不錯的成果。
我們可以看到,已經有很多工作在空間維度上來提升網絡的性能。那么很自然想到,網絡是否可以從其他層面來考慮去提升性能,比如考慮特征通道之間的關系?我們的工作就是基于這一點并提出了Squeeze-and-Excitation Networks(簡稱SENet)。在我們提出的結構中,Squeeze和Excitation是兩個非常關鍵的操作,所以我們以此來命名。我們的動機是希望顯式地建模特征通道之間的相互依賴關系。另外,我們并不打算引入一個新的空間維度來進行特征通道間的融合,而是采用了一種全新的“特征重標定”策略。具體來說,就是通過學習的方式來自動獲取到每個特征通道的重要程度,然后依照這個重要程度去提升有用的特征并抑制對當前任務用處不大的特征。
上圖是我們提出的SE模塊的示意圖。給定一個輸入x,其特征通道數為c_1,通過一系列卷積等一般變換后得到一個特征通道數為c_2的特征。與傳統的CNN不一樣的是,接下來我們通過三個操作來重標定前面得到的特征。
首先是Squeeze操作,我們順著空間維度來進行特征壓縮,將每個二維的特征通道變成一個實數,這個實數某種程度上具有全局的感受野,并且輸出的維度和輸入的特征通道數相匹配。它表征著在特征通道上響應的全局分布,而且使得靠近輸入的層也可以獲得全局的感受野,這一點在很多任務中都是非常有用的。
其次是Excitation操作,它是一個類似于循環神經網絡中門的機制。通過參數 來為每個特征通道生成權重,其中參數 被學習用來顯式地建模特征通道間的相關性。
最后是一個Reweight的操作,我們將Excitation的輸出的權重看做是進過特征選擇后的每個特征通道的重要性,然后通過乘法逐通道加權到先前的特征上,完成在通道維度上的對原始特征的重標定。
上左圖是將SE模塊嵌入到Inception結構的一個示例。方框旁邊的維度信息代表該層的輸出。這里我們使用global average pooling作為Squeeze操作。緊接著兩個Fully Connected 層組成一個Bottleneck結構去建模通道間的相關性,并輸出和輸入特征同樣數目的權重。我們首先將特征維度降低到輸入的1/16,然后經過ReLu激活后再通過一個Fully Connected 層升回到原來的維度。這樣做比直接用一個Fully Connected層的好處在于:1)具有更多的非線性,可以更好地擬合通道間復雜的相關性;2)極大地減少了參數量和計算量。然后通過一個Sigmoid的門獲得0~1之間歸一化的權重,最后通過一個Scale的操作來將歸一化后的權重加權到每個通道的特征上。
除此之外,SE模塊還可以嵌入到含有skip-connections的模塊中。上右圖是將SE嵌入到 ResNet模塊中的一個例子,操作過程基本和SE-Inception一樣,只不過是在Addition前對分支上Residual的特征進行了特征重標定。如果對Addition后主支上的特征進行重標定,由于在主干上存在0~1的scale操作,在網絡較深BP優化時就會在靠近輸入層容易出現梯度消散的情況,導致模型難以優化。
目前大多數的主流網絡都是基于這兩種類似的單元通過repeat方式疊加來構造的。由此可見,SE模塊可以嵌入到現在幾乎所有的網絡結構中。通過在原始網絡結構的building block 單元中嵌入SE模塊,我們可以獲得不同種類的SENet 。如SE-BN-Inception、SE-ResNet 、SE-ReNeXt、SE-Inception-ResNet-v2等等。
從上面的介紹中可以發現,SENet構造非常簡單,而且很容易被部署,不需要引入新的函數或者層。除此之外,它還在模型和計算復雜度上具有良好的特性。拿ResNet-50和SE-ResNet-50對比舉例來說,SE-ResNet-50相對于ResNet-50有著10%模型參數的增長。額外的模型參數都存在于Bottleneck設計的兩個Fully Connected中,由于ResNet結構中最后一個stage的特征通道數目為2048,導致模型參數有著較大的增長,實驗發現移除掉最后一個stage中3個build block上的SE設定,可以將10%參數量的增長減少到2%。此時模型的精度幾乎無損失。
另外,由于在現有的GPU實現中,都沒有對global pooling和較小計算量的Fully Connected進行優化,這導致了在GPU上的運行時間SE-ResNet-50相對于ResNet-50有著約10% 的增長。盡管如此,其理論增長的額外計算量僅僅不到1%,這與其在CPU 運行時間上的增長相匹配(~2%)。可以看出,在現有網絡架構中嵌入SE模塊而導致額外的參數和計算量的增長微乎其微。
在訓練中,我們使用了一些常見的數據增強方法和Li Shen提出的均衡數據策略。為了提高訓練效率,我們使用了我們自己優化的分布式訓練系統ROCS, 并采用了更大的batch-size 和初始學習率。所有的模型都是從頭開始訓練的。
接下來,為了驗證SENets的有效性,我們將在ImageNet數據集上進行實驗,并從兩個方面來進行論證。一個是性能的增益vs.網絡的深度; 另一個是將SE嵌入到現有的不同網絡中進行結果對比。另外,我們也會展示在ImageNet競賽中的結果。
首先我們來看一下網絡的深度對SE的影響。上表分別展示了ResNet-50、ResNet-101、ResNet-152和嵌入SE模型的結果。第一欄Original是原作者實現的結果,為了進行公平的比較,我們在ROCS上重新進行了實驗得到Our re-implementation的結果(ps. 我們重實現的精度往往比原paper中要高一些)。最后一欄SE-module是指嵌入了SE模塊的結果,它的訓練參數和第二欄Our re-implementation一致。括號中的紅色數值是指相對于Our re-implementation的精度提升的幅值。
從上表可以看出,SE-ResNets在各種深度上都遠遠超過了其對應的沒有SE的結構版本的精度,這說明無論網絡的深度如何,SE模塊都能夠給網絡帶來性能上的增益。值得一提的是,SE-ResNet-50可以達到和ResNet-101一樣的精度;更甚,SE-ResNet-101遠遠地超過了更深的ResNet-152。
上圖展示了ResNet-50和ResNet-152以及它們對應的嵌入SE模塊的網絡在ImageNet上的訓練過程,可以明顯看出加入了SE模塊的網絡收斂到更低的錯誤率上。
另外,為了驗證SE模塊的泛化能力,我們也在除ResNet以外的結構上進行了實驗。從上表可以看出,將SE模塊嵌入到ResNeXt、BN-Inception、Inception-ResNet-v2上均獲得了不菲的增益效果。由此看出,SE的增益效果不僅僅局限于某些特殊的網絡結構,它具有很強的泛化性。
上圖展示的是SE嵌入在ResNeXt-50和Inception-ResNet-v2的訓練過程對比。
在上表中我們列出了一些最新的在ImageNet分類上的網絡的結果。其中我們的SENet實質上是一個SE-ResNeXt-152(64x4d),在ResNeXt-152上嵌入SE模塊,并做了一些其他修改和訓練優化上的小技巧,這些我們會在后續公開的論文中進行詳細介紹。可以看出 SENet獲得了迄今為止在single-crop上最好的性能。
最后,在ILSVRC 2017競賽中,我們的融合模型在測試集上獲得了2.251% Top-5錯誤率。對比于去年第一名的結果2.991%,我們獲得了將近25%的精度提升。
更多技術上和實驗上的細節將會展示在即將公開的論文中。
總結
以上是生活随笔為你收集整理的SENET——imageNet冠军解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNS服务搭建和正反区域解析
- 下一篇: MSN即将退役,即时通讯开放平台成趋势