超越Swin,Transformer屠榜三大視覺任務(wù)!微軟推出新作:Focal Self-Attention
極市導(dǎo)讀
本文提出了Focal Self-Attention,對當(dāng)前token周圍的區(qū)域進(jìn)行細(xì)粒度的關(guān)注,對離當(dāng)前token較遠(yuǎn)的區(qū)域進(jìn)行粗粒度的關(guān)注,用這樣的方式來更加有效的捕獲局部和全局的注意力。基于FSA,作者提出了Focal Transformer,并在分類、檢測、分割任務(wù)上都驗證了結(jié)構(gòu)的有效性。 >>加入極市CV技術(shù)交流群,走在計算機(jī)視覺的最前沿
寫在前面
VIsion Transformer(ViT)和它的一系列變種結(jié)構(gòu)在CV任務(wù)中取得了不錯的成績,在其中,Self-Attention(SA)強(qiáng)大的建模能力起到了很大的作用。但是SA的計算復(fù)雜度是和輸入數(shù)據(jù)的大小呈平方關(guān)系的,所以針對一些需要高分辨率的CV任務(wù)(e.g., 檢測、分割),計算開銷就會很大。目前的一些工作用了局部注意力去捕獲細(xì)粒度的信息,用全局注意力去捕獲粗粒度的信息,但這種操作對原始SA建模能力的影響,會導(dǎo)致sub-optimal的問題。因此,本文提出了Focal Self-Attention(FSA),以細(xì)粒度的方式關(guān)注離自己近的token,以粗粒度的方式關(guān)注離自己遠(yuǎn)的token,以此來更有效的捕獲short-range和long-range的關(guān)系?;贔SA,作者提出了Focal Transformer,并在分類、檢測、分割任務(wù)上都驗證了結(jié)構(gòu)的有效性。
1. 論文和代碼地址
Focal Self-attention for Local-Global Interactions in Vision Transformers
論文地址:https://arxiv.org/abs/2107.00641
代碼地址:未開源
核心代碼:后期會復(fù)現(xiàn)在https://github.com/xmu-xiaoma666/External-Attention-pytorch
2. Motivation
目前,Transformer結(jié)構(gòu)在CV和NLP領(lǐng)域都展現(xiàn)出了潛力。相比于CNN,Transformer結(jié)構(gòu)最大的不同就是它的Self-Attention(SA)能夠進(jìn)行依賴內(nèi)容的全局交互(global content-dependent interaction),使得Transformer能夠捕獲long-range和local-range的關(guān)系。
上圖是DeiT-Tiny的attention可視化,可以看出,SA不僅能夠像CNN那樣關(guān)注局部區(qū)域,還能進(jìn)行全局信息的感知。然而Transformer的計算量與輸入數(shù)據(jù)的大小呈平方關(guān)系,因此對于檢測、分割任務(wù)來說是非常不友好的。
因此,本文提出了一個Focal Self-Attention(FSA),如上圖所示,對當(dāng)前token周圍的區(qū)域進(jìn)行細(xì)粒度的關(guān)注,對離當(dāng)前token較遠(yuǎn)的區(qū)域進(jìn)行粗粒度的關(guān)注,用這樣的方式來更加有效的捕獲局部和全局的注意力?;贔SA,本文提出了Focal Transformer,并在多個任務(wù)上進(jìn)行了實(shí)驗,取得了SOTA的性能。
3. 方法
3.1. 模型結(jié)構(gòu)
本文的模型結(jié)構(gòu)如上圖所示,首先將圖片分成4x4的patch。然后進(jìn)入Patch Embedding層,Patch Embedding層為卷積核和步長都為4的卷積。在進(jìn)入N個Focal Transformer層,在每個stage中,特征的大小減半,通道維度變?yōu)樵瓉淼膬杀?。如果采用SA,由于這里指將圖片縮小了四倍,因此第一層Transformer layer的SA計算復(fù)雜度為 ,這一步是非常耗時、耗顯存的。
那么,應(yīng)該采用什么樣的辦法來減少計算量呢?原始的SA將query token和其他所有token都進(jìn)行了相似度的計算,因為無差別的計算了所有token的相似度,導(dǎo)致這一步是非常耗時、耗顯存的。但其實(shí),對于圖片的某一個點(diǎn),與這個點(diǎn)的信息最相關(guān)的事這個點(diǎn)周圍的信息,距離越遠(yuǎn),這個關(guān)系應(yīng)該就越小。所以作者就提出了,對于這個點(diǎn)周圍的信息進(jìn)行細(xì)粒度的關(guān)注,距離這個點(diǎn)越遠(yuǎn),關(guān)注也就越粗粒度。(個人覺得這一點(diǎn)其實(shí)跟人眼觀察的效應(yīng)很像,當(dāng)我們看一件物體的,我們最關(guān)注的是離這個物體更近的區(qū)域,對于遠(yuǎn)離這個物體的區(qū)域,關(guān)注程度就會更小甚至直接忽視)。
3.2. Focal Self-Attention(FSA)
傳統(tǒng)的SA由于對所有的token都進(jìn)行細(xì)粒度的關(guān)注,因此是非常費(fèi)時的;本文提出的FSA對靠近當(dāng)前token的信息進(jìn)行更加細(xì)粒度的關(guān)注,對遠(yuǎn)離當(dāng)前token的信息進(jìn)行粗粒度的關(guān)注。在論文中,粗粒度的關(guān)注指的是將多個token的信息進(jìn)行聚合(也就是下面講到的sub-window pooling),因此聚合的token越多,那么關(guān)注也就越粗粒度,在相同的代價下,F(xiàn)SA的感受野也就越大。下圖展示了對這attended token數(shù)量的增加,SA和FSA感受野的變化:
3.3. Window-wise attention
如上圖所示
Focal Self-Attention的結(jié)構(gòu)如上圖所示,首先明確三個概念:
Focal levels :可以表示FSA中對特征關(guān)注的細(xì)粒度程度。level L的下標(biāo)越小,對特征關(guān)注也就越精細(xì)。
Focal window size :作者將token劃分成了多個sub-window,focal window size指的是每個sub-window的大小。
Focal region size :focal region size是橫向和縱向的sub-window數(shù)量。
3.3.1. Sub-window pooling
功能:
這一步的作用是用來聚合信息的,因為前面也說到了,Self-Attention是對所有的token信息都進(jìn)行細(xì)粒度的關(guān)注,導(dǎo)致計算量非常大。所以作者就想到,能不能只對query token周圍的信息進(jìn)行細(xì)粒度關(guān)注,遠(yuǎn)離的query token的信息進(jìn)行粗粒度的關(guān)注。那么,如何來表示這個粗粒度呢,作者就提出了sub-window pooling這個方法,將多個token的信息進(jìn)行聚合,以此來減少計算量。那么,聚合的token數(shù)越多,后期attention計算需要的計算量也就越小,當(dāng)然,關(guān)注的程度也就更加粗粒度。
計算流程:
每個focal level中,首先將token劃分成多個 的sub-window,然后用一個線性層 進(jìn)行pooling操作:
pooling后的特征提供了細(xì)粒度或者粗粒度的信息。比如,level 1的 ,所以pooling并沒有對特征進(jìn)行降采樣,所以處理之后的特征是細(xì)粒度的;同理level 2和level 3,特征分別縮小到了原來的1/2和1/4,因此越遠(yuǎn)離query token的特征,信息表示就越是粗粒度的。此外,由于 通常是比較小的,所以這一步的參數(shù)幾乎是可以忽略不計的。
3.3.2. Attention computation
功能:
在上一步中,我們用sub-window pooling進(jìn)行了信息聚合操作,以此來獲得不同細(xì)粒度的特征。接下來,我們就需要對這些不同細(xì)粒度的信息進(jìn)行attention的計算。具體的步驟其實(shí)和標(biāo)準(zhǔn)的Self-Attention很像,主要不同之處有兩點(diǎn)1)引入了相對位置編碼,來獲取相對位置信息;2)每個query和所有細(xì)粒度的key和value都進(jìn)行了attention的計算,因此本文方法的計算量其實(shí)還是不算小的。
計算流程:
經(jīng)過sub-window pooling之后,就獲得不同細(xì)粒度和感受野的特征表示。接下來這一步,我們需要對local和global的特征進(jìn)行attention計算。首先,我們通過三個線性層計算當(dāng)前l(fā)evel的Q和所有l(wèi)evel的K、V:
接著,我們將當(dāng)前l(fā)evel的Q和所有l(wèi)evel的K、V進(jìn)行帶相對位置編碼的Self-Attention:
其中B是可學(xué)習(xí)的相對位置編碼的參數(shù)。
3.4. Model Configuration
基于FSA,作者提出了三個不同大小的Focal Transformer實(shí)例,具體的參數(shù)設(shè)置如下所示。
4.實(shí)驗
4.1. ImageNet上的結(jié)果
作者對比了三個Focal Transfermer實(shí)例和其他SOTA模型的對比,可以看出在參數(shù)量和計算量相當(dāng)?shù)那闆r下,本文的Focal Transformer確實(shí)能取得比較好的結(jié)果。
4.2. 目標(biāo)檢測和分割任務(wù)上的結(jié)果
從上圖中可以看出,在計算量相差不大情況下,F(xiàn)ocal Transformer的各個指標(biāo)都有明顯的提升。
為了進(jìn)行進(jìn)一步的探究,作者還在不同的目標(biāo)檢測框架下對不同的backbone進(jìn)行了實(shí)驗,可以看出,focal Transformer相比于Resnet-50和Swin-Transformer都能有非常明顯的性能提升。
上面兩張圖分別展示了不同模型在ADE20K上語義分割和COCO上目標(biāo)檢測的結(jié)果,可以看出,本文的方法在性能上還是有很大的優(yōu)越性。
4.3. 消融實(shí)驗
4.3.1. 不同window size的影響
可以看出,更大的window size能夠有更好的性能;在相同計算量或者window size下,F(xiàn)ocal-Tiny的性能明顯優(yōu)于Swin-Tiny。
4.3.2. Window Shifting的影響
可以看出Window Shifting對于分類任務(wù)性能的提高是有反效果的;但是有利于檢測、分割任務(wù)的性能提升。
4.3.3. Short-Range和Long-Range信息交互的影響
可以看出,在不同任務(wù)上,Local+Global的信息交互明顯優(yōu)于只有Local或者Global。
4.3.4. 模型深度的影響
上面展示了stage3采用不同層數(shù)的實(shí)驗結(jié)果,可以看出層數(shù)并不是越多越好,F(xiàn)ocal Transformer深度為4的效果要由于深度為6。
5. 總結(jié)
本文提出了一個能夠進(jìn)行l(wèi)ocal-global信息交互的attention模塊——Focal Self-Attention(FSA),F(xiàn)SA能夠?qū)ο噜彽奶卣鬟M(jìn)行細(xì)粒度的關(guān)注,對距離較遠(yuǎn)的特征進(jìn)行粗粒度的關(guān)注,從而實(shí)現(xiàn)有效的local-global信息交互。但是FSA引入了額外的顯存占用和計算量,因此雖然性能上得到了不錯的提升,但是高分辨率圖像的預(yù)測任務(wù),依舊不是非常友好。
這是繼VOLO、CoAtNet之后又一篇在局部信息建模上做出來的文章,這也說明了局部信息建模這個部分對于圖像理解任務(wù)來說確實(shí)是非常重要的,“局部假設(shè)偏置+Transformer強(qiáng)大的全局建模能力”這一操作確實(shí)是非常有效的。相比于VOLO、CoAtNet,本文的方法是將局部和全局信息的建模放在一個結(jié)構(gòu)中,而不是對局部和全局信息分別建模后,簡單地再將局部和全局建模結(jié)構(gòu)進(jìn)行串聯(lián)和并聯(lián)。
如果覺得有用,就請分享到朋友圈吧!
公眾號后臺回復(fù)“目標(biāo)跟蹤”獲取目標(biāo)跟蹤綜述~
# 極市原創(chuàng)作者激勵計劃 #
