日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swin Transformer理论讲解

發布時間:2024/1/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swin Transformer理论讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows Ze Liu, Yutong Lin, Yue Cao, Han Hu, Yixuan Wei, Zheng Zhang, Stephen Lin, Baining Guo Microsoft Research Asia

本文提出了一個新的視覺Transformer,稱為Swin Transformer,它可以作為計算機視覺的一個通用骨干(backbone)。將Transformer從語言改編為視覺的挑戰來自于兩個領域之間的差異,比如視覺實體的尺度變化很大,以及與文本中的文字相比,圖像中的像素分辨率很高。為了解決這些差異,我們提出了一個層次化的Transformer,其表示方法是通過 S \textbf{S} Shifted win \textbf{win} windows來計算的。移位的窗口方案通過將自我注意(self-attention)的計算限制在不重疊的局部窗口,同時也允許跨窗口的連接,從而帶來了更高的效率。這種分層結構具有在不同尺度上建模的靈活性,并且相對于圖像大小具有線性計算復雜性。Swin Transformer的這些特質使其與廣泛的視覺任務兼容,包括圖像分類(ImageNet-1K上87.3%的最高準確率)和密集預測任務,如物體檢測(COCO test-dev上58.7%的APbox和51.1%的APmask)和語義分割(ADE20K val上53.5% mIoU)。它的性能超過了以前的最先進水平,在COCO上為+2.7% APbox和+2.6% APmask,在ADE20K上為 +3.2% mIoU,證明了基于Transformer的模型作為視覺骨干的潛力。分層設計和移位窗口的方法也被證明對所有MLP架構有益。代碼和模型在this https URL公開提供。

This paper presents a new vision Transformer, called Swin Transformer, that capably serves as a general-purpose backbone for computer vision. Challenges in adapting Transformer from language to vision arise from differences between the two domains, such as large variations in the scale of visual entities and the high resolution of pixels in images compared to words in text. To address these differences, we propose a hierarchical Transformer whose representation is computed with \textbf{S}hifted \textbf{win}dows. The shifted windowing scheme brings greater efficiency by limiting self-attention computation to non-overlapping local windows while also allowing for cross-window connection. This hierarchical architecture has the flexibility to model at various scales and has linear computational complexity with respect to image size. These qualities of Swin Transformer make it compatible with a broad range of vision tasks, including image classification (87.3 top-1 accuracy on ImageNet-1K) and dense prediction tasks such as object detection (58.7 box AP and 51.1 mask AP on COCO test-dev) and semantic segmentation (53.5 mIoU on ADE20K val). Its performance surpasses the previous state-of-the-art by a large margin of +2.7 box AP and +2.6 mask AP on COCO, and +3.2 mIoU on ADE20K, demonstrating the potential of Transformer-based models as vision backbones. The hierarchical design and the shifted window approach also prove beneficial for all-MLP architectures. The code and models are publicly available at~\url{this https URL}.


Subjects: Computer Vision and Pattern Recognition (cs.CV); Machine Learning (cs.LG)
Cite as: arXiv:2103.14030 [cs.CV]
(or arXiv:2103.14030v2 [cs.CV] for this version)
https://doi.org/10.48550/arXiv.2103.14030
Focus to learn more
Submission history
From: Han Hu [view email]
[v1] Thu, 25 Mar 2021 17:59:31 UTC (1,064 KB)
[v2] Tue, 17 Aug 2021 16:41:34 UTC (1,065 KB)

ICCV 2021 Best Paper
論文地址:https://doi.org/10.48550/arXiv.2103.14030
源碼地址:https://github.com/microsoft/Swin-Transformer


0. 引言

0.1 Swin Transformer與Vision Transformer的對比

二者的不同之處:

  • Swin-Transformer所構建的特征圖是具有層次性的,很像我們之前將的卷積神經網絡那樣,隨著特征提取層的不斷加深,特征圖的尺寸是越來越小的(4x、8x、16x下采樣)。正因為Swin Transformer擁有像CNN這樣的下采樣特性,能夠構建出具有層次性的特征圖。在論文中作者提到,這樣的好處就是:正是因為這樣具有層次的特征圖,Swin Transformer對于目標檢測和分割任務相比ViT有更大的優勢。
  • 在ViT模型中,是直接對特征圖下采樣16倍,在后面的結構中也一致保持這樣的下采樣規律不變(只有16x下采樣,不Swin Transformer那樣有多種下采樣尺度 -> 這樣就導致ViT不能構建出具有層次性的特征圖)

  • 在Swin Transformer的特征圖中,它是用一個個窗口的形式將特征圖分割開的。窗口與窗口之間是沒有重疊的。而在ViT中,特征圖是是一個整體,并沒有對其進行分割。其中的窗口(Window)就是我們一會兒要講的Windows Multi-head Self-attention。引入該結構之后,Swin Transformer就可以在每個Window的內部進行Multi-head Self-Attention的計算。Window與Window之間是不進行信息的傳遞的。這樣做的好處是:可以大大降低運算量,尤其是在淺層網絡,下采樣倍率比較低的時候,相比ViT直接針對整張特征圖進行Multi-head Self-Attention而言,能夠減少計算量。
  • 0.2 Swin Transformer與其他網絡準確率對比分析

    0.2.1 ImageNet-1K數據集準確率對比

    這些模型先在ImageNet-1K數據集上進行預訓練后,再在ImageNet-1K上的表現。

    可以看到:

    • RegNet的準確率整體表現是不如EfficientNet系列的(考慮到EfficientNet有不同的輸入尺寸,其實這么比較也不是那么公平),模型的參數量也比EfficientNet要大。
    • ViT整體的Top-1準確率是最低的,而且尤其是ViT-L/16在參數量和FLOPs上“一騎絕塵😂”,我個人猜測是因為ViT的參數量過于大,模型的容量也很大,所以需要大量的數據去擬合,很明顯,ImageNet-1K并不能滿足它。
    • DeiT最小規格的模型是不如RegNet和EfficientNet的,但最高規格的準確率強于ReNet。
    • Swin-B的準確率是所有模型中最高的,且相比ViT而言,其準確率提升很大。

    0.2.2 ImageNet-22K預訓練后在ImageNet-1K的準確率

    我們看一下這些模型先在ImageNet-22K數據集上進行預訓練后,再在ImageNet-1K上的表現。

    ImageNet-22K規模遠大于ImageNet-1K

    從表中可以看到,在ImageNet-22K預訓練后,所有模型的ImageNet-1K準確率都有提升。

    • ViT-B/16的準確率提升6.1個點(+7.83%)
    • ViT-L/16的準確率提升8.7個點(+11.17%)
    • Swin-B(2242)的準確率提升1.7個點(+2.04%)
    • Swin-B(3842)的準確率提升1.9個點(+2.25%)
    • Swin-L(3842)的準確率為最高(但此時的FLOPs仍比ViT要低)

    1. Swin Transformer框架

    假設我們的輸入圖片的shape為 H × W × 3 H \times W \times 3 H×W×3的圖片,首先通過Patch Partition模塊 -> 圖片的shape變為 H 4 × W 4 × 48 \frac{H}{4} \times \frac{W}{4} \times 48 4H?×4W?×48。接下來再依次通過 Stage1 ~ Stage8。

    這個結構非常像ResNet,圖片首先通過一個stem層,之后經過若干個Stage結構對特征圖進行特征提取和下采樣。

    1.1 注意事項

    • 在Swin Transformer中,每經過依次下采樣, H , W H, W H,W會減半,而 C C C會翻倍。
    • Stage1和其他Stage n n n不同的是,Stage1的第一個層結構是Linear Embedding層,而其他Stage的第一層是Patch Merging層。

    1.2 Patch Partition

    partition 英[pɑ??t??n] 美[pɑ?r?t??n]
    n. 隔斷; 分割; 隔扇; 隔板墻; 分治; 瓜分;
    vt. 分割; 使分裂;


    假如左邊的矩形是輸入圖片,shape為 4 × 4 × 3 4 \times 4 \times 3 4×4×3(注意是三通道而非單通道)。Patch Partition會使用一個 4 × 4 4 \times 4 4×4大小的窗口對輸入圖像進行分割。分割之后對每一個小的窗口在channel方向進行展平處理。即圖片的長度和寬度縮小4倍,而channel變為4×4×3=48。

    經過Patch Partition層之后,tensor經過Linear Embedding層對輸入特征圖的channel進行調整。通過調整之后,特征圖的channel變為 C C C。這里的 C C C具體為多少是根據Swin Transformer的具體類型進行調整的。

    Note:

    • 在Stage1的Linear Embeddding層中還包含了一個Linear Norm層。
    • 這里的Patch Partition和Linear Embedding層看起來很高大上,說白了是通過一個卷積層實現的。
      • Patch Partition使用卷積核大小為4×4,個數為48,stride=4的二維卷積實現 -> nn.Conv2d(inp=3, oup=48, kernel_size=(4, 4), stride=4)
      • Linear Embedding使用的是tensor.flatten()和一維卷積實現,即nn.Conv1d(inp=48, oup=C, kernel_size=1, stirde=1),最后加上一個nn.LinearNorm()即可。
    • Swin Transformer Block的次數都是偶數次。
      • 那么為什么是偶數次呢?
      • 因為在堆疊Swin Transformer Block時,先使用圖3(b)中的左邊的Block,再使用右邊的Block。
        • 左邊的Block的W-MSA其實就是一個Multi-head Self-attention模塊(Window Multi-head Self-attenton)
        • 右邊的Block的SW-MSA本質上也是一個Multi-head Self-attention模塊(Shifted Multi-head Self-attenton)
      • 這兩個MSA是成對使用的,所以Swin Transformer Block的次數都是偶數次

    1.3 Patch Merging

    Patch Merging的實際作用是下采樣。通過Patch Merging后,特征圖的高和寬會縮減為原來的一半,Channel會翻倍。


    從上圖可以看到,特征圖的尺寸變為原來的一半,深度(通道數)翻倍。

    • 4 -> 2
    • 1 -> 2

    2. W-MSA(Windows Multi-head Self-Attention)

    對于普通的MSA模塊,會對輸入特征圖的每一個像素求解 Q , K , V Q, K, V Q,K,V,每一個像素求得的 Q Q Q 會和特征圖上每一個像素的 K K K 進行匹配。然后再進行一系列的操作。

    而對應Window Multi-head Self-Attention而言,首先會對特征圖進行分割處理,分割為一個一個的Window,然后在每一個Window內部開始執行MSA。注意:在進行MSA時,Window與Window之間是沒有任何通信的。

    這么設計WMSA的目的是:減少計算量。

    同樣的,這樣的設計也會引入一些缺點:Window之間無法進行信息交互。這將會導致特征圖的感受野變小,沒法看到全局的視野,這肯定對最終的預測結果有影響。

    3. W-MSA和MSA理論上的計算量對比

    3.1 MSA計算量推導

    首先回憶下單頭Self-Attention的公式:

    A t t e n t i o n ( Q , K , V ) = S o f t M a x ( Q K T d ) V {\rm Attention}(Q, K, V) = {\rm SoftMax}(\frac{QK^T}{\sqrtozvdkddzhkzd})V Attention(Q,K,V)=SoftMax(d ?QKT?)V

    對于特征圖中的每個像素(或稱作token,patch),都要通過 W q , W k , W v W_q, W_k, W_v Wq?,Wk?,Wv? 生成對應的 q u e r y ( q ) query(q) query(q) k e y ( k ) key(k) key(k) 以及 v a l u e ( v ) value(v) value(v)。這里假設 q , k , v q, k, v q,k,v 的向量長度與特征圖的深度 C C C 保持一致。那么對應所有像素生成 Q Q Q 的過程如下式:

    Q h w × C = A h w × C ? W q C × C Q^{hw \times C} = A^{hw \times C} \cdot W_q^{C \times C} Qhw×C=Ahw×C?WqC×C?

    • A h w × C A^{hw \times C} Ahw×C 為將所有像素(token)拼接在一起得到的矩陣(一共有 h w hw hw 個像素,每個像素的深度為 C C C
    • W q C × C W^{C \times C}_q WqC×C? 為生成 q u e r y query query 的變換矩陣(因為輸入輸出特征圖通道數不變,所以是 C × C C \times C C×C
    • Q h w × C Q^{hw \times C} Qhw×C 為所有像素通過 W q C × C W^{C \times C}_q WqC×C? 得到的query拼接后的矩陣

    補充一個矩陣乘法FLOPs計算方式,假設有如下兩個矩陣做矩陣乘法:

    A a × b ? B b × c A^{a\times b} \cdot B^{b \times c} Aa×b?Bb×c

    這兩個矩陣相乘之后,FLOPs為: a × b × c a \times b \times c a×b×c


    所以根據矩陣運算的計算量公式可以得到生成 Q Q Q 的計算量為 h w × C × C hw \times C \times C hw×C×C,生成 K K K V V V 同理都是 h w C 2 hwC^2 hwC2,那么總共是 3 h w C 2 3hwC^2 3hwC2。接下來 Q Q Q K T K^T KT 相乘:

    X h w × h w = Q h w × C ? K T ( C × h w ) X^{hw \times hw} = Q^{hw \times C} \cdot K^{T(C \times hw)} Xhw×hw=Qhw×C?KT(C×hw)

    對應計算量為 ( h w ) 2 C (hw)^2C (hw)2C

    接下來忽略除以 d \sqrtozvdkddzhkzd d ? 以及 s o f t m a x {\rm softmax} softmax的計算量,假設得到 Λ h w × h w \Lambda^{hw \times hw} Λhw×hw,最后還要乘以 V V V

    B h w × C = Λ h w × h w ? V h w × C B^{hw \times C} = \Lambda^{hw \times hw} \cdot V^{hw \times C} Bhw×C=Λhw×hw?Vhw×C

    對應的計算量為 ( h w ) 2 C (hw)^2C (hw)2C

    那么對應單頭的Self-Attention模塊,總共的計算量為:

    3 h w C 2 Q , K , V + ( h w ) 2 C Q K T + ( h w ) 2 C ? V = 3 h w C 2 + 2 ( h w ) 2 C \underset{Q, K, V}{3hwC^2} + \underset{QK^T}{(hw)^2C} + \underset{\cdot V}{(hw)^2C} = 3hwC^2 + 2(hw)^2C Q,K,V3hwC2?+QKT(hw)2C?+?V(hw)2C?=3hwC2+2(hw)2C

    在實際使用過程中,使用的是多頭的Multi-head Self-Attention模塊(MSA),在之前的文章中有進行過實驗對比,多頭注意力模塊相比單頭注意力模塊的計算量僅多了最后一個融合矩陣 W O W_O WO? 的計算量 h w C 2 hwC^2 hwC2

    O h w × C = B h w × C ? W O C × C O^{hw \times C} = B^{hw \times C} \cdot W^{C \times C}_O Ohw×C=Bhw×C?WOC×C?

    對應的計算量為 h w C 2 hwC^2 hwC2

    所以總共加起來是: 4 h w C 2 + 2 ( h w ) 2 C 4hwC^2 + 2(hw)^2C 4hwC2+2(hw)2C

    3.2 W-MSA計算量推導

    對于W-MSA模塊首先要將特征圖劃分到一個個窗口(Window)中,假設每個窗口的寬高都是 M M M,那么總共會得到 h M × w M \frac {h} {M} \times \frac {w}{M} Mh?×Mw? 個窗口,然后對每個窗口內使用多頭注意力模塊(MSA)。

    剛剛計算高為 h h h,寬為 w w w,深度為 C C C 的特征圖的計算量為 4 h w C 2 + 2 ( h w ) 2 C 4hwC^2 + 2(hw)^2C 4hwC2+2(hw)2C,這里每個窗口的高為 M M M 寬為 M M M,帶入公式得:

    4 ( M C ) 2 + 2 ( M ) 4 C 4(MC)^2 + 2(M)^4C 4(MC)2+2(M)4C

    又因為有 h M × w M \frac {h} {M} \times \frac {w}{M} Mh?×Mw? 個窗口,則:

    F L O P s ( W - M S A ) = h M × w M × [ 4 ( M C ) 2 + 2 ( M ) 4 C ] = 4 h w C 2 + 2 M 2 h w C \begin{aligned} {\rm FLOPs(W{\text -}MSA)} & = \frac{h}{M} \times \frac{w}{M} \times [4(MC)^2 + 2(M)^4C] \\ & = 4hwC^2 + 2M^2 hw C \end{aligned} FLOPs(W-MSA)?=Mh?×Mw?×[4(MC)2+2(M)4C]=4hwC2+2M2hwC?

    故使用W-MSA的計算量為 4 h w C 2 + 2 M 2 h w C 4hwC^2 + 2M^2 hw C 4hwC2+2M2hwC

    3.3 計算量對比

    F L O P s ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C F L O P s ( W - M S A ) = 4 h w C 2 + 2 M 2 h w C \begin{aligned} {\rm FLOPs}({\rm MSA}) & = 4 h w C^2 + 2(hw)^2 C \\ {\rm FLOPs}({\rm W{\text -}MSA}) & = 4hwC^2 + 2M^2 hwC \end{aligned} FLOPs(MSA)FLOPs(W-MSA)?=4hwC2+2(hw)2C=4hwC2+2M2hwC?

    其中:

    • h , w h, w h,w代表特征圖尺寸
    • C C C代表特征圖深度
    • M M M代表每個Window的大小

    為了直觀看出兩者計算的不同,假設輸入圖片的shape為 X ∈ R 112 × 112 × 128 \mathcal{X}\in {\mathbb R}^{112 \times 112 \times 128} XR112×112×128,Window的尺寸為 M M M。(輸入輸出通道數不變),則兩種MSA的計算量如下:

    MSA類別 M = 1 M=1 M=1 M = 2 M=2 M=2 M = 3 M=3 M=3 M = 4 M=4 M=4 M = 5 M=5 M=5 M = 6 M=6 M=6 M = 7 M=7 M=7
    MSA (M)41104.179241104.179241104.179241104.179241104.179241104.179241104.1792
    W-MSA (M)825.2948834.9286850.9850873.4638902.3652937.6891979.4355
    Δ \Delta Δ-97.9922%-97.9688%-97.9297%-97.8750%-97.8047%-97.7188%-97.6172%

    從表中的數據可以看到,W-MSA相比MSA而已,切割窗口的設計可以為模型省出巨大的計算量。

    4. Shifted Window Multi-head Self-Attention(SW-MSA)

    圖2. 所提出的Swin Transformer架構中計算自我注意力的移位窗口方法的說明。在第 l l l 層(左),采用了一個常規的窗口劃分方案,在每個窗口內計算自我注意力。在接下來的第 l + 1 l+1 l+1 層(右),窗口分區被轉移,產生了新的窗口。新窗口中的自我注意計算跨越了第 l l l 層中先前窗口的邊界,提供了它們之間的聯系。

    前面有說,采用W-MSA模塊時,只會在每個窗口內進行自注意力計算(MSA),所以窗口與窗口之間是無法進行信息傳遞的。為了解決這個問題,作者引入了Shifted Windows Multi-Head Self-Attention(SW-MSA)模塊,即進行偏移的W-MSA。如上圖所示,左側使用的是剛剛講的W-MSA(假設是第 l l l 層),那么根據之前介紹的W-MSA和SW-MSA是成對使用的,那么第 l + 1 l+1 l+1 層使用的就是SW-MSA(右側圖)。根據左右兩幅圖對比能夠發現窗口(Windows)發生了偏移(可以理解成窗口從左上角分別向右側和下方各偏移了 ? M 2 ? \left \lfloor \frac {M} {2} \right \rfloor ?2M??個像素)。

    4.1 SW-MSA移動窗口示意圖

    看下偏移后的窗口(右側圖),比如對于第一行第2列的 2 × 4 2\times 4 2×4 的窗口,它能夠使第 l l l 層的第一排的兩個窗口信息進行交流。再比如,第二行第二列的 4 × 4 4\times 4 4×4 的窗口,他能夠使第 l l l 層的四個窗口信息進行交流,其他的同理。那么這就解決了不同窗口之間無法進行信息交流的問題

    根據上圖,可以發現通過將窗口進行偏移后,由原來的 4 4 4 個窗口變成 9 9 9 個窗口了。后面又要對每個窗口內部進行MSA,這樣做感覺又變麻煩了。

    對于新生成的 9 個Window,如果想要實現并行計算,那么就需要對邊上 8 個Window進行填充,填充到 4 × 4 4 \times 4 4×4 大小。如果我們使用這種策略,那么我們就相當于是計算了 9 9 9 4 × 4 4 \times 4 4×4 大小Window,計算量又增加了。

    為了解決這個麻煩,作者又提出而了Efficient batch computation for shifted configuration,一種更加高效的計算方法。下面是原論文給的示意圖。

    圖4. 移位窗口分區中自我注意(SW-MSA)的高效批量計算方法的說明。

    感覺不太好描述,然后霹靂巴拉WZ重新繪制了該圖。下圖左側是剛剛通過偏移窗口后得到的新窗口,右側是為了方便大家理解,對每個窗口加上了一個標識。然后0對應的窗口標記為區域A,3和6對應的窗口標記為區域B,1和2對應的窗口標記為區域C。

    接下來對劃分的區域進行了2次平移,如下圖所示。

    移動完畢后,我們對Window重新進行劃分,如下圖所示。

    移動完后,4是一個單獨的窗口;將5和3合并成一個窗口;7和1合并成一個窗口;8, 6, 2, 0合并成一個窗口。這樣又和原來一樣是 4 4 4 4 × 4 4 \times 4 4×4 的窗口了,在對這4個4×4的Window進行W-MSA計算的話能夠保證計算量是一樣的。

    4.2 masked MSA

    但是我們直接簡單粗暴地在每個Window中進行W-MSA計算(其實就是MSA計算)的話,就會引入一個新的問題。

    對于第一個4×4的Window來說其實沒有影響,因為它本身就是一個4×4的Window,但對于B來說,這個Window是由兩個分開的區域組合在一起的,而且5和3本來就不是相鄰的兩個區域,如果我們強行MSA計算的話,其實是有問題的。所以我們希望在B中個Window中可以單獨計算區域5的MSA和區域3的MSA。

    那么具體是怎么實現的呢?

    在論文中,使用的不是原本的MSA而是masked MSA即帶蒙板mask的MSA,這樣就能夠通過設置蒙板來隔絕不同區域的信息了

    關于mask如何使用,可以看下下面這幅圖,下圖是以上面的區域5和區域3為例。

    對于該窗口內的每一個像素(或稱token,patch)在進行MSA計算時,都要先生成對應的 q u e r y ( q ) query(q) query(q) k e y ( k ) key(k) key(k) v a l u e ( v ) value(v) value(v)。假設對于上圖的像素0而言,得到 q 0 q^0 q0 后要與每一個像素的 k k k 進行匹配(match)。

    假設 α 0 , 0 \alpha _{0,0} α0,0? 代表 q 0 q^0 q0 與像素0對應的 k 0 k^0 k0 進行匹配的結果,那么同理可以得到 α 0 , 0 \alpha _{0,0} α0,0? α 0 , 15 \alpha _{0,15} α0,15?。按照普通的MSA計算,接下來就是SoftMax操作了。

    但對于這里的masked MSA,像素0是屬于區域5的,我們只想讓它和區域5內的像素進行匹配。那么我們可以將像素0與區域3中的所有像素匹配結果都減去100(例如 α 0 , 2 , α 0 , 3 , α 0 , 6 , α 0 , 7 \alpha _{0,2}, \alpha _{0,3}, \alpha _{0,6}, \alpha _{0,7} α0,2?,α0,3?,α0,6?,α0,7? 等等),由于 α \alpha α 的值都很小,一般都是零點幾的數,將其中一些數減去 100 100 100 后再通過SoftMax得到對應的權重都等于 0 0 0 了。所以對于像素0而言實際上還是只和區域5內的像素進行了MSA

    對于其他像素也是同理,具體代碼是怎么實現的,后面會在代碼講解中進行詳解。

    注意,在計算完后還要把數據給挪回到原來的位置上(例如上述的A,B,C區域)

    4.3 masked MSA例子


    5. Relative Position Bias

    5.1 Relative position bias的效果

    關于相對位置偏執,論文里也沒有細講,就說了參考的哪些論文,然后說使用了相對位置偏執后給夠帶來明顯的提升。根據原論文中的表4可以看出,在ImageNet數據集上如果不使用任何位置偏執,top-1為 80.1 % 80.1\% 80.1%,但使用了相對位置偏執(rel. pos.)后top-1為 83.3 % 83.3\% 83.3%,提升還是很明顯的。

    第一二行:

    • 第一行:全部使用W-MSA模塊,不使用SW-MSA,那么ImageNet Top-1準確率可以達到80.2%
    • 第二行:除了W-MSA模塊,還使用了SW-MSA模塊,那么ImageNet Top-1準確率可以達到81.3%,而且在COCO和分割任務的性能也得到提升。

    這說明窗口與窗口之間的信息交互是非常有必要的


    • 如果加了絕對位置(abs. pos.)后,雖然在ImageNet數據集上的top- n n n增加了,但在COCO和分割任務上的性能降低了。所以絕對位置編碼效果并不好。
    • 如果使用本文使用的相對位置偏置(rel. pos.),那么在ImageNet top準確率最好的情況下,COCO和分割任務上的性能都提升最多。這也說明了,使用相對位置偏置(relative position bias)是最合理的。

    5.2 定義及解釋

    原版的MSA計算公式如下:

    A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V {\rm Attention}(Q, K, V) = {\rm softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk? ?QKT?)V

    在Swin Transformer中,給出的公式為:

    A t t e n t i o n ( Q , K , V ) = S o f t M a x ( Q K T d k + B ) V {\rm Attention}(Q, K, V) = {\rm SoftMax}(\frac{QK^T}{\sqrt{d_k}} + B)V Attention(Q,K,V)=SoftMax(dk? ?QKT?+B)V

    那這個相對位置偏執是加在哪的呢,根據論文中提供的公式可知是在 Q Q Q K K K 進行匹配并除以 d \sqrt d d ? 后加上了相對位置偏執 B B B

    由于論文中并沒有詳解講解這個相對位置偏執,所以霹靂吧啦WZ根據閱讀源碼做了簡單的總結。


    如下圖,假設輸入的特征圖高寬都為 2 2 2,那么首先我們可以構建出每個像素的絕對位置(左下方的矩陣),對于每個像素的絕對位置是使用行號和列號表示的。

    比如藍色的像素對應的是第0行第0列所以絕對位置索引是 ( 0 , 0 ) (0,0) (0,0),接下來再看看相對位置索引。

    首先看下藍色的像素,在藍色像素使用 q q q 與所有像素 k k k 進行匹配過程中,是以藍色像素為參考點。然后用藍色像素的絕對位置索引與其他位置索引進行相減,就得到其他位置相對藍色像素的相對位置索引。例如黃色像素的絕對位置索引是 ( 0 , 1 ) (0,1) (0,1),則它相對藍色像素的相對位置索引為 ( 0 , 0 ) ? ( 0 , 1 ) = ( 0 , ? 1 ) (0,0)?(0,1)=(0,?1) (0,0)?(0,1)=(0,?1),這里是嚴格按照源碼中來講的,請不要杠😂。那么同理可以得到其他位置相對藍色像素的相對位置索引矩陣。

    同樣,也能得到相對黃色,紅色以及綠色像素的相對位置索引矩陣。接下來將每個相對位置索引矩陣按行展平,并拼接在一起可以得到下面的 4 × 4 4\times 4 4×4 矩陣 。

    請注意,我這里描述的一直是相對位置索引,并不是相對位置偏執參數(并不是公式中的那個 B B B。因為后面我們會根據相對位置索引去取對應的參數

    比如說黃色像素是在藍色像素的右邊,所以相對藍色像素的相對位置索引為 ( 0 , ? 1 ) (0,?1) (0,?1)。綠色像素是在紅色像素的右邊,所以相對紅色像素的相對位置索引為 ( 0 , ? 1 ) (0,?1) (0,?1)。可以發現這兩者的相對位置索引都是 ( 0 , ? 1 ) (0,?1) (0,?1),所以他們使用的相對位置偏執參數都是一樣的。

    5.3 源碼的操作

    其實講到這基本已經講完了,但在源碼中作者為了方便把二維索引給轉成了一維索引。具體這么轉的呢,有人肯定想到,簡單啊直接把行、列索引相加不就變一維了嗎?

    比如上面的相對位置索引中有 ( 0 , ? 1 ) (0,?1) (0,?1) ( ? 1 , 0 ) (?1,0) (?1,0) 在二維的相對位置索引中明顯是代表不同的位置,但如果簡單相加都等于 -1 那不就出問題了嗎?

    • (0, -1) -> 0 + (-1) = -1
    • (-1, 0) -> -1 + 0 = -1

    這說明如果直接相加,那么位置索引就沒有了(會有明明位置不同,但索引值相同的情況)!

    接下來我們看看源碼中是怎么做的。

    5.3.1 第一步

    首先在原始的相對位置索引上加上 ( M ? 1 ) (M-1) (M?1) ( M M M 為窗口的大小,在本示例中 M = 2 M=2 M=2),加上之后索引中就不會有負數了。如下圖所示:

    5.3.2 第二步

    接著將所有的行標都乘上2M-1。如下圖:

    5.3.3 第三步

    最后將行標和列標進行相加。

    這樣就得到一元相對位置索引矩陣。這個矩陣即保證了相對位置關系,而且不會出現上述 0 + (-1) = (-1) + 0 的問題了。


    5.4 Relative Position Bias Table

    剛剛上面也說了,之前計算的是相對位置索引,并不是相對位置偏執參數。真正使用到的可訓練參數 B ^ \hat{B} B^ 是保存在relative position bias table表里的,這個表的長度是等于 ( 2 M ? 1 ) × ( 2 M ? 1 ) (2M-1) \times (2M-1) (2M?1)×(2M?1) 的。那么上述公式中的相對位置偏執參數 B B B 是根據上面的相對位置索引表根據查relative position bias table表得到的,如下圖所示。

    剛才我們求的是索引,并不是用到的值,用到值需要通過求得的索引去查表得到。

    看圖說話, 我們發現relative position index這個矩陣的一共有9個數,而relative position bias table的個數也是9個。圖中也寫了,矩陣的大小為 ( 2 M ? 1 ) × ( 2 M ? 1 ) (2M-1)\times (2M-1) (2M?1)×(2M?1)

    那么為什么是 ( 2 M ? 1 ) × ( 2 M ? 1 ) (2M-1)\times (2M-1) (2M?1)×(2M?1)呢?看下面這張圖:

    M M M 是Window的大小,不是數量,這里我就懶得改了

    6. 模型詳細配置參數

    首先回憶下Swin Transformer的網絡架構:

    圖3:(a)Swin Transformer(Swin-T)的結構;(b)兩個連續的Swin Transformer區塊(用公式(3)表示)。W-MSA和SW-MSA是多頭自我注意模塊,分別具有常規和移位的窗口配置。


    下圖(表7)是原論文中給出的關于不同Swin Transformer的配置,T(Tiny),S(Small),B(Base),L(Large),其中:

    • win. sz. 7×7表示使用的窗口(Window)的大小
    • dim表示特征圖的channel深度(或者說token的向量長度)
    • head表示多頭注意力模塊中head的個數

    參考:

  • https://www.bilibili.com/video/BV1pL4y1v7jC?share_source=copy_pc
  • https://blog.csdn.net/qq_37541097/article/details/121119988
  • 總結

    以上是生活随笔為你收集整理的Swin Transformer理论讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。