non-local module及其變形—by Wilson


 一、 簡介
  1. 卷積操作只關注於局部的感受野,是典型的local operation,如果要增大神經元的感受野,一般是堆疊卷積層和池化層來實現,但是這樣計算量和復雜度都會增加,並且feature map的尺寸會較小。為了突破,作者借鑒圖像去噪這個領域的non-local操作,提出了non-local neural network,用來捕捉長距離像素之間的信息,最終實現每個像素的全局感受野。並且通過不同的操作,還可以得到不同空間、時間、通道的像素之間的信息相關性。non-local這個模塊在在視頻分類的任務上,在Kinetics和Charades上都達到了最好的結果;在圖像識別的任務上,non-local模型提高了COCO上物體檢測/物體分割/姿態估計等任務的結果。
  2. 本文提出了一種用於語義分割的縱橫交錯網絡(CCNet),該網絡自適應地捕獲縱橫交錯路徑上的長程上下文信息。為了獲得密集的上下文信息,我們引入了遞歸交叉注意模塊,它從所有像素聚集上下文信息。消融實驗表明,周期性的縱橫交錯注意力能夠以更低的計算成本和存儲成本獲取密集的長期上下文信息。我們的CCNet在兩個語義分割數據集(即城市景觀,ADE20K和實例分割數據集,即COCO。
 
二、參考文獻
  1. CVPR2018: Non-local Neural Networks
  by Xiaolong Wang\何凱明 in CMU/Facebook
  2. CVPR2018: CCNet: Criss-Cross Attention for Semantic Segmentation
  by Zilong Huang in 華中科技大學
  3. Non-locally Enhanced Encoder-Decoder Network for Single Image De-raining
  by Guanbin Li in 中山大學
 
三、non-local論文
  1. 動機
   卷積神經網絡增加感受野的方法存在缺陷,為了提供增大感受野的方法,non-local neural network只增加了一層網絡卻實現了全局感受野。
  2. related work
   1⃣空洞卷積增加感受野:收集信息從周圍的像素,不能生成准確密集的上下文信息。並且有“棋盤效應”。
   2⃣池化增加感受野:feature map size下降
   3⃣PSPNet通過預測的注意力圖集合每個位置的上下文信息。但是計算量大。
  3. 做法
   1⃣定義:(從圖像降噪的non-local operation得)
     C(x)為固定的一個函數
     f(x_i, x_j)是計算相關性的函數,計算每個像素和全部位置像素的相關性
     g(x_j)為對輸入feature的操作
     y_i得到attention的第i位置的特征
 
     個人理解:C(x)做一個標准化;f(x_i, x_j)計算像素間的相關性,作為一個加權系數;g(x_j)對輸入feature做語義轉換(讓算法自己訓練這個操作),並經過加權系數得到第i位置的特征,這個特征融合了於每個位置的相關性。
   2⃣具體操作:(f(x_i, x_j)和g(x_j)的具體形式)
    1). guassian
    2). embedded gaussian(最常用)

     說明:wx_i和wx_j的操作相當於1✖1卷積核的卷積層;f和c函數的操作相當於將i位置和每個位置進行向量內積再做一個softmax()操作,最終我們得到j位置對i位置加權的系數矩陣,這樣的矩陣我們稱為self-attention,這個self-attention很容易擴展到channel、temporal上,從而得到其他方面的attention。具體操作如下所示:
 
 
 
      如中的feature map size為temporal, h, w, size。 通過三個1x1卷積減少一半的通道后(有助於減少計算量)進行reshape,再進行embedded gaussian操作后得到feature map, 通過1x1的輸出卷積層恢復通道數量后,最后進行跳連作為最終的輸出。注意在訓練時,輸出卷積層權重初始化為0,讓non-local模塊從0開始增加模塊的作用。如需通過feature map size減少運算量,可以在其中兩個卷積操作后做一個maxpooling,如圖所示,其中x^為maxpooling后的特征圖。
    3) 點乘

    4) concatenate

  4. 效果
    論文是基於視頻分類模型進行實驗的。baseline是C2D模型,backbone是resnet50:
 
     1⃣相似性度量方式:
 
 
      a) 說明后面三種度量方式都比較優秀,emb-gaussian和點乘方式類似,concatenation后續還需要額外的參數,所以emb-gaussian的方式最常見。這幾種方式都得到較大的提高,說明是non-local這個block在起作用。
 
     2⃣作用的stage:
 
 
      b) 放在較低層(size較大)能夠得到更好效果並且性能類似,但是放到高層時效果提升稍差,原因在於高層的size較小,得到的相關性矩陣分辨率太低,無法提供精確的位置信息。
     3⃣數量:

 

      c) 簡單地說明數量有助於性能的提升
     4⃣spatial-time的組合:
  
  5. 待改進
 
   1⃣雖然操作比較簡單,但是當輸入feature map size較大時,占用顯存比較多,計算量也比較大,如何精簡操作並保持全局感受野,成為這個的改進方向之一。
   2⃣只對spatial操作,可以疊加上channel的信息。
 
 
