Squeeze Excitation Module 對網絡的改進分析

  Squeeze-and-Excitation Networks服務器

  SE-net 來自於Momenta 孫剛團隊網絡

  SE的設計思路:ide

    從卷積操做的實際做用來考慮,conv 把局部空間信息和通道信息組合起來,組合以後造成FM上的值,以前大部分都是空間上作的。函數

    對channel考慮的少,可是卷積自己就能夠學到通道之間的組織信息,爲何還要在從新學一遍呢?性能

    那思考densenet顯式鏈接各層,resnet能夠連到,DN爲什麼要再連一次?學習

    咱們指望特徵學習能力,可是須要顯式建模來幫助學習測試

    

  1 SE-net的靈感google

  VGG 網絡將 Alexnet 7*7 和 5*5  替換成了3*3 的卷積核spa

  Wide Resnet以下右:設計

  

 

   除此以外,GoogleNet 內部inxeption 實際使用的是一個多尺度 的結構。

  googlenet 是將卷積在空間維度上進行組合

  ResNeXt 是將左邊的分支結構極端化,在不一樣的通道上進行group conversation,最後concat

 

  咱們但願conv filter 能夠在local receptive fields的基礎上 融合 channel-wise 和 spatial 的信息做融合。

  

  下圖左邊inception將卷積核在空間上進行了組合,右圖inside-outsideNetwork 將不一樣方向的卷積在空間上組合到了一塊兒

  

  

  2 Squeeze-and-Excitation Networks

  網絡是否能夠在通道關係方面作加強呢?

  動機:

  對於通道內部依賴作了顯示的建模,選擇強化有用的特徵,抑制無用的特徵

  

  SE module 結構:

  Ftr:X到U的卷積過程 ,可是通道之間的關係並無發生變化:

  Fsq:將每一個通道作了一個squeeze操做,將每一個通道表示成了一個標量,獲得per channel的描述

  Fex:將per channel標量進行「激活」,能夠理解爲算出了per channel的W

  最後將per channel的W乘回到原來的feature map上獲得加權後的channel,將channel 作了恰當的融合

  SE-Module 能夠用於網絡的任意階段

  squeeze 操做保證了,在網絡的早期感覺野就能夠大到全圖的範圍。

  

  SE-inception Module and SE-ResNet Module:

  下圖左邊將Inception Module 轉化成SE 模塊,在此操做中使用squeeze操做是Global polling 操做,也可使用Global conv 操做,可是考慮到feature map 比較大的時候,G C 的W 也會比較大,因此選擇用pooling,一種max 一種average plooing

  最終選擇的是average pooling,主要的考慮是,若是作檢測任務,輸入FM 大小是變化的,average 基本能夠保持能量。若是用max FM 越大,能量不能保持,好比小的FM 求max 和 大的 FM 求 max 在測試時候並不等價。因此選擇average pooling。獲得1*1*c的向量。

  後面能夠接FC,可是爲了減小參數,作了降維操做,增長了一個降維的係數r,輸出 1*1*C/r

  後接RELU,後面在作一個升維操做,獲得1*1*C

  最終使用S函數進行激活。

  

   

  能夠看到參數量主要取決與FC,在實驗時r通常取16,經驗值!

  右圖中,是resnet module,改造和inception分支很相似。

  Architectures:

  fc[16,256]表示,r 降維繫數是16,會先降到16,而後升到256

  在SE-ResNeXt-50中 (32*4d)中,將3*3卷積變成了group卷積,c取32 

  

  模型cost分析:

  1 ,參數量

  2 , 運算速度

  參數量主要來自於在block內部增長的FC,會增長3%-10%的參數量 ,通常是10%,可是在某些狀況下,網絡在靠近輸出的狀況下

  做者把7*7上的FC SE去掉了,獲得總參數佔3%,可是在TOP5的精度損失不到1%,很是的Cost-effective

  其餘的BN,RELU,POOLING 理論的計算量少。可是全鏈接對比卷積引發的計算量也不多

  

  理論上計算量增長的計算量不到1%

  實際inference GPU 時間增長了10%,分析緣由多是卷積核頻繁操做, GPU運算不太友好,大size POOling的問題

  CPU 測試和理論分析值接近。

  訓練的狀況:

  內部服務器:

  Momenta ROCS

  先對類別進行sample,再對類別內的圖片進行sample,能夠確保看到每一個類別內圖片機率的都是相同的

   

  組員在以前場景分類用的小技巧,不是對圖像隨機採樣,而是先對類別進行採樣,再在每一個特定類別中選去一張圖像

  能夠保證數據見到的很平衡的,提升訓練結果。

  訓練超參數:

  任何網絡保證每張卡能夠處理32張圖像,batchsize:1024 / 2048.當batch_size 是2048時候,LR能夠調到1 

  實驗部分:

  

 

能夠看到添加SE之後計算量並無增長不少。  

   

紅色是SE

  

  BN-inception 是一個直線型的網絡,沒有skip-connection:(想驗證是不是隻能用在skip-layer中)

  

  

    下圖:兩個小FC中的第一個,下采樣的比例選取規則,50層的網路。在1/32的時候,性能仍是有些差別,雖然size小了。

     

 

     下圖是實際在參加比賽時,imagenet的結果:

    SE-ResNeXt-152 (64 * 4d)作的改進技巧:

    1:把7*7 拆解成3個3*3連續卷積 (最先在inception中出現)

    2:loss (label_smoothing)

    3: 在訓練的最後幾個epoch,把BN fix住了,正常狀況BN須要一塊兒學習。5-10w次

    由於,BN 只跟batch的數據相關,若是BN和其餘W一直變的話很難學到一致的程度,fixBN,就能夠保證 最後在訓練和測試算出的的均值和方差都是一致的。

    

    

    Excitation的分佈結果:

    取得基本都是每一個stage最後的layer。在淺層網絡學到的比較commen,share FM,在深層之後能夠學到spacial

    

    下圖有意思的是:

    基本大部分線都是1,都是重合的,激活是飽和狀態,個別是0.若是激活全部的值是1的話,其實scale以後沒有任何變化,能夠認爲就是原始的resnet moudle。 換句話說:這個SE模塊沒有起到任何做用,能夠摘除掉

    

    不一樣類別的激活基本都是相同的,只是浮值變化,這些浮值能夠經過分類器的scale進行調節,上層+這層的SE起的做用不大,由於趨勢相同,可能會退化成標準網絡

    結果把最後一個SE模塊摘掉對總體影響不大。

 

  比賽結果:

    

  SE網絡在Mob和Shufflenet中進行實驗:在mobilenet上有3%的提高在shuffle上2%的提高,size 多一點點。

  

    

  場景分類上的結果:

    加了SE以後發現,顯著超過以前的結果:

  

  FAQ

    在不把SEfix的狀況下有多大的收益?

    只是競賽的時候作了fix,追求極致的結果/

     每個通道求一個權值,逐通道的乘上去,設計方式在性能和精度trade off 

    W*H*C 如何映射到C維向量上?

    map 均值對每一個feature map

相關文章
相關標籤/搜索