如何評價Momenta ImageNet 2017奪冠架構SENet?

專欄 | Momenta詳解ImageNet 2017奪冠架構SENet


在CVPR 2017上,來自Momenta的高級研發工程師胡傑,代表他的WMW團隊分享了獲得ImageNet冠軍的模型SENet。分享獲得了極大的好評,以下是胡傑的現場發言整理,希望可以和更多的人分享這一精妙模型。

我是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%的精度提升。

論文下載鏈接:

https://arxiv.org/pdf/1709.01507.pdf

Pretrained模型和相關代碼可訪問github獲取

https://github.com/hujie-frank/SENet

原文鏈接:

Momenta:Paper Reading | ImageNet冠軍模型SE-Net詳解zhuanlan.zhihu.com圖標

------------------------------------------------

知乎機構號:Momenta,打造自動駕駛大腦。

基於深度學習的環境感知、高精度地圖、駕駛決策技術,讓無人駕駛成為可能。

Momentawww.zhihu.com圖標

https://u.wechat.com/EOyWSWDFj7PQgPusxCWENtA (二維碼自動識別)


看完的第一感覺就是,貌似這個想法我之前也想過。。。給每個通道加權,只不過之前沒想到應該怎樣合理設計,在防止梯度消失的情況下引入權重。拍腦袋的想法大家都會有,能不能實現,實現了能不能work,不work會不會根據情況調整,可能這就是差距吧。


wm團隊是夫妻檔吧,太強了,連續三屆imagenet都有不錯的表現,膜拜。。。


論文鏈接:[1709.01507] Squeeze-and-Excitation Networks

GitHub:hujie-frank/SENet


請假一下,按理說普通網路頂層接的卷積或全連接層應該會自動挑選、組合底層的特徵啊,為什麼還要明確讓網路加權一遍?


膜拜一下下


這idea挺好想,之前還有卷積核直接從另一個網路預測的呢,SENet說起來還得算這個的簡化版本。

拍腦袋想idea誰都會,能做work並且說服別人才是本事。


很好用,我們已經遷移到圖像超分辨上面了。


自己在ResNet50上加進去過這個結構,如果還是在修改前的預訓練模型上fine-tuning,效果並不好,畢竟新添加的那些fc層都是隨機初始化,對於ResNet50而言,新添加的也有好幾十層,所以如果這幾十層也能夠在ImageNet數據集上預訓練好,那麼效果也應該是不錯的。現在沒有機器和時間搞這個預訓練。


SENet看著擴展能力好像有限,只是為目標分類而設計,在目標檢測和分割上沒啥意義。


這個結構實現過,但是沒找到合理的解釋,學到了學到了


推薦閱讀:

deep learning初學該怎麼入門?是要先好好學習神經網路嗎?
如何看待ACL2017 所有掛arxiv但是沒有在提交時註明的paper全部被拒稿?
增強學習(Reinforcement Learning)的幾點迷惑?
為什麼阿里的刷臉支付使用的是face++技術?
ros系統利用kinect避障的原理是什麼?

TAG:計算機視覺 | 深度學習DeepLearning | 卷積神經網路CNN | ImageNet |