四、Criss-Cross attention
  1. 動機
    non-local可以在feature map的空間上可以捕捉長距離的上下文信息,但是中間過程的相關性矩陣大小為WH✖WH,當輸入的feature size過大時,會占用非常多的顯存(親身經歷,平時只要2-3G的顯存,加入non-local后占用超8G)。1⃣作者在保持全局感受野的前提下,保持了non-local的特性,並大大減少了運算量和顯存。 2⃣獲得比non-local更好的效果。
  2. related work
    同non-local。
  3. 做法——criss-cross attention
 

 

      采用當前位置與其同行同列的像素的相關性得到水平方向和垂直方向的遠距離像素的上下文信息,並疊加兩個相同的模塊使每個像素的感受野為全局(同non-local,信息傳遞),並且大大減少了運算量。
      a)non-local,中間attention map為WH✖WH,紅色特征圖(左圖表示輸入的feature map,最右表示含有self-attention的feature map)
      b)cc attention,中間的attention map為WH✖️(H+W-1),只關注每個像素與同行同列(如圖中的“十字”)的上下文信息,經過兩個這樣的attention操作,根據信息傳遞原理,紅色特征圖為每個像素與全部像素的上下文信息。
      堆疊兩次得到全局感受野,由信息傳遞可說明:
    在第一次計算cc attention時,左下角像素值只有最左列和最下行的信息聚合,左上角像素有右上角的信息聚合,右下角也有右上角像素的信息聚合。當第二次計算cc attention時,在左下角左同行同列的信息聚合時,由於此時左上角和右下角是有右上角像素的信息的,根據信息傳遞原則,此時左下角也具有右上角像素的信息。其他像素同理。其中,右上角像素的信息通過左上角和右下角傳遞給左下角像素兩次,雖然間接沒有直接傳遞效果好,但是這可能是造成cc attention效果比non-local要好的原因。
計算量由原來的WH✖WH變為WH✖️(H+W-1)✖️2(若堆疊兩次),計算量由乘號變成加號,計算量有所下降。(相關操作類似mobileNet的depth-wise和point-wise,將復雜操作變成兩個步驟)
      將cc attention嵌入語義分割,相關網絡圖如上圖所示。
  4. 效果
    1⃣1/11的內存消耗,15%的計算開銷(不同input size有不同的比例,越大的圖得到的優化越多),但得到比non-local更好的性能,如下表所示:
 

 

 
    2⃣論文baseline為DeepLabv3。
    如下表所示,在validation獲得比其他sota算法更好的性能

 

    3⃣可視化說明cc attention的作用
 

 

      中間兩個熱圖為原圖中綠色像素與其他像素的相關性(cc attention模塊中間feature map的某一行)。可知R=1只有同行列attention,R=2為所有像素。
    4⃣定性結果
 

 

      注意左側圖中圈圈的部分。
  5. 待改進:
    1⃣作者沒有提供R>2的結果,有待論證
    2⃣只關注sptial attention,沒有關注channel 或者 temporal attention
    3⃣與最近🔥的graph neural network有所聯系(摘自其他博主,沒有接觸過圖神經網絡),可以從中得到改進的點。
    4⃣更好的信息傳遞方式...
 
五、其他優化non-local
    patch-non-local module:
    不是全局的相關性度量,將特征圖分m✖️n個patch,再在patch中計算patch內部的attention map。
    計算量為:(HW)**2/(mn)
    缺點在於不是全局的感受野,未來可通過疊加另一個模塊來實現全局感受野。
    實現方法參考博客鏈接,大意是將每個patch整理成I(batch, patch, h, w)的形式,然后用原始non-local的操作進行計算。
    性能分析等由於不熟悉去雨去噪這個領域,沒有做進一步分析。
 
六、討論(開會后的總結:參與人員和QA)
  全體213伐木累參與了會議;加深了對non-local模塊的理解,提供網絡添加模塊的思想;將復雜操作轉換為簡單分布的操作,有助於減少計算量和參數量;
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM