2018CVPR:Non-local Neural Networks(自注意力机制捕获远程依赖)
前言
遠程依賴的定義:
- Long-range dependencies make the difference—Comment on “A stochastic model for EEG microstate sequence analysis”
- Long Range Dependence - Cornell University
在閱讀Coordination attention時了解到空間位置信息之間的遠程依賴關系,經查詢了解到ORDNET對短中遠程依賴的提取,并對原始的自注意力機制進行了比較,指出原始的自注意力機制捕獲的遠程依賴特征的不精確性,因此來了解下自注意力機制論文的實現,再繼續了解ORDNET會更深刻。
論文下載鏈接:
2018CVPR:Non-local Neural Networks
Abstract
卷積運算和recurrent運算都是一次處理一個局部鄰域的構建塊。在本文中,我們將非局部操作表示為一個通用的構建塊族,用于捕獲遠程依賴關系。受計算機視覺中經典非局部均值方法[4]的啟發,我們的非局部操作將某個位置的響應計算為所有位置特征的加權和。這種構建塊可以插入到許多計算機視覺體系結構中。在視頻分類任務上,即使沒有任何不必要的附屬配件,我們的非局部模型也可以在Kinetics和Charades datasets上與當前的競爭優勝者競爭或超越他們。在靜態圖像識別中,我們的非局部模型改進了COCO任務集上的目標檢測/分割和姿勢估計。Code will be made available。
[4]A. Buades, B. Coll, and J.-M. Morel. A non-local algorithm for image denoising. InComputer Vision and Pattern Recognition (CVPR), 2005.1,2,3
1. Introduction
捕獲遠程依賴在深度神經網絡中具有至關重要性。對于序列數據(例如,在語音、語言中),recurrent operations[36,22]是遠程依賴建模的主要解決方案。對于圖像數據,遠程依賴性是由深層的卷積運算形成的大感受野建模的[13,29]。
遠古參考文獻:
[22]S. Hochreiter and J. Schmidhuber. Long short-term memory.Neural computation, 1997.1
[36]D. E. Rumelhart, G. E. Hintont, and R. J. Williams. Learning representations by back-propagating errors.Nature, 1986.1
[13]K. Fukushima and S. Miyake. Neocognitron: A self-organizing neural network model for a mechanism of visual pattern recognition. InCompetition and cooperation in neural nets. Springer, 1982.1
[29]Y . LeCun, B. Boser, J. S. Denker, D. Henderson, R. E.Howard, W. Hubbard, and L. D. Jackel. Backpropagation applied to handwritten zip code recognition.Neural computation, 1989.1
卷積運算和recurrent運算都處理局部鄰域,無論是在空間還是時間上;因此,只有重復應用這些操作,通過數據逐步傳播信號,才能捕獲長程依賴關系。重復局部操作有幾個限制。
在本文中,我們將非局部操作作為一種高效、簡單和通用的組件,用于使用深度神經網絡捕獲遠程依賴關系。我們提出的非局部運算是計算機視覺中經典非局部平均運算[4]的推廣。直觀地說,非局部操作將某個位置的響應計算為輸入特征映射中所有位置特征的加權和(圖1)。位置集可以是空間、時間或時空,這意味著我們的操作適用于圖像、序列和視頻問題。
圖1:我們網絡中的時空非局部操作,用于視頻分類。位置xix_ixi?的響應由所有位置xjx_jxj?特征的加權平均值計算(此處僅顯示加權最高的位置)。在這個由我們的模型計算的示例中,請注意它如何將第一幀中的球與最后兩幀中的球關聯起來。更多示例如圖3所示。
使用非局部操作有幾個優點:
(a) 與recurrent運算和卷積運算的漸進行為相反,非局部運算通過計算任意兩個位置之間的交互直接捕獲遠程依賴,而不管它們的位置距離如何;
(b) 正如我們在實驗中所展示的,非局部操作是有效的,即使只有幾層(例如5層),也能達到最佳效果;
(c) 最后,我們的非局部操作保持可變的輸入大小,并且可以輕松地與其他操作(例如,我們將使用的卷積)組合。
我們展示了非局部操作在視頻分類應用中的有效性。在視頻中,空間和時間上的遙遠像素之間會發生遠距離交互。一個非局部塊(我們的基本單元)可以以前饋方式直接捕獲這些時空依賴關系。對于一些非局部塊,我們稱之為非局部神經網絡的架構比2D和3D卷積網絡[46](包括膨脹變量(the inflated variant )[6])更準確地用于視頻分類。此外,非局部神經網絡比三維卷積神經網絡在計算上更經濟。在Kinetics[26]和Charades[42]數據集上介紹了全面的消融研究。只使用RGB且沒有任何不必要的附屬配件(例如,optical flow,多尺度測試),我們的方法達到的結果比或最優于兩個數據集上最新的比賽winners。
為了證明非局部操作的通用性,我們進一步在COCO數據集上進行了對象檢測/分割和姿勢估計實驗[31]。在強大的Mask R-CNN baseline[18]的基礎上,我們的非局部塊可以增加所有三項任務的精度,而額外的計算成本很小。結合視頻上的證據,這些圖像實驗表明,非局部操作通常是有用的,可以成為設計深層神經網絡的基本構件。
2. Related Work
Non-local image processing. 非局部均值[4]是一種經典的濾波算法,用于計算圖像中所有像素的加權平均值。它允許遠距離像素在基于patch外觀相似性的位置對過濾響應作出貢獻。這種非局部濾波思想后來發展為BM3D(block-matching 3D)[9],它對一組類似但非局部的patch執行濾波。即使與深度神經網絡相比,BM3D也是一個可靠的圖像去噪baseline[5]。非局部匹配(Non-local matching)也是成功的紋理合成(texture synthesis)[11]、超分辨率(super-resolution )[15]和修復(inpainting )[1]算法的本質。
Graphical models. 遠程依賴可以通過圖形模型建模,如條件隨機場(conditional random fields:CRF)[28,27]。在深層神經網絡的背景下,可以利用CRF對網絡的語義分段預測進行后期處理[8]。CRF的迭代平均場推斷可以轉化為一個遞歸網絡并進行訓練[54,40,7,17,32]。相比之下,我們的方法是計算非局部濾波的簡單前饋塊。與這些為分割而開發的方法不同,我們的通用組件用于分類和檢測。這些方法和我們的方法也與一個更抽象的模型有關,稱為圖神經網絡[39]。
[27]P . Kr¨ahenb¨uhl and V . Koltun. Efficient inference in fully connected crfs with gaussian edge potentials. InNeural Information Processing Systems (NIPS), 2011.2
[28]J. Lafferty, A. McCallum, and F. C. Pereira. Conditional random fields: Probabilistic models for segmenting and labeling sequence data. InInternational Conference on Machine Learning (ICML), 2001.2
Feedforward modeling for sequences. 最近出現了一種使用前饋(即非遞歸)網絡對語音和語言序列建模的趨勢[34,52,14]。在這些方法中,長期(long-term)依賴性由非常深的1-D卷積產生的大感受野捕獲。這些前饋模型適用于并行實現,并且比廣泛使用的遞歸模型更有效。
Self-attention. 我們的工作與最近的機器翻譯的self-attention[47]方法有關。自注意模塊通過關注所有位置并在嵌入空間中取其加權平均值來計算序列(例如句子)中某個位置的響應。正如我們將在下一步中討論的那樣,self-attention可以被視為non-local mean的一種形式[4],從這個意義上說,我們的工作將機器翻譯的自注意與適用于計算機視覺中圖像和視頻問題的更一般的非局部過濾操作聯系起來。
[47]A. V aswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones,A. N. Gomez, L. Kaiser, and I. Polosukhin. Attention is all you need. In Neural Information Processing Systems (NIPS),2017.2,3,6
Interaction networks. Interaction Networks(IN)[2,50]最近被提出用于物理系統建模。它們在涉及pairwise交互的對象的圖形上進行操作。Hoshen[23]在多智能體預測建模的背景下提出了(VAIN)中更有效的頂點注意。另一個變體,命名為關系網絡[38],在其輸入中的所有位置對特征嵌入計算函數。我們的方法也處理所有對,我們將在等式(1)中解釋f(xi,xj)f(x_i,x_j)f(xi?,xj?)。雖然我們的非局部網絡與這些方法相聯系,但我們的實驗表明,模型的非局部性(與attention/interaction/relation的想法正交)(例如,網絡可以關注局部區域)是其經驗成功的關鍵。非局部建模是圖像處理的一個長期關鍵要素(如[11,4]),在最近的計算機視覺神經網絡中被大量忽略。
Video classification architectures. 視頻分類的自然解決方案是將CNN用于圖像和RNN用于序列的成功結合起來[53,10]。 相反,前饋模型是通過時空中的3D卷積(C3D)[25,46]實現的,3D濾波器可以通過“膨脹”[12,6]預先訓練的2D濾波器形成。除了對原始視頻輸入進行端到端建模外,還發現optical flow[43]和trajectories [48,49]也很有幫助。flow和trajectories都是現成的模塊,可能會發現長期的非局部依賴性。視頻架構的系統比較可在[6]見到。
3. Non-local Neural Networks
我們首先給出非局部操作的一般定義,然后提供幾個具體的實例。
3.1. Formulation
根據非局部平均運算[4],我們將深度神經網絡中的一般非局部運算定義為:
yi=1C(x)∑?jf(xi,xj)g(xj).???(1){\bf y}_i=\frac{1}{C({\bf x})}\sum_{\forall j}f({\bf x}_i,{\bf x}_j)g({\bf x}_j).---(1)yi?=C(x)1??j∑?f(xi?,xj?)g(xj?).???(1)
此處iii是要計算其響應的輸出位置(在空間、時間或時空中)的索引并且jjj是列出所有可能位置的索引。x\bf xx是輸入信號(圖像、序列、視頻;通常是它們的特征)然后y\bf yy是與x\bf xx大小相同的輸出信號。一個pairwise函數fff在iii和所有的jjj之間計算一個標量(表示類同之類的關系)。一元函數ggg計算一個在位置jjj的輸入信號的表示。響應通過因子C(x)C({\bf x})C(x)標準化。
式(1)中的非局部行為是由于在操作中所有位置(?j\forall j?j) 都考慮到了。作為比較,卷積運算將加權輸入相加為一個局部鄰域值(localneighborhoodlocal\ neighborhoodlocal?neighborhood)(例如,i?1≤J≤i+1i?1≤J≤i+1i?1≤J≤i+1,在卷積核大小為3的1D情況下)和時間iii處的recurrent操作通常僅基于當前和最新的時間步長(例如,j=iorj=i?1j=i\ or\ j=i-1j=i?or?j=i?1)
非局部操作也不同于全連接(fcfcfc)層。公式(1)根據不同位置之間的關系計算響應,其中fcfcfc使用學習的權重。換句話說,與非局部層不同,xjx_jxj?和xix_ixi?之間的關系不是fcfcfc中輸入數據的函數。此外,等式(1)中的公式支持可變大小的輸入,并在輸出中保持相應的大小。相反,一個fcfcfc層需要固定大小的輸入/輸出,并且會丟失位置關聯(例如,從xix_ixi?到yiy_iyi?在iii的位置)
非局部操作是一種靈活的構建塊,可以很簡單地與卷積/遞歸層一起使用。它可以被添加到深層神經網絡的早期部分,而不是最后經常使用的fcfcfc層。這使我們能夠構建一個結合了非局部和局部信息的更豐富的層次結構。
3.2. Instantiations
接下來,我們將介紹幾個版本的fff和ggg。有趣的是,我們將通過實驗(表2a)證明我們的非局部模型對這些選擇不敏感,這表明一般的非局部行為是觀察到的改進的主要原因。
公式1有介紹fff和ggg的定義,fff:位置間的類同標量函數,表示兩位置間的相關性;ggg:位置輸入信號函數,對輸入的feature map賦權。
為簡單起見,我們僅考慮ggg在線性嵌入的形式:g(xj)=Wgxjg({\bf x_j})=W_g{\bf x}_jg(xj?)=Wg?xj?,其中WgW_gWg?是要學習的權重矩陣。這被實現為,例如,空間中的1×11\times 11×1卷積或時空中的1×1×11\times 1\times 11×1×1卷積。
接下來我們討論pairwise函數fff的選擇。
Gaussian. 在non-local mean[4]和bilateral filters [45]之后,fff的自然選擇是高斯函數。在本文中,我們考慮:f(xi,xj)=exiTxj.???(2)f({\bf x}_i,{\bf x}_j)=e^{{\bf x}_i^T{\bf x}_j}.---(2)f(xi?,xj?)=exiT?xj?.???(2)
這里xiTxj{\bf x}_i^T{\bf x}_jxiT?xj?是點積相似性。[4,45]中使用的歐幾里德距離也適用,但是點積在現代深度學習平臺中更易于實現。標準化因子設置為C(x)=∑?jf(xi,xj)C({\bf x})=\sum_{\forall j}f({\bf x}_i,{\bf x}_j)C(x)=∑?j?f(xi?,xj?)。
Embedded Gaussian. 高斯函數的一個簡單擴展是計算嵌入空間中的相似性。在本文中,我們考慮:f(xi,xj)=eθ(xi)T?(xj).???(3)f({\bf x}_i,{\bf x}_j)=e^{\theta({\bf x}_i)^T\phi({\bf x}_j)}.---(3)f(xi?,xj?)=eθ(xi?)T?(xj?).???(3)
其中θ(xi)=Wθxi\theta({\bf x}_i)=W_\theta{\bf x}_iθ(xi?)=Wθ?xi?和?(xj)=W?xj\phi({\bf x}_j)=W_\phi{\bf x}_j?(xj?)=W??xj?是兩個嵌入件。如上所述,我們設置C(x)=∑?jf(xi,xj)C({\bf x})=\sum_{\forall j}f({\bf x}_i,{\bf x}_j)C(x)=∑?j?f(xi?,xj?)。
我們注意到,最近為機器翻譯提出的self-attention module[47]是嵌入式高斯版本中非局部操作的特例。這可以從以下事實中看出:對于給定的iii,1C(x)f(xi,xj)\frac{1}{C({\bf x})}f({\bf x}_i,{\bf x}_j)C(x)1?f(xi?,xj?),變為沿jjj維度的softmaxsoftmaxsoftmax估計。所以我們有y=softmax(xTWθTW?x)g(x){\bf y}=softmax({\bf x}^TW_\theta^TW_\phi{\bf x})g({\bf x})y=softmax(xTWθT?W??x)g(x)(基于Embedded Gaussian),這是[47]中的自我注意形式。
[47]A. V aswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones,A. N. Gomez, L. Kaiser, and I. Polosukhin. Attention is all you need. InNeural Information Processing Systems (NIPS),2017.2,3,6
這篇論文后續會精讀
因此,我們的工作通過將這一最新的self-attention model與經典計算機視覺方法non-local means[4]相關聯,提供了見解,并將[47]中的sequential self-attention network擴展為計算機視覺中用于圖像/視頻識別的通用space/spacetime non-local network。
[4]A. Buades, B. Coll, and J.-M. Morel. A non-local algorithm for image denoising. InComputer Vision and Pattern Recognition (CVPR), 2005.1,2,3
這篇論文后續會精讀
盡管與[47]有關,但我們發現attentional behavior(由于softmax)在我們研究的應用中并不重要。為了說明這一點,我們接下來將描述non-local operations的兩個替代版本。
Dot product. fff被定義為點積相似性:f(xi,xj)=θ(xi)T?(xj).???(4)f({\bf x}_i,{\bf x}_j)=\theta({\bf x}_i)^T\phi({\bf x}_j).---(4)f(xi?,xj?)=θ(xi?)T?(xj?).???(4)
這里我們采用嵌入版本的點積。在這種情況,我們設置標準化因子C(x)=NC({\bf x})=NC(x)=N,其中NNN是輸入x{\bf x}x的位置數目,而不是fff的總數(點積總數),因為它簡化了梯度計算(避免了原因子C(x)C({\bf x})C(x)求導)。像這樣的標準化是必要的,因為輸入可以具有可變的大小。
Dot product和Embedded Gaussian版本之間的主要區別是softmaxsoftmaxsoftmax的存在,它起著激活函數的作用。
Dot product 的標準化因子是NNN,Embedded Gaussian. 的標準化因子是1C(x)f(xi,xj)\frac{1}{C({\bf x})}f({\bf x}_i,{\bf x}_j)C(x)1?f(xi?,xj?),實現方式是softmaxsoftmaxsoftmax,上面的嵌入式高斯有具體描述。
Concatenation. Concatenation由在用于視覺推理的關系網絡[38]的pairwise函數使用。我們還對fff的Concatenation形式進行了評估:f(xi,xj)=ReLU(wfT[θ(xi),?(xj)]).???(5)f({\bf x}_i,{\bf x}_j)={\bf ReLU}({\bf w}_f^T[\theta({\bf x}_i),\phi({\bf x}_j)]).---(5)f(xi?,xj?)=ReLU(wfT?[θ(xi?),?(xj?)]).???(5)
這里[?,?][\cdot,\cdot][?,?]表示concatenation,wf{\bf w}_fwf?是將concatenation向量投影到標量的權重向量。如上所述,我們設置C(x)=NC({\bf x})=NC(x)=N。在這種情況,我們在fff中采用了ReLU[33]。
這里兩種變體的標準化因子C(x)=NC({\bf x})=NC(x)=N,
以上幾個變體展示了我們generic non-local operation的靈活性。我們相信替代版本是可能的,并可能改善結果。
3.3. Non-local Block
我們將等式(1)中的non-local operation包裝成一個non-local block,該塊可以合并到許多現有架構中。我們將non-local block定義為:zi=Wzyi+xi,???(6){\bf z}_i=W_z{\bf y}_i+{\bf x}_i,---(6)zi?=Wz?yi?+xi?,???(6)
yi=1C(x)∑?jf(xi,xj)g(xj).???(1){\bf y}_i=\frac{1}{C({\bf x})}\sum_{\forall j}f({\bf x}_i,{\bf x}_j)g({\bf x}_j).---(1)yi?=C(x)1?∑?j?f(xi?,xj?)g(xj?).???(1)
其中yi{\bf y}_iyi?在等式(1)中給出,"+xi+{\bf x}_i+xi?"表示殘差連接[20]。殘差連接允許我們將新的non-local block插入任何預先訓練的模型中,而不會破壞其initial behavior(例如,如果WzW_zWz?被初始化為零)。
以上之所以不會破壞預訓練模型的初始化表現是因為殘差連接反向傳播的特點。
圖2中舉例說明了一個non-local block。等式(2)、(3)或(4)中的pairwise函數計算可以簡單地通過矩陣乘法完成,如圖2所示;等式(5)的concatenation版本很簡單。
f(xi,xj)=exiTxj.???(2)f({\bf x}_i,{\bf x}_j)=e^{{\bf x}_i^T{\bf x}_j}.---(2)f(xi?,xj?)=exiT?xj?.???(2)
f(xi,xj)=eθ(xi)T?(xj).???(3)f({\bf x}_i,{\bf x}_j)=e^{\theta({\bf x}_i)^T\phi({\bf x}_j)}.---(3)f(xi?,xj?)=eθ(xi?)T?(xj?).???(3)
f(xi,xj)=θ(xi)T?(xj).???(4)f({\bf x}_i,{\bf x}_j)=\theta({\bf x}_i)^T\phi({\bf x}_j).---(4)f(xi?,xj?)=θ(xi?)T?(xj?).???(4)
f(xi,xj)=ReLU(wfT[θ(xi),?(xj)]).???(5)f({\bf x}_i,{\bf x}_j)={\bf ReLU}({\bf w}_f^T[\theta({\bf x}_i),\phi({\bf x}_j)]).---(5)f(xi?,xj?)=ReLU(wfT?[θ(xi?),?(xj?)]).???(5)
圖2:一個時空的non-local block 。特征圖顯示為其張量的shape,例如,1024個通道的T×H×W×1024T×H×W×1024T×H×W×1024(如有必要,應進行適當的reshaping)。"?\bigotimes?“表示矩陣乘法,”?\bigoplus?"表示逐元素加法。對每行執行softmax操作。藍色框表示1×1×11×1×11×1×1卷積。這里我們展示了embedded Gaussian版本,有512個通道的bottleneck。普通Gaussian版本可以通過去除θ\thetaθ和?\phi?來實現,然后dot-product版本可以通過將softmaxsoftmaxsoftmax替換為1/N1/N1/N的縮放比例來實現。
non-local block的pairwise計算在用于高層特征圖或子采樣特征圖時是輕量級的。例如,圖2的典型值是T=4,H=W=14or7T=4,H=W=14\ or\ 7T=4,H=W=14?or?7。通過矩陣乘法進行的pairwise計算可與標準網絡中的典型卷積層進行比較。我們進一步采用以下實現,使其更加高效。
Implementation of Non-local Blocks. 我們將Wg,WθW_g,W_\thetaWg?,Wθ?和W?W_\phiW??表示的通道數設置為x\bf xx通道數的一半。這遵循了ResNet[20]的bottleneck設計,并將block的計算量減少了約一半。公式(6)的權重矩陣WzW_zWz?計算了一個在yi{\bf y}_iyi?的逐位置嵌入,將通道數與x\bf xx的通道數進行匹配。見圖2。
zi=Wzyi+xi,???(6){\bf z}_i=W_z{\bf y}_i+{\bf x}_i,---(6)zi?=Wz?yi?+xi?,???(6)
[20]K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In Computer Vision and Pattern Recognition (CVPR), 2016.1,4,5
子采樣trick可用于進一步減少計算量。我們修改了公式(1)為:yi=1C(x^)∑?jf(xi,x^j)g(x^j){\bf y}_i=\frac{1}{C({\bf\hat x})}\sum_{\forall j}f({\bf x}_i,{\bf\hat x}_j)g({\bf\hat x}_j)yi?=C(x^)1?∑?j?f(xi?,x^j?)g(x^j?),其中x^\bf\hat xx^是x\bf xx的子采樣版本(例如 pooling)。我們在空間域中執行此操作,這可以將pairwise計算量減少1/4。這種trick不會改變non-local behavior,只會使計算變得更稀疏。這可以通過在?\phi?和ggg在圖2之后添加max pooling層來實現。
我們將這些有效的修改用于本文研究的所有non-local blocks。
4. Video Classification Models
為了了解non-local網絡的行為,我們對視頻分類任務進行了全面的消融實驗。首先,我們描述了此任務的baseline網絡架構,然后將其擴展到3D ConvNet[46,6]和我們建議的non-local網絡。
2D ConvNet baseline (C2D). 對3D ConvNets隔離我們的non-local網絡的時間效應,我們構建了一個簡單的2D baseline體系結構,在該體系結構中,時間維度被簡單地處理(即,僅通過pooling)。表1顯示了我們在ResNet-50 backbone下的C2D baseline。輸入視頻片段有32幀,每幀224×224像素。表1中的所有卷積本質上都是2D卷積核,逐幀處理輸入(實現為1×k×k1×k×k1×k×k卷積核)。該模型可以直接從ImageNet上預先訓練的ResNet權重初始化。ResNet-101的對應部分也是以同樣的方式構建的。
唯一包含時域的操作是pooling層。換句話說,這個baseline簡單地聚合了時域信息。
Inflated 3D ConvNet (I3D). 如[12,6]所述,通過“膨脹”卷積核,可以將表1中的C2D模型轉化為3D卷積模型。例如,2D k×kk×kk×k 卷積可以膨脹為跨越ttt幀的3D t×k×kt×k×kt×k×k 卷積核。該卷積核可以從2D模型初始化(在ImageNet上預訓練):t×k×kt×k×kt×k×k卷積核中的每個ttt planes由預先訓練的k×kk×kk×k權重初始化,并按1/t1/t1/t重新縮放。如果視頻包含一個在時間上重復的靜態幀,則此初始化將生成與在靜態幀上運行的2D預訓練模型相同的結果。
我們研究了兩種膨脹情況:我們要么將殘差塊中的3×33×33×3卷積核膨脹到3×3×33×3×33×3×3(類似于[6]),要么將殘差塊中的第一個1×11×11×1卷積核膨脹到3×1×13×1×13×1×1(類似于[12])。我們將其表示為I3D3×3×3\bf I3D_{3\times 3\times 3}I3D3×3×3?和I3D3×1×1\bf I3D_{3\times 1\times 1}I3D3×1×1?。由于三維卷積是計算密集型的,我們只為每2個殘差塊膨脹一個卷積核;將更多層膨脹顯示出收益遞減。我們把conv1\bf conv_1conv1?膨脹到5×7×75×7×75×7×7。
[6]的作者已經證明,I3D\bf I3DI3D模型比CNN+LSTM模型更精確。
[6]J. Carreira and A. Zisserman. Quo vadis, action recognition?a new model and the kinetics dataset. InComputer Vision andPattern Recognition (CVPR), 2017.1,2,4,6,7,8
12]C. Feichtenhofer, A. Pinz, and R. Wildes. Spatiotemporal residual networks for video action recognition. InNeural Information Processing Systems (NIPS), 2016.2,4
Non-local network. 我們將non-local blocks插入C2D或I3D,以將它們轉換為non-local網絡。我們研究添加1、5或10個非局部塊;下一節將在上下文中描述實現細節。
圖3:由在Kinetics上訓練的5-block non-local模型計算的res3res_3res3?中non-local block 的behavior示例。這些示例來自公開的驗證視頻。箭頭的起點表示xi{\bf x}_ixi?,終點表示xj{\bf x}_jxj?。對每個xi{\bf x}_ixi?可視化了20個最高權重的箭頭。這4幀來自32幀輸入,顯示步幅為8幀。這些可視化顯示了模型如何找到相關線索來支持其預測。
4.1. Implementation Details
Training. 我們的模型是在ImageNet上預先訓練的[37]。除非規定,否則我們使用32幀輸入片段對模型進行微調。這些片段是通過從原始未刪減的視頻中隨機剪切出64個連續幀,然后每隔一幀刪除一幀而形成的。空間大小為224×224像素,從縮放視頻中隨機裁剪,其較短的一側以[256,320]像素隨機采樣,如下[44]。我們在一臺8-GPU機器上訓練,每個GPU在一個小批量中有8個片段(因此小批量總共有64個片段)。我們總共為400k次迭代訓練我們的模型,從學習率0.01開始,每150k次迭代將學習率降低10倍(見圖4)。我們使用0.9的動量和0.0001的重量衰減。我們在全局池層之后采用了Dropout[21],dropout率為0.5。應用BatchNorm(BN)[24]時,我們會對模型進行微調。這與微調Resnet的常見做法形成對比[20],在這種做法中,BN被凍結。我們發現,在應用中啟用BN可以減少過度擬合。
[44]K. Simonyan and A. Zisserman. V ery deep convolutional networks for large-scale image recognition. InInternational Conference on Learning Representations (ICLR), 2015.5
我們采用[19]中的方法初始化non-local blocks中引入的權重層。我們在代表WzW_zWz?的最后1×1×11\times 1\times 11×1×1層之后添加了一個BN層;我們不會將BN添加到non-local blocks中的其他層。此BN層的尺度參數初始化為零,遵循[16]。這確保了整個non-local blocks的初始狀態是一致映射,因此可以將其插入任何預先訓練的網絡中,同時保持其初始behavior。
[19]K. He, X. Zhang, S. Ren, and J. Sun. Delving deep into rectifiers: Surpassing human-level performance on imagenet classification. InInternational Conference on Computer Vision (ICCV), 2015.5
[16]P . Goyal, P . Doll′ar, R. Girshick, P . Noordhuis, L. Wesolowski,A. Kyrola, A. Tulloch, Y . Jia, and K. He. Accurate, large minibatch sgd: Training imagenet in 1 hour.arXiv:1706.02677,2017.5
Inference. 在[44]之后,我們對短邊被重新縮放到256的視頻執行空間上全卷積推斷。對于時域,在我們的實踐中,我們從一個未刪減的視頻中均勻地采樣10個片段,并分別計算它們的softmax分數。最后的預測是所有片段的平均softmax分數。
5. Experiments on Video Classification
我們對具有挑戰性的Kinetics數據集[26]進行了綜合研究。我們還報告了Charades數據集[42]的結果,以顯示我們模型的通用性。
5.1. Experiments on Kinetics
Kinetics[26]包含~246k訓練視頻和20k驗證視頻。這是一項涉及400個人類行為類別的分類任務。我們在訓練集上訓練所有模型,并在驗證集上進行測試。
表2:在Kinetics行為分類的消融實驗。我們顯示了top-1和top-5分類準確率(%)。
(a)不同類型的non-local block:
Gaussian:f(xi,xj)=exiTxj.f({\bf x}_i,{\bf x}_j)=e^{{\bf x}_i^T{\bf x}_j}.f(xi?,xj?)=exiT?xj?.,標準化因子為softmax
Gaussian embed:f(xi,xj)=eθ(xi)T?(xj).f({\bf x}_i,{\bf x}_j)=e^{\theta({\bf x}_i)^T\phi({\bf x}_j)}.f(xi?,xj?)=eθ(xi?)T?(xj?).,標準化因子為softmax(作者默認使用的版本,便于可視化)
dot product:f(xi,xj)=θ(xi)T?(xj).f({\bf x}_i,{\bf x}_j)=\theta({\bf x}_i)^T\phi({\bf x}_j).f(xi?,xj?)=θ(xi?)T?(xj?).,標準化因子為N
concatenation:f(xi,xj)=ReLU(wfT[θ(xi),?(xj)]).f({\bf x}_i,{\bf x}_j)={\bf ReLU}({\bf w}_f^T[\theta({\bf x}_i),\phi({\bf x}_j)]).f(xi?,xj?)=ReLU(wfT?[θ(xi?),?(xj?)]).,標準化因子為N
(b)1個non-local block的不同添加位置的增益:resires_iresi?為Resnet-50的不同block。
(c)1個,5個和10個non-local block添加到ResNet-50和ResNet-101的baseline的增益。
(d)5個non-local block在ResNet-50和ResNet-101兩種深度的模型在空間/時間/時空維度分別進行non-local操作的結果。
(e)~(g)的解釋略。
圖4顯示了ResNet-50 C2D baseline的訓練過程曲線,對比具有5個塊的non-local C2D(更多詳細信息見下文)。在整個訓練過程中,我們的non-local C2D模型在訓練和驗證誤差方面始終優于C2D baseline。
圖1和圖3可視化了由我們的模型計算的non-local block behavior的幾個示例。我們的人際網絡可以學習尋找有意義的關系線索,而不考慮空間和時間的距離。
關于論文其他實驗的部分,這里沒有給出,有興趣的可以翻看原論文作者的實驗
1個non-local block加在res3res_3res3?的增益:
7. Conclusion
我們提出了一類新的神經網絡,它通過non-local操作捕獲遠程依賴關系。我們的non-local block可以與任何現有架構相結合。我們展示了非局部建模在視頻分類、目標檢測和分割以及姿態估計任務中的重要性。在所有任務中,簡單地添加非局部塊可以提供對baseline的可靠改進。我們希望non-local層將成為未來網絡架構的重要組成部分。
個人總結
non-local block的網絡結構
圖2:一個時空的non-local block 。特征圖顯示為其張量的shape,例如,1024個通道的T×H×W×1024T×H×W×1024T×H×W×1024(如有必要,應進行適當的reshaping)。"?\bigotimes?“表示矩陣乘法,”?\bigoplus?"表示逐元素加法。對每行執行softmax操作。藍色框表示1×1×11×1×11×1×1卷積,有512個通道的bottleneck。
論文的non-local block默認使用Embed Gaussian版本
y=softmax(xTWθTW?x)g(x){\bf y}=softmax({\bf x}^TW_\theta^TW_\phi{\bf x})g({\bf x})y=softmax(xTWθT?W??x)g(x)
這里softmax=exp(xi)∑jexp(xj)softmax=\frac{exp({\bf x}_i)}{\sum_jexp({\bf x}_j)}softmax=∑j?exp(xj?)exp(xi?)?(xi{\bf x}_ixi?對應xT{\bf x}^TxT,xj{\bf x}_jxj?對應x\bf xx)
z=Wzy+x{\bf z}=W_z{\bf y}+{\bf x}z=Wz?y+x
,這里作者指出這里softmax的不必要性,并且將標準化因子改成1N\frac{1}{N}N1?進行了實驗驗證softmax的作用確實不必要,之所以采用Embed Gaussian模型去實驗是因為softmax將輸出歸一在[0,1]之間,方便可視化。
論文作者采用了sub-sample來降低計算量
修改了公式為:yi=1C(x^)∑?jf(xi,x^j)g(x^j){\bf y}_i=\frac{1}{C({\bf\hat x})}\sum_{\forall j}f({\bf x}_i,{\bf\hat x}_j)g({\bf\hat x}_j)yi?=C(x^)1?∑?j?f(xi?,x^j?)g(x^j?),其中x^\bf\hat xx^是x\bf xx的子采樣版本(例如 pooling)。我們在空間域中執行此操作,這可以將pairwise計算量減少1/4。這種trick不會改變non-local behavior,只會使計算變得更稀疏。這可以通過在?\phi?和ggg在圖2之后添加max pooling層來實現。
本人專注于2D目標檢測,因此解讀源碼時,在對公式y=softmax(xTWθTW?x)g(x){\bf y}=softmax({\bf x}^TW_\theta^TW_\phi{\bf x})g({\bf x})y=softmax(xTWθT?W??x)g(x)的實現部分解讀時,網絡在對xTWθTW?x{\bf x}^TW_\theta^TW_\phi{\bf x}xTWθT?W??x進行矩陣乘法時,運行的是三維矩陣間的乘法(這里暫時不考慮代碼實現中添加的batch維度),關于多維矩陣乘法的理解可以參考【全面理解多維矩陣運算】多維(三維四維)矩陣向量運算-超強可視化
其實這里的依賴就是像素點間的通道關聯性度量,將像素點間通道特征聚合。這里會產生非常大的計算量,為了減少計算量,作者提出的θ,?,g\theta,\phi,gθ,?,g操作將通道數降了一半,又在θ,?,g\theta,\phi,gθ,?,g層后添加了pooling層降低feature map尺寸,后續又CCNet和GCNet等論文針對這幾個弊端提出了改進,可能后續的ORDNet也有提到(我還沒讀完)。
接著softmax(xTWθTW?x)softmax({\bf x}^TW_\theta^TW_\phi{\bf x})softmax(xTWθT?W??x)與g(x)g({\bf x})g(x)將得到的注意力softmax(xTWθTW?x)softmax({\bf x}^TW_\theta^TW_\phi{\bf x})softmax(xTWθT?W??x)與經過g(x)g({\bf x})g(x)后的特征映射進行賦權,此時注意力機制已經完成。
計算出y{\bf y}y后,接著進行z=Wzy{\bf z}=W_z{\bf y}z=Wz?y,WzW_zWz?就是一個1X1卷積以與x\bf xx進行通道數匹配完成殘差連接得到z=Wzy+x{\bf z}=W_z{\bf y}+{\bf x}z=Wz?y+x,到這里non local block的任務就算完成了。
pytorch源碼(參考)
網絡結構簡單,源碼也易于看懂,這里沒有進行注釋。
# -*- coding: utf-8 -*- """ @Author : zhwzhong @License : (C) Copyright 2013-2018, hit @Contact : zhwzhong.hit@gmail.com @Software: PyCharm @File : nlrn.py @Time : 2019/5/5 16:27 @Desc : """ import torch from torch import nn from torch.nn import functional as Fclass _NonLocalBlockND(nn.Module):def __init__(self, in_channels, gamma=0, inter_channels=None, dimension=3, sub_sample=True, bn_layer=True):super(_NonLocalBlockND, self).__init__()assert dimension in [1, 2, 3]self.gamma = nn.Parameter(torch.ones(1)) * gammaself.dimension = dimensionself.sub_sample = sub_sampleself.in_channels = in_channelsself.inter_channels = inter_channelsif self.inter_channels is None:self.inter_channels = in_channels // 2if self.inter_channels == 0:self.inter_channels = 1if dimension == 3:conv_nd = nn.Conv3dmax_pool_layer = nn.MaxPool3d(kernel_size=(1, 2, 2))bn = nn.BatchNorm3delif dimension == 2:conv_nd = nn.Conv2dmax_pool_layer = nn.MaxPool2d(kernel_size=(2, 2))bn = nn.BatchNorm2delse:conv_nd = nn.Conv1dmax_pool_layer = nn.MaxPool1d(kernel_size=(2))bn = nn.BatchNorm1dself.g = conv_nd(in_channels=self.in_channels, out_channels=self.inter_channels,kernel_size=1, stride=1, padding=0)if bn_layer:self.W = nn.Sequential(conv_nd(in_channels=self.inter_channels, out_channels=self.in_channels,kernel_size=1, stride=1, padding=0),bn(self.in_channels))# 參數數量與 channel 有關nn.init.constant_(self.W[1].weight, 0)nn.init.constant_(self.W[1].bias, 0)else:self.W = conv_nd(in_channels=self.inter_channels, out_channels=self.in_channels,kernel_size=1, stride=1, padding=0)nn.init.constant_(self.W.weight, 0)nn.init.constant_(self.W.bias, 0)self.theta = conv_nd(in_channels=self.in_channels, out_channels=self.inter_channels,kernel_size=1, stride=1, padding=0)self.phi = conv_nd(in_channels=self.in_channels, out_channels=self.inter_channels,kernel_size=1, stride=1, padding=0)if sub_sample:self.g = nn.Sequential(self.g, max_pool_layer)self.phi = nn.Sequential(self.phi, max_pool_layer)def forward(self, x):""":param x: (b, c, t, h, w):return:"""batch_size = x.size(0)g_x = self.g(x).view(batch_size, self.inter_channels, -1)g_x = g_x.permute(0, 2, 1)theta_x = self.theta(x).view(batch_size, self.inter_channels, -1)theta_x = theta_x.permute(0, 2, 1)phi_x = self.phi(x).view(batch_size, self.inter_channels, -1)f = torch.matmul(theta_x, phi_x)f_div_C = F.softmax(f, dim=-1)y = torch.matmul(f_div_C, g_x)y = y.permute(0, 2, 1).contiguous()y = y.view(batch_size, self.inter_channels, *x.size()[2:])W_y = self.W(y)z = self.gamma * W_y + xreturn zclass NONLocalBlock1D(_NonLocalBlockND):def __init__(self, in_channels, inter_channels=None, sub_sample=True, bn_layer=True):super(NONLocalBlock1D, self).__init__(in_channels,inter_channels=inter_channels,dimension=1, sub_sample=sub_sample,bn_layer=bn_layer)class NONLocalBlock2D(_NonLocalBlockND):def __init__(self, in_channels, inter_channels=None, sub_sample=True, bn_layer=True):super(NONLocalBlock2D, self).__init__(in_channels,inter_channels=inter_channels,dimension=2, sub_sample=sub_sample,bn_layer=bn_layer)class NONLocalBlock3D(_NonLocalBlockND):def __init__(self, in_channels, inter_channels=None, sub_sample=True, bn_layer=True):super(NONLocalBlock3D, self).__init__(in_channels,inter_channels=inter_channels,dimension=3, sub_sample=sub_sample,bn_layer=bn_layer)if __name__ == '__main__':import torchfor (sub_sample, bn_layer) in [(True, True), (False, False), (True, False), (False, True)]:img = torch.zeros(2, 3, 20)net = NONLocalBlock1D(3, sub_sample=sub_sample, bn_layer=bn_layer)out = net(img)print(out.size())img = torch.zeros(2, 3, 20, 20)net = NONLocalBlock2D(3, sub_sample=sub_sample, bn_layer=bn_layer)out = net(img)print(out.size())img = torch.randn(2, 3, 8, 20, 20)net = NONLocalBlock3D(3, sub_sample=sub_sample, bn_layer=bn_layer)out = net(img)print(out.size())總結
以上是生活随笔為你收集整理的2018CVPR:Non-local Neural Networks(自注意力机制捕获远程依赖)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AE效果:3D 通道
- 下一篇: 如何使用ProSave软件对触摸屏进行O