Non-local Neural及Self-attention

@Non-local Neural及Self-attention

Non-local Neural及Self-attention

1 創新點

無論cv還是nlp,都需要捕獲長範圍依賴。在時間序列任務中RNN操作是一種主要的捕獲長範圍依賴手段,而在CNN任務中通過堆疊多個卷積模塊來形成大的感受野。目前的卷積核循環算子都是在空間和時間上的局部操作,長範圍依賴捕獲是通過重複堆疊,並且反向傳播得到,存在3個不足:
(1)捕獲長範圍依賴的效率太低;
(2)由於網絡很深,需要小心的設計模塊和梯度
(3)當需要在比較遠位置之間來回傳遞消息的時,局部操作是是困難的
故作者基於圖片濾波領域的非局部均值濾波操作思想,提出了一個泛化、簡單、可直接嵌入到當前網絡的非局部操作算子,可以捕獲一段時間、空間和時空的長範圍依賴。這樣做的好處是:

  1. 相比於不斷堆疊卷積核RNN的算子,非局部操作直接計算兩個位置(可以是時間位置、空間位置和時空位置)之間的關係即可以快速捕獲長範圍依賴,但是會忽略歐式距離,這種計算方法其實就是求自相關矩陣,只不過是泛化的自相關矩陣。
  2. 非局部操作計算效率很高,要達到相同效果,只需要更少的對疊層
  3. 非局部操作可以保證尺度和輸出尺度不變,這種設計可以很容易嵌入到目前的網絡架構中。

2 核心思想

由於我關注的是二維圖片的領域,故本文的大部分分析都是對圖片而言,而不是時間序列或視頻序列。
本文的非局部操作算子是基於非局部均值操作而提出來的,故很有必要解釋一下非局部均值操作。我們在CNN或者傳統圖片濾波算子中涉及的都是局部操作,例如:
在這裏插入圖片描述
可以看出每個位置的輸出值都是kernel和輸入的局部卷積計算得到的,而非局部均值濾波操作是非常簡單的。核心思想是在計算每個像素位置輸出的時候,不在只和鄰域計算,而是和圖像中所有位置計算相關性,然後將相關性作爲一個權重表徵其他位置和點前待計算位置的相似度。可以簡單認爲採用了一個和原圖一樣大的kernel進行卷積計算。下圖表示高斯濾波,雙邊濾波和非局部均值處理過程:
在這裏插入圖片描述
可以看出對待計算的中心紅色點,前兩種局部操作都是在鄰域計算,而非局部均值是和整個圖片進行計算。但是實際上如果採用逐點計算的方式,不僅計算速度非常慢,而且抗干擾能力不太強,故非局部均值操作是採用block的思想,計算block和block之間的相關性。
在這裏插入圖片描述
可以看出,待計算的像素位置是p,故先構造block,然後計算其他位置block和當前block的相關性,可以看出q1和q2區域非常相似,故計算時候給予一個大的權重,且q3給予一個較小的權重。這樣做的好處是突出共性(關心的區域),消除差異(通常是噪聲)。
在這裏插入圖片描述
上圖可以看出非局部操作的優點,每一個例子中左圖是待計算像素點的位置,右圖是基於NL均值操作計算出來的權重分佈圖,通過(c)可以看出,由於待計算點位置是在邊緣處,通過非局部操作後突出了全部邊緣。
上面的所有分析都是基於非局部操作來講的,但是實際上在深度學習時代,可以歸爲自注意力機制self-attention。在機器翻譯中,自我注意力模塊通過關注所有位置並嵌入空間中其加權平均值來計算序列中的位置相應。在CV中那就是通過關注圖片中(可以是特徵圖)所有並在嵌入空間中取其加權平均值來表示圖片中某位置處的響應。嵌入空間可以認爲是一個更加抽象的圖片空間表達,目的是匯聚更多的信息,提高計算效率。

3網絡機構

非局部操作的具體計算公式。首先在深度學習中非局部操作可以表達爲:
i是輸出特徵
i是輸出特徵圖的其中一個位置,通用來說連這個位置可以是時間空間和時空。j是所有可能位置的索引,x是輸入信號,可以是圖像、序列和視頻,通常是特徵圖。y是x的尺度一樣的輸出圖,f是配對計算函數,計算第i個位置和其他所有位置的相關性,g是一元輸入函數,目的是進行信息變換。C(x)是歸一化函數,保證變換前後整體信息不變。以上是一個非常泛化的公式,具體細節見下面。在局部卷積算子中,一般的
在這裏插入圖片描述
由於f和g都是通式,故結合神經網絡待定,需要考慮其具體形式。
首先g由於是一元輸出,比較簡單,我們可以採用1*1卷積,代表線性嵌入,其形式爲:
在這裏插入圖片描述
對於f,前面我們說過其實就是計算兩個位置的相關性,那麼第一個非常自然的函數是Gaussian。
在這裏插入圖片描述
對兩個位置進行點乘,然後通過指數映射,放大差異。
在這裏插入圖片描述
前面的gaussian形式是直接在當前空間計算,而(2)更加通用,在嵌入空間中計算高斯距離。這裏:
在這裏插入圖片描述
在這裏插入圖片描述
前面兩個:
在這裏插入圖片描述
仔細觀察,如果把C(x)考慮進去,那麼

在這裏插入圖片描述
其實就是softmax形式,完整考慮是:

在這裏插入圖片描述
這個就是目前常用的位置注意力機制的表達式,所以說語義分割中大部分通道注意力機制都是本文的特殊化。

(3) Dot product

考慮一種最簡單的非局部操作形式:
image.png
其中C(x)=N,像素個數。可以看出(2) (3)的主要區別是是否含有激活函數softmax。

(4) Concatenation
參考 Relation Networks可以提出:
在這裏插入圖片描述

前面是基本的非局部操作算子,利用這些算子,下面開始構造成模塊。
在這裏插入圖片描述
可以看出,上面構造成了殘差形式。上面的做法的好處是可以隨意嵌入到任何一個預訓練好的網絡中,因爲只要設置W_z初始化爲0,那麼就沒有任何影響,然後在遷移學習中學習新的權重。這樣就不會因爲引入了新的模塊而導致預訓練權重無法使用。
在這裏插入圖片描述
由於我們考慮的是圖片,故可以直接設置T=1, 或者說不存在。首先網絡輸入是X=(batch, h, w, 1024),經過Embeded gaussian 中的兩個嵌入權重變換W得到 (batch, h, w, 512), 其實這裏的目的是降低通道數,減少計算量;然後分別對這兩個輸出進行reshape操作,變成(batch, hw, hw), 然後在第2個維度即最後一個維度上進行softmax操作,得到(batch, hw, hw), 意這樣做就是通道注意力,相當於找到了當前圖片或特徵圖中每個像素與其他所有位置像素的歸一化相關性;然後將g也採用一樣的操作,先通道降維,然後reshape;然後和 (batch, hw, hw)進行矩陣乘,得到(batch, h, w, 512), 即將通道注意力機制應用到了所有通道的每張特徵圖對應位置上,本質就是輸出的每個位置值都是其他所有位置的加權平均值,通過softmax操作可以進一步突出共性。最後經過一個1x1卷積恢復輸出通道,保證輸入輸出尺度完全相同。

4 核心代碼

在這裏插入圖片描述

5 擴展

nonlocl的背後思想其實是自注意力機制的泛化表達,準確來說本文只提到了位置注意力機制(位置與位置之間的相關性)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章