小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【書童的學(xué)習(xí)筆記】集智小書童建議你這么學(xué)習(xí)Transformer,全干貨?。。?/span>

 InfoRich 2022-03-20

大家好,百面計算機視覺正式進入Transformer的階段,歡迎各位follow我的git與關(guān)注我。

本篇文章,主要是來自ChaucerG的成果,歡迎各位想在cv領(lǐng)域有突破的小伙伴們follow哦。


    git地址(求star,找工作/實習(xí)必備):https://github.com/zonechen1994/CV_Interview

淺談Transformer的原理與運用

Transformer為什么可以這么6?

Image
  • 首先,傳統(tǒng)的RNN神經(jīng)網(wǎng)絡(luò)由于序列長度的不同意并不不利于并行化;
  • 其次,CNN替代RNN表征長度很有限,但是CNN的并行度很高;
  • 最后,Self-Attention兼顧2者的優(yōu)點因此產(chǎn)生了Transformer的設(shè)計。

Self-Attention是個什么東西?

2.1 Self-Attention簡要示意

Image

注:Q、 K、 V的shape是相同的, A便是得到的Pairwise Attention Matrix;然后對A進行SoftMax操作得到A’ Matrix進而與Value矩陣點乘得到實際的注意力輸出。

2.2 Self-Attention原理

Self-Attention在Transformer中起著基礎(chǔ)性的作用。如下圖,它將query和一組key和value對映射到輸出。

Image

更具體地說,對于輸入序列,如單詞或圖像塊的嵌入,,其中,Self-Attention計算一個輸出序列,其中。每個輸出元素是作為輸入元素的加權(quán)和計算的:

Image

每個權(quán)重系數(shù)使用softmax計算:

Image

其中是使用一個scaled dot-product attention來計算的:

Image

這里,投影是參數(shù)矩陣,每層都是唯一的。

MultiHead Self-Attention(MHSA)不是計算一次Self-Attention,而是并行運行多次Self-Attention,即使用H個Attention Head。Attention Head的輸出被簡單地連接起來并線性地轉(zhuǎn)換成設(shè)計的維度。

為什么Self-Attention在CV領(lǐng)域也可以有效?

Image

卷積具有2個功能:

  • 特征聚合:通過卷積核在特征圖上進行卷積來融合特征的過程;
  • 特征變換:在卷積完成后進行一系列的線性和非線性變換。

特征聚合和特征變換是可以解耦的,特征變換可以通過線性映射和非線性變換來實現(xiàn),而Self-Attention機制可以通過全局視野替代卷積用來特征聚集。

Position Embedding是什么?有什么用?

其實大家應(yīng)該了解到Transformer中還有一個位置嵌入向量Position Embedding Vector,在NLP中它是為了解釋輸入序列中單詞順序而存在的,維度和Embedding的維度一致。這個向量決定了當(dāng)前詞的位置,或者說是在一個句子中不同的詞之間的距離。如果在CV領(lǐng)域那么就代表圖像Patch的位置以及Patch之間的相互關(guān)系。

為什么位置嵌入是cat操作而不是直接的相加add操作?

Image

為什么用LayerNorm?

Image

這個問題我們可以進去討論交流

ViT在做什么事情呢?

Image
Image

Transformer用于目標(biāo)檢測

Image

先用CNN提取特征,然后把最后特征圖的每個點看成word,這樣特征圖就變成了a sequence words, 而檢測的輸出恰好是a set objects, 所以transformer正好適合這個任務(wù)。

Transformer用于語義分割

Image

用ViT作為的圖像的Encoder,然后加一個CNN的Decoder來完成語義圖的預(yù)測。

Transformer模型的局限和解決方案

ViT作者這么說的——'that transformers do not generalize well when trained on insufficient amounts of data.', 這意思我們沒得玩嘍?。?!

Image
  • 使用Class Token迫使patch token與class token之間互相傳遞信息,使得Class Token包含全局信息;

  • 使用大分辨率圖形來作為輸入用來微調(diào)Transformer模型;

  • 引入Distillation Token然后通過與Patch Token交互學(xué)習(xí)類似Global Class Token的信息;

注意:Class Token的目標(biāo)是跟真實的label一致, 而Distillation Token是要跟teacher model預(yù)測的label一致。

DeiT

DeiT的訓(xùn)練

Image

訓(xùn)練過程中Backbone自然還是ViT, 同時class token和distillation token是朝著不同的方向收斂的(因為loss約束不同) , 最終的預(yù)測結(jié)果相似但不相同。因為目標(biāo)是生產(chǎn)相似但不相同的目標(biāo)。作者也做實驗驗證了這個問題, 感興趣的可以看DeiT論文原文。

DeiT的測試

Image

只使用distillation token進行測試,性能是要強于只使用class token進行測試的。

Image

DeiT還有一個問題沒解決?

