non-local神經網絡:通過非局部操作解決深度神經網絡核心問題

譯者 | 李傑

出品 | AI科技大本營(ID:rgznai100)

回想一下我們熟悉的CNN、RNN。如下圖所示,這些神經網絡模型都是基於局部區域進行操作,屬於local operations。為了獲得長距離依賴,也就是圖像中非相鄰像素點之間的關係,本文另闢蹊徑,提出利用non-local operations構建non-local神經網絡。

non-local神经网络:通过非局部操作解决深度神经网络核心问题

經典RNN,CNN網絡結構

受計算機視覺中經典的非局部均值方法啟發,作者的非局部操作是將所有位置對一個位置的特徵加權和作為該位置的響應值。這種非局部操作可以應用於多種計算機視覺框架中,在視頻分類、目標分類、識別、分割等等任務上,都有很好的表現。

簡介

捕捉長距離依賴關係是深度神經網絡的核心問題。以圖像數據為例,要想捕捉長距離依賴,通常的做法是堆積卷積層,隨著層數的加深,感受野越來越大,就能把原先非相鄰的像素點納入到一個整體考慮,獲取的信息分佈廣度也越來越高。這種靠堆疊卷積層得到的感受野提升,需要不斷重複卷積過程,而這種重複會帶來幾個弊端:首先,計算效率很低,層的加深意味著更多的參數,更復雜的關係;其次,優化困難,需要謹慎設計優化過程;最後,建模困難,尤其是對於那些多級依賴項,需要在不同距離位置傳遞信息。

在這篇論文中,作者將非局部操作作為一種簡潔高效且通用的組件,用於捕獲深度神經網絡的中的長距離依賴關係。具體的non-local operation是受到計算機視覺中經典的非局部平均操作(non-localmean operation)啟發,如下圖所示,non-local operations在計算某個位置Xi Xi 的響應時,是考慮所有位置features的加權——所有位置可以是空間的,時間的,時空的,這意味著non-localoperations適用於圖像、序列和視頻問題。

non-local神经网络:通过非局部操作解决深度神经网络核心问题

那麼利用non-local operations有什麼優點呢?

(a)與遞歸操作和卷積操作的漸進行為不同,non-localoperations通過計算任意兩個位置之間的交互直接捕捉遠程依賴,而不用侷限於相鄰點,摒棄了距離的概念。

(b)作者通過實驗表明,在層數很少的情況下,non-localoperations都能取得非常好的性能表現。

(c)non-local可以作為一個組件,和其它網絡結構結合。

在視頻分類中,non-local operations可以發揮很好的效果。在視頻中,長距離的相互作用發生在空間和時間中有距離的像素之間,一個單獨的non-local塊,可以用前向傳播的方式直接捕獲這些時空依賴關係。

背景知識

Non-local image processing

前文說過,non-local operations受到了計算機視覺中經典的非局部均值方法的啟發,所以有必要說一下非局部均值方法。

非局部均值(non-local means)是經典濾波算法,通過計算圖像中所有像素的加權平均值實現過濾。它的目的是使用與當前點紋理類似的區域,對當前點加權。也即加權因子,是基於被加權點與當前點的鄰域的相似性產生,該算法首先選取兩個window,分別為相似窗和搜索窗,相似窗被選取用於比較兩個像素的相似性,搜索窗被選擇用於確定計算相似像素的範圍即:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

如下圖所示,I是一個較大範圍的搜索/加權框,w(x,y)是依賴鄰域(黑灰色部分)算出的權重

non-local神经网络:通过非局部操作解决深度神经网络核心问题

*如果想了解更多關於non-local means的知識,可參考下列文章:

https://blog.csdn.net/qianhen123/article/details/81043217blog.csdn.net

Non-local Neural Networks

1.通用表示

受到non-local means的啟發,本文提出了關於non-localoperations的通用表示,公式如下所示:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

其中, x 是輸入信號(圖片,隊列,視頻,通常是特徵),i 是輸出位置(在空間、時間或時空中)的索引,它的響應值是通過j枚舉所有可能位置來計算的。函數 f 計算 i 和所有 j 之間的相似關係,一元函數 g 計算輸入信號在位置 j 的表示。最終的響應值通過響應因子 C(x) 進行標準化處理得到。

在上式中,圖像中的每一個位置 j 都被考慮到。與之相對應的,我們可以考慮一下卷積的過程,一個3x3的卷積核,能覆蓋到的位置只是位置 j 的相鄰點,只能在相鄰局部進行操作;我們再對比一下全連接過程,有以下幾點不同:

(1)在non-localoperation的公式中,響應值是通過計算不同區域之間的關係得到的,而在全連接層中,是通過賦給每個神經元一個學到的權重。換而言之,在全連接層中,Xi 和 Xj 的關係不能通過一個函數 f 得到。

(2)non-local公式支持可變大小的輸入,並在輸出中保持相應的大小,在全連接層中,要求固定大小的輸入和輸出,並且由於被拉伸成一列,丟失了原有的位置信息。

(3)在與CNN結合位置來看,non-local operation非常靈活,可以添加到深度神經網絡中的前半部分,而全連接層通常被用在最後,這既是一個不同,也給了我們一個啟發:能夠構建一個更豐富的層次結構,將非本地信息和本地信息結合起來。

non-local神经网络:通过非局部操作解决深度神经网络核心问题

神經網絡中的全連接層

2. ff 和 g 的實例化

本小節將會介紹一個non-local operation公式中的函數f 和 g 的具體形式表示。

為了簡潔表示,可以把 g 看做是一個線性轉化,其中:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

其中, Wg 是需要學習的權重矩陣,可以通過空間上的1x1卷積實現(本文只考慮CNN,不過多探討RNN)

接下來討論成對函數 f 的形式:

  • Gaussian

f函數的功能主要是相似度計算和度量,一個通常的想法是利用點積衡量相似度(dot-product similarity),為什麼點積可以衡量相似度呢,這可以通過餘弦相似度公式簡化而來,餘弦相似度計算下式所示,

non-local神经网络:通过非局部操作解决深度神经网络核心问题

如果我們只用點積,相當於減少了計算量和計算複雜度,而且還能達到類似的效果。

那麼, f 函數可以用高斯函數表示如下:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

那麼此時歸一化因子 C(x)可以設置為:

non-local神经网络:通过非局部操作解决深度神经网络核心问题
  • Embedded Gaussian

基於高斯函數的一個簡單擴展,是計算嵌入空間中的相似度,即:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

其中,θ和φ是兩個嵌入,embedding會構建一個映射,將一個空間裡的實體拋射到一個線性向量空間裡去,這樣一來可以在向量空間裡計算度量它們的距離,可以表示為:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

相應的,歸一化因子 C(x)可以表示為:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

*Embedded Gaussian操作與self-attention很類似,實際上,self-attention是其一個特例。但是作者認為,這種注意力不是不可或缺的,f 函數的表現形式還可以有下列兩種:

  • Dot product

通過點乘進行相似度計算:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

歸一化因子可以直接設置為N,也就是X的所有位置數。

  • Concatenation

non-local神经网络:通过非局部操作解决深度神经网络核心问题

其中,[·, ·] 表示維度拼接操作, Wf 實現從向量到標量的轉化。

3. Non-localBlock

non-local operation的公式表示已經得到,為了將其與現有的框架結合起來,我們需要將其封裝到非本地塊(non-localblock)中,一個non-local block可以用下式表示:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

其中, yi 就是non-localoperation的輸出,當看到“+XiXi ”的時候是不是有點熟悉?沒錯,這裡也用了一個殘差連接。之所以要用殘差,是因為這種結構能夠在不破壞原始網絡結構的基礎上,很方便的將non-local block嵌入模型中去。如下圖所示,以一個f為Embedded Gaussian為例,featuremap的輸入為

TxHxWx1024,兩個映射θφ都是1x1x1卷積形式,⊗表示矩陣乘操作,⊕表示元素加操作。

non-local神经网络:通过非局部操作解决深度神经网络核心问题

一個時空non-localblock

基於該結構, f 函數的形式無論是上文中的Gaussian,Embedded Gaussian,Dot product等,都能通過矩陣乘輕鬆實現。

非局部塊的成對計算在高層次的特徵映射中是輕量級的。在上圖的block中,一般T=4,H=W=14或者7,矩陣乘法的兩兩運算複雜度與傳統卷積計算不相上下。為了進一步提升模型效率,還進行了如下調整:

(1)將 θ,φ,g的通道數設置為輸入feature maps的一半,這樣會大大減少計算量

(2)採用抽樣的方式,進一步減輕計算量,將non-local改進為如下公式:

non-local神经网络:通过非局部操作解决深度神经网络核心问题

其中,x^是x經過池化後得到,在空間域中執行這個操作,可以將成對計算的數量減少1/4。這個技巧不會改變非局部的行為,只會使計算變得更稀疏,實現起來也很簡單,只需要在上圖中θ,g中將一個最大池化層即可。

實驗

原文作者做了大量詳實的實驗,本文只截取幾個結果,說明non-local 的有效性。

在視頻任務中的表現

(1)不同 f函數的效果

如下表,以ResNet-50為backbone,本文提出的四張成對函數相比baseline都有很好的提升

non-local神经网络:通过非局部操作解决深度神经网络核心问题

(2)添加non-localblock的stage

如下表,還是以ResNet-50為backbone,將non-local塊插入到哪一個階段,一個non-local塊在res2、res3或res4的提升效果是相似的,而對res5的提升稍微小一些。

non-local神经网络:通过非局部操作解决深度神经网络核心问题

(3)與SOTA視頻分類網絡對比

如下表,本文的方法遠遠超過了所有現有的基於RGB或RGB +流的方法,且與2017年分類比賽冠軍模型結果不相上下。

non-local神经网络:通过非局部操作解决深度神经网络核心问题

在圖像任務中的表現

(1)目標檢測和實例分割

如下表,一個單獨的non-local block超越了了所有的R50/101和X152baseline,包括檢測和分割的所有指標。APbox在所有情況下增加約一個點。

non-local神经网络:通过非局部操作解决深度神经网络核心问题

(2)關鍵點檢測

在Mask R-CNN中,測試non-local對於關鍵點檢測的提升,如下表,在R101的baseline上,在頭部添加4個non-local block會導致讓 AP增加一個約一個點。

non-local神经网络:通过非局部操作解决深度神经网络核心问题

結論

本文提出了一種新的神經網絡Non-Local Neural Networks,它通過非局部操作來捕捉遠程依賴關係。non-local block可以與任何現有的網絡結構相結合。證明了非局部建模在視頻分類、目標檢測和分割、姿態估計等任務中的重要性。在所有的任務上,一個簡單的non-local塊可以很好的提升baseline,non-local block的提出,為傳統卷積的提升提供了更多的啟發和可能性。

論文鏈接:

Non-localNeural Networksarxiv.org

GitHub鏈接:

https://github.com/facebookresearch/video-nonlocal-netgithub.com


分享到:


相關文章: