注意力機制(二)——在計算機視覺中的應用

慣例,除了藍字都不是我寫的。

在計算機視覺裏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( \theta, \phi )的結果加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: f(\mathbb{x}_i, \mathbb{x}_j)=e^{\mathbb{x}_i^T \cdot \mathbb{x}_j}, \mathcal{C}(x)=\sum_{\forall j} f(\mathbb{x}_i, \mathbb{x}_j)
  • Embedded Gaussian: f(\mathbb{x}_i, \mathbb{x}_j)=e^{\theta(\mathbb{x}_i)^T \cdot \phi(\mathbb{x}_j)}, \mathcal{C}(x)=\sum_{\forall j} f(\mathbb{x}_i, \mathbb{x}_j)
  • Dot Product: f(\mathbb{x}_i, \mathbb{x}_j)=\theta(\mathbb{x}_i)^T \cdot \phi(\mathbb{x}_j), \mathcal{C}(x)=|\{i|i \text{ is a valid index of } \mathbb{x}\}|
  • Concatenation: f(\mathbb{x}_i, \mathbb{x}_j)=\text{ReLU}(\mathbb{w}_f^T \cdot [\theta(\mathbb{x}_i), \phi(\mathbb{x}_j)]), \mathcal{C}(x)=|\{i|i \text{ is a valid index of } \mathbb{x}\}| ,這相當於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( \theta, \phi )的結果加pooling層來進一步地減少計算量。

對於前者,注意到f的計算可以化爲矩陣運算,我們實際上可以將整個non-local化爲矩陣乘法運算+卷積運算。如下圖所示,其中oc爲output_channels,卷積操作的輸出filter數量。

 

比較:

1、跟全連接層的聯繫

我們知道,non-local block利用兩個點的相似性對每個位置的特徵做加權,而全連接層則是利用position-related的weight對每個位置做加權。於是,全連接層可以看成non-local block的一個特例

  • 任意兩點的相似性僅跟兩點的位置有關,而與兩點的具體座標無關,即 f(\mathbb{x}_i, \mathbb{x}_j)=w_{ij}
  • g是identity函數g(\mathbb{x}_i)=\mathbb{x}_i
  • 歸一化係數爲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: f(\mathbb{x}_i, \mathbb{x}_j)=e^{\theta(\mathbb{x}_i)^T \cdot \phi(\mathbb{x}_j)}, \mathcal{C}(x)=\sum_{\forall j} f(\mathbb{x}_i, \mathbb{x}_j)

Embedding的1*1卷積操作可以看成矩陣乘法:

\theta(\mathbb{x}_i)= W_{\theta} \cdot \mathbb{x}_i; \quad \phi(\mathbb{x}_j)=W_{\phi} \cdot \mathbb{x}_j \quad \Rightarrow \quad \theta(\mathbb{x})= W_{\theta} \cdot \mathbb{x}; \quad \phi(\mathbb{x})= W_{\phi} \cdot \mathbb{x}

於是,

y=\text{softmax}(\mathbb{x}^T \cdot W_{\theta}^T \cdot W_\phi \cdot \mathbb{x}) \cdot g(\mathbb{x})  

圖像的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

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