DeiT依然把圖片轉(zhuǎn)化成patch并進行Flatten操作之后輸入ViT模型,而這種轉(zhuǎn)化成patch的方法沒有進行patch內(nèi)部信息的挖掘。

Transformer之所以有效,是因為它能處理長度為N的輸入序列中這N個輸入之間的關(guān)系(relationship),而對于每個輸入的內(nèi)部信息的relationship,它是無能為力的,因為ViT,DeiT,IPT,SETR,ViTFRCNN這類模型把每個patch展平為了一個向量,破壞了每個patch的內(nèi)部信息。

TNT解決了ViT的局限嗎?

Image
Image

每個TNT Block包含2個Transformer Block:

Outer block:建模patch embedding之間的 global relationship。

Inner block:建模pixel embedding之間的local structure information。

CNN是不是一個局部的Self-Attention?

使用self-attention去處理一張圖片的時候,1的那個pixel產(chǎn)生query,其他的各個pixel產(chǎn)生key。在做inner-product的時候,考慮的不是一個小的范圍,而是一整張圖片。但是在做CNN的時候是只考慮感受野紅框里面的信息,而不是圖片的全局信息。所以CNN可以看作是一種簡化版本的selfattention。那么一個自然而然的問題是:可否把CNN融入Transformer中,使得Transformer也具有CNN的這些適合圖片的property呢?

Image

CNN+Transformer是不是一個好的解決方案呢?

CvT模型

Image

CvT具有CNN的一些優(yōu)良的特征:局部感受野,共享卷積權(quán)重,空間下采樣。CvT具有Self-attention的一些優(yōu)良的特征:動態(tài)的注意力機制,全局信息的融合。

2個變化:

  • 不再使用位置編碼。
  • class token只加在最后一個stage里面。

1 Convolutional Token Embedding

在每個stage中會進行下面的操作:輸入的2D token map會先進入Convolutional Token Embedding這個層,相當(dāng)于在2D reshaped token map上做一次卷積操作。這個層的輸入是個Reshape成2D的token。再通過一個LN。

卷積的目的是保證在每個階段都減小token的數(shù)量,也就是減小特征尺度;在每個stage都擴大token width,也就是擴大特征維度。這樣實現(xiàn)的效果就和CNN差不多,都是隨著層數(shù)的加深而逐漸減小特征尺度和逐漸增加特征維度。

Image

2 Convolutional Projection

采用的是卷積變換。具體來講,token首先reshape成2D的token map,再分別通過3個Depthwise-separable Convolution(kernel =sxs )變成query,key和value值。最后再把這些query,key和value值通過Flatten操作得到真正的query,key和value值。

Image

3 Squeezed convolutional projection

在計算query時, 采用的Depthwise-separable Convolution的stride值為1。在計算key和value時, 采用的Depthwise-separable Convolution的stride值為2。如下圖所示。按照這種方式, token的數(shù)量對于key和value來說可以減少4倍,性能只有很少的下降。

Image

4 CvT的位置編碼哪里去了?

答:不需要位置編碼

問:為什么CvT不需要位置編碼?

答:因為CvT的Convolutional Projection操作,采用的是卷積變換,也就是說,CvT把傳統(tǒng)Transformer的Linear Projection操作給換成了卷積操作。具體的方法上面也介紹了,就是先reshape成2D的,再做卷積,最后再reshape成sequence的形式。那么最重要的是Convolutional Projection可以學(xué)習(xí)到隱式位置信息,所以就不用再像ViT, DeiT一樣使用顯式的位置編碼了。

可以參見下面的論文:

《Attention Augmented Convolutional Networks》

《Self-Attention with Relative Position Representations》

《Do We Really Need Explicit Position Encodings for Vision Transformers?》

LeViT開啟輕量化Transformer模型時代

Image

LeViT以ViT的架構(gòu)和DeiT的訓(xùn)練方法為基礎(chǔ), 合并了對卷積架構(gòu)有用的組件。如果不考慮classification embedding的作用, ViT就是一個處理激活映射的Layer的堆疊。

特點:

  • 通道淺;
  • 中間層添加了Attention bias取代數(shù)位時的位置嵌入;
  • 使用了降采樣;
  • 卷積之后都要進行BN操作(為什么?)
  • 1x1卷積+BN替代LN+Linear;

為什么在transformer組的輸入上應(yīng)用一個小卷積可以提高精度?【進群交流可知】

Image
Image

在LeViT stage之間,一個縮小的注意塊減少了激活映射的大小:在Q轉(zhuǎn)換之前應(yīng)用一個subsample, 然后傳播到soft activation的輸出。這將一個大小為(C,H,W)的輸入張量映射到一個大小為(C,H/2,W/2)的輸出張量。由于尺度的變化這個注意塊的使用沒有殘差連接。同時為了防止信息丟失,這里將注意力頭的數(shù)量設(shè)為C/D。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章