慣例,除了藍字都不是我寫的。
在計算機視覺裏attention應用在目標檢測、語義分割等方面。在之前的機器翻譯裏提到了CNN的特點,圖像領域最常用的就是CNN方法。
Non-local Neural Networks
Local這個詞主要是針對感受野(receptive field)來說的。以卷積操作爲例,它的感受野大小就是卷積核大小,而我們一般都選用3*3,5*5之類的卷積核,它們只考慮局部區域,因此都是local的運算。全連接就是non-local的,而且是global的。但是全連接帶來了大量的參數,給優化帶來困難。
提出問題:CNN事實上只能獲取局部信息,是通過層疊來增大感受野,在某一時刻只能處理一個局部區域。想要捕捉long-range dependencies(此處range可理解爲time、distance),就只能重複地執行上述操作,通過數據逐步傳遞信號。
這樣會導致:1.計算量大 2.優化困難,需要小心處理 3.難以構建multihop dependency model(多跳依賴模型)。
解決方法:本文提出非局部模塊來捕捉long-range依賴,計算所有位置上特徵的的加權和來作爲對應位置的響應。這組位置可以是空間、時間或者時空座標上的,這也就意味着這種泛化的非局部操作可以應用於圖片、序列和視頻問題。
特點:
1、non-local操作不考慮時空距離,而是通過直接計算兩個位置間的交互來捕捉long-range依賴 這裏模糊了歐式距離 這種計算方法其實就是求自相關矩陣,只不過是泛化的自相關矩陣.
2、non-local操作高效,只需少量幾層就能實現很好的效果(non-local neural networks比現有的2D和3D convolutional networks的視頻分類精度高)
3、non-local操作維持變量輸入原先的大小,因此能方便地與其他操作相結合(因爲pixel-pixel計算開銷比較大,所以使用在 Mask R-CNN的基礎上應用non-local block)
理念:
只在高階語義層中引入non-local layer或者通過對embedding( )的結果加pooling層來減少計算量
- x爲輸入信號,可以是圖片、序列或者視頻,通常是它們的特徵;x_i是一個向量,維數跟x的channel數一樣 self-attention
- y爲輸出信號,與x相同尺寸;
- i和j是位置的索引,它可以是空間、時間或者時空上的位置
- g是一個映射函數,將一個點映射成一個向量,可以看成是計算一個點的特徵。
- f(a,b)函數用於計算a與b之間關係的相關
- C(x)爲正規化因子
以圖像爲例,爲了簡化問題,作者簡單地設置g函數爲一個1*1的卷積,其實就是對原圖做了一個線性變換。相似性度量函數f的選擇有多種。
- Gaussian:
- Embedded Gaussian:
- Dot Product:
- Concatenation: ,這相當於embedded的兩個點拼接作爲帶ReLU激活函數全連接層的輸入。它在visual reasoning中用的比較多。
爲了能讓non-local操作作爲一個組件,可以直接插入任意的神經網絡中,作者把non-local設計成residual block的形式,讓non-local操作去學x的residual:
Wz實際上是一個卷積操作,它的輸出channel數跟x一致。這樣以來,non-local操作就可以作爲一個組件,組裝到任意卷積神經網絡中
具體實現
原文考慮的是T幀的視頻爲例,這裏以一個batch的圖像、f選爲embedded Gaussian爲例,對於其他形式的相似性度量,可以類似地化爲矩陣操作。
如果在尺寸很大的輸入上應用non-local layer,也是計算量很大的。後者的解決方案是,只在高階語義層中引入non-local layer。還可以通過對embedding( )的結果加pooling層來進一步地減少計算量。
對於前者,注意到f的計算可以化爲矩陣運算,我們實際上可以將整個non-local化爲矩陣乘法運算+卷積運算。如下圖所示,其中oc爲output_channels,卷積操作的輸出filter數量。
比較:
1、跟全連接層的聯繫
我們知道,non-local block利用兩個點的相似性對每個位置的特徵做加權,而全連接層則是利用position-related的weight對每個位置做加權。於是,全連接層可以看成non-local block的一個特例:
- 任意兩點的相似性僅跟兩點的位置有關,而與兩點的具體座標無關,即
- g是identity函數,
- 歸一化係數爲1。歸一化係數跟輸入無關,全連接層不能處理任意尺寸的輸入。
2、跟機器翻譯的Self-attention的聯繫
non-local block主要是一個non-local均值計算,具體的算法方法如下公式(1):
同樣,下面給出了機器翻譯中的Self Attention的具體計算公式:
通過對比公式(2)和公式(1)可以發現,當公式(1)中的f函數具體化爲softmax,C(x)操作賦值爲Xj維度的開根號時,兩個公式是等價的。此時可以看出,f函數中的Xi變量等價於公式(2)中的Q,Xj等價於K,g函數中的Xj等價於變量V。
本文裏Embedded Gaussian:
Embedding的1*1卷積操作可以看成矩陣乘法:
於是,
圖像的embedding層
我們把一個12個元素的矩陣變成6個元素的矩陣,直觀上大小縮小了一半
embedding層,在某種程度上,就是用來降維的,降維的原理就是矩陣乘法。在卷積網絡中,可以理解爲特殊全連接層操作,跟1x1卷積核異曲同工
假如我們有一個100W X10W的矩陣,用它乘上一個10W X 20的矩陣,我們可以把它降到100W X 20,這就是嵌入層的一個作用——降維。然後中間那個10W X 20的矩陣,可以理解爲查詢表,也可以理解爲映射表,也可以理解爲過度表
embedding可以降維,當然可以升維。對低維的數據進行升維時,可能把一些其他特徵放大了,或者把籠統的特徵分開了。
---------------------
作者:羅大黑
來源:CSDN
原文:https://blog.csdn.net/weixin_42078618/article/details/82999906
原文來源
non-local 筆記 https://zhuanlan.zhihu.com/p/52510471 https://zhuanlan.zhihu.com/p/33345791 https://zhuanlan.zhihu.com/p/53155423