【Transformer】CSWin Transformer: A General Vision Transformer Backbone with Cross-Shaped Windows
論文:
文章目錄
- 一、背景
- 二、動機
- 三、方法
- 3.1 總體結構
- 3.2 Cross-Shaped Window Self-Attention
- 3.3 CSWin Transformer Block
- 3.4 變體
- 四、效果
一、背景
目前,基于transformer的方法在 CV 領域基本實現了和CNN相當的效果,其好的效果來源于內部多頭自注意力機制對遠距離依賴的建模能力,這對以高分辨率數據作為輸入的下游方法(檢測、分割等)都很有幫助。但另外,由于 Transormer 結構是全注意力結構,計算量很大。
二、動機
為了提高速度,一個典型的方法是限制 attention 計算的區域,也就是進行 local/windowed attention,為了建立不同 window 之間的聯系,一些作者使用轉移window的方法來實現。但是這些方法隨著深度的增加,感受野的大小提升的很慢,并且需要堆疊更多的 blocks 來實現全局的attention。但是,下游的任務往往都需要足夠大的感受野,所以,如果在獲得大的感受野的同時來保證計算量較低是很重要的。
三、方法
本文作者提出了一種名叫 Cross-Shaped Window (CSwin) self-attention,作者并行的進行垂直和水平兩個方向的 self-attention 計算。 如圖1所示。
3.1 總體結構
CSwin 的結構如圖2所示:
- 輸入:H×W×3H \times W \times 3H×W×3
- patch tocken 的獲得:使用大小為 7×77\times77×7 步長為 4 的卷積來獲得大小為 H4×W4\frac{H}{4} \times \frac{W}{4}4H?×4W? 的 patch tokens,每個 token 的維度是 CCC。
- 產生層級表達:作者使用了4個stage來產生不同的層級表達,兩個相鄰層級之間使用卷積層(3×3,strides=23\times 3, strides=23×3,strides=2) 來降低token的數量,并將channel擴充為2倍。
- 每個stage的token數量:H2i+1×W2i+1\frac{H}{2^{i+1}} \times \frac{W}{2^{i+1}}2i+1H?×2i+1W?
- 每個stage $i $ 包含 NiN_iNi? 個順序的 CSWin Transformer Blocks
CSWin Transformer Block 和其他基于多頭self-attention的transformer結構的不同:
- CSWin 使用 cross-shaped window attention
- LePE 被作為一個并行模塊加入 self-attention 分支,來引入局部歸納偏置
3.2 Cross-Shaped Window Self-Attention
本文作者提出了一種名叫 Cross-Shaped Window (CSwin) self-attention,作者并行的進行垂直和水平兩個方向的 self-attention 計算。 如圖1所示。
如何得到stripe:通過把輸入特征切成等寬的stripes來得到
stripe 的寬度非常重要:因為該寬度決定了本文算法的模型建模能力和計算速度的平衡
作者如果確定切分的寬度:通過網絡的寬度來確定,即淺層的寬度小,深層的寬度大。
- 大寬度能夠保證元素之間的 long-range 關聯的保留
- 更好的保證網絡的容量
- 較少的提高計算復雜度
如何并行進行水平和垂直的 attention 計算:
作者將多頭注意力分成并行的 groups,并且對不同的 group 使用不同的 self-attention 操作方式。
這種并行的機制沒有引入額外的計算量,并且能夠提高參與self-attention計算的面積。
Horizontal and Vertical Stripes:
對于水平 stripe self-attention,輸入 X 被均分成無重疊的水平 stripe,寬度都為swswsw,每個 stripes 包含 sw×Wsw \times Wsw×W 個 token,此處 swswsw 為 stripe 的寬度,且可以用來平衡模型學習效果和計算復雜度。
假設第 k 個 head 的 q/k/v 維度都為 dkd_kdk?,則第 k 個 head 的水平 stripes self-attention 的輸出為:
- WQ,WK,WV∈RC×dkW^Q, W^K, W^V \in R^{C\times d_k}WQ,WK,WV∈RC×dk? 分別為 q/k/v 的投影矩陣,dkd_kdk? 為 C/KC/KC/K
- 豎直 stripe self-attention 計算方式類似,第 k 個head的輸出定義為 V?Attentionk(X)V-Attention_k(X)V?Attentionk?(X)
假設圖像沒有帶方向的偏置,作者將 K 個 heads 分成兩個 group,每個 group 有 K/2K/2K/2 個heads,第一個group進行水平 stripe self-attention,第二個 group 進行垂直 stripe self-attention,最后將兩者的輸出進行concat。
- WO∈RC×CW^O \in R^{C \times C}WO∈RC×C 是影射矩陣,負責將 self-attention 的輸出影射為目標輸出維度
計算復雜度分析:
CSWin 的計算復雜度如下:
- 對于大分辨率輸入, H 、W 一般在淺層會大于 C,在深層會小于 C
- 作者在淺層選擇較小的 swswsw,在深層選擇較大的 swswsw,也就是說調整 swswsw 能夠靈活高效的在深層擴大每個token的 attention 面積。為了中間的特征圖能夠被 swswsw整除(輸入為 224),對于 4 個stage,swswsw 分別為 1, 2, 7, 7。
Locally-Enhanced Positional Encoding
由于 self-attention 是對排列方式不敏感的,會忽略 2D 圖像的位置信息。
現有的很多方法都為了把位置信息加回來而做了很多工作:
- APE[57] 和 CPE[13] 在輸入每個 Transformer block之前,把位置信息加到了每個 token 上
- RPE[47] 和本文的 LePE 在每個 Transformer block 內融合了位置信息
- 但不同于 RPE 把位置信息加到 attention 計算時, LePE 使用了更直接的方式,并且利用了線性映射 value 之上的位置信息
假設不同 value viv_ivi? 和 vjv_jvj? 之間的邊緣可以用向量 eijv∈Ee_{ij}^v \in Eeijv?∈E 來表示,則:
如果計算 E 中的所有關聯信息,則計算量很大,作者假設對應特定的元素,最重要的位置信息來源于其周圍的鄰域,所以作者提出了一種 locally-enhanced positional encoding(LePE),并且聯合深度可分離卷積來作用于 value VVV:
3.3 CSWin Transformer Block
由上述的 self-attention 機制和 position embedding 機制組成的 CSWin Transformer block 的形式如下:
3.4 變體
為了更好的和其他 Transformer baseline 進行對比,作者建立了 CSWin 的不同變體,這些變體的不同在于改變了base channel 的通道數和 transformer block 的個數,如表 1 所示:
- CSWin-T (Tiny)
- CSWin-S (Small)
- CSWin-B (Base)
- CSWin-L (Large)
在所有變體中,每個 MLP 的 expansion ratio 都為4
前三個變體的 4 個stage 的 head 個數都為 2,4,8,16,最后一個變體的 head 數為 6,12,24,48。
四、效果
作者在 ImageNet,COCO,ADE20K上分別做了分類,檢測,分割的實驗。
總結
以上是生活随笔為你收集整理的【Transformer】CSWin Transformer: A General Vision Transformer Backbone with Cross-Shaped Windows的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Error(s) in loading
- 下一篇: 确认了!裴宇透露Nothing Phon