1. 程式人生 > >幾篇較新的計算機視覺Self-Attention

幾篇較新的計算機視覺Self-Attention

作者:Fisher Yu 連結:https://zhuanlan.zhihu.com/p/44031466 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。  

Attention注意力,起源於Human visual system(HVS),個人定義的話,應該類似於 外界給一個刺激Stimuli,然後HVS會第一時間產生對應的 saliency map,注意力對應的應該就是這個顯著性區域。

這其中就涉及很多 bottom-up 及 top-down 的 physiological 原理~

-------------------------------

總的來說,就是 區域權值學習

問題:

  1. Hard-attention,就是0/1問題,哪些區域是被 attentioned,哪些區域不關注

2. Soft-attention,[0,1]間連續分佈問題,每個區域被關注的程度高低,用0~1的score表示

Self-attention自注意力,就是 feature map 間的自主學習,分配權重(可以是 spatial,可以是 temporal,也可以是 channel間)

[1] Non-local NN, CVPR2018

FAIR的傑作,主要 inspired by 傳統方法用non-local similarity來做影象 denoise

主要思想也很簡單,CNN中的 convolution單元每次只關注鄰域 kernel size 的區域,就算後期感受野越來越大,終究還是區域性區域的運算,這樣就忽略了全域性其他片區(比如很遠的畫素)對當前區域的貢獻。

所以 non-local blocks 要做的是,捕獲這種 long-range 關係:對於2D影象,就是影象中任何畫素對當前畫素的關係權值;對於3D視訊,就是所有幀中的所有畫素,對當前幀的畫素的關係權值。

網路框架圖也是簡單粗暴:

Non-local block

文中有談及多種實現方式,在這裡簡單說說在DL框架中最好實現的 Matmul 方式:

  1. 首先對輸入的 feature map X 進行線性對映(說白了就是 1*1*1 卷積,來壓縮通道數),然後得到 \theta,\phi,g 特徵
  2. 通過reshape操作,強行合併上述的三個特徵除通道數外的維度,然後對 \theta和\phi 進行矩陣點乘操作,得到類似協方差矩陣的東西(這個過程很重要,計算出特徵中的自相關性,即得到每幀中每個畫素對其他所有幀所有畫素的關係)
  3. 然後對自相關特徵 以列or以行(具體看矩陣 g 的形式而定) 進行 Softmax 操作,得到0~1的weights,這裡就是我們需要的 Self-attention 係數
  4. 最後將 attention係數,對應乘回特徵矩陣 g 中,然後再上擴 channel 數,與原輸入 feature map X 殘差一下,完整的 bottleneck

嵌入在 action recognition 框架中的attention map 視覺化效果:

attention visulization

圖中的箭頭表示,previous 若干幀中的某些畫素 對最後圖(當前幀)的腳關節畫素的貢獻關係。由於是soft-attention,其實每幀每個畫素對對其有貢獻關係,圖中黃色箭頭是把響應最大的關係描述出來。

總結

Pros:non-local blocks很通用的,容易嵌入在任何現有的 2D 和 3D 卷積網路裡,來改善或者視覺化理解相關的CV任務。比如前不久已有文章把 non-local 用在 Video ReID [2] 的任務裡。

Cons:文中的結果建議把non-local 儘量放在靠前的層裡,但是實際上做 3D 任務,靠前的層由於 temporal T 相對較大,構造 \theta,\phi 及點乘操作那步,超多的引數,需要耗費很大的GPU Memory~ 可後續改善