超越Swin,Transformer屠榜三大视觉任务!微软推出新作:Focal Self-Attention
作者丨小馬
編輯丨極市平臺
寫在前面
VIsion Transformer(ViT)和它的一系列變種結構在CV任務中取得了不錯的成績,在其中,Self-Attention(SA)強大的建模能力起到了很大的作用。但是SA的計算復雜度是和輸入數據的大小呈平方關系的,所以針對一些需要高分辨率的CV任務(e.g., 檢測、分割),計算開銷就會很大。 目前的一些工作用了局部注意力去捕獲細粒度的信息,用全局注意力去捕獲粗粒度的信息,但這種操作對原始SA建模能力的影響,會導致sub-optimal的問題。因此,本文提出了Focal Self-Attention(FSA),以細粒度的方式關注離自己近的token,以粗粒度的方式關注離自己遠的token,以此來更有效的捕獲short-range和long-range的關系。基于FSA,作者提出了Focal Transformer,并在分類、檢測、分割任務上都驗證了結構的有效性。
1. 論文和代碼地址
Focal Self-attention for Local-Global Interactions in Vision Transformers
論文地址:https://arxiv.org/abs/2107.00641
代碼地址:未開源
核心代碼:后期會復現在https://github.com/xmu-xiaoma666/External-Attention-pytorch
2. Motivation
目前,Transformer結構在CV和NLP領域都展現出了潛力。相比于CNN,Transformer結構最大的不同就是它的Self-Attention(SA)能夠進行依賴內容的全局交互(global content-dependent interaction),使得Transformer能夠捕獲long-range和local-range的關系。
上圖是DeiT-Tiny的attention可視化,可以看出,SA不僅能夠像CNN那樣關注局部區域,還能進行全局信息的感知。然而Transformer的計算量與輸入數據的大小呈平方關系,因此對于檢測、分割任務來說是非常不友好的。
因此,本文提出了一個Focal Self-Attention(FSA),如上圖所示,對當前token周圍的區域進行細粒度的關注,對離當前token較遠的區域進行粗粒度的關注,用這樣的方式來更加有效的捕獲局部和全局的注意力。基于FSA,本文提出了Focal Transformer,并在多個任務上進行了實驗,取得了SOTA的性能。
3. 方法
3.1. 模型結構
本文的模型結構如上圖所示,首先將圖片分成4x4的patch。然后進入Patch Embedding層,Patch Embedding層為卷積核和步長都為4的卷積。在進入N個Focal Transformer層,在每個stage中,特征的大小減半,通道維度變為原來的兩倍。如果采用SA,由于這里指將圖片縮小了四倍,因此第一層Transformer layer的SA計算復雜度為O((H/4×W/4)2d)O((H/4 \times W/4)^2 d)O((H/4×W/4)2d),這一步是非常耗時、耗顯存的。
那么,應該采用什么樣的辦法來減少計算量呢?原始的SA將query token和其他所有token都進行了相似度的計算,因為無差別的計算了所有token的相似度,導致這一步是非常耗時、耗顯存的。但其實,對于圖片的某一個點,與這個點的信息最相關的事這個點周圍的信息,距離越遠,這個關系應該就越小。所以作者就提出了,對于這個點周圍的信息進行細粒度的關注,距離這個點越遠,關注也就越粗粒度。(個人覺得這一點其實跟人眼觀察的效應很像,當我們看一件物體的,我們最關注的是離這個物體更近的區域,對于遠離這個物體的區域,關注程度就會更小甚至直接忽視)。
3.2. Focal Self-Attention(FSA)
傳統的SA由于對所有的token都進行細粒度的關注,因此是非常費時的;本文提出的FSA對靠近當前token的信息進行更加細粒度的關注,對遠離當前token的信息進行粗粒度的關注。在論文中,粗粒度的關注指的是將多個token的信息進行聚合(也就是下面講到的sub-window pooling),因此聚合的token越多,那么關注也就越粗粒度,在相同的代價下,FSA的感受野也就越大。下圖展示了對這attended token數量的增加,SA和FSA感受野的變化:
3.3. Window-wise attention
如上圖所示
Focal Self-Attention的結構如上圖所示,首先明確三個概念:
Focal levels LLL :可以表示FSA中對特征關注的細粒度程度。level L的下標越小,對特征關注也就越精細。
Focal window size swls^l_wswl?:作者將token劃分成了多個sub-window,focal window size指的是每個sub-window的大小。
Focal region size srls^l_rsrl?:focal region size是橫向和縱向的sub-window數量。
3.3.1. Sub-window pooling
功能:
這一步的作用是用來聚合信息的,因為前面也說到了,Self-Attention是對所有的token信息都進行細粒度的關注,導致計算量非常大。所以作者就想到,能不能只對query token周圍的信息進行細粒度關注,遠離的query token的信息進行粗粒度的關注。那么,如何來表示這個粗粒度呢,作者就提出了sub-window pooling這個方法,將多個token的信息進行聚合,以此來減少計算量。那么,聚合的token數越多,后期attention計算需要的計算量也就越小,當然,關注的程度也就更加粗粒度。
計算流程:
每個focal level中,首先將token劃分成多個swl×swls_w^l \times s_w^lswl?×swl?的sub-window,然后用一個線性層fplf_p^lfpl?進行pooling操作:
pooling后的特征提供了細粒度或者粗粒度的信息。比如,level 1的swl=1s_w^l = 1swl?=1,所以pooling并沒有對特征進行降采樣,所以處理之后的特征是細粒度的;同理level 2和level 3,特征分別縮小到了原來的1/2和1/4,因此越遠離query token的特征,信息表示就越是粗粒度的。此外,由于swls_w^lswl?通常是比較小的,所以這一步的參數幾乎是可以忽略不計的。
3.3.2. Attention computation
功能:
在上一步中,我們用sub-window pooling進行了信息聚合操作,以此來獲得不同細粒度的特征。接下來,我們就需要對這些不同細粒度的信息進行attention的計算。具體的步驟其實和標準的Self-Attention很像,主要不同之處有兩點1)引入了相對位置編碼,來獲取相對位置信息;2)每個query和所有細粒度的key和value都進行了attention的計算,因此本文方法的計算量其實還是不算小的。
計算流程:
經過sub-window pooling之后,就獲得不同細粒度和感受野的特征表示。接下來這一步,我們需要對local和global的特征進行attention計算。首先,我們通過三個線性層計算當前level的Q和所有level的K、V:
接著,我們將當前level的Q和所有level的K、V進行帶相對位置編碼的Self-Attention:
其中B是可學習的相對位置編碼的參數。
3.4. Model Configuration
基于FSA,作者提出了三個不同大小的Focal Transformer實例,具體的參數設置如下所示。
4.實驗
4.1. ImageNet上的結果
作者對比了三個Focal Transfermer實例和其他SOTA模型的對比,可以看出在參數量和計算量相當的情況下,本文的Focal Transformer確實能取得比較好的結果。
4.2. 目標檢測和分割任務上的結果
從上圖中可以看出,在計算量相差不大情況下,Focal Transformer的各個指標都有明顯的提升。
為了進行進一步的探究,作者還在不同的目標檢測框架下對不同的backbone進行了實驗,可以看出,focal Transformer相比于Resnet-50和Swin-Transformer都能有非常明顯的性能提升。
上面兩張圖分別展示了不同模型在ADE20K上語義分割和COCO上目標檢測的結果,可以看出,本文的方法在性能上還是有很大的優越性。
4.3. 消融實驗
4.3.1. 不同window size的影響
可以看出,更大的window size能夠有更好的性能;在相同計算量或者window size下,Focal-Tiny的性能明顯優于Swin-Tiny。
4.3.2. Window Shifting的影響
可以看出Window Shifting對于分類任務性能的提高是有反效果的;但是有利于檢測、分割任務的性能提升。
4.3.3. Short-Range和Long-Range信息交互的影響
可以看出,在不同任務上,Local+Global的信息交互明顯優于只有Local或者Global。
4.3.4. 模型深度的影響
上面展示了stage3采用不同層數的實驗結果,可以看出層數并不是越多越好,Focal Transformer深度為4的效果要由于深度為6。
5. 總結
本文提出了一個能夠進行local-global信息交互的attention模塊——Focal Self-Attention(FSA),FSA能夠對相鄰的特征進行細粒度的關注,對距離較遠的特征進行粗咯度的關注,從而實現有效的local-global信息交互。但是FSA引入了額外的顯存占用和計算量,因此雖然性能上得到了不錯的提升,但是高分辨率圖像的預測任務,依舊不是非常友好。
這是繼VOLO、CoAtNet之后又一篇在局部信息建模上做出來的文章,這也說明了局部信息建模這個部分對于圖像理解任務來說確實是非常重要的,“局部假設偏置+Transformer強大的全局建模能力”這一操作確實是非常有效的。相比于VOLO、CoAtNet,本文的方法是將局部和全局信息的建模放在一個結構中,而不是對局部和全局信息分別建模后,簡單地再將局部和全局建模結構進行串聯和并聯。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的超越Swin,Transformer屠榜三大视觉任务!微软推出新作:Focal Self-Attention的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像反光能被一键去除了?港科大开源RFC
- 下一篇: Multi-Scale Densenet