计算机视觉算法——Transformer学习笔记
算機(jī)視覺(jué)算法——Transformer學(xué)習(xí)筆記
- 計(jì)算機(jī)視覺(jué)算法——Transformer學(xué)習(xí)筆記
- 1. Vision Transformer
- 1.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 1.2 關(guān)鍵知識(shí)點(diǎn)
- 1.2.1 Self-Attention
- 1.2.2 Positional Embedding
- 1.2.3 Layer Normalization
- 2. Swin Transformer
- 2.1 網(wǎng)絡(luò)結(jié)構(gòu)
- 2.2 關(guān)鍵知識(shí)點(diǎn)
- 2.2.1 W-MSA和SW-WSA結(jié)構(gòu)
- 2.2.2 Relative Position Bias
計(jì)算機(jī)視覺(jué)算法——Transformer學(xué)習(xí)筆記
清明假期被封在家里,我就利用這三天時(shí)間學(xué)習(xí)了下著名的Transfomer,參考的主要是Blibli UP主霹靂吧啦Wz的視頻教程,過(guò)程有不懂的我就自己查資料,補(bǔ)充了一些自己的理解觀點(diǎn),目前還沒(méi)有機(jī)會(huì)對(duì)Transformer進(jìn)行實(shí)踐,只是進(jìn)行了簡(jiǎn)單的理論學(xué)習(xí),有問(wèn)題歡迎讀者指出交流。
參考內(nèi)容:
11.1 Vision Transformer(vit)網(wǎng)絡(luò)詳解
Vision Transformer 超詳細(xì)解讀 (原理分析+代碼解讀) (一)
12.1 Swin-Transformer網(wǎng)絡(luò)結(jié)構(gòu)詳解
1. Vision Transformer
Transformer來(lái)源于2017年的一篇論文《Attention Is All You Need》,Transformer的提出最開(kāi)始是針對(duì)NLP領(lǐng)域的,在此之前,NLP領(lǐng)域里使用的主要是RNN、LSTM這樣一些網(wǎng)絡(luò),這些網(wǎng)絡(luò)都存在一些問(wèn)題,一方面是記憶長(zhǎng)度有限,另一方面是無(wú)法并行,而Transeformer理論上記憶長(zhǎng)度是無(wú)限長(zhǎng)的,并且可以做到并行化。
而Vision Transformer是2020年發(fā)表于CVPR的論文《An Image Worth 16x16 Words: Transformers for Image Recognition as Scale》提出的,論文性能對(duì)比如下:
1.1 網(wǎng)絡(luò)結(jié)構(gòu)
Vision Transform的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:
其中,Position Encoder主要是由Norm Block、Multi-Head Attention Block和MLP Block構(gòu)成,MLP Block的結(jié)構(gòu)由Linear+GELU+Dropout+Linear+Dropout的結(jié)構(gòu)構(gòu)成,Norm Block和Multi-Head Attention的結(jié)構(gòu)可以參看下面的關(guān)鍵知識(shí)點(diǎn)。
用于輸出的MLP Head可以為L(zhǎng)inear+Tanh+Linear的結(jié)構(gòu)或者直接為一層Linear,具體結(jié)構(gòu)可以根據(jù)不同數(shù)據(jù)集做適當(dāng)改變。
論文中一共給出了三種網(wǎng)絡(luò)結(jié)構(gòu):
其中Layer為T(mén)ransform Encoder重復(fù)堆疊的個(gè)數(shù),Hidden Size為通過(guò)Embedding層后每個(gè)Token的維度,MLP Size是Transformer Encoder中MLP Block第一個(gè)全連接的節(jié)點(diǎn)個(gè)數(shù),Heads代表Mutli-Head Attention的Head數(shù)。
1.2 關(guān)鍵知識(shí)點(diǎn)
1.2.1 Self-Attention
Self-Attention是Transformer中最重要的模塊之一,Self-Attention最核心的公式就是下面這三個(gè):Attention?(Q,K,V)=softmax?(QKTdk)V\text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V ?Attention?(Q,K,V)=softmax(dk??QKT?)VMultiHead?(Q,K,V)=Concat?(head1,…,head?h)WO\left.\operatorname{MultiHead}(Q, K, V)=\operatorname{Concat}( \mathrm{head}_{1}, \ldots, \text { head }_{\mathrm{h}}\right) W^{O} MultiHead(Q,K,V)=Concat(head1?,…,?head?h?)WOwhere?head?=Attention?(QWiQ,KWiK,VWiV)\text { where head }=\text { Attention }\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right) ?where?head?=?Attention?(QWiQ?,KWiK?,VWiV?)下面我們先對(duì)第一個(gè)公式展開(kāi)來(lái)講,其過(guò)程分為如下圖所示:
其中圖中最下方的x1x_1x1?和x2x_2x2?為輸入向量,在Vision Transformer中就是輸入的圖像Patch,圖中最上方的b1b_1b1?和b2b_2b2?為經(jīng)過(guò)Self-Attention編碼后輸出的特征,我將其中的步驟分為五步:
Step1:通過(guò)Embedding層將輸入向量映射到一個(gè)更高的維度上。在Vision Transformer中這里有一層卷積層構(gòu)成,這里我們可以先簡(jiǎn)單將其理解為將向量x1x_1x1?和x2x_2x2?映射通過(guò)某個(gè)函數(shù)f(x)f(x)f(x)映射到了向量a1a_1a1?和a2a_2a2?。
Step2:將向量向量aia_iai?分別與矩陣WqW_qWq?,WkW_kWk?和WvW_vWv?相乘得到qiq_iqi?,qkq_kqk?和qvq_vqv?。在Vision Transformer中這里是由三個(gè)MLP組成,如果我們忽略偏置的話,我們就可以將抽象為三個(gè)矩陣,WqW_qWq?,WkW_kWk?和WvW_vWv?三個(gè)矩陣的參數(shù)是可以學(xué)習(xí)的,且針對(duì)不同的aia_iai?參數(shù)是共享的。
其中,qiq_iqi?是從aia_iai?中提取的用于進(jìn)行匹配的向量,我們稱為query。kik_iki?是從aia_iai?中提取的待匹配的向量,我們稱為key。viv_ivi?是從aia_iai?中提取的用于描述信息的向量,我們成為value,在接下來(lái)的步驟中我們將利用不同aia_iai?query和key進(jìn)行點(diǎn)乘獲得權(quán)重,再利用該權(quán)重對(duì)value進(jìn)行加權(quán)平均或者最后的輸出。
Step3:依次遍歷所有的qiq_iqi?和kik_iki?以o(n2)o(n^2)o(n2)的計(jì)算復(fù)雜度進(jìn)行向量點(diǎn)乘獲得αi\alpha_iαi?,αi\alpha_iαi?其實(shí)描述的是不同aia_iai?之間的一種相似性,由于是點(diǎn)乘,這里的αi\alpha_iαi?已經(jīng)是一個(gè)標(biāo)量α1,i=q1?ki/d\alpha_{1, i}=q^{1} \cdot k^{i} / \sqrtozvdkddzhkzd α1,i?=q1?ki/d?α2,i=q2?ki/d\alpha_{2, i}=q^{2} \cdot k^{i} / \sqrtozvdkddzhkzd α2,i?=q2?ki/d?.........其中ddd為向量的長(zhǎng)度。
Step4:將αi\alpha_iαi?經(jīng)過(guò)一個(gè)Softmax進(jìn)行歸一化得到βi\beta_iβi?,βi\beta_iβi?就是我們對(duì)viv_ivi?進(jìn)行加權(quán)的權(quán)重,因?yàn)?span id="ozvdkddzhkzd" class="katex--inline">qiq_iqi?和kik_iki?都是等長(zhǎng)的向量,因此上述Step3和Step4的操作其實(shí)就是qiq_iqi?和kik_iki?組成的兩個(gè)矩陣QQQ和KKK進(jìn)行矩陣乘法:softmax?(QKTdk)\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right)softmax(dk??QKT?)
Step5:βi\beta_iβi?與viv_ivi?進(jìn)行加權(quán)平均就得到最后輸出bib_ibi?,因此以上整個(gè)流程可以抽象為我們上述給出的第一個(gè)公式:Attention?(Q,K,V)=softmax?(QKTdk)V\text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V ?Attention?(Q,K,V)=softmax(dk??QKT?)V這部分操作其實(shí)就是一堆矩陣操作,如下圖所示,因此可以進(jìn)行GPU加速:
將上述Self-Attention的流程整理清楚后,Multi-Head Self-Attention的計(jì)算過(guò)程如下圖所示:
上圖展示的是head=2情況,可以看出來(lái),所謂Multi-Head其實(shí)就是將qiq_iqi?,qkq_kqk?和qvq_vqv?這幾個(gè)向量均分成幾部分,然后分別給計(jì)算后面的權(quán)重和加權(quán)求和結(jié)果,結(jié)構(gòu)非常類似于Group卷積,最后bi1b_{i1}bi1?和bi2b_{i2}bi2?是通過(guò)Concatenate的操作輸出的。因此Mutli-Head的計(jì)算公式為:MultiHead?(Q,K,V)=Concat?(head1,…,head?h)WO\left.\operatorname{MultiHead}(Q, K, V)=\operatorname{Concat}( \mathrm{head}_{1}, \ldots, \text { head }_{\mathrm{h}}\right) W^{O} MultiHead(Q,K,V)=Concat(head1?,…,?head?h?)WOwhere?head?=Attention?(QWiQ,KWiK,VWiV)\text { where head }=\text { Attention }\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right) ?where?head?=?Attention?(QWiQ?,KWiK?,VWiV?)Multi-Head的優(yōu)勢(shì)在哪兒呢?如下圖所示,綠色的部分是一個(gè)head的query和key,而紅色部分則是另一個(gè)head的query和key,我們可以看出來(lái),紅色head更關(guān)注全局信息,綠色head更關(guān)注局部信息,Multi-Head的存在其實(shí)就是是的網(wǎng)絡(luò)更加充分地利用了輸入的信息:
了解了Self-Attention的結(jié)構(gòu)后,我們其實(shí)應(yīng)該能夠理解為什么Transformer的效果比傳統(tǒng)的CNN效果要好,使用CNN的時(shí)候一個(gè)卷積核只能獲得其感受野內(nèi)的信息,而感受野的范圍和大小是人為決定的,但是在Transformer中,是通過(guò)Self-Attention中去全局中搜索相關(guān)的信息,就像是感受野是的范圍和大小是通過(guò)學(xué)習(xí)獲得的,因此CNN可以看作是一種簡(jiǎn)化版的Transformer。
1.2.2 Positional Embedding
從上述Self-Atttention或者M(jìn)utli-Head Self-Attention的結(jié)構(gòu)我們可以發(fā)現(xiàn)一個(gè)問(wèn)題,假如由三個(gè)輸入,我們修改后兩個(gè)輸入的順序,對(duì)于第一個(gè)輸入的結(jié)構(gòu)是完全沒(méi)有影響的,也就是說(shuō)“我和你”和“我你和“可能表征的是同一個(gè)意思,這種問(wèn)題的發(fā)生是因?yàn)镾elf-Attention模塊的輸入中并沒(méi)有位置相關(guān)的信息。解決該問(wèn)題的方法就是Positional Embedding,結(jié)構(gòu)如下圖所示:
Position Embedding結(jié)構(gòu)其實(shí)就是原始的Embedding層aia_iai?上加上一個(gè)Position Embedding的向量eie_iei?向量,然后再送入后面的運(yùn)算過(guò)程,向量eie_iei?通常是人工設(shè)定的一個(gè)值,那么為什么是采用相加這種方式來(lái)表達(dá)位置關(guān)系呢?有解釋如下:
假設(shè)我們給每一個(gè)位置的xi∈R(d,1)x_{i} \in R(d, 1)xi?∈R(d,1)并上一個(gè)One-Hot編碼的向量pi∈R(N,1)p_{i} \in R(N, 1)pi?∈R(N,1),得到一個(gè)新的輸入向量xip∈R(d+N,1)x^{p}_{i} \in R(d+N, 1)xip?∈R(d+N,1),然后我們乘以一個(gè)變換矩陣W=[WI,WP]∈R(d,d+N)W=\left[W_{I}, W_{P}\right] \in R(d, d+N)W=[WI?,WP?]∈R(d,d+N),那么有:W?xip=[WI,WP]?[xipi]=WI?xi+WP?pi=ai+eiW \cdot x^{p}_{i}=\left[W_{I}, W_{P}\right] \cdot\left[\begin{array}{c} x_{i} \\ p_{i} \end{array}\right]=W_{I} \cdot x_{i}+W_{P} \cdot p_{i}=a_{i}+e_{i} W?xip?=[WI?,WP?]?[xi?pi??]=WI??xi?+WP??pi?=ai?+ei?因此我們可以得到一個(gè)結(jié)論,eie_iei?和aia_iai?相加就等于原來(lái)的輸入xix_ixi?和表示位置的編碼pip_ipi?進(jìn)行Concatenate后再經(jīng)過(guò)一個(gè)變換的結(jié)果。在Vision Transformer中通過(guò)下面這樣一張圖來(lái)描述訓(xùn)練得到的不同輸入的Position Embedding向量的差異,越黃表示該輸入該位置的值與該位置作為真值的余弦相似度越大:
論文中還對(duì)比了加入Positional Embedding和不加入Positional Embedding的結(jié)果上的區(qū)別:
這個(gè)結(jié)果說(shuō)明,加入那種形式的Positional Embedding并不重要的,關(guān)鍵是要加上。
1.2.3 Layer Normalization
我們比較熟悉的Batch Normalization是針對(duì)CNN設(shè)計(jì)的,其作用主要是保證輸入卷積的Feature Map滿足一定的分布規(guī)律,因此Batch Normalization的做法是對(duì)Feature Map的每一個(gè)維度進(jìn)行標(biāo)準(zhǔn)化處理(即對(duì)某一個(gè)維度的所有通道及所有Sample的值進(jìn)行標(biāo)準(zhǔn)化),而在RNN場(chǎng)景,同一Batch中不同F(xiàn)eature的維度可能是不同的,如下圖所示,這就會(huì)導(dǎo)致**在某些維度進(jìn)行標(biāo)準(zhǔn)化處理時(shí),通道數(shù)過(guò)少甚至只有一個(gè)通道,這樣統(tǒng)計(jì)出來(lái)的均值和方差都不能反應(yīng)全局的統(tǒng)計(jì)分布,**因此Batch Normalization效果會(huì)變得非常差。
針對(duì)這個(gè)問(wèn)題,由學(xué)者就提出了Layer Normalization,其和Batch Normalization的區(qū)別如下圖所示:
可以看出來(lái),Layer Normalization是針對(duì)每一個(gè)Sample進(jìn)行標(biāo)準(zhǔn)化處理(及某一個(gè)Sample的所有通過(guò)維度和所有通道的值進(jìn)行標(biāo)注化),標(biāo)準(zhǔn)化處理的公式和Batch Normalization是一樣的:y=x?E[x]Var?[x]+??γ+βy=\frac{x-\mathrm{E}[x]}{\sqrt{\operatorname{Var}[x]+\epsilon}} * \gamma+\beta y=Var[x]+??x?E[x]??γ+β其中E[x]\mathrm{E}[x]E[x]為所有值的的期望,Var?[x]\operatorname{Var}[x]Var[x]為所有值的方差,γ\gammaγ和β\betaβ是可學(xué)習(xí)參數(shù),用與恢復(fù)標(biāo)準(zhǔn)化后的特征分布。
2. Swin Transformer
Swin Transformer原論文名為《Swin Transformer: Hearchical Vision Tranformer using Shifted Windows》, 為2021年ICCV的Best Paper,Swin Tranformer和Vision Transformer的網(wǎng)絡(luò)結(jié)構(gòu)差別如下圖所示:
可以看到Swin Transformer具備層次結(jié)構(gòu)的,每一層的特征圖由一個(gè)或多個(gè)Window構(gòu)成,不同層Window的大小不相同,每個(gè)Window經(jīng)過(guò)Self-Attention,Window之間是不進(jìn)行信息交流的;而Vision Transformer不具備層次結(jié)構(gòu)且每一層都是對(duì)整個(gè)特征圖進(jìn)行Self-Attention。算法性能對(duì)比如下:
值得注意的一點(diǎn)是,Vision Transformer在ImageNet-1K的數(shù)據(jù)集上如果不經(jīng)過(guò)ImageNe-22K的預(yù)訓(xùn)練,其效果其實(shí)是不好的,但是Swin Transfomer卻能夠取得很好的效果。而在FLOPs這個(gè)參數(shù)上,Swin Transformer也要優(yōu)于Vision Transformer。
2.1 網(wǎng)絡(luò)結(jié)構(gòu)
Swin Transformer的網(wǎng)絡(luò)構(gòu)架如下圖(a)所示:
原圖大小為H×W×3{H} \times {W} \times 3H×W×3,我們將原圖拆分為16個(gè)Patch并按照深度方向進(jìn)行拼接就得到H4×W4×48\frac{H}{4} \times \frac{W}{4} \times 484H?×4W?×48大小的輸入,然后再經(jīng)過(guò)Linear Embedding層得到H4×W4×C\frac{H}{4} \times \frac{W}{4} \times C4H?×4W?×C大小的輸入。
其中第一步是從不同的Window選擇相同位置的像素組合,然后按照深度方向進(jìn)行Concatenate,再經(jīng)過(guò)Layer Normalization和一個(gè)線性層。
2.2 關(guān)鍵知識(shí)點(diǎn)
2.2.1 W-MSA和SW-WSA結(jié)構(gòu)
W-MSA指的的Windows Multi-Head Self-Attention,前文有介紹的Multi-Head Self-Attention是在整個(gè)特征圖進(jìn)行計(jì)算,而W-MSA是將特征圖先均分為若干個(gè)Window,在Window上作用Multi-Head Self-Attention,這樣做的好處是可以減少計(jì)算量,缺點(diǎn)是窗口之間無(wú)法進(jìn)行信息交互,導(dǎo)致感受野變小。這里我們分別來(lái)計(jì)算下Multi-Head Self-Attention和W-MSA的計(jì)算量區(qū)別:
首先我們知道Self-Attention公式如下:Attention?(Q,K,V)=SoftMax?(QKTd)V\operatorname{Attention}(Q, K, V)=\operatorname{SoftMax}\left(\frac{Q K^{T}}{\sqrtozvdkddzhkzd}\right) V Attention(Q,K,V)=SoftMax(d?QKT?)V我們假設(shè)輸入的輸入的特征矩陣A的大小為hw×Chw\times Chw×C,并且我們忽略SoftMax?\operatorname{SoftMax}SoftMax和d\sqrtozvdkddzhkzdd?的計(jì)算量,那么上述計(jì)算公式可以拆分成如下幾步:Ahw×C?WqC×C=Qhw×CA^{h w \times C} \cdot W_{q}^{C \times C}=Q^{h w \times C} Ahw×C?WqC×C?=Qhw×CAhw×C?WkC×C=Khw×CA^{h w \times C} \cdot W_{k}^{C \times C}=K^{h w \times C} Ahw×C?WkC×C?=Khw×CAhw×C?WvC×C=Vhw×CA^{h w \times C} \cdot W_{v}^{C \times C}=V^{h w \times C} Ahw×C?WvC×C?=Vhw×CQhw×C?KT(C×hw)=Xhw×hwQ^{h w \times C} \cdot K^{T(C \times h w)}=X^{h w \times h w} Qhw×C?KT(C×hw)=Xhw×hwXhw×hw?Vhw×C=Bhw×CX^{h w \times h w} \cdot V^{h w \times C}=B^{h w \times C} Xhw×hw?Vhw×C=Bhw×C我們知道對(duì)于矩陣乘法Aa×b×Bb×cA^{a\times b}\times B^{b\times c}Aa×b×Bb×c的計(jì)算量為a×b×ca\times b\times ca×b×c那么,上述三步的計(jì)算量總共是(hw×C×C)×3+hw×C×hw+hw×hw×C=3hwC2+2(hw)2C(hw\times C\times C)\times 3+hw\times C\times hw +hw\times hw\times C=3hwC^2+2(hw)^2C (hw×C×C)×3+hw×C×hw+hw×hw×C=3hwC2+2(hw)2C以上就是Self-Attention的計(jì)算量,在此基礎(chǔ)上Multi-Head Self-Attention多了最后一步融合矩陣WoW_oWo?的計(jì)算量,也就是Bhw×C?WOC×C=Ohw×CB^{h w \times C} \cdot W_{O}^{C \times C}=O^{h w \times C} Bhw×C?WOC×C?=Ohw×C因此計(jì)算過(guò)量為4hwC2+2(hw)2C4hwC^2+2(hw)^2C4hwC2+2(hw)2C,對(duì)于W-MSA而言,由于輸入被劃分成了多個(gè)Window,我們假設(shè)每個(gè)Window的大小為M×MM\times MM×M,一共有hM×wM\frac{h}{M}\times\frac{w}{M}Mh?×Mw?個(gè)Window,每個(gè)Window都是Mutli-Head Self-Attention的計(jì)算量,因此總共的計(jì)算量為:(4(MC)2+2(M)4C)×hM×wM=4hwC2+2M2hwC(4(M C)^{2}+2(M)^{4} C) \times\frac{h}{M}\times\frac{w}{M} = 4 h w C^{2}+2 M^{2} h w C (4(MC)2+2(M)4C)×Mh?×Mw?=4hwC2+2M2hwC綜上所述:Ω(MSA)=4hwC2+2(hw)2C\Omega(\mathrm{MSA})=4 h w C^{2}+2(h w)^{2} C Ω(MSA)=4hwC2+2(hw)2CΩ(W?MSA)=4hwC2+2M2hwC\Omega(\mathrm{W-MSA})=4 h w C^{2}+2 M^{2} h w C Ω(W?MSA)=4hwC2+2M2hwC相較之下,W-MSA的計(jì)算量要小很多
SW-WSA的全稱為Shifted Windows Multi-Head Self-Attention,其目的主要是實(shí)現(xiàn)不同窗口間的信息交互,其原理如下圖所示:
其中window partition和cyclic shift的原理如下圖所示:
我們以3×33\times33×3的Window為例,從(a)到(b)即網(wǎng)格Shift的過(guò)程,Shift的大小原論文介紹是窗口大小的一半取整,因此3×33\times33×3的Window為Shift大小為1,Shift完成后就得到了圖(c)所示的9個(gè)Window,以最中間的Window為例,它其實(shí)是使用到了(a)中四個(gè)Window的信息,這也就是Window之間信息交互的模式,但是這樣存在一個(gè)問(wèn)題就是9個(gè)Window導(dǎo)致計(jì)算量增大,為了解決這個(gè)問(wèn)題,作者將圖(c)中帶顏色的區(qū)域進(jìn)行移動(dòng)至圖(d)所示,最后再重新劃分4個(gè)Window如圖(e)所示,這樣計(jì)算量和及逆行Shift之前就完全相同。
那么還有一個(gè)問(wèn)題就是圖(e)這樣的形態(tài)雖然對(duì)計(jì)算量有收益,但是除了左上角的Window之外,其他三個(gè)Window實(shí)際上都是由兩個(gè)甚至四個(gè)子Window組成,他們不應(yīng)在同一個(gè)Multi-Head Self-Attention中計(jì)算,為了解決這個(gè)問(wèn)題,作者使用了masked MSA這樣一個(gè)模塊,實(shí)際操作將某一個(gè)特征的query和整個(gè)Window中的所有特征的key點(diǎn)乘后得到,在不和該特征屬于同一個(gè)子Window的點(diǎn)乘結(jié)果上減100,這樣經(jīng)過(guò)Softmax后,不屬于同一個(gè)子Window的權(quán)重就接近于零,后面輸出也就不會(huì)用到不屬于同一個(gè)子Window中的value,這樣說(shuō)可能會(huì)有些抽象,沒(méi)理解的同學(xué)可以參考Swin-Transformer網(wǎng)絡(luò)結(jié)構(gòu)詳解視頻中的講解。
在完成以上操作后,最后我們將輸出的特征都恢復(fù)到原來(lái)的位置就完成整個(gè)SW-WSA的流程。可以看到,SW-WSA在不增加計(jì)算量的基礎(chǔ)上,實(shí)現(xiàn)了窗口間的信息交互,這種操作確實(shí)很天才。從下圖實(shí)驗(yàn)結(jié)果我們也可以看出來(lái)使用Shifted Windows確實(shí)可以帶來(lái)較大的收益。
2.2.2 Relative Position Bias
Relative Position Bias指的是在Self-Attention的計(jì)算過(guò)程中,在query和key點(diǎn)乘后加入一個(gè)和相對(duì)位置相關(guān)的bias,其本質(zhì)是希望在Attention Map能夠進(jìn)一步有所偏重,因此Self-Attention的公式就變成:Attention?(Q,K,V)=SoftMax?(QKT/d+B)V\operatorname{Attention}(Q, K, V)=\operatorname{SoftMax}\left(Q K^{T} / \sqrtozvdkddzhkzd+B\right) V Attention(Q,K,V)=SoftMax(QKT/d?+B)V下面我們主要來(lái)研究下這個(gè)B∈Rn×nB \in R^{n \times n}B∈Rn×n到底是啥,BBB并不是一個(gè)隨機(jī)初始化的參數(shù),其基本使用過(guò)程如下:
我覺(jué)得這其中最核心的部分就是就是這個(gè)相對(duì)位置到Bias Table的映射關(guān)系了,如下圖所示:
首先我們將各個(gè)像素的相對(duì)位置進(jìn)行二維編碼(x,y)(x,y)(x,y),其中xxx表示相對(duì)當(dāng)前像素的行偏移,yyy表示相對(duì)像素的列偏移,假設(shè)Window的大小為M×MM\times MM×M,對(duì)(x,y)(x, y)(x,y)進(jìn)行排列組合發(fā)現(xiàn)一共由(2M?1)2(2M-1)^2(2M?1)2種可能,這也就是為什么Bias Table的大小為(2M?1)2(2M-1)^2(2M?1)2,接下來(lái)我們就需要建立一個(gè)二維編碼到一維編碼一一對(duì)應(yīng)映射關(guān)系,關(guān)系的確定一共分為三步,:
上圖中的表格中的數(shù)字說(shuō)明了這一變化過(guò)程,這一過(guò)程有點(diǎn)二進(jìn)制的味道,我們可以觀察下,4的左邊永遠(yuǎn)是5,4的上面永遠(yuǎn)是7,這也就完成了Relative Position Bias的映射過(guò)程,接下來(lái)就去Bias Table取值更新即可,從下面這張對(duì)比表中我們可以看到,加上Relative Position Bias收益也是非常明顯的:
總結(jié)
以上是生活随笔為你收集整理的计算机视觉算法——Transformer学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 激光IMU融合——LIO-Mapping
- 下一篇: SLAM算法总结——经典SLAM算法